Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- argv = require('optimist').argv
- http = require 'http'
- express = require 'express'
- Sequelize = require 'sequelize'
- util = require 'util'
- port = argv.port
- sequelize = new Sequelize 'nms', 'nms', 'nms'
- User = sequelize.define 'User'
- ,
- username:
- type: Sequelize.STRING
- unique: true
- apiKey: Sequelize.STRING
- password: Sequelize.STRING
- ,
- instanceMethods:
- authenticate: (password) ->
- @password == password
- hasRole: (role) ->
- @getRoles().any (userRole) ->
- userRole.name == role.name
- Role = sequelize.define 'Role'
- ,
- name: Sequelize.STRING
- ,
- classMethods:
- findByName: (name) ->
- Role.find {where: {name: name}}
- Artist = sequelize.define 'Artist'
- name: Sequelize.STRING
- Album = sequelize.define 'Album'
- name: Sequelize.STRING
- year: Sequelize.STRING
- Track = sequelize.define 'Track'
- name: Sequelize.STRING
- seconds: Sequelize.INTEGER
- User.hasMany Role
- Role.hasMany User
- Track.belongsTo Album
- Album.hasMany Track
- Album.belongsTo Artist
- Artist.hasMany Album
- sequelize.sync
- force: true
- .on 'success', ->
- shawn = User.build
- username: 'shawn'
- password: 'pass'
- apiKey: 'hjadskhjadfskhjadfskhj'
- do shawn.save
- api = do express.createServer
- api.use express.bodyParser()
- # Return an array of usernames
- api.get '/users', (req, res) ->
- User.all.on 'success', (users) ->
- res.send users.map (user) ->
- username: user.username
- roles: user.roles
- # Authenticates a user and returns an api key
- api.get '/users/:username/apiKey', (req, res) ->
- User.find
- where: {username: req.params.username}
- .on 'success', (user) ->
- if !user
- res.send
- message: 'Invalid username'
- , 401
- return
- if user.authenticate req.query.password
- res.send
- username: user.username
- apiKey: user.apiKey
- else
- res.send
- message: 'Invalid password'
- , 401
- # Creates a new user
- api.post '/users/new', (req, res) ->
- user = User.build
- username: req.param 'username'
- user.save()
- .on 'success', ->
- res.send
- username: user.username
- .on 'failure', (error) ->
- res.send
- message: error.message
- , 409
- api.get '/albums', (req, res) ->
- User.find
- where: {apiKey: req.query.apiKey}
- .on 'success', (user) ->
- if !user
- res.send
- message: 'Invalid Api Key'
- , 401
- return
- Album.all.on 'success', (albums) ->
- res.send albums.map (album) ->
- album.name
- # Shutdown the daemon
- api.post '/shutdown', (req, res) ->
- util.puts "> Shutting down."
- res.send {}, 200
- do process.exit
- api.listen port
- .on 'failure', (error) ->
- console.log error
Add Comment
Please, Sign In to add comment