diff --git a/public/js/va-client-register.js b/public/js/va-client-register.js index 7c330b2..2ac5308 100644 --- a/public/js/va-client-register.js +++ b/public/js/va-client-register.js @@ -767,7 +767,7 @@ async function submitForm() { nextStep(6); setTimeout(() => { - window.location.href = '/client/login'; + window.location.href = '/'; }, 1000); } else { // Handle server errors diff --git a/src/controllers/client/vaClient.controller.js b/src/controllers/client/vaClient.controller.js index 1547e84..4bd8cb1 100644 --- a/src/controllers/client/vaClient.controller.js +++ b/src/controllers/client/vaClient.controller.js @@ -175,7 +175,7 @@ async function update_client(req, res) { return res.status(500).json({ success: false, - message: "Internal Server Error" + message: error.message }); } } diff --git a/src/controllers/client/vaClientLogin.controller.js b/src/controllers/client/vaClientLogin.controller.js index 466fcea..577ca99 100644 --- a/src/controllers/client/vaClientLogin.controller.js +++ b/src/controllers/client/vaClientLogin.controller.js @@ -1,6 +1,7 @@ import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; -import { ClientModel } from "../../models/vaModel.js"; +import { ClientModel, VAModel } from "../../models/vaModel.js"; +import { va_timesheet_adjustment_function } from "../va/vaTimesheetAdjustment/vaTimesheetAdjustment.controller.js"; // Login VA async function va_login_client(req, res) { @@ -13,8 +14,17 @@ async function va_login_client(req, res) { return res.status(400).json({ success: false, message: "Please provide email and password" }); } + let isVa = false; + // Find user by email - const user = await ClientModel.findOne({ "userDetails.email": userDetails.email }); + let user = await ClientModel.findOne({ "userDetails.email": userDetails.email }); + const vaUser = await VAModel.findOne({ "userDetails.email": userDetails.email }); + + if (vaUser) { + isVa = true + user = vaUser + } + if (!user) { return res.status(404).json({ success: false, message: "Invalid credentials" }); } @@ -49,6 +59,7 @@ async function va_login_client(req, res) { id: user._id, email: user.userDetails.email, name: user.userDetails.firstName, + userType: isVa ? "VA" : "CLIENT", }, process.env.JWT_SECRET_REFRESH_TOKEN || "DocTrackerSecretKeyRefreshToken", { expiresIn: "30d" } @@ -69,6 +80,7 @@ async function va_login_client(req, res) { name: user.userDetails.firstName, email: user.userDetails.email, }, + userType: isVa ? "VA" : "CLIENT", }); } catch (error) { console.error("va_client_login_register error:", error); diff --git a/src/controllers/project/deleteProjectSf.controller.js b/src/controllers/project/deleteProjectSf.controller.js index c3c6e39..7713e8d 100644 --- a/src/controllers/project/deleteProjectSf.controller.js +++ b/src/controllers/project/deleteProjectSf.controller.js @@ -56,7 +56,7 @@ async function delete_project_sf(req, res) { // 2. Remove project from all assigned VAs' projectIds arrays if (vaAssigned.length > 0) { const vaResult = await VAModel.updateMany( - { _id: { $in: vaAssigned } }, + { _id: { $in: vaAssigned.vaId } }, { $pull: { projectIds: projectObjectId } } ); deletionSummary.vasUpdated = vaResult.modifiedCount; diff --git a/src/controllers/va/vaProfile/vaProfileUpdate.controller.js b/src/controllers/va/vaProfile/vaProfileUpdate.controller.js index 743f5d5..0b220e5 100644 --- a/src/controllers/va/vaProfile/vaProfileUpdate.controller.js +++ b/src/controllers/va/vaProfile/vaProfileUpdate.controller.js @@ -5,7 +5,7 @@ import { VAModel } from "../../../models/vaModel.js"; // Register a new VA async function va_profile_update_callback(req, res) { try { - const sf_token = req.headers.sf_token; + const sf_token = req.headers["x-auth-token"]; const accessToken = req.headers.token; let vaUser; diff --git a/src/controllers/va/vaProjects/vaProjectReport.controller.js b/src/controllers/va/vaProjects/vaProjectReport.controller.js index 13c7a34..d266aad 100644 --- a/src/controllers/va/vaProjects/vaProjectReport.controller.js +++ b/src/controllers/va/vaProjects/vaProjectReport.controller.js @@ -11,7 +11,7 @@ function formatHMS(ms) { async function va_projects_report_function(req, res) { try { - const sf_token = req.headers.sf_token; + const sf_token = req.headers["x-auth-token"]; let vaId; let vaUser; let vaEmail; diff --git a/src/controllers/va/vaTimesheetAdjustment/vaTimesheetAdjustmentSummary.controller.js b/src/controllers/va/vaTimesheetAdjustment/vaTimesheetAdjustmentSummary.controller.js index f75d5e8..a2f0665 100644 --- a/src/controllers/va/vaTimesheetAdjustment/vaTimesheetAdjustmentSummary.controller.js +++ b/src/controllers/va/vaTimesheetAdjustment/vaTimesheetAdjustmentSummary.controller.js @@ -3,7 +3,7 @@ import { VAModel, ProjectModel, LoggedModel } from "../../../models/vaModel.js"; async function va_timesheet_summary_function(req, res) { try { - const sf_token = req.headers.sf_token; + const sf_token = req.headers["x-auth-token"]; let vaId; let vaUser; let vaEmail; diff --git a/src/controllers/va/vaTips/vaTipsManage.controller.js b/src/controllers/va/vaTips/vaTipsManage.controller.js index 29db442..bcaf10b 100644 --- a/src/controllers/va/vaTips/vaTipsManage.controller.js +++ b/src/controllers/va/vaTips/vaTipsManage.controller.js @@ -28,7 +28,7 @@ async function va_tips_manage_function(req, res) { const createdTip = await TipsModel.create(newTip); const salesforceUrl = `${process.env.SF_DOCTRACKER_API_URL}services/apexrest/docva/api/va-tips`; - + const sfData = { "id": createdTip._id.toString(), "vaId": createdTip.vaId.toString(), diff --git a/src/middlewares/auth.middleware.js b/src/middlewares/auth.middleware.js index a287ed1..604d159 100644 --- a/src/middlewares/auth.middleware.js +++ b/src/middlewares/auth.middleware.js @@ -4,7 +4,7 @@ import logger from "../config/logger.js"; async function authValidator(req, res, next) { try { - const sf_token = req.headers.sf_token; + const sf_token = req.headers["x-auth-token"]; if (sf_token) { const { vaId } = req.params; if(vaId) req.body.vaId = vaId; @@ -51,7 +51,7 @@ async function authValidator(req, res, next) { async function clientAuthValidator(req, res, next) { try { - const sf_token = req.headers.sf_token; + const sf_token = req.headers["x-auth-token"]; if (sf_token) { next(); diff --git a/src/server.js b/src/server.js index b604314..0e75ebc 100644 --- a/src/server.js +++ b/src/server.js @@ -121,6 +121,7 @@ app.get('/health', (req, res) => { app.get("/client/login", (req, res) => { res.render("client_login") }) + app.get("/client/forgot-password", (req, res) => { res.render("forgot_password") }) @@ -498,11 +499,19 @@ io.on("connection", (socket) => { }); +app.get("/", (req, res) => { + res.render("client_login") +}) + +app.get("/forgot-password", (req, res) => { + res.render("forgot_password") +}) + app.get("/heath", () => { - if(Math.round(Math.random()) === 1) { - return res.status(200).json({"success": true, "message": "Server is Healthy"}) + if (Math.round(Math.random()) === 1) { + return res.status(200).json({ "success": true, "message": "Server is Healthy" }) } else { - return res.status(403).json({"success": false, "message": "Server is not Healthy"}) + return res.status(403).json({ "success": false, "message": "Server is not Healthy" }) } }) diff --git a/src/services/passwordReset.service.js b/src/services/passwordReset.service.js index cd76f6a..84d814f 100644 --- a/src/services/passwordReset.service.js +++ b/src/services/passwordReset.service.js @@ -63,7 +63,7 @@ class PasswordResetService { logger.info(`Password reset token created for ${userType}: ${email}`); return { success: true, - message: "If the email exists, a reset link has been sent" + message: "Email sent successfully. Please check your inbox." }; } catch (error) { diff --git a/views/auth/reset-password-error.ejs b/views/auth/reset-password-error.ejs index 2a61feb..950ea6b 100644 --- a/views/auth/reset-password-error.ejs +++ b/views/auth/reset-password-error.ejs @@ -18,7 +18,7 @@ if (userType === 'client') { forgotPasswordUrl = '/client/forgot-password'; - loginUrl = '/client/login'; + loginUrl = '/'; } %> Request New Reset Link diff --git a/views/auth/reset-password-form.ejs b/views/auth/reset-password-form.ejs index 8ca134f..cc703b3 100644 --- a/views/auth/reset-password-form.ejs +++ b/views/auth/reset-password-form.ejs @@ -36,7 +36,7 @@ <% let backToLoginUrl = `${process.env.FRONTEND_URL}/login`; if (userType === 'client') { - backToLoginUrl = '/client/login'; + backToLoginUrl = '/'; } %> Back to Login diff --git a/views/auth/reset-password-success.ejs b/views/auth/reset-password-success.ejs index 67676f3..310674e 100644 --- a/views/auth/reset-password-success.ejs +++ b/views/auth/reset-password-success.ejs @@ -15,7 +15,7 @@ <% let loginUrl = `${process.env.FRONTEND_URL}/login`; if (userType === 'client') { - loginUrl = '/client/login'; + loginUrl = '/'; } %> Go to Login diff --git a/views/client/dashboard-dashboard.ejs b/views/client/dashboard-dashboard.ejs index e637a04..a4d2eed 100644 --- a/views/client/dashboard-dashboard.ejs +++ b/views/client/dashboard-dashboard.ejs @@ -252,7 +252,7 @@ async function fetchWithAuth(url, options = {}) { const token = getAuthToken(); if (!token) { - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -268,7 +268,7 @@ if (response.status === 401) { localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -287,7 +287,7 @@ // Clear local storage and redirect localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; } } diff --git a/views/client/dashboard-manage-va-tips.ejs b/views/client/dashboard-manage-va-tips.ejs index edc9e67..14f9b4d 100644 --- a/views/client/dashboard-manage-va-tips.ejs +++ b/views/client/dashboard-manage-va-tips.ejs @@ -245,7 +245,7 @@ async function fetchWithAuth(url, options = {}) { const token = getAuthToken(); if (!token) { - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -263,7 +263,7 @@ if (response.status === 401) { localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -282,7 +282,7 @@ // Clear local storage and redirect localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; } } diff --git a/views/client/dashboard-profile.ejs b/views/client/dashboard-profile.ejs index 4355b94..8dcb40b 100644 --- a/views/client/dashboard-profile.ejs +++ b/views/client/dashboard-profile.ejs @@ -234,7 +234,7 @@ async function fetchWithAuth(url, options = {}) { const token = getAuthToken(); if (!token) { - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -250,7 +250,7 @@ if (response.status === 401) { localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -265,7 +265,7 @@ } finally { localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; } } diff --git a/views/client/dashboard-projects.ejs b/views/client/dashboard-projects.ejs index 85edc3b..1d32550 100644 --- a/views/client/dashboard-projects.ejs +++ b/views/client/dashboard-projects.ejs @@ -216,7 +216,7 @@ async function fetchWithAuth(url, options = {}) { const token = getAuthToken(); if (!token) { - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -232,7 +232,7 @@ if (response.status === 401) { localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -251,7 +251,7 @@ // Clear local storage and redirect localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; } } diff --git a/views/client/dashboard-virtual-assistants.ejs b/views/client/dashboard-virtual-assistants.ejs index 732dbc0..f72466c 100644 --- a/views/client/dashboard-virtual-assistants.ejs +++ b/views/client/dashboard-virtual-assistants.ejs @@ -253,7 +253,7 @@ async function fetchWithAuth(url, options = {}) { const token = getAuthToken(); if (!token) { - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -269,7 +269,7 @@ if (response.status === 401) { localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; return; } @@ -288,7 +288,7 @@ // Clear local storage and redirect localStorage.removeItem('knoptpq'); localStorage.removeItem('refreshToken'); - window.location.href = '/client/login'; + window.location.href = '/'; } } diff --git a/views/client_login.ejs b/views/client_login.ejs index f0587f8..d56945b 100644 --- a/views/client_login.ejs +++ b/views/client_login.ejs @@ -222,7 +222,7 @@
@@ -181,7 +181,7 @@ if (response.ok) { if(response.success) { if(confirm('Please Check your mail inbox for password reset link')) { - window.location.href = "/client/login"; // Redirect to reset password page + window.location.href = "/"; // Redirect to reset password page // console.log(response) } } else { diff --git a/views/va_live_tracker.ejs b/views/va_live_tracker.ejs index 80e4916..471dc26 100644 --- a/views/va_live_tracker.ejs +++ b/views/va_live_tracker.ejs @@ -275,7 +275,7 @@ socket.on("authError", () => { socket.disconnect(); localStorage.removeItem("knoptpq"); - window.location.href = "/client/login"; + window.location.href = "/"; }); /* Receive images */