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

/* 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)
}
}