Compare commits
	
		
			2 Commits
		
	
	
		
			ce215a4efb
			...
			31409fd99d
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						31409fd99d | |
| 
							
							
								
								 | 
						d867ecf5b1 | 
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
node_modules/
 | 
			
		||||
package-lock.json
 | 
			
		||||
dist
 | 
			
		||||
dist/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<User> = 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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								db.mts
								
								
								
								
							
							
						
						
									
										7
									
								
								db.mts
								
								
								
								
							| 
						 | 
				
			
			@ -16,6 +16,13 @@ export const testDb = knex({
 | 
			
		|||
	useNullAsDefault: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
export const userDb = knex({
 | 
			
		||||
	client: "sqlite3",
 | 
			
		||||
	connection: {
 | 
			
		||||
		filename: "./users"
 | 
			
		||||
	},
 | 
			
		||||
	useNullAsDefault: true
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<boolean> {
 | 
			
		||||
	return Promise.resolve(bcrypt.compare(pwd, user.password))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								submissions
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								submissions
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue