You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.2 KiB
107 lines
3.2 KiB
/* eslint operator-linebreak: 0 */
|
|
|
|
const jwt = require('jsonwebtoken')
|
|
const camelcase = require('camelcase')
|
|
const ObjectId = require('mongodb').ObjectId
|
|
|
|
const CFG = require('../../config')
|
|
const TOL = require('../../tools/common')
|
|
|
|
module.exports = function (pCtx) {
|
|
const services = {}
|
|
let dbUsers = pCtx.db.collection('users')
|
|
|
|
services.login = function (req, res, next) {
|
|
dbUsers
|
|
.find({username: req.body.user})
|
|
.limit(1)
|
|
.next(function (pErr, pUser) {
|
|
if (pErr) {
|
|
return res.done(555, pErr)
|
|
}
|
|
|
|
if (!pUser) {
|
|
return res.done(401, new Error('User:NotFound'))
|
|
}
|
|
|
|
if (!pUser.multipass || pUser.multipass.hash !== req.body.pass) {
|
|
return res.done(401, new Error('User:WrongPassword'))
|
|
}
|
|
|
|
let payload = buildDefaultPayload(req, pUser)
|
|
let token = jwt.sign({data: payload}, CFG.jwt.jwtAuth.secret, { expiresIn: CFG.jwt.jwtAuth.expiresIn })
|
|
|
|
res.done(null, {user: pUser, token: token})
|
|
})
|
|
}
|
|
|
|
// services.access = function (req, res, next) {
|
|
// if (!req.body.jwtAuth) {
|
|
// return res.done(401, new Error('jwtAuth:Missing'))
|
|
// }
|
|
|
|
// jwt.verify(req.body.jwtAuth, CFG.jwt.jwtAuth.secret, function (pErr, pDecoded) {
|
|
// if (pErr) {
|
|
// return res.done(401, new Error(`jwtAuth:${camelcase(pErr.message, {pascalCase: true})}`))
|
|
// }
|
|
|
|
// let payloadState = TOL.jwt.checkPayload(req, pDecoded.data)
|
|
// if (payloadState) {
|
|
// return res.done(401, 'jwtAuth:CorruptedPayload:' + payloadState)
|
|
// }
|
|
|
|
// dbUsers
|
|
// .find({_id: ObjectId(pDecoded.data.user.id)})
|
|
// .limit(1)
|
|
// .next(function (pErr, pUser) {
|
|
// if (pErr || !pUser) {
|
|
// return res.done(401, 'User:NotFound')
|
|
// }
|
|
|
|
// let hashPass = TOL.createHash(pUser.multipass.hash, null, CFG.jwt.jwtAuth.passSalt)
|
|
|
|
// if (pDecoded.data.user.pass !== hashPass) {
|
|
// return res.done(401, 'User:PasswordChanged')
|
|
// }
|
|
|
|
// let payload = buildDefaultPayload(req, pUser)
|
|
// let jwtAuth = jwt.sign({data: payload}, CFG.jwt.jwtAuth.secret, { expiresIn: CFG.jwt.jwtAuth.expiresIn })
|
|
|
|
// payload.user.rights = pUser.rights
|
|
|
|
// let jwtAccess = jwt.sign({data: payload}, CFG.jwt.jwtAccess.secret, { expiresIn: CFG.jwt.jwtAccess.expiresIn })
|
|
|
|
// res.done(null, {jwtAuth, jwtAccess})
|
|
// })
|
|
// })
|
|
// }
|
|
|
|
services.me = function (req, res, next) {
|
|
res.done(null, {user: req.user})
|
|
}
|
|
|
|
services.filtersGet = function (req, res, next) {
|
|
let restOp = pCtx.restapi['users-filters'].__buildRestOp()
|
|
restOp.filter = { '__metadata.owner': req.user._id }
|
|
pCtx.restapi['users-filters'].__services.read(restOp, res.done)
|
|
}
|
|
|
|
services.filtersCreate = function (req, res, next) {
|
|
pCtx.restapi['users-filters'].__services.create(req.body, req.user, res.done)
|
|
}
|
|
|
|
return services
|
|
}
|
|
|
|
function buildDefaultPayload (req, pUser) {
|
|
return {
|
|
user: {
|
|
id: pUser._id,
|
|
username: pUser.username,
|
|
details: pUser.details,
|
|
pass: TOL.createHash(pUser.multipass.hash, null, CFG.jwt.jwtAuth.passSalt)
|
|
},
|
|
sid: CFG.jwt.sid,
|
|
clientInfo: TOL.buildClientInfo(req)
|
|
}
|
|
}
|