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.package = require './package.json'
app.pluggable = require './core/pluggable'
app.middleware = require './core/middleware'
app.token_manager = require './core/token_manager'
app.models =
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.urlencoded()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
markdown = require('markdown').markdown
{requireAuthenticate, renderAccount, getParam} = require './middleware'
{requireAuthenticate, renderAccount, getParam} = require './../middleware'
mAccount = require '../model/account'
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) ->
home_dir = "/home/#{account.username}/"

View File

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

View File

@@ -1,5 +1,13 @@
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) ->
if data
return crypto.createHash('sha256').update(data).digest('hex')

View File

@@ -1,6 +1,8 @@
service = require './service'
monitor = require './monitor'
{pluggable} = app
app.view_hook.menu_bar.push
href: '/public/monitor/'
html: '服务器状态'
@@ -15,4 +17,11 @@ module.exports =
widget: service.widget
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()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
child_process = require 'child_process'
service = require './service'
{requireInService} = require '../../core/router/middleware'
{requireInService} = require '../../core/middleware'
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()

View File

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

View File

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