1
0
Fork 0
freesewing/sites/backend/src/middleware.mjs

47 lines
1.1 KiB
JavaScript
Raw Normal View History

import cors from 'cors'
import http from 'passport-http'
import jwt from 'passport-jwt'
import { ApikeyModel } from './models/apikey.mjs'
2022-11-12 17:33:55 +01:00
const levelFromRole = (role) => {
if (role === 'user') return 4
if (role === 'bughunter') return 5
if (role === 'support') return 6
if (role === 'admin') return 8
return 0
}
function loadExpressMiddleware(app) {
app.use(cors())
}
function loadPassportMiddleware(passport, tools) {
passport.use(
new http.BasicStrategy(async (key, secret, done) => {
const Apikey = new ApikeyModel(tools)
await Apikey.verify(key, secret)
2022-11-08 21:04:32 +01:00
return Apikey.verified
? done(null, { ...Apikey.record, apikey: true, uid: Apikey.record.userId })
: done(false)
})
)
passport.use(
new jwt.Strategy(
{
jwtFromRequest: jwt.ExtractJwt.fromAuthHeaderAsBearerToken(),
...tools.config.jwt,
},
(jwt_payload, done) => {
2022-11-12 17:33:55 +01:00
return done(null, {
...jwt_payload,
uid: jwt_payload._id,
level: levelFromRole(jwt_payload.role),
})
}
)
)
}
2022-10-29 22:25:00 +02:00
export { loadExpressMiddleware, loadPassportMiddleware }