init
This commit is contained in:
40
server/_helpers/authorize.js
Normal file
40
server/_helpers/authorize.js
Normal file
@@ -0,0 +1,40 @@
|
||||
const assignParam = (dev, prod) =>
|
||||
process.env.NODE_ENV !== 'production' ? dev : prod
|
||||
|
||||
const parseToken = (req, res, next) => {
|
||||
req.isAdmin = assignParam(
|
||||
true,
|
||||
Boolean(
|
||||
req?.kauth?.grant?.access_token?.content?.resource_access?.[
|
||||
'manager-admin'
|
||||
]?.roles?.includes('manager_admin'),
|
||||
),
|
||||
)
|
||||
|
||||
req.userId = assignParam(
|
||||
process.env['KC.DEV.ID'],
|
||||
req.kauth?.grant?.access_token?.content?.sub,
|
||||
)
|
||||
req.user = assignParam(
|
||||
{ sub: '123', name: 'dev' },
|
||||
req.kauth?.grant?.access_token?.content,
|
||||
)
|
||||
|
||||
next()
|
||||
}
|
||||
|
||||
const adminOnly = [
|
||||
parseToken,
|
||||
(req, res, next) => {
|
||||
if (!req.isAdmin) {
|
||||
// user's role is not authorized
|
||||
return res.status(403).send({ code: 4, error: 'Access denied' })
|
||||
}
|
||||
next()
|
||||
},
|
||||
]
|
||||
|
||||
module.exports = {
|
||||
adminOnly,
|
||||
parseToken,
|
||||
}
|
||||
18
server/_helpers/error-handler.js
Normal file
18
server/_helpers/error-handler.js
Normal file
@@ -0,0 +1,18 @@
|
||||
const { getAnswer } = require('../utils/common');
|
||||
|
||||
function errorHandler(err, req, res, _next) {
|
||||
console.error(err);
|
||||
if (typeof (err) === 'string') {
|
||||
return res.status(400).json(getAnswer([{ message: err }]));
|
||||
}
|
||||
|
||||
if (err.name === 'UnauthorizedError') {
|
||||
// jwt authentication error
|
||||
return res.status(401).json(getAnswer([{ message: 'Invalid Token' }]));
|
||||
}
|
||||
|
||||
// default to 500 server error
|
||||
return res.status(500).json(getAnswer([{ message: err?.message || 'Invalid Token' }]));
|
||||
}
|
||||
|
||||
module.exports = errorHandler;
|
||||
Reference in New Issue
Block a user