Files

73 lines
3.2 KiB
JavaScript

/***********************************************************************************************************************************************************************
* File Name: auth.validator.js
* Type of Program: Validator
* Description: express-validator rule chains for authentication endpoints.
* - registerValidator → POST /auth/register
* - loginValidator → POST /auth/login
* - verifyOTPValidator → POST /auth/verify-otp
* - resendOTPValidator → POST /auth/resend-otp
* - changePassValidator → POST /auth/change-password
* - forgotPasswordValidator → POST /auth/forgot-password
* - verifyResetOTPValidator → POST /auth/verify-reset-otp
* - resetPasswordValidator → POST /auth/reset-password
* Author: rgrgogu
* Date Created: Oct. 6, 2025
* Date Modified: Jul. 4, 2026 — forgot/reset password (Kenneth Obsequio)
***********************************************************************************************************************************************************************/
const { body } = require('express-validator');
const registerValidator = [
body('email').isEmail().withMessage('Valid email is required.'),
body('password')
.isLength({ min: 8 })
.withMessage('Password must be at least 8 characters.')
.matches(/[A-Z]/).withMessage('Password must contain an uppercase letter.')
.matches(/[0-9]/).withMessage('Password must contain a number.'),
];
const loginValidator = [
body('email').isEmail().withMessage('Valid email is required.'),
body('password').notEmpty().withMessage('Password is required.'),
body('group_code').optional().isString().trim(),
];
const verifyOTPValidator = [
body('email').isEmail(),
body('otp').isLength({ min: 6, max: 6 }).isNumeric().withMessage('OTP must be 6 digits.'),
];
const resendOTPValidator = [
body('email').isEmail().withMessage('Valid email is required.'),
];
const changePassValidator = [
body('current_password').notEmpty().withMessage('Current password is required.'),
body('new_password')
.isLength({ min: 8 }).withMessage('New password must be at least 8 characters.')
.matches(/[A-Z]/).withMessage('Must contain an uppercase letter.')
.matches(/[0-9]/).withMessage('Must contain a number.'),
];
const forgotPasswordValidator = [
body('email').isEmail().withMessage('Valid email is required.'),
];
const verifyResetOTPValidator = [
body('email').isEmail().withMessage('Valid email is required.'),
body('otp').isLength({ min: 6, max: 6 }).isNumeric().withMessage('OTP must be 6 digits.'),
];
const resetPasswordValidator = [
body('email').isEmail().withMessage('Valid email is required.'),
body('otp').isLength({ min: 6, max: 6 }).isNumeric().withMessage('OTP must be 6 digits.'),
body('new_password')
.isLength({ min: 8 }).withMessage('New password must be at least 8 characters.')
.matches(/[A-Z]/).withMessage('Must contain an uppercase letter.')
.matches(/[0-9]/).withMessage('Must contain a number.'),
];
module.exports = {
registerValidator, loginValidator,
verifyOTPValidator, resendOTPValidator, changePassValidator,
forgotPasswordValidator, verifyResetOTPValidator, resetPasswordValidator,
};