usr
Version:
User and groups management rest webservice
184 lines (175 loc) • 6.78 kB
text/coffeescript
Component = require '../component'
module.exports = class Auth extends Component
constructor : (app)->
= app
@._everyAuth()
@._routes()
#No Check on addUser, everybody can register or create a new user
addUser : (source='', id='', datas={}, cb)->
_ = @
store = .stores.user
store.addUser(source, id, datas, (err, userId)->
_.checkErr(err)
cb(null,userId)
_.emit('user/new',
userId : userId
source : source
id : id
)
)
login : (source, id, datas, user, cb)->
_ = @
store = .stores.user
#Check on user : Does the user is already logged in ?
if user != null
# Is it a new way of connection ?
# .debug "User Is already in, let's add a way of login !"
else
store.findUserBySourceAndId(source, id, (err,user)->
if err?
if err[0] == 'Not found'
store.addUser(source,id,datas,(err,userId)->
#find a better way ?
store.findUserById(userId,(err,user)->
cb(null,user)
_.app.event.emit('user/login',
userId:user.id
)
return
)
)
else
cb(err,null)
return
else
if source == 'local'
#!TODO password hash with a good method....
if datas.password != user[source].password
cb(['Wrong Password'],null)
return
_.app.event.emit('user/login',
userId:user.id
)
cb(null,user)
return
)
_routes : ()->
_ = @
#Add a Are you sure on the logout ?
#!TODO Check on AppToken
_everyAuth : ()->
_ = @
store = .stores.user
= require 'everyauth'
# .debug = true
.everymodule.findUserById((id, cb)->
store.findUserById(id,cb)
)
#PASSWORD :
.password
.loginWith('email')
.getLoginPath('/auth/local')
.postLoginPath('/auth/local')
.loginView('login')
.authenticate((login, password)->
promise = this.Promise()
_.login('local',login,
login:login
password:password
,null#!TODO put here user from session
,(err,user)->
if err != null
promise.fulfill(err)
return
promise.fulfill(user)
)
return promise
)
.getRegisterPath('/register')
.postRegisterPath('/register')
.registerView('register.jade')
.validateRegistration((newUserAttrs, errors)->
return null
)
.registerUser((newUserAttrs)->
return null
)
.loginSuccessRedirect('/redirect')
.registerSuccessRedirect('/redirect')
for providerName, providerConfigs of _.app.configs.everyAuth
@._everyAuth_Providers(providerName, providerConfigs)
#Register EveryAuth
.use( .middleware())
.helpExpress( )
_everyAuth_Providers:(providerName, providerConfigs)->
_ = @
for key, value of providerConfigs
[providerName][key](value)
[providerName].redirectPath('/redirect')
[providerName].findOrCreateUser(
(session, accessToken, accessTokenExtra, datas)->
datas.accessToken = accessToken
datas.accessTokenExtra = accessTokenExtra
promise = _.everyAuth.password.Promise()
_.login(
providerName,
accessToken,
datas,
null,#!TODO Need to put here the user
(err,user)->
if err?
promise.fulfill(err)
return
promise.fulfill(user)
,
session)
return promise
)