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 jwtSecret from "./jwtConfig";
 | 
			
		||||
 | 
			
		||||
const BCRYPT_SALT_ROUNDS = 12;
 | 
			
		||||
import { db } from "../db.mjs";
 | 
			
		||||
import logger from "../logger.mjs";
 | 
			
		||||
 | 
			
		||||
const passport = require("passport");
 | 
			
		||||
const LocalStrategy = require("passport-local").Strategy;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,35 +19,49 @@ passport.use(
 | 
			
		|||
      passReqToCallback: true,
 | 
			
		||||
      session: false,
 | 
			
		||||
    },
 | 
			
		||||
    (req, username, password, done) => {
 | 
			
		||||
    async (req, username, password, done) => {
 | 
			
		||||
      try {
 | 
			
		||||
        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);
 | 
			
		||||
            });
 | 
			
		||||
          });
 | 
			
		||||
        let user = await db("users").where({ username }).select("*");
 | 
			
		||||
        if (user.length > 0) {
 | 
			
		||||
          logger.warn("username already taken");
 | 
			
		||||
          return done(null, false, { message: "username already taken" });
 | 
			
		||||
        }
 | 
			
		||||
        user = user[0];
 | 
			
		||||
        const hashedPwd = await bcrypt.hash(password, BCRYPT_SALT_ROUNDS);
 | 
			
		||||
        const userCreated = await db("users").insert({
 | 
			
		||||
          username,
 | 
			
		||||
          password: hashedPwd,
 | 
			
		||||
        });
 | 
			
		||||
        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) {
 | 
			
		||||
        return done(err);
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -62,31 +77,51 @@ passport.use(
 | 
			
		|||
      passwordField: "password",
 | 
			
		||||
      session: false,
 | 
			
		||||
    },
 | 
			
		||||
    (username, password, done) => {
 | 
			
		||||
    async (username, password, done) => {
 | 
			
		||||
      try {
 | 
			
		||||
        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);
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
        const user = db("users").select("*").where({ username });
 | 
			
		||||
 | 
			
		||||
        if (user.length === 0) {
 | 
			
		||||
          logger.info(`username ${username} does not exist`);
 | 
			
		||||
          return done(null, false, { message: "bad username" });
 | 
			
		||||
        }
 | 
			
		||||
        user = user[0];
 | 
			
		||||
        const pwdMatch = await bcrypt.compare(password, user.password);
 | 
			
		||||
        if (pwdMatch !== true) {
 | 
			
		||||
          logger.info(`passwords do not match`);
 | 
			
		||||
          return done(null, false, { message: "passwords do not match" });
 | 
			
		||||
        }
 | 
			
		||||
        logger.info(`password found and authenticated`);
 | 
			
		||||
        return done(null, user);
 | 
			
		||||
      } catch (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 = {
 | 
			
		||||
  jwtFromRequest: ExtractJWT.fromAuthHeaderWithScheme("JWT"),
 | 
			
		||||
| 
						 | 
				
			
			@ -95,23 +130,37 @@ const opts = {
 | 
			
		|||
 | 
			
		||||
passport.use(
 | 
			
		||||
  "jwt",
 | 
			
		||||
  new JWTstrategy(opts, (jwt_payload, done) => {
 | 
			
		||||
  new JWTstrategy(opts, async (jwt_payload, done) => {
 | 
			
		||||
    try {
 | 
			
		||||
      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);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      let user = await db("users").select("*").where({ id: jwt_payload.id });
 | 
			
		||||
      if (user.length === 1) {
 | 
			
		||||
        logger.info("user found");
 | 
			
		||||
        done(null, user[0]);
 | 
			
		||||
      } else {
 | 
			
		||||
        logger.info("user not found");
 | 
			
		||||
        done(null, false);
 | 
			
		||||
      }
 | 
			
		||||
    } catch (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