import passport from "passport"; import { Strategy as localStrategy } from "passport-local"; import { encryptPwd, pwdIsValid } from "../model/model.mjs"; import { Strategy as JWTstrategy, ExtractJwt } from "passport-jwt"; import { userDb } from "../db.mjs"; passport.use( "signup", new localStrategy( { usernameField: "username", passwordField: "password", }, async (username, password, done) => { console.log("signup auth strategy has begun"); try { const encryptedPwd = await encryptPwd(password); const user = await userDb("users") .insert({ username: username, password: encryptedPwd }) .returning(["username", "password"]); console.log(`user: ${user}`); return done(null, user); } catch (err) { console.error(err); done(err); } }, ), ); passport.use( "login", new localStrategy( { usernameField: "username", passwordField: "password", session: false, }, async (email, password, done) => { console.log("local strategy called"); try { let returnedUser = await userDb("users") .select("username", "password") .where({ username: email }); const user = returnedUser[0]; console.log(`user: ${user}`); if (!user || returnedUser.length === 0) { return done(null, false, { message: "user not found" }); } const validate = await pwdIsValid(password, user); console.log(`isValidPassword? ${validate}`); if (!validate) { return done(null, false, { message: "wrong password" }); } return done(null, user, { message: "logged in successfully" }); } catch (error) { return done(error); } }, ), ); passport.use( new JWTstrategy( { secretOrKey: "TOP_SECRET", jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme("secret_token"), }, async (token, done) => { try { return done(null, token.user); } catch (error) { done(error); } }, ), );