Implement password validation and update user model roles

This commit is contained in:
Isuru Bimsara
2026-08-15 00:24:36 +05:30
parent 81d0e65686
commit ef8db0988b
3 changed files with 58 additions and 22 deletions
+26 -9
View File
@@ -11,6 +11,7 @@
const db = require("../models");
const { hashPassword } = require("../utils/hashPassword.util");
const { validatePassword } = require("../utils/validation/validatePassword.util");
const { generateUserId, generateId } = require("../utils/idGen.util");
const { logActivity } = require("../services/activity.service");
const { sendMail } = require("../utils/mail.util");
@@ -26,15 +27,10 @@ exports.createNewUser = async (req, res) => {
firstName,
lastName,
email,
role,
roleID,
password,
accountType,
department,
} = req.body;
const hashedPassword = await hashPassword(process.env.DEFAULT_PASSWORD);
const userID = generateUserId();
const userExists = await User.findOne({ where: { email } });
if (userExists) {
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(
{
id: userID,
@@ -53,12 +72,10 @@ exports.createNewUser = async (req, res) => {
email,
password: hashedPassword,
accountType,
role,
roleID: roleID || "N/A",
department: department || null,
},
{ transaction },
);
const newProfile = await Profile.create(
{
+1 -13
View File
@@ -36,20 +36,8 @@ module.exports = (sequelize, DataTypes) => {
allowNull: false
},
accountType: {
type: DataTypes.ENUM("admin", "management", "team_head", "user"),
type: DataTypes.ENUM("user", "admin", "superadmin", "manager", "business_customer", "rider", "customer","support_agent"),
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,
};