mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-03-28 07:28:57 +08:00
finish #19
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
## User API
|
||||
|
||||
### POST /user/signup/
|
||||
### POST /account/signup/
|
||||
|
||||
Request:
|
||||
|
||||
@@ -28,7 +28,7 @@ Exception:
|
||||
* invalid_email `/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/`
|
||||
* invalid_passwd `/^.+$/`
|
||||
|
||||
### POST /user/login/
|
||||
### POST /account/login/
|
||||
|
||||
Request:
|
||||
|
||||
@@ -53,7 +53,7 @@ Exception:
|
||||
|
||||
* auth_failed
|
||||
|
||||
### POST /user/logout/
|
||||
### POST /account/logout/
|
||||
|
||||
No Request.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
crypto = require 'crypto'
|
||||
assert = require 'assert'
|
||||
User = require './model/User'
|
||||
User = require './model/Account'
|
||||
|
||||
exports.sha256 = (data) ->
|
||||
if not data
|
||||
|
||||
@@ -2,7 +2,7 @@ module.exports =
|
||||
web:
|
||||
port: 3000
|
||||
|
||||
user:
|
||||
account:
|
||||
cookieTime: 30 * 24 * 3600 * 1000
|
||||
|
||||
i18n:
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "一个插件化的 Linux 虚拟主机管理系统。"
|
||||
},
|
||||
"word": {
|
||||
"user": "用户",
|
||||
"account": "帐号",
|
||||
"signup": "注册",
|
||||
"login": "登录",
|
||||
"username": "用户名",
|
||||
|
||||
@@ -3,9 +3,9 @@ auth = require '../auth'
|
||||
db = require '../db'
|
||||
_ = require 'underscore'
|
||||
|
||||
module.exports = class User extends Model
|
||||
module.exports = class Account extends Model
|
||||
@create: (data) ->
|
||||
new User data
|
||||
new Account data
|
||||
|
||||
@register: (username, email, passwd, callback = null) ->
|
||||
passwd_salt = auth.randomSalt()
|
||||
@@ -28,7 +28,7 @@ module.exports = class User extends Model
|
||||
generateToken = (callback) ->
|
||||
token = auth.randomSalt()
|
||||
|
||||
User.findOne
|
||||
Account.findOne
|
||||
'tokens.token': token
|
||||
, (result) ->
|
||||
if result
|
||||
@@ -61,7 +61,7 @@ module.exports = class User extends Model
|
||||
unless token
|
||||
callback null
|
||||
|
||||
User.findOne
|
||||
Account.findOne
|
||||
'tokens.token': token
|
||||
, (result) ->
|
||||
if result
|
||||
@@ -1,18 +1,18 @@
|
||||
config = require '../config'
|
||||
|
||||
User = require '../model/User'
|
||||
Account = require '../model/Account'
|
||||
|
||||
module.exports =
|
||||
get:
|
||||
signup: (req, res) ->
|
||||
User.authenticate req.token, (user) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
res.render 'signup',
|
||||
user: user
|
||||
user: account
|
||||
|
||||
login: (req, res) ->
|
||||
User.authenticate req.token, (user) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
res.render 'login',
|
||||
user: user
|
||||
user: account
|
||||
|
||||
post:
|
||||
signup: (req, res) ->
|
||||
@@ -27,55 +27,55 @@ module.exports =
|
||||
unless data.passwd or not /^.+$/.test data.passwd
|
||||
return res.json 400, error: 'invalid_passwd'
|
||||
|
||||
User.byUsername data.username, (user) ->
|
||||
if user
|
||||
Account.byUsername data.username, (account) ->
|
||||
if account
|
||||
return res.json 400, error: 'username_exist'
|
||||
|
||||
User.byEmail data.email, (user) ->
|
||||
if user
|
||||
Account.byEmail data.email, (account) ->
|
||||
if account
|
||||
return res.json 400, error: 'email_exist'
|
||||
|
||||
User.register data.username, data.email, data.passwd, (user) ->
|
||||
user.createToken {}, (token)->
|
||||
Account.register data.username, data.email, data.passwd, (account) ->
|
||||
account.createToken {}, (token)->
|
||||
res.cookie 'token', token,
|
||||
expires: new Date(Date.now() + config.user.cookieTime)
|
||||
expires: new Date(Date.now() + config.account.cookieTime)
|
||||
|
||||
return res.json
|
||||
id: user.data._id
|
||||
id: account.data._id
|
||||
|
||||
login: (req, res) ->
|
||||
data = req.body
|
||||
|
||||
# @param callback(account)
|
||||
getAccount = (callback) ->
|
||||
User.byUsername data.username, (user) ->
|
||||
if user
|
||||
return callback user
|
||||
Account.byUsername data.username, (account) ->
|
||||
if account
|
||||
return callback account
|
||||
|
||||
User.byEmail data.email, (user) ->
|
||||
return callback user
|
||||
Account.byEmail data.email, (account) ->
|
||||
return callback account
|
||||
|
||||
getAccount (user) ->
|
||||
unless user
|
||||
getAccount (account) ->
|
||||
unless account
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
unless user.matchPasswd data.passwd
|
||||
unless account.matchPasswd data.passwd
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
user.createToken {}, (token) ->
|
||||
account.createToken {}, (token) ->
|
||||
res.cookie 'token', token,
|
||||
expires: new Date(Date.now() + config.user.cookieTime)
|
||||
expires: new Date(Date.now() + config.account.cookieTime)
|
||||
|
||||
return res.json
|
||||
id: user.data._id
|
||||
id: account.data._id
|
||||
token: token
|
||||
|
||||
logout: (req, res) ->
|
||||
User.authenticate req.token, (user) ->
|
||||
unless user
|
||||
Account.authenticate req.token, (account) ->
|
||||
unless account
|
||||
return res.json 400, error: 'auth_failed'
|
||||
|
||||
user.removeToken req.token, ->
|
||||
account.removeToken req.token, ->
|
||||
res.clearCookie 'token'
|
||||
|
||||
res.json {}
|
||||
@@ -1,4 +1,4 @@
|
||||
User = require '../model/User'
|
||||
Account = require '../model/Account'
|
||||
|
||||
module.exports =
|
||||
get:
|
||||
@@ -6,6 +6,6 @@ module.exports =
|
||||
res.redirect '/panel/'
|
||||
|
||||
'/panel/': (req, res) ->
|
||||
User.authenticate req.token, (user) ->
|
||||
Account.authenticate req.token, (account) ->
|
||||
res.render 'panel',
|
||||
user: user
|
||||
account: account
|
||||
|
||||
@@ -7,7 +7,7 @@ $ ->
|
||||
|
||||
$.ajax
|
||||
method: 'post'
|
||||
url: '/user/login/'
|
||||
url: '/account/login/'
|
||||
data: data
|
||||
.done (reply) ->
|
||||
location.href = '/'
|
||||
@@ -1,7 +1,7 @@
|
||||
$ ->
|
||||
$('.signup-form').find('button').on 'click', (e) ->
|
||||
e.preventDefault()
|
||||
$('.signup-form').checkAndRequest '/user/signup/',
|
||||
$('.signup-form').checkAndRequest '/account/signup/',
|
||||
username:
|
||||
check: /^[0-9a-z_]+$/
|
||||
error: '用户名必须以数字或小写字母开头'
|
||||
@@ -21,7 +21,7 @@ html
|
||||
li
|
||||
a(href='/topnav1/') Top Nav1
|
||||
ul.nav.navbar-nav.navbar-right
|
||||
if user
|
||||
if account
|
||||
li
|
||||
a= user.data.username
|
||||
li
|
||||
@@ -30,9 +30,9 @@ html
|
||||
a(href='/account/logout/')= t('word.logout')
|
||||
else
|
||||
li
|
||||
a(href='/user/signup/')= t('word.signup')
|
||||
a(href='/account/signup/')= t('word.signup')
|
||||
li
|
||||
a(href='/user/login/')= t('word.login')
|
||||
a(href='/account/login/')= t('word.login')
|
||||
|
||||
#content.container
|
||||
.row
|
||||
|
||||
@@ -21,9 +21,9 @@ block main
|
||||
prepend sidebar
|
||||
.row
|
||||
header= t('view.login.noAccount')
|
||||
a.btn.btn-lg.btn-success(href='/user/signup/')= t('word.signup')
|
||||
a.btn.btn-lg.btn-success(href='/account/signup/')= t('word.signup')
|
||||
|
||||
|
||||
append script
|
||||
script(src='/script/base/checkAndRequest.js')
|
||||
script(src='/script/user/login.js')
|
||||
script(src='/script/account/login.js')
|
||||
|
||||
@@ -29,8 +29,8 @@ block main
|
||||
prepend sidebar
|
||||
.row
|
||||
header= t('view.signup.alreadySignup')
|
||||
a.btn.btn-lg.btn-success(href='/user/login/')= t('word.login')
|
||||
a.btn.btn-lg.btn-success(href='/account/login/')= t('word.login')
|
||||
|
||||
append script
|
||||
script(src='/script/base/checkAndRequest.js')
|
||||
script(src='/script/user/signup.js')
|
||||
script(src='/script/account/signup.js')
|
||||
|
||||
Reference in New Issue
Block a user