Guest User

Untitled

a guest
Mar 6th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. argv = require('optimist').argv
  2. http = require 'http'
  3. express = require 'express'
  4. Sequelize = require 'sequelize'
  5. util = require 'util'
  6.  
  7. port = argv.port
  8.  
  9. sequelize = new Sequelize 'nms', 'nms', 'nms'
  10.  
  11. User = sequelize.define 'User'
  12. ,
  13.     username:
  14.         type: Sequelize.STRING
  15.         unique: true
  16.     apiKey: Sequelize.STRING
  17.     password: Sequelize.STRING
  18. ,
  19.     instanceMethods:
  20.         authenticate: (password) ->
  21.             @password == password
  22.         hasRole: (role) ->
  23.             @getRoles().any (userRole) ->
  24.                 userRole.name == role.name
  25.  
  26. Role = sequelize.define 'Role'
  27. ,
  28.     name: Sequelize.STRING
  29. ,
  30.     classMethods:
  31.         findByName: (name) ->
  32.             Role.find {where: {name: name}}
  33.  
  34. Artist = sequelize.define 'Artist'
  35.     name: Sequelize.STRING
  36.  
  37. Album = sequelize.define 'Album'
  38.     name: Sequelize.STRING
  39.     year: Sequelize.STRING
  40.  
  41. Track = sequelize.define 'Track'
  42.     name: Sequelize.STRING
  43.     seconds: Sequelize.INTEGER
  44.    
  45.    
  46. User.hasMany Role
  47. Role.hasMany User
  48. Track.belongsTo Album
  49. Album.hasMany Track
  50. Album.belongsTo Artist
  51. Artist.hasMany Album
  52.  
  53. sequelize.sync
  54.     force: true
  55. .on 'success', ->
  56.     shawn = User.build
  57.         username: 'shawn'
  58.         password: 'pass'
  59.         apiKey: 'hjadskhjadfskhjadfskhj'
  60.     do shawn.save
  61.  
  62.     api = do express.createServer
  63.     api.use express.bodyParser()
  64.  
  65.     # Return an array of usernames
  66.     api.get '/users', (req, res) ->
  67.         User.all.on 'success', (users) ->
  68.             res.send users.map (user) ->
  69.                 username: user.username
  70.                 roles: user.roles
  71.  
  72.     # Authenticates a user and returns an api key
  73.     api.get '/users/:username/apiKey', (req, res) ->
  74.         User.find
  75.             where: {username: req.params.username}
  76.         .on 'success', (user) ->
  77.             if !user
  78.                 res.send
  79.                     message: 'Invalid username'
  80.                 , 401
  81.                 return
  82.             if user.authenticate req.query.password
  83.                 res.send
  84.                     username: user.username
  85.                     apiKey: user.apiKey
  86.             else
  87.                 res.send
  88.                     message: 'Invalid password'
  89.                 , 401
  90.  
  91.     # Creates a new user
  92.     api.post '/users/new', (req, res) ->
  93.         user = User.build
  94.             username: req.param 'username'
  95.         user.save()
  96.         .on 'success', ->
  97.             res.send
  98.                 username: user.username
  99.         .on 'failure', (error) ->
  100.             res.send
  101.                 message: error.message
  102.             , 409
  103.  
  104.     api.get '/albums', (req, res) ->
  105.         User.find
  106.             where: {apiKey: req.query.apiKey}
  107.         .on 'success', (user) ->
  108.             if !user
  109.                 res.send
  110.                     message: 'Invalid Api Key'
  111.                 , 401
  112.                 return
  113.             Album.all.on 'success', (albums) ->
  114.                 res.send albums.map (album) ->
  115.                     album.name
  116.  
  117.     # Shutdown the daemon
  118.     api.post '/shutdown', (req, res) ->
  119.         util.puts "> Shutting down."
  120.         res.send {}, 200
  121.         do process.exit
  122.  
  123.     api.listen port
  124. .on 'failure', (error) ->
  125.     console.log error
Add Comment
Please, Sign In to add comment