Auth #1
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
const db = require("../models");
|
const db = require("../models");
|
||||||
const { hashPassword } = require("../utils/hashPassword.util");
|
const { hashPassword } = require("../utils/hashPassword.util");
|
||||||
|
const { validatePassword } = require("../utils/validation/validatePassword.util");
|
||||||
const { generateUserId, generateId } = require("../utils/idGen.util");
|
const { generateUserId, generateId } = require("../utils/idGen.util");
|
||||||
const { logActivity } = require("../services/activity.service");
|
const { logActivity } = require("../services/activity.service");
|
||||||
const { sendMail } = require("../utils/mail.util");
|
const { sendMail } = require("../utils/mail.util");
|
||||||
@@ -26,15 +27,10 @@ exports.createNewUser = async (req, res) => {
|
|||||||
firstName,
|
firstName,
|
||||||
lastName,
|
lastName,
|
||||||
email,
|
email,
|
||||||
role,
|
password,
|
||||||
roleID,
|
|
||||||
accountType,
|
accountType,
|
||||||
department,
|
|
||||||
} = req.body;
|
} = req.body;
|
||||||
|
|
||||||
const hashedPassword = await hashPassword(process.env.DEFAULT_PASSWORD);
|
|
||||||
const userID = generateUserId();
|
|
||||||
|
|
||||||
const userExists = await User.findOne({ where: { email } });
|
const userExists = await User.findOne({ where: { email } });
|
||||||
if (userExists) {
|
if (userExists) {
|
||||||
await transaction.rollback();
|
await transaction.rollback();
|
||||||
@@ -45,6 +41,29 @@ exports.createNewUser = async (req, res) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let pass;
|
||||||
|
|
||||||
|
if(accountType === "admin" || accountType === "superadmin" || accountType === "manager" || accountType === "support_agent") {
|
||||||
|
pass = process.env.DEFAULT_PASSWORD;
|
||||||
|
}else{
|
||||||
|
pass = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
const validatePasswordResult = validatePassword(pass);
|
||||||
|
|
||||||
|
if (!validatePasswordResult) {
|
||||||
|
await transaction.rollback();
|
||||||
|
return res.status(400).send({
|
||||||
|
success: false,
|
||||||
|
message: "Password does not meet the required criteria",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const hashedPassword = await hashPassword(pass);
|
||||||
|
const userID = generateUserId();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const newUser = await User.create(
|
const newUser = await User.create(
|
||||||
{
|
{
|
||||||
id: userID,
|
id: userID,
|
||||||
@@ -53,13 +72,11 @@ exports.createNewUser = async (req, res) => {
|
|||||||
email,
|
email,
|
||||||
password: hashedPassword,
|
password: hashedPassword,
|
||||||
accountType,
|
accountType,
|
||||||
role,
|
|
||||||
roleID: roleID || "N/A",
|
|
||||||
department: department || null,
|
|
||||||
},
|
},
|
||||||
{ transaction },
|
{ transaction },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
const newProfile = await Profile.create(
|
const newProfile = await Profile.create(
|
||||||
{
|
{
|
||||||
profile_id: generateId(),
|
profile_id: generateId(),
|
||||||
|
|||||||
@@ -36,20 +36,8 @@ module.exports = (sequelize, DataTypes) => {
|
|||||||
allowNull: false
|
allowNull: false
|
||||||
},
|
},
|
||||||
accountType: {
|
accountType: {
|
||||||
type: DataTypes.ENUM("admin", "management", "team_head", "user"),
|
type: DataTypes.ENUM("user", "admin", "superadmin", "manager", "business_customer", "rider", "customer","support_agent"),
|
||||||
defaultValue: "user"
|
defaultValue: "user"
|
||||||
},
|
|
||||||
role: {
|
|
||||||
type: DataTypes.STRING,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
roleID:{
|
|
||||||
type: DataTypes.STRING,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
department: {
|
|
||||||
type: DataTypes.STRING,
|
|
||||||
allowNull: true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
const validatePassword = (password) => {
|
||||||
|
// Check if password is a string
|
||||||
|
if (typeof password !== "string") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// At least 1 uppercase letter
|
||||||
|
const hasUppercase = /[A-Z]/.test(password);
|
||||||
|
|
||||||
|
// At least 1 lowercase letter
|
||||||
|
const hasLowercase = /[a-z]/.test(password);
|
||||||
|
|
||||||
|
// At least 1 symbol
|
||||||
|
const hasSymbol = /[^A-Za-z0-9]/.test(password);
|
||||||
|
|
||||||
|
// At least 4 numbers
|
||||||
|
const numberCount = (password.match(/[0-9]/g) || []).length;
|
||||||
|
|
||||||
|
const hasFourNumbers = numberCount >= 4;
|
||||||
|
|
||||||
|
return (
|
||||||
|
hasUppercase &&
|
||||||
|
hasLowercase &&
|
||||||
|
hasSymbol &&
|
||||||
|
hasFourNumbers
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
validatePassword,
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user