aboutsummaryrefslogtreecommitdiffstats
path: root/lib/auth.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-08-26 21:17:43 -0700
committerAdam Soltys <[email protected]>2024-08-26 21:17:43 -0700
commitfe62cadd6fb4a7e49f7d59401fc74ae0411e32a7 (patch)
treeaa8f34e1692bd2d638a2c996eeadb58671d07aea /lib/auth.ts
parent00e43ddc0bf3d6dd719fc9295d156567fa2fecfb (diff)
downloadcoinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.tar.gz
coinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.zip
typescript
Diffstat (limited to 'lib/auth.ts')
-rw-r--r--lib/auth.ts51
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);
+ },
+);