mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-04-01 10:43:02 +08:00
56 lines
1.2 KiB
CoffeeScript
56 lines
1.2 KiB
CoffeeScript
_ = require 'underscore'
|
|
|
|
utils = require './utils'
|
|
|
|
mAccount = require './model/account'
|
|
|
|
# @param callback(token)
|
|
exports.generateToken = (callback) ->
|
|
token = utils.randomSalt()
|
|
|
|
mAccount.findOne
|
|
'tokens.token': token
|
|
, (err, result) ->
|
|
if result
|
|
exports.generateToken callback
|
|
else
|
|
callback token
|
|
|
|
# @param callback(token)
|
|
exports.createToken = (account, type, payload, callback) ->
|
|
exports.generateToken (token) ->
|
|
mAccount.update {_id: account._id},
|
|
$push:
|
|
tokens:
|
|
type: type
|
|
token: token
|
|
created_at: new Date()
|
|
updated_at: new Date()
|
|
payload: payload
|
|
, ->
|
|
callback token
|
|
|
|
# @param payload must be flat
|
|
# @param callback(is_found)
|
|
exports.revokeToken = (token, callback) ->
|
|
mAccount.update {'tokens.token': token},
|
|
$pull:
|
|
tokens:
|
|
token: token
|
|
, (err, rows) ->
|
|
callback rows > 0
|
|
|
|
# @param callback(type, account)
|
|
exports.authenticate = (token, callback) ->
|
|
unless token
|
|
return callback null
|
|
|
|
mAccount.findAndModify 'tokens.token': token, {},
|
|
$set:
|
|
'tokens.$.updated_at': new Date()
|
|
, (err, account) ->
|
|
matched_token = _.findWhere account?.tokens,
|
|
token: token
|
|
|
|
callback matched_token, account
|