router account/register

This commit is contained in:
jysperm
2014-09-06 17:04:36 +08:00
parent df9f741354
commit 77cdb2472a
21 changed files with 84 additions and 57 deletions

View File

@@ -40,9 +40,15 @@ exports.run = ->
app.config = require '../config' app.config = require '../config'
app.package = require './package.json' app.package = require './package.json'
app.pluggable = require './core/pluggable' app.pluggable = require './core/pluggable'
app.middleware = require './core/middleware'
app.token_manager = require './core/token_manager'
app.models = app.models =
mAccount: require './model/account' mAccount: require './model/account'
mBalanceLog: require './model/balance_log'
mCouponCode: require './model/coupon_code'
mSecurityLog: require './model/security_log'
mTicket: require './model/tickets'
app.use connect.json() app.use connect.json()
app.use connect.urlencoded() app.use connect.urlencoded()

View File

@@ -1,4 +1,4 @@
mAccount = require '../model/account' mAccount = require './model/account'
exports.parseToken = (req, res, next) -> exports.parseToken = (req, res, next) ->
if req.headers['x-token'] if req.headers['x-token']
@@ -60,4 +60,4 @@ exports.requireInService = (service_name) ->
unless service_name in req.account.attribute.services unless service_name in req.account.attribute.services
return res.error 'not_in_service' return res.error 'not_in_service'
next() next()

View File

@@ -11,6 +11,7 @@ exports.plugins = {}
exports.hooks = exports.hooks =
account: account:
# function(account, callback(is_allow))
username_filter: [] username_filter: []
# function(account, callback) # function(account, callback)
before_register: [] before_register: []

View File

@@ -1,15 +1,11 @@
config = require '../../config' {renderAccount, errorHandling, requireAuthenticate} = app.middleware
utils = require './utils' {mAccount, mSecurityLog, mCouponCode} = app.models
{renderAccount, errorHandling, requireAuthenticate} = require './middleware' {pluggable, config, utils, token_manager} = app
mAccount = require '../model/account'
mSecurityLog = require '../model/security_log'
mCouponCode = require '../model/coupon_code'
module.exports = exports = express.Router() module.exports = exports = express.Router()
exports.get '/signup', renderAccount, (req, res) -> exports.get '/register', renderAccount, (req, res) ->
res.render 'account/signup' res.render 'account/register'
exports.get '/login', renderAccount, (req, res) -> exports.get '/login', renderAccount, (req, res) ->
res.render 'account/login' res.render 'account/login'
@@ -17,7 +13,7 @@ exports.get '/login', renderAccount, (req, res) ->
exports.get '/setting', requireAuthenticate, renderAccount, (req, res) -> exports.get '/setting', requireAuthenticate, renderAccount, (req, res) ->
res.render 'account/setting' res.render 'account/setting'
exports.post '/signup', errorHandling, (req, res) -> exports.post '/register', errorHandling, (req, res) ->
unless utils.rx.username.test req.body.username unless utils.rx.username.test req.body.username
return res.error 'invalid_username' return res.error 'invalid_username'
@@ -27,34 +23,49 @@ exports.post '/signup', errorHandling, (req, res) ->
unless utils.rx.password.test req.body.password unless utils.rx.password.test req.body.password
return res.error 'invalid_password' return res.error 'invalid_password'
callback = -> async.each pluggable.account.username_filter, (hook_callback, callback) ->
mAccount.byUsername req.body.username, (err, account) -> hook_callback account, (is_allow) ->
if account if is_allow
return res.error 'username_exist' callback()
else
callback true
mAccount.byEmail req.body.email, (err, account) -> , (not_allow) ->
if account if not_allow
return res.error 'email_exist' return res.error 'username_exist'
mAccount.register req.body.username, req.body.email, req.body.password, (err, account) -> async.parallel
mAccount.createToken account, username: (callback) ->
ip: req.headers['x-real-ip'] mAccount.fineOne
ua: req.headers['user-agent'] username: req.body.username
, (err, token)-> , (err, account) ->
res.cookie 'token', token, if account
expires: new Date(Date.now() + config.account.cookie_time) res.error 'username_exist'
res.json callback account
id: account._id
if 'linux' in config.plugin.available_services email: (callback) ->
require('../../plugin/linux/monitor').loadPasswd (passwd_cache) -> mAccount.findOne
if req.body.username in _.values(passwd_cache) email: req.body.email
return res.error 'username_exist' , (err, account) ->
if account
res.error 'email_exist'
callback() callback account
else
callback() , (err) ->
return if err
mAccount.register _.pick(req.body, 'username', 'email', 'password'), (err, account) ->
token_manager.createToken account,
ip: req.headers['x-real-ip']
ua: req.headers['user-agent']
, (token)->
res.cookie 'token', token,
expires: new Date(Date.now() + config.account.cookie_time)
res.json
id: account._id
exports.post '/login', errorHandling, (req, res) -> exports.post '/login', errorHandling, (req, res) ->
mAccount.byUsernameOrEmailOrId req.body.username, (err, account) -> mAccount.byUsernameOrEmailOrId req.body.username, (err, account) ->

View File

@@ -1,4 +1,4 @@
{requireAdminAuthenticate, renderAccount} = require './middleware' {requireAdminAuthenticate, renderAccount} = require './../middleware'
mAccount = require '../model/account' mAccount = require '../model/account'
mTicket = require '../model/ticket' mTicket = require '../model/ticket'

View File

@@ -2,7 +2,7 @@ config = require '../../config'
billing = require '../billing' billing = require '../billing'
plugin = require '../pluggable' plugin = require '../pluggable'
bitcoin = require '../bitcoin' bitcoin = require '../bitcoin'
{requireAuthenticate, renderAccount} = require './middleware' {requireAuthenticate, renderAccount} = require './../middleware'
mAccount = require '../model/account' mAccount = require '../model/account'
mBalance = require '../model/balance_log' mBalance = require '../model/balance_log'

View File

@@ -2,7 +2,7 @@ config = require '../../config'
plugin = require '../pluggable' plugin = require '../pluggable'
billing = require '../billing' billing = require '../billing'
plan = require '../plan' plan = require '../plan'
{requireAuthenticate} = require './middleware' {requireAuthenticate} = require './../middleware'
mAccount = require '../model/account' mAccount = require '../model/account'

View File

@@ -1,6 +1,6 @@
markdown = require('markdown').markdown markdown = require('markdown').markdown
{requireAuthenticate, renderAccount, getParam} = require './middleware' {requireAuthenticate, renderAccount, getParam} = require './../middleware'
mAccount = require '../model/account' mAccount = require '../model/account'
mTicket = require '../model/ticket' mTicket = require '../model/ticket'

View File

@@ -1,11 +1,3 @@
exports.rx =
username: /^[a-z][0-9a-z_]{2,23}$/
email: /^\w+([-+.]\w+)*@\w+([-+.]\w+)*$/
password: /^.+$/
domain: /(\*\.)?[A-Za-z0-9]+(\-[A-Za-z0-9]+)*(\.[A-Za-z0-9]+(\-[A-Za-z0-9]+)*)*/
filename: /[A-Za-z0-9_\-\.]+/
url: /^https?:\/\/[^\s;]*$/
exports.checkHomeFilePath = (account, path) -> exports.checkHomeFilePath = (account, path) ->
home_dir = "/home/#{account.username}/" home_dir = "/home/#{account.username}/"

View File

@@ -7,7 +7,7 @@ unless _.find(app.view_hook.menu_bar, (i) -> i.href == '/wiki/')
href: '/wiki/' href: '/wiki/'
html: '用户手册' html: '用户手册'
{renderAccount} = require './middleware' {renderAccount} = require './../middleware'
module.exports = exports = express.Router() module.exports = exports = express.Router()

View File

@@ -1,5 +1,13 @@
crypto = require 'crypto' crypto = require 'crypto'
exports.rx =
username: /^[a-z][0-9a-z_]{2,23}$/
email: /^\w+([-+.]\w+)*@\w+([-+.]\w+)*$/
password: /^.+$/
domain: /(\*\.)?[A-Za-z0-9]+(\-[A-Za-z0-9]+)*(\.[A-Za-z0-9]+(\-[A-Za-z0-9]+)*)*/
filename: /[A-Za-z0-9_\-\.]+/
url: /^https?:\/\/[^\s;]*$/
exports.sha256 = (data) -> exports.sha256 = (data) ->
if data if data
return crypto.createHash('sha256').update(data).digest('hex') return crypto.createHash('sha256').update(data).digest('hex')

View File

@@ -1,6 +1,8 @@
service = require './service' service = require './service'
monitor = require './monitor' monitor = require './monitor'
{pluggable} = app
app.view_hook.menu_bar.push app.view_hook.menu_bar.push
href: '/public/monitor/' href: '/public/monitor/'
html: '服务器状态' html: '服务器状态'
@@ -15,4 +17,11 @@ module.exports =
widget: service.widget widget: service.widget
style:'/style/panel.css' style:'/style/panel.css'
pluggable.account.username_filter.push (account, callback) ->
monitor.loadPasswd (passwd_cache) ->
if req.body.username in _.values(passwd_cache)
return callback false
callback true
monitor.run() monitor.run()

View File

@@ -1,7 +1,7 @@
child_process = require 'child_process' child_process = require 'child_process'
service = require './service' service = require './service'
{requireInService} = require '../../core/router/middleware' {requireInService} = require '../../core/middleware'
mAccount = require '../../core/model/account' mAccount = require '../../core/model/account'

View File

@@ -1,6 +1,6 @@
crypto = require 'crypto' crypto = require 'crypto'
{requireInService} = require '../../core/router/middleware' {requireInService} = require '../../core/middleware'
mongodb = app.plugins.mongodb mongodb = app.plugins.mongodb

View File

@@ -1,7 +1,7 @@
mysql = require 'mysql' mysql = require 'mysql'
plugin = require '../../core/pluggable' plugin = require '../../core/pluggable'
{requireInService} = require '../../core/router/middleware' {requireInService} = require '../../core/middleware'
connection = mysql.createConnection config.plugins.mysql.connection connection = mysql.createConnection config.plugins.mysql.connection
connection.connect() connection.connect()

View File

@@ -3,7 +3,7 @@ child_process = require 'child_process'
service = require './service' service = require './service'
configure = require './configure' configure = require './configure'
{requireInService, getParam} = require '../../core/router/middleware' {requireInService, getParam} = require '../../core/middleware'
mAccount = require '../../core/model/account' mAccount = require '../../core/model/account'

View File

@@ -1,7 +1,7 @@
child_process = require 'child_process' child_process = require 'child_process'
service = require './service' service = require './service'
{requireInService} = require '../../core/router/middleware' {requireInService} = require '../../core/middleware'
mAccount = require '../../core/model/account' mAccount = require '../../core/model/account'

View File

@@ -1,7 +1,7 @@
child_process = require 'child_process' child_process = require 'child_process'
service = require './service' service = require './service'
{requireInService} = require '../../core/router/middleware' {requireInService} = require '../../core/middleware'
mAccount = require '../../core/model/account' mAccount = require '../../core/model/account'

View File

@@ -1,4 +1,4 @@
{renderAccount} = require '../../core/router/middleware' {renderAccount} = require '../../core/middleware'
module.exports = exports = express.Router() module.exports = exports = express.Router()

View File

@@ -3,7 +3,7 @@ fs = require 'fs'
path = require 'path' path = require 'path'
service = require './service' service = require './service'
{renderAccount, requireInService, requireAuthenticate} = require '../../core/router/middleware' {renderAccount, requireInService, requireAuthenticate} = require '../../core/middleware'
mAccount = require '../../core/model/account' mAccount = require '../../core/model/account'

View File

@@ -1,7 +1,7 @@
child_process = require 'child_process' child_process = require 'child_process'
plugin = require '../../core/pluggable' plugin = require '../../core/pluggable'
{requireInService} = require '../../core/router/middleware' {requireInService} = require '../../core/middleware'
module.exports = exports = express.Router() module.exports = exports = express.Router()