From cc887b9bc0a3ae8145d3a2f32481bf9e176586fa Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Tue, 19 May 2026 17:44:38 +0530 Subject: [PATCH] Implement Change Password CUS003: Implement change password functionality 1. Connected Controller::changePassword() with AuthenticationManagementService password update logic. 2. Added password validation before updating the user password. 3. Added logged-in user check before allowing password changes. 4. Implemented password update logic in AuthenticationManagementService. 5. Added change password flow in CustomerMenu to collect new password input and trigger password update. 6. Added success message display after password is changed successfully. Change password functionality validation Precondition: 1. System is running. 2. A registered user exists in the data store. 3. User is logged in and customer menu is active. Steps: 1. Launch the application and log in with valid credentials. 2. Select the Change Password option from the customer menu. 3. Enter a new password. - Verify that the entered password is validated. 4. If the password is valid, complete the password change. - Verify that the new password is saved successfully. - Verify that the message "Password changed successfully" is displayed. Sreeja Reghukumar, please review --- .../controllers/Controller.cpp | 1 + .../controllers/Controller.h | 3 +++ .../services/AuthenticationManagementService.cpp | 11 +++++++++++ .../views/CustomerMenu.cpp | 14 ++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp index d536e8a..931def8 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp @@ -11,6 +11,7 @@ void Controller::logout() void Controller::changePassword(const std::string& newPassword) { + m_authenticationManagementService.changePassword(newPassword); } void Controller::createCustomer(const std::string& username, const std::string& password, const std::string& email, const std::string& phone) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h index 3aabb58..0333e80 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h @@ -2,6 +2,7 @@ #include "Map.h" #include #include "Enums.h" +#include "AuthenticationManagementService.h" class Service; class ComboPackage; @@ -14,6 +15,8 @@ class Notification; class Controller { +private: + AuthenticationManagementService m_authenticationManagementService; public: bool login(const std::string& username, const std::string& password); void logout(); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/AuthenticationManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/AuthenticationManagementService.cpp index ca07fee..4251c95 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/AuthenticationManagementService.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/AuthenticationManagementService.cpp @@ -1,3 +1,14 @@ +#include #include "AuthenticationManagementService.h" +#include "User.h" User* AuthenticationManagementService::m_authenticatedUser = nullptr; + +void AuthenticationManagementService::changePassword(const std::string& newPassword) +{ + if (m_authenticatedUser == nullptr) + { + throw std::runtime_error("There is no user currently logged in!"); + } + m_authenticatedUser->setPassword(newPassword); +} diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp index 047f471..b4cbd8b 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp @@ -1,6 +1,7 @@ #include "CustomerMenu.h" #include "InputHelper.h" #include "OutputHelper.h" +#include "Validator.h" void CustomerMenu::showMenu() { @@ -37,6 +38,19 @@ void CustomerMenu::logout() void CustomerMenu::changePassword() { + std::string newPassword; + util::clear(); + std::cout << "Enter new password: "; + util::read(newPassword); + m_controller.changePassword(newPassword); + if (!util::isPasswordValid(newPassword)) + { + std::cout << "Error: Password is not strong enough!"; + util::pressEnter(); + return; + } + std::cout << "Password changed successfully"; + util::pressEnter(); } void CustomerMenu::updateDetails()