import passport from 'passport' import { Strategy as localStrategy } from 'passport-local' import { User, UserModel, 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 user = await UserModel.create({ email, password }) 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 { // const user: User = await UserModel.findOne({ email }) let returnedUser: Array = await userDb("users").select("username", "password").where({ username: email }) const user: User = returnedUser[0] console.log(`user: ${user}`) if (!user || returnedUser.length === 0) { return done(null, false, { message: "user not found" }) } // const validate: boolean = await user.isValidPassword(password) const validate: boolean = 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) } } ) )