Compare commits
	
		
			2 Commits
		
	
	
		
			da3da0c7c6
			...
			a468f037c6
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						a468f037c6 | |
| 
							
							
								
								 | 
						66aff04910 | 
| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					import jwt from "jsonwebtoken";
 | 
				
			||||||
 | 
					import passport from "passport";
 | 
				
			||||||
 | 
					import jwtSecret from "../config/jwtConfig";
 | 
				
			||||||
 | 
					import { db } from "../db.mjs";
 | 
				
			||||||
 | 
					import logger from "../logger.mjs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = (app) => {
 | 
				
			||||||
 | 
					  app.post("/loginUser", (req, res, next) => {
 | 
				
			||||||
 | 
					    passport.authenticate("login", (err, users, info) => {
 | 
				
			||||||
 | 
					      if (err) {
 | 
				
			||||||
 | 
					        logger.error(`error ${err}`);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (info !== undefined) {
 | 
				
			||||||
 | 
					        logger.error(info.message);
 | 
				
			||||||
 | 
					        if (info.message === "bad username") {
 | 
				
			||||||
 | 
					          res.status(401).send(info.message);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          res.status(403).send(info.message);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        req.logIn(users, async () => {
 | 
				
			||||||
 | 
					          let user = await db("users")
 | 
				
			||||||
 | 
					            .select("*")
 | 
				
			||||||
 | 
					            .where({ username: req.body.username });
 | 
				
			||||||
 | 
					          user = user[0];
 | 
				
			||||||
 | 
					          const token = jwt.sign({ id: user.id }, jwtSecret.secret, {
 | 
				
			||||||
 | 
					            expiresIn: 60 * 60,
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          res.status(200).send({
 | 
				
			||||||
 | 
					            auth: true,
 | 
				
			||||||
 | 
					            token,
 | 
				
			||||||
 | 
					            message: "user found & logged in",
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          // User.findOne({
 | 
				
			||||||
 | 
					          //   where: {
 | 
				
			||||||
 | 
					          //     username: req.body.username,
 | 
				
			||||||
 | 
					          //   },
 | 
				
			||||||
 | 
					          // }).then((user) => {
 | 
				
			||||||
 | 
					          //   const token = jwt.sign({ id: user.id }, jwtSecret.secret, {
 | 
				
			||||||
 | 
					          //     expiresIn: 60 * 60,
 | 
				
			||||||
 | 
					          //   });
 | 
				
			||||||
 | 
					          //   res.status(200).send({
 | 
				
			||||||
 | 
					          //     auth: true,
 | 
				
			||||||
 | 
					          //     token,
 | 
				
			||||||
 | 
					          //     message: "user found & logged in",
 | 
				
			||||||
 | 
					          //   });
 | 
				
			||||||
 | 
					          // });
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })(req, res, next);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,8 @@
 | 
				
			||||||
import bcrypt from "bcrypt";
 | 
					import bcrypt from "bcrypt";
 | 
				
			||||||
import jwtSecret from "./jwtConfig";
 | 
					import jwtSecret from "./jwtConfig";
 | 
				
			||||||
 | 
					 | 
				
			||||||
const BCRYPT_SALT_ROUNDS = 12;
 | 
					const BCRYPT_SALT_ROUNDS = 12;
 | 
				
			||||||
 | 
					import { db } from "../db.mjs";
 | 
				
			||||||
 | 
					import logger from "../logger.mjs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const passport = require("passport");
 | 
					const passport = require("passport");
 | 
				
			||||||
const LocalStrategy = require("passport-local").Strategy;
 | 
					const LocalStrategy = require("passport-local").Strategy;
 | 
				
			||||||
| 
						 | 
					@ -18,35 +19,49 @@ passport.use(
 | 
				
			||||||
      passReqToCallback: true,
 | 
					      passReqToCallback: true,
 | 
				
			||||||
      session: false,
 | 
					      session: false,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    (req, username, password, done) => {
 | 
					    async (req, username, password, done) => {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        User.findOne({
 | 
					        let user = await db("users").where({ username }).select("*");
 | 
				
			||||||
          where: {
 | 
					        if (user.length > 0) {
 | 
				
			||||||
            [Op.or]: [
 | 
					          logger.warn("username already taken");
 | 
				
			||||||
              {
 | 
					          return done(null, false, { message: "username already taken" });
 | 
				
			||||||
                username,
 | 
					 | 
				
			||||||
              },
 | 
					 | 
				
			||||||
              { email: req.body.email },
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        }).then((user) => {
 | 
					 | 
				
			||||||
          if (user != null) {
 | 
					 | 
				
			||||||
            console.log("username or email already taken");
 | 
					 | 
				
			||||||
            return done(null, false, {
 | 
					 | 
				
			||||||
              message: "username or email already taken",
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
          bcrypt.hash(password, BCRYPT_SALT_ROUNDS).then((hashedPassword) => {
 | 
					        user = user[0];
 | 
				
			||||||
            User.create({
 | 
					        const hashedPwd = await bcrypt.hash(password, BCRYPT_SALT_ROUNDS);
 | 
				
			||||||
 | 
					        const userCreated = await db("users").insert({
 | 
				
			||||||
          username,
 | 
					          username,
 | 
				
			||||||
              password: hashedPassword,
 | 
					          password: hashedPwd,
 | 
				
			||||||
              email: req.body.email,
 | 
					 | 
				
			||||||
            }).then((user) => {
 | 
					 | 
				
			||||||
              console.log("user created");
 | 
					 | 
				
			||||||
              return done(null, user);
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
          });
 | 
					 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					        logger.info(`user ${username} created`);
 | 
				
			||||||
 | 
					        return done(null, userCreated);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // User.findOne({
 | 
				
			||||||
 | 
					        //   where: {
 | 
				
			||||||
 | 
					        //     [Op.or]: [
 | 
				
			||||||
 | 
					        //       {
 | 
				
			||||||
 | 
					        //         username,
 | 
				
			||||||
 | 
					        //       },
 | 
				
			||||||
 | 
					        //       { email: req.body.email },
 | 
				
			||||||
 | 
					        //     ],
 | 
				
			||||||
 | 
					        //   },
 | 
				
			||||||
 | 
					        // }).then((user) => {
 | 
				
			||||||
 | 
					        //   if (user != null) {
 | 
				
			||||||
 | 
					        //     console.log("username or email already taken");
 | 
				
			||||||
 | 
					        //     return done(null, false, {
 | 
				
			||||||
 | 
					        //       message: "username or email already taken",
 | 
				
			||||||
 | 
					        //     });
 | 
				
			||||||
 | 
					        //   }
 | 
				
			||||||
 | 
					        //   bcrypt.hash(password, BCRYPT_SALT_ROUNDS).then((hashedPassword) => {
 | 
				
			||||||
 | 
					        //     User.create({
 | 
				
			||||||
 | 
					        //       username,
 | 
				
			||||||
 | 
					        //       password: hashedPassword,
 | 
				
			||||||
 | 
					        //       email: req.body.email,
 | 
				
			||||||
 | 
					        //     }).then((user) => {
 | 
				
			||||||
 | 
					        //       console.log("user created");
 | 
				
			||||||
 | 
					        //       return done(null, user);
 | 
				
			||||||
 | 
					        //     });
 | 
				
			||||||
 | 
					        //   });
 | 
				
			||||||
 | 
					        // });
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        return done(err);
 | 
					        return done(err);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -62,31 +77,51 @@ passport.use(
 | 
				
			||||||
      passwordField: "password",
 | 
					      passwordField: "password",
 | 
				
			||||||
      session: false,
 | 
					      session: false,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    (username, password, done) => {
 | 
					    async (username, password, done) => {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        User.findOne({
 | 
					        const user = db("users").select("*").where({ username });
 | 
				
			||||||
          where: {
 | 
					
 | 
				
			||||||
            username,
 | 
					        if (user.length === 0) {
 | 
				
			||||||
          },
 | 
					          logger.info(`username ${username} does not exist`);
 | 
				
			||||||
        }).then((user) => {
 | 
					 | 
				
			||||||
          if (user === null) {
 | 
					 | 
				
			||||||
          return done(null, false, { message: "bad username" });
 | 
					          return done(null, false, { message: "bad username" });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
          bcrypt.compare(password, user.password).then((response) => {
 | 
					        user = user[0];
 | 
				
			||||||
            if (response !== true) {
 | 
					        const pwdMatch = await bcrypt.compare(password, user.password);
 | 
				
			||||||
              console.log("passwords do not match");
 | 
					        if (pwdMatch !== true) {
 | 
				
			||||||
 | 
					          logger.info(`passwords do not match`);
 | 
				
			||||||
          return done(null, false, { message: "passwords do not match" });
 | 
					          return done(null, false, { message: "passwords do not match" });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
            console.log("user found & authenticated");
 | 
					        logger.info(`password found and authenticated`);
 | 
				
			||||||
        return done(null, user);
 | 
					        return done(null, user);
 | 
				
			||||||
          });
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        done(err);
 | 
					        done(err);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  ),
 | 
					  ),
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					// User.findOne({
 | 
				
			||||||
 | 
					//   where: {
 | 
				
			||||||
 | 
					//     username,
 | 
				
			||||||
 | 
					//   },
 | 
				
			||||||
 | 
					// }).then((user) => {
 | 
				
			||||||
 | 
					//   if (user === null) {
 | 
				
			||||||
 | 
					//     return done(null, false, { message: "bad username" });
 | 
				
			||||||
 | 
					//   }
 | 
				
			||||||
 | 
					//   bcrypt.compare(password, user.password).then((response) => {
 | 
				
			||||||
 | 
					//     if (response !== true) {
 | 
				
			||||||
 | 
					//       console.log("passwords do not match");
 | 
				
			||||||
 | 
					//       return done(null, false, { message: "passwords do not match" });
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					//     console.log("user found & authenticated");
 | 
				
			||||||
 | 
					//     return done(null, user);
 | 
				
			||||||
 | 
					//   });
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					//       } catch (err) {
 | 
				
			||||||
 | 
					//         done(err);
 | 
				
			||||||
 | 
					//       }
 | 
				
			||||||
 | 
					//     },
 | 
				
			||||||
 | 
					//   ),
 | 
				
			||||||
 | 
					// );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const opts = {
 | 
					const opts = {
 | 
				
			||||||
  jwtFromRequest: ExtractJWT.fromAuthHeaderWithScheme("JWT"),
 | 
					  jwtFromRequest: ExtractJWT.fromAuthHeaderWithScheme("JWT"),
 | 
				
			||||||
| 
						 | 
					@ -95,23 +130,37 @@ const opts = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
passport.use(
 | 
					passport.use(
 | 
				
			||||||
  "jwt",
 | 
					  "jwt",
 | 
				
			||||||
  new JWTstrategy(opts, (jwt_payload, done) => {
 | 
					  new JWTstrategy(opts, async (jwt_payload, done) => {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      User.findOne({
 | 
					      let user = await db("users").select("*").where({ id: jwt_payload.id });
 | 
				
			||||||
        where: {
 | 
					      if (user.length === 1) {
 | 
				
			||||||
          id: jwt_payload.id,
 | 
					        logger.info("user found");
 | 
				
			||||||
        },
 | 
					        done(null, user[0]);
 | 
				
			||||||
      }).then((user) => {
 | 
					 | 
				
			||||||
        if (user) {
 | 
					 | 
				
			||||||
          console.log("user found in db in passport");
 | 
					 | 
				
			||||||
          done(null, user);
 | 
					 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
          console.log("user not found in db");
 | 
					        logger.info("user not found");
 | 
				
			||||||
        done(null, false);
 | 
					        done(null, false);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    } catch (err) {
 | 
					    } catch (err) {
 | 
				
			||||||
      done(err);
 | 
					      done(err);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }),
 | 
					  }),
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// User.findOne({
 | 
				
			||||||
 | 
					//   where: {
 | 
				
			||||||
 | 
					//     id: jwt_payload.id,
 | 
				
			||||||
 | 
					//   },
 | 
				
			||||||
 | 
					// }).then((user) => {
 | 
				
			||||||
 | 
					//   if (user) {
 | 
				
			||||||
 | 
					//     console.log("user found in db in passport");
 | 
				
			||||||
 | 
					//     done(null, user);
 | 
				
			||||||
 | 
					//   } else {
 | 
				
			||||||
 | 
					//     console.log("user not found in db");
 | 
				
			||||||
 | 
					//     done(null, false);
 | 
				
			||||||
 | 
					//   }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					//     } catch (err) {
 | 
				
			||||||
 | 
					//       done(err);
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					//   }),
 | 
				
			||||||
 | 
					// );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								submissions
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								submissions
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue