Compare commits
	
		
			2 Commits
		
	
	
		
			ce215a4efb
			...
			31409fd99d
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						31409fd99d | |
| 
							
							
								
								 | 
						d867ecf5b1 | 
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
node_modules/
 | 
					node_modules/
 | 
				
			||||||
package-lock.json
 | 
					package-lock.json
 | 
				
			||||||
dist
 | 
					dist/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,18 +1,24 @@
 | 
				
			||||||
import passport from 'passport'
 | 
					import passport from 'passport'
 | 
				
			||||||
import { Strategy as localStrategy } from 'passport-local'
 | 
					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 { Strategy as JWTstrategy, ExtractJwt } from 'passport-jwt'
 | 
				
			||||||
 | 
					import { userDb } from '../db.mjs'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
passport.use('signup', new localStrategy(
 | 
					passport.use('signup', new localStrategy(
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		usernameField: 'email',
 | 
							usernameField: 'username',
 | 
				
			||||||
		passwordField: 'password'
 | 
							passwordField: 'password'
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	async (email, password, done) => {
 | 
						async (username, password, done) => {
 | 
				
			||||||
 | 
							console.log("signup auth strategy has begun")
 | 
				
			||||||
		try {
 | 
							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)
 | 
								return done(null, user)
 | 
				
			||||||
		} catch (err) {
 | 
							} catch (err) {
 | 
				
			||||||
 | 
								console.error(err)
 | 
				
			||||||
			done(err)
 | 
								done(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}))
 | 
						}))
 | 
				
			||||||
| 
						 | 
					@ -20,20 +26,23 @@ passport.use('signup', new localStrategy(
 | 
				
			||||||
passport.use('login',
 | 
					passport.use('login',
 | 
				
			||||||
	new localStrategy(
 | 
						new localStrategy(
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			usernameField: "email",
 | 
								usernameField: "username",
 | 
				
			||||||
			passwordField: "password",
 | 
								passwordField: "password",
 | 
				
			||||||
			session: false
 | 
								session: false
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		async (email, password, done) => {
 | 
							async (email, password, done) => {
 | 
				
			||||||
			console.log("local strategy called")
 | 
								console.log("local strategy called")
 | 
				
			||||||
			try {
 | 
								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}`)
 | 
									console.log(`user: ${user}`)
 | 
				
			||||||
				if (!user) {
 | 
									if (!user || returnedUser.length === 0) {
 | 
				
			||||||
					return done(null, false, { message: "user not found" })
 | 
										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}`)
 | 
									console.log(`isValidPassword? ${validate}`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!validate) {
 | 
									if (!validate) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								db.mts
								
								
								
								
							
							
						
						
									
										7
									
								
								db.mts
								
								
								
								
							| 
						 | 
					@ -16,6 +16,13 @@ export const testDb = knex({
 | 
				
			||||||
	useNullAsDefault: true
 | 
						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 mongoose from "mongoose"
 | 
				
			||||||
import passport from "passport"
 | 
					import passport from "passport"
 | 
				
			||||||
import bodyParser from "body-parser"
 | 
					import bodyParser from "body-parser"
 | 
				
			||||||
 | 
					import { db } from "./db.mjs"
 | 
				
			||||||
import { UserModel } from "./model/model.mjs"
 | 
					 | 
				
			||||||
import { default as routes } from "./routes/routes.mjs"
 | 
					import { default as routes } from "./routes/routes.mjs"
 | 
				
			||||||
import { default as secureRoute } from "./routes/secure-routes.mjs"
 | 
					import { default as secureRoute } from "./routes/secure-routes.mjs"
 | 
				
			||||||
import "./auth/auth.mjs"
 | 
					import "./auth/auth.mjs"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,5 +37,17 @@ export interface User {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const UserModel = mongoose.model("user", UserSchema)
 | 
					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"
 | 
					    "typescript": "^5.4.5"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "@types/knex": "^0.16.1",
 | 
				
			||||||
    "bcrypt": "^5.1.1",
 | 
					    "bcrypt": "^5.1.1",
 | 
				
			||||||
    "body-parser": "^1.20.2",
 | 
					    "body-parser": "^1.20.2",
 | 
				
			||||||
    "express": "^4.19.2",
 | 
					    "express": "^4.19.2",
 | 
				
			||||||
| 
						 | 
					@ -28,6 +29,7 @@
 | 
				
			||||||
    "mongoose": "^8.4.0",
 | 
					    "mongoose": "^8.4.0",
 | 
				
			||||||
    "passport": "^0.7.0",
 | 
					    "passport": "^0.7.0",
 | 
				
			||||||
    "passport-jwt": "^4.0.1",
 | 
					    "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) => {
 | 
											async (error) => {
 | 
				
			||||||
							if (error) return next(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" });
 | 
												const token = jwt.sign({ user: body }, 'TOP_SECRET', { expiresIn: "20m" });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							return res.json({ token });
 | 
												return res.json({ token });
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								submissions
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								submissions
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue