mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-04-23 03:10:30 +08:00
@@ -1,16 +1,23 @@
|
||||
crypto = require 'crypto'
|
||||
|
||||
assert = require 'assert'
|
||||
User = require './model/User'
|
||||
|
||||
exports.sha256 = (data) ->
|
||||
return crypto.createHash('sha256').update(data).digest('hex');
|
||||
|
||||
exports.randomSalt = ->
|
||||
return exports.sha256 crypto.randomBytes(256)
|
||||
|
||||
exports.hashPasswd = (passwd, passwd_salt) ->
|
||||
return exports.sha256(exports.sha256(passwd) + passwd_salt)
|
||||
|
||||
exports.createToken = (user, attribute, callback = undefined) ->
|
||||
generateToken = (callback) ->
|
||||
token = exports.sha256 crypto.randomBytes(256)
|
||||
token = exports.randomSalt()
|
||||
|
||||
User.findBy {'tokens.token': token}, (result) ->
|
||||
if result.documents.length > 0
|
||||
User.find {'tokens.token': token}, (err,result) ->
|
||||
assert.equal null,err
|
||||
if result.length > 0
|
||||
generateToken callback
|
||||
else
|
||||
callback token
|
||||
@@ -31,8 +38,9 @@ exports.authenticate = (token, callback) ->
|
||||
if not token
|
||||
callback true, null
|
||||
|
||||
User.findBy {'tokens.token': token}, (result) ->
|
||||
if result.documents.length > 0
|
||||
User.find {'tokens.token': token}, (err,result) ->
|
||||
assert.equal null,err
|
||||
if result.length > 0
|
||||
callback undefined, result
|
||||
else
|
||||
callback true, null
|
||||
|
||||
@@ -8,7 +8,7 @@ module.exports =
|
||||
|
||||
db:
|
||||
type: 'mongo'
|
||||
server: '/home/rpadmin/mongod.sock'
|
||||
server: 'localhost'
|
||||
name: 'RootPanel'
|
||||
user: 'rpadmin'
|
||||
passwd: 'passwd'
|
||||
name: 'RootPanel'
|
||||
|
||||
12
core/db.coffee
Normal file
12
core/db.coffee
Normal file
@@ -0,0 +1,12 @@
|
||||
Db = (require 'mongodb').Db
|
||||
Server = (require 'mongodb').Server
|
||||
assert = require 'assert'
|
||||
config = (require './config').db
|
||||
|
||||
# url = "mongodb://#{config.user}:#{config.passwd}@#{config.server}/#{config.name}"
|
||||
url = "mongodb://127.0.0.1:27017/#{config.name}"
|
||||
# MongoClient.connect url, {}, (err, db) ->
|
||||
# assert.equal null,err
|
||||
# module.exports = db
|
||||
|
||||
module.exports = new Db config.name, (new Server 'localhost',27017),safe : true
|
||||
@@ -1,62 +0,0 @@
|
||||
$ = (require "mongous").Mongous
|
||||
config = require "../config"
|
||||
EventProxy = require 'eventproxy'
|
||||
Tool = require '../tool'
|
||||
|
||||
class BaseModel
|
||||
constructor : ->
|
||||
@constructor.errors = {}
|
||||
@constructor.ep = new EventProxy()
|
||||
@constructor.searchBy = ''
|
||||
@dbHandle : ->
|
||||
$ "#{config.db.name}.#{@table()}"
|
||||
|
||||
save : (callback = Tool.nullFunc)->
|
||||
# @constructor.resetErrors()
|
||||
@validate (validated)=>
|
||||
err = @constructor.errors
|
||||
if validated
|
||||
searchBy = @constructor.searchBy
|
||||
@constructor.resetErrors()
|
||||
@constructor.dbHandle().save @data
|
||||
@constructor["findBy#{Tool.firstCapital searchBy}"] @data[searchBy],(r)=>
|
||||
@data = r.documents[0]
|
||||
callback(null,@data)
|
||||
else
|
||||
callback(err,null)
|
||||
#如验证需重写
|
||||
validate : (callback)->
|
||||
@constructor.ep.once 'validate',callback
|
||||
remove : ->
|
||||
@constructor.dbHandle().remove _id: @data._id
|
||||
|
||||
update : (update,upsert = false, multi = true)->
|
||||
@constructor.update {_id : @data._id},update,upsert,multi
|
||||
|
||||
@update : (what,update,upsert = false,multi = true) ->
|
||||
@dbHandle().update what,update,upsert,multi
|
||||
@findById : (id,callback) ->
|
||||
@dbHandle().find 1,{_id : id},callback
|
||||
@findBy : (obj,callback,num = 1) ->
|
||||
@dbHandle().find num,obj,callback
|
||||
@getErrors : ->
|
||||
@errors
|
||||
|
||||
@resetErrors : ->
|
||||
@errors = {}
|
||||
@setErrors : (k,v)->
|
||||
@errors[k] = v
|
||||
required : (arr)->
|
||||
@constructor.setErrors key, "#{key}不能为空" for key in arr when !@data[key]
|
||||
|
||||
exsited : (k,v)->
|
||||
# for k, v of obj
|
||||
temp = {}
|
||||
temp[k] = v
|
||||
@constructor.findBy temp,(r)=>
|
||||
if r.documents.length isnt 0
|
||||
@constructor.setErrors k, "#{k}已经存在"
|
||||
@constructor.ep.emit "exsited_#{k}",false
|
||||
@constructor.ep.emit "exsited_#{k}",true
|
||||
|
||||
module.exports = BaseModel
|
||||
68
core/model/Model.coffee
Normal file
68
core/model/Model.coffee
Normal file
@@ -0,0 +1,68 @@
|
||||
MongoClient = require('mongodb').MongoClient
|
||||
ObjectID = require('mongodb').ObjectID;
|
||||
_ = require 'underscore'
|
||||
assert = require 'assert'
|
||||
db = require '../db'
|
||||
# db.open (err,db)->
|
||||
# (db.collection 'users').find().toArray (err,result)->
|
||||
# console.log result
|
||||
module.exports = class Model
|
||||
constructor: (@attributes,opts = {}) ->
|
||||
|
||||
@create : ->
|
||||
throw 'this function must be overrided'
|
||||
|
||||
@table : ->
|
||||
throw 'this function must be overrided'
|
||||
|
||||
@collection: (db)->
|
||||
db.collection @table()
|
||||
set : (key, value = null) ->
|
||||
if (_.isObject key) is 'object' then attrs = key else attrs[key] = value
|
||||
@attributes[k] = v for k, v of attrs
|
||||
@
|
||||
get : (attr)->
|
||||
@attributes[attr]
|
||||
|
||||
save : (attributes,callback)->
|
||||
db.open (err,db) =>
|
||||
@collection(db).insert attributes,{},(err,docs) =>
|
||||
assert.equal null,err
|
||||
db.close()
|
||||
if callback
|
||||
results = []
|
||||
if docs.length is 1
|
||||
for doc in doc
|
||||
results.push @create doc
|
||||
else
|
||||
results = @create docs[0]
|
||||
callback err,results
|
||||
@find : (attrs,opts = {},callback = null)->
|
||||
if _.isFunction attrs
|
||||
callback = attrs
|
||||
attrs = {}
|
||||
else if _.isFunction opts
|
||||
callback = opts
|
||||
opts = {}
|
||||
db.open (err,db) =>
|
||||
@collection(db).find(attrs,opts).toArray (err,docs)=>
|
||||
assert.equal null,err
|
||||
db.close()
|
||||
if callback
|
||||
results = []
|
||||
if docs.length is 1
|
||||
results = @create docs[0]
|
||||
else
|
||||
for doc in docs
|
||||
results.push @create doc
|
||||
callback err,results
|
||||
|
||||
@findById: (id, callback = null) ->
|
||||
throw 'id must be string' if !_.isString id
|
||||
db.open (err,db) =>
|
||||
@collection().findOne {_id: new ObjectID id}, (err, result) =>
|
||||
throw err if err
|
||||
db.close()
|
||||
result = @create result
|
||||
if callback
|
||||
callback err,result
|
||||
@@ -1,49 +1,26 @@
|
||||
BaseModel = require "./BaseModel"
|
||||
crypto = require "crypto"
|
||||
Tool = require '../tool'
|
||||
isEmptyObj = (obj)->
|
||||
for key of obj
|
||||
return false
|
||||
true
|
||||
class User extends BaseModel
|
||||
constructor : (data = {name : null,email:null,passwd:null}) ->
|
||||
super()
|
||||
passwd_salt = crypto.createHash('sha256').digest('hex')
|
||||
@data =
|
||||
name : data.name or null
|
||||
email : data.email or null
|
||||
passwd_salt : passwd_salt
|
||||
passwd : crypto.createHash('sha256').update(data.passwd+data.passwd_salt).digest('hex') if data.passwd
|
||||
signup_at : Math.round Date.now()/1000
|
||||
group : []
|
||||
tokens : []
|
||||
setting : {}
|
||||
attribute : {}
|
||||
@constructor.searchBy = 'name'
|
||||
@table : ->
|
||||
'users'
|
||||
validate : (callback)->
|
||||
super(callback)
|
||||
@required ['name','passwd','email']
|
||||
@constructor.ep.all 'exsited_name','exsited_email',(name,email)=>
|
||||
@constructor.ep.emit 'validate', if name and email then true else false
|
||||
@exsited 'name' ,@data.name
|
||||
@exsited 'email', @data.email
|
||||
# if isEmptyObj constructor.errors then false else true
|
||||
@findByName: (name,callback,num = 1) ->
|
||||
@dbHandle().find num,
|
||||
name : name
|
||||
,callback
|
||||
addToGroup : (group) ->
|
||||
if Tool.typeIsArray group
|
||||
@update
|
||||
'$addToSet' :
|
||||
group :
|
||||
'$each' : group
|
||||
else
|
||||
@update
|
||||
'$addToSet' :
|
||||
group : gourp
|
||||
Model = require './Model'
|
||||
auth = require '../auth'
|
||||
assert = require 'assert'
|
||||
db = require '../db'
|
||||
_ = require 'underscore'
|
||||
|
||||
module.exports = class User extends Model
|
||||
@create : (attrs,opts = {})->
|
||||
return new User attrs,opts
|
||||
@table : ->
|
||||
'users'
|
||||
|
||||
module.exports = User
|
||||
@register: (username, email, passwd, callback = null) ->
|
||||
passwd_salt = auth.randomSalt()
|
||||
|
||||
attributes =
|
||||
name: username
|
||||
passwd: auth.hashPasswd(passwd, passwd_salt)
|
||||
passwd_salt: passwd_salt
|
||||
email: email
|
||||
signup: new Date()
|
||||
group: []
|
||||
setting: {}
|
||||
attribure: {}
|
||||
tokens: []
|
||||
@save attributes,callback
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
Tool =
|
||||
firstCapital : (str) ->
|
||||
return str.replace /\b\w+\b/g,(word) ->
|
||||
return word.substring(0,1).toUpperCase() + word.substring 1
|
||||
|
||||
typeIsArray : Array.isArray || ( value ) -> return {}.toString.call( value ) is '[object Array]'
|
||||
|
||||
nullFuc : ->
|
||||
module.exports = Tool
|
||||
@@ -22,7 +22,7 @@
|
||||
"jade": "*",
|
||||
"i18next": "*",
|
||||
"coffee-script": "*",
|
||||
"mongous" : "*",
|
||||
"eventproxy" : "0.2.6"
|
||||
"mongodb" : "*",
|
||||
"underscore" : "*"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user