mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-04-01 10:43:02 +08:00
refactor account model
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
crypto = require 'crypto'
|
||||
assert = require 'assert'
|
||||
User = require './model/Account'
|
||||
User = require './model/aAccount'
|
||||
|
||||
exports.sha256 = (data) ->
|
||||
if not data
|
||||
|
||||
@@ -59,3 +59,12 @@ exports.buildModel = (that, mongo) ->
|
||||
mongo.remove selector, options, (err, result) ->
|
||||
throw err if err
|
||||
callback result if callback
|
||||
|
||||
exports.buildByXXOO = (xxoo, mongo) ->
|
||||
return (value, callback) ->
|
||||
selector = {}
|
||||
selector[xxoo] = value
|
||||
|
||||
mongo.findOne selector, (err, result) ->
|
||||
throw err if err
|
||||
callback result
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
_ = require 'underscore'
|
||||
|
||||
auth = require '../auth'
|
||||
db = require '../db'
|
||||
|
||||
mAccount = db.collection 'accounts'
|
||||
|
||||
db.buildModel module.exports, mAccount
|
||||
|
||||
|
||||
|
||||
module.exports = class Account extends Model
|
||||
@create: (data) ->
|
||||
new Account data
|
||||
|
||||
@register: (username, email, passwd, callback = null) ->
|
||||
passwd_salt = auth.randomSalt()
|
||||
|
||||
@insert
|
||||
username: username
|
||||
passwd: auth.hashPasswd(passwd, passwd_salt)
|
||||
passwd_salt: passwd_salt
|
||||
email: email
|
||||
signup: new Date()
|
||||
group: []
|
||||
setting: {}
|
||||
attribure: {}
|
||||
tokens: []
|
||||
, callback
|
||||
|
||||
# @param callback(token)
|
||||
createToken: (attribute, callback) ->
|
||||
# @param callback(token)
|
||||
generateToken = (callback) ->
|
||||
token = auth.randomSalt()
|
||||
|
||||
Account.findOne
|
||||
'tokens.token': token
|
||||
, (result) ->
|
||||
if result
|
||||
generateToken callback
|
||||
else
|
||||
callback token
|
||||
|
||||
generateToken (token) =>
|
||||
@update
|
||||
$push:
|
||||
tokens:
|
||||
token: token
|
||||
available: true
|
||||
created_at: new Date()
|
||||
updated_at: new Date()
|
||||
attribute: attribute
|
||||
, ->
|
||||
callback token
|
||||
|
||||
removeToken: (token, callback = null) ->
|
||||
@update
|
||||
$pull:
|
||||
tokens:
|
||||
token: token
|
||||
, ->
|
||||
callback() if callback
|
||||
|
||||
# @param callback(User)
|
||||
@authenticate: (token, callback) ->
|
||||
unless token
|
||||
callback null
|
||||
|
||||
Account.findOne
|
||||
'tokens.token': token
|
||||
, (result) ->
|
||||
if result
|
||||
callback result
|
||||
else
|
||||
callback null
|
||||
|
||||
# @return bool
|
||||
matchPasswd: (passwd) ->
|
||||
auth.hashPasswd(passwd, @data.passwd_salt) is @data.passwd
|
||||
|
||||
inGroup: (group) ->
|
||||
return group in @data.group
|
||||
|
||||
@byUsername: (username, callback) ->
|
||||
@findOne
|
||||
username: username
|
||||
, (result) ->
|
||||
callback result
|
||||
|
||||
@byEmail: (email, callback) ->
|
||||
@findOne
|
||||
email: email
|
||||
, (result) ->
|
||||
callback result
|
||||
|
||||
@byUsernameOrEmail: (username, callback) ->
|
||||
Account.byUsername username, (account) ->
|
||||
if account
|
||||
return callback account
|
||||
|
||||
Account.byEmail username, (account) ->
|
||||
return callback account
|
||||
89
core/model/aAccount.coffee
Normal file
89
core/model/aAccount.coffee
Normal file
@@ -0,0 +1,89 @@
|
||||
_ = require 'underscore'
|
||||
|
||||
auth = require '../auth'
|
||||
db = require '../db'
|
||||
|
||||
cAccount = db.collection 'accounts'
|
||||
|
||||
db.buildModel module.exports, cAccount
|
||||
|
||||
exports.register = (username, email, passwd, callback = null) ->
|
||||
passwd_salt = auth.randomSalt()
|
||||
|
||||
exports.insert
|
||||
username: username
|
||||
passwd: auth.hashPasswd(passwd, passwd_salt)
|
||||
passwd_salt: passwd_salt
|
||||
email: email
|
||||
signup: new Date()
|
||||
group: []
|
||||
setting: {}
|
||||
attribure: {}
|
||||
tokens: []
|
||||
, {}, (result) ->
|
||||
callback(result) if callback
|
||||
|
||||
# @param callback(token)
|
||||
exports.createToken = (attribute, callback) ->
|
||||
# @param callback(token)
|
||||
generateToken = (callback) ->
|
||||
token = auth.randomSalt()
|
||||
|
||||
exports.findOne
|
||||
'tokens.token': token
|
||||
, {}, (result) ->
|
||||
if result
|
||||
generateToken callback
|
||||
else
|
||||
callback token
|
||||
|
||||
generateToken (token) ->
|
||||
exports.update
|
||||
$push:
|
||||
tokens:
|
||||
token: token
|
||||
available: true
|
||||
created_at: new Date()
|
||||
updated_at: new Date()
|
||||
attribute: attribute
|
||||
, {}, ->
|
||||
callback token
|
||||
|
||||
exports.removeToken = (token, callback = null) ->
|
||||
exports.update
|
||||
$pull:
|
||||
tokens:
|
||||
token: token
|
||||
, {}, ->
|
||||
callback() if callback
|
||||
|
||||
exports.authenticate = (token, callback) ->
|
||||
unless token
|
||||
callback null
|
||||
|
||||
exports.findOne
|
||||
'tokens.token': token
|
||||
, {}, (result) ->
|
||||
if result
|
||||
callback result
|
||||
else
|
||||
callback null
|
||||
|
||||
exports.byUsername = db.buildByXXOO 'username', cAccount
|
||||
|
||||
exports.byEmail = db.buildByXXOO 'email', cAccount
|
||||
|
||||
exports.byUsernameOrEmail = (username, callback) ->
|
||||
exports.byUsername username, (account) ->
|
||||
if account
|
||||
return callback account
|
||||
|
||||
exports.byEmail username, (account) ->
|
||||
return callback account
|
||||
|
||||
# @return bool
|
||||
exports.matchPasswd = (account, passwd) ->
|
||||
return auth.hashPasswd(passwd, account.passwd_salt) == account.passwd
|
||||
|
||||
exports.inGroup = (account, group) ->
|
||||
return group in account.group
|
||||
@@ -1,16 +1,16 @@
|
||||
config = require '../config'
|
||||
|
||||
Account = require '../model/Account'
|
||||
Account = require '../model/aAccount'
|
||||
|
||||
module.exports =
|
||||
get:
|
||||
signup: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
res.render 'signup',
|
||||
account: account
|
||||
|
||||
login: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
res.render 'login',
|
||||
account: account
|
||||
|
||||
@@ -27,15 +27,15 @@ module.exports =
|
||||
unless data.passwd or not /^.+$/.test data.passwd
|
||||
return res.json 400, error: 'invalid_passwd'
|
||||
|
||||
Account.byUsername data.username, (account) ->
|
||||
account.byUsername data.username, (account) ->
|
||||
if account
|
||||
return res.json 400, error: 'username_exist'
|
||||
|
||||
Account.byEmail data.email, (account) ->
|
||||
account.byEmail data.email, (account) ->
|
||||
if account
|
||||
return res.json 400, error: 'email_exist'
|
||||
|
||||
Account.register data.username, data.email, data.passwd, (account) ->
|
||||
account.register data.username, data.email, data.passwd, (account) ->
|
||||
account.createToken {}, (token)->
|
||||
res.cookie 'token', token,
|
||||
expires: new Date(Date.now() + config.account.cookieTime)
|
||||
@@ -46,7 +46,7 @@ module.exports =
|
||||
login: (req, res) ->
|
||||
data = req.body
|
||||
|
||||
Account.byUsernameOrEmail data.username, (account) ->
|
||||
account.byUsernameOrEmail data.username, (account) ->
|
||||
unless account
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
@@ -62,7 +62,7 @@ module.exports =
|
||||
token: token
|
||||
|
||||
logout: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Account = require '../model/Account'
|
||||
Account = require '../model/aAccount'
|
||||
|
||||
module.exports =
|
||||
get:
|
||||
@@ -6,7 +6,7 @@ module.exports =
|
||||
res.redirect '/panel/'
|
||||
|
||||
'/panel/': (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.redirect '/account/login/'
|
||||
|
||||
|
||||
@@ -4,17 +4,17 @@ ObjectID = require('mongodb').ObjectID
|
||||
|
||||
config = require '../config'
|
||||
|
||||
Account = require '../model/Account'
|
||||
Ticket = require '../model/Ticket'
|
||||
Account = require '../model/aAccount'
|
||||
Ticket = require '../model/tTicket'
|
||||
|
||||
module.exports =
|
||||
get:
|
||||
list: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.redirect '/account/login/'
|
||||
|
||||
Ticket.find
|
||||
tTicket.find
|
||||
account_id: account.id()
|
||||
, (tickets) ->
|
||||
res.render 'ticket/list',
|
||||
@@ -22,7 +22,7 @@ module.exports =
|
||||
tickets: tickets
|
||||
|
||||
create: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.redirect '/account/login/'
|
||||
|
||||
@@ -32,7 +32,7 @@ module.exports =
|
||||
|
||||
post:
|
||||
create: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
@@ -45,7 +45,7 @@ module.exports =
|
||||
return res.json 400, error: 'invalid_type'
|
||||
|
||||
createTicket = (members) ->
|
||||
Ticket.createTicket account, data.title, data.content, data.type, members, {}, (ticket) ->
|
||||
tTicket.createTicket account, data.title, data.content, data.type, members, {}, (ticket) ->
|
||||
return res.json
|
||||
id: ticket.id()
|
||||
|
||||
@@ -56,7 +56,7 @@ module.exports =
|
||||
for memberName in data.members
|
||||
do (memberName = clone(memberName)) ->
|
||||
tasks.push (callback) ->
|
||||
Account.byUsernameOrEmail memberName, (member) ->
|
||||
account.byUsernameOrEmail memberName, (member) ->
|
||||
unless member
|
||||
res.json 400, error: 'invalid_account', username: memberName
|
||||
callback true
|
||||
@@ -76,16 +76,16 @@ module.exports =
|
||||
createTicket [account]
|
||||
|
||||
reply: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
data = req.body
|
||||
|
||||
Ticket.findById data.id, (ticket) ->
|
||||
tTicket.findById data.id, (ticket) ->
|
||||
checkReplyTo = (callback) ->
|
||||
if data.reply_to
|
||||
Ticket.findOne
|
||||
tTicket.findOne
|
||||
'replys._id': data.reply_to
|
||||
, (result) ->
|
||||
if result
|
||||
@@ -108,7 +108,7 @@ module.exports =
|
||||
id: reply._id
|
||||
|
||||
update: (req, res) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
@@ -118,7 +118,7 @@ module.exports =
|
||||
addToSetModifier = []
|
||||
pullModifier = []
|
||||
|
||||
Ticket.findById data.id, (ticket) ->
|
||||
tTicket.findById data.id, (ticket) ->
|
||||
if data.type
|
||||
if data.type in config.ticket.availableType
|
||||
modifier['type'] = data.type
|
||||
|
||||
Reference in New Issue
Block a user