diff --git a/auth/auth.mts b/auth/auth.mts index c7769f2..1aab958 100644 --- a/auth/auth.mts +++ b/auth/auth.mts @@ -1,18 +1,24 @@ import passport from 'passport' import { Strategy as localStrategy } from 'passport-local' -import { User, UserModel } from '../model/model.mjs' +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: 'email', + usernameField: 'username', passwordField: 'password' }, - async (email, password, done) => { + async (username, password, done) => { + console.log("signup auth strategy has begun") try { - const user = await UserModel.create({ email, password }) + // 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) } })) @@ -20,20 +26,23 @@ passport.use('signup', new localStrategy( passport.use('login', new localStrategy( { - usernameField: "email", + usernameField: "username", passwordField: "password", session: false }, async (email, password, done) => { console.log("local strategy called") try { - const user: User = await UserModel.findOne({ email }) + // 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) { + if (!user || returnedUser.length === 0) { return done(null, false, { message: "user not found" }) } - const validate: boolean = await user.isValidPassword(password) + // const validate: boolean = await user.isValidPassword(password) + const validate: boolean = await pwdIsValid(password, user) console.log(`isValidPassword? ${validate}`) if (!validate) { diff --git a/db.mts b/db.mts index 481a1bf..9d54b89 100644 --- a/db.mts +++ b/db.mts @@ -16,6 +16,13 @@ export const testDb = knex({ useNullAsDefault: true }) +export const userDb = knex({ + client: "sqlite3", + connection: { + filename: "./users" + }, + useNullAsDefault: true +}) diff --git a/index.mts b/index.mts index 98905b8..f717fc6 100644 --- a/index.mts +++ b/index.mts @@ -2,8 +2,7 @@ import express from "express" import mongoose from "mongoose" import passport from "passport" import bodyParser from "body-parser" - -import { UserModel } from "./model/model.mjs" +import { db } from "./db.mjs" import { default as routes } from "./routes/routes.mjs" import { default as secureRoute } from "./routes/secure-routes.mjs" import "./auth/auth.mjs" diff --git a/model/model.mts b/model/model.mts index 5856ae1..8bcf0c9 100644 --- a/model/model.mts +++ b/model/model.mts @@ -37,5 +37,17 @@ export interface User { export const UserModel = mongoose.model("user", UserSchema) +export interface User { + username: string; + password: string; +} + +export async function encryptPwd(pwd: string) { + return Promise.resolve(bcrypt.hash(pwd, 10)) +} + +export async function pwdIsValid(pwd: string, user: User): Promise { + return Promise.resolve(bcrypt.compare(pwd, user.password)) +} diff --git a/package.json b/package.json index d355175..1db63ca 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "typescript": "^5.4.5" }, "dependencies": { + "@types/knex": "^0.16.1", "bcrypt": "^5.1.1", "body-parser": "^1.20.2", "express": "^4.19.2", @@ -28,6 +29,7 @@ "mongoose": "^8.4.0", "passport": "^0.7.0", "passport-jwt": "^4.0.1", - "passport-local": "^1.0.0" + "passport-local": "^1.0.0", + "sqlite3": "^5.1.7" } } diff --git a/routes/routes.mts b/routes/routes.mts index 6f15649..2637bc7 100644 --- a/routes/routes.mts +++ b/routes/routes.mts @@ -32,7 +32,7 @@ router.post( async (error) => { if (error) return next(error); - const body = { _id: user._id, email: user.email }; + const body = { _id: user._id, username: user.username }; const token = jwt.sign({ user: body }, 'TOP_SECRET', { expiresIn: "20m" }); return res.json({ token }); diff --git a/submissions b/submissions index 82b7cfb..5af63f4 100644 Binary files a/submissions and b/submissions differ