import passport from 'passport' import { Strategy as localStrategy } from 'passport-local' import { User, UserModel } from '../model/model.mjs' import { Strategy as JWTstrategy, ExtractJwt } from 'passport-jwt' passport.use('signup', new localStrategy( { usernameField: 'email', passwordField: 'password' }, async (email, password, done) => { try { const user = await UserModel.create({ email, password }) return done(null, user) } catch (err) { done(err) } })) passport.use('login', new localStrategy( { usernameField: "email", passwordField: "password", session: false }, async (email, password, done) => { console.log("local strategy called") try { const user: User = await UserModel.findOne({ email }) console.log(`user: ${user}`) if (!user) { return done(null, false, { message: "user not found" }) } const validate: boolean = await user.isValidPassword(password) 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) } } ) )