This commit is contained in:
Primakov Alexandr Alexandrovich
2024-11-04 18:47:17 +03:00
parent 10dc3e5ffe
commit ef35a8aa6c
12 changed files with 3819 additions and 0 deletions

View 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,
}

View 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;