UNPKG

turborepo-remote-cache

Version:
51 lines 5.51 kB
import { Boom, forbidden, isBoom, unauthorized } from '@hapi/boom'; import { fastifyJwtJwks } from 'fastify-jwt-jwks'; import fp from 'fastify-plugin'; export default fp(async (fastify) => { if (!fastify.config.JWKS_URL) { throw new Error('Must provide JWKS url when using JWT authentication'); } await fastify.register(fastifyJwtJwks, { audience: fastify.config.JWT_AUDIENCE, issuer: fastify.config.JWT_ISSUER, jwksUrl: fastify.config.JWKS_URL, formatUser(payload) { return { scope: new Set(payload.scope?.split(' ')) }; }, }); const readScopes = [fastify.config.JWT_READ_SCOPES || []].flat(); const writeScopes = [fastify.config.JWT_WRITE_SCOPES || []].flat(); fastify.addHook('onRequest', fastify.authenticate); fastify.addHook('onRoute', async (route) => { if (route.authorization && route.authorization === 'read' && readScopes.length > 0) { async function authorizeRead(request) { if (!readScopes.some((scope) => request.user.scope.has(scope))) throw forbidden(); } route.onRequest = [...[route.onRequest ?? []].flat(), authorizeRead]; } if (route.authorization && route.authorization === 'write' && writeScopes.length > 0) { async function authorizeWrite(request) { if (!writeScopes.some((scope) => request.user.scope.has(scope))) throw forbidden(); } route.onRequest = [...[route.onRequest ?? []].flat(), authorizeWrite]; } }); fastify.setErrorHandler(async (error, req, res) => { if (isBoom(error)) { throw error; } if (typeof error.statusCode === 'number' && error.statusCode < 500) { req.log.warn({ err: error, code: error.code }, 'JWT authentication failed'); throw new Boom(error.message, { statusCode: error.statusCode }); } req.log.error({ err: error, code: error.code }, 'Unexpected error in JWT handler'); throw unauthorized(); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL2F1dGgvand0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBUy9CLGVBQWUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUE7SUFDeEUsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUU7UUFDckMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWTtRQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVE7UUFDaEMsVUFBVSxDQUFDLE9BQU87WUFDaEIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdEQsQ0FBQztLQUNGLENBQUMsQ0FBQTtJQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDaEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFB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