aboutsummaryrefslogtreecommitdiffstats
path: root/lib/auth.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/auth.js')
-rw-r--r--lib/auth.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/auth.js b/lib/auth.js
new file mode 100644
index 00000000..9720cd83
--- /dev/null
+++ b/lib/auth.js
@@ -0,0 +1,37 @@
+import fastifyPassport from "@fastify/passport";
+import { g } from "$lib/db";
+import config from "$config";
+import jwt from "passport-jwt";
+
+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))
+ throw new Error("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) => next(null, await g(`user:${payload.id}`))
+);