diff options
| author | Adam Soltys <[email protected]> | 2024-08-26 21:17:43 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-08-26 21:17:43 -0700 |
| commit | fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7 (patch) | |
| tree | aa8f34e1692bd2d638a2c996eeadb58671d07aea /lib/auth.ts | |
| parent | 00e43ddc0bf3d6dd719fc9295d156567fa2fecfb (diff) | |
| download | coinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.tar.gz coinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.zip | |
typescript
Diffstat (limited to 'lib/auth.ts')
| -rw-r--r-- | lib/auth.ts | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/auth.ts b/lib/auth.ts new file mode 100644 index 00000000..0a8d43d3 --- /dev/null +++ b/lib/auth.ts @@ -0,0 +1,51 @@ +import fastifyPassport from "@fastify/passport"; +import { g } from "$lib/db"; +import { fail, getUser } from "$lib/utils"; +import config from "$config"; +import jwt from "passport-jwt"; + +export const admin = { + preValidation: fastifyPassport.authenticate( + "jwt", + { session: false }, + function (req, res, err, user, info) { + if (!user.admin) return res.code(401).send("unauthorized"); + req.user = user; + }, + ), +}; + +export const optional = { + preValidation: fastifyPassport.authenticate( + "jwt", + { session: false }, + function (req, res, err, user, info) { + req.user = user; + }, + ), +}; + +export const auth = { + preValidation: fastifyPassport.authenticate("jwt", { + authInfo: false, + session: false, + }), +}; + +export const requirePin = async ({ body, user }) => { + if (!user || (user.pin && user.pin !== body.pin)) fail("Invalid pin"); +}; + +export const jwtStrategy = new jwt.Strategy( + { + jwtFromRequest: jwt.ExtractJwt.fromExtractors([ + jwt.ExtractJwt.fromAuthHeaderAsBearerToken(), + (req) => (req.cookies ? req.cookies.token : null), + ]), + secretOrKey: config.jwt, + }, + async (payload, next) => { + let user = await getUser(payload.id); + next(null, user); + }, +); |
