sub-manager-backend/auth/auth.mjs

81 lines
2.1 KiB
JavaScript

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);
}
},
),
);