From fbd7ee6d6efbaf9a605d9c14f522acfe451098d3 Mon Sep 17 00:00:00 2001 From: schlumphi Date: Mon, 16 Feb 2026 18:29:36 +0100 Subject: [PATCH 1/6] feat: getErrorMessage --- homework/password-check/validation.cpp | 5 ++++- homework/password-check/validation.hpp | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index a2f12ff3..240f8018 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -1,2 +1,5 @@ #include "validation.hpp" -// TODO: Put implementations here \ No newline at end of file + +auto getErrorMessage(const ErrorCode error) -> std::string_view { + return error_messages.at(error); +} diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index 85160868..dfa9cdab 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -1,2 +1,22 @@ -// TODO: I'm empty :) Put enum and function headers here. -// Don't forget the header guard - #pragma once \ No newline at end of file +#pragma once +#include +#include + +enum class ErrorCode { + Ok, + PasswordNeedsAtLeastNineCharacters, + PasswordNeedsAtLeastOneNumber, + PasswordNeedsAtLeastOneSpecialCharacter, + PasswordNeedsAtLeastOneUppercaseLetter, + PasswordsDoNotMatch +}; + +inline const std::map error_messages{ + {ErrorCode::Ok, "Ok"}, + {ErrorCode::PasswordNeedsAtLeastNineCharacters, "Password needs to have at least nine characters"}, + {ErrorCode::PasswordNeedsAtLeastOneNumber, "Password needs to have at least one number"}, + {ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter, "Password needs to have at least one special character"}, + {ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter, "Password needs to have at least one uppercase letter"}, + {ErrorCode::PasswordsDoNotMatch, "Passwords do not match"}}; + +auto getErrorMessage(const ErrorCode error) -> std::string; From aaf55ed5e090f7753b6ecf043c41c06b6b35bb46 Mon Sep 17 00:00:00 2001 From: schlumphi Date: Mon, 16 Feb 2026 18:30:40 +0100 Subject: [PATCH 2/6] fix: getErrorMessage return type --- homework/password-check/validation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index dfa9cdab..d8878c89 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -19,4 +19,4 @@ inline const std::map error_messages{ {ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter, "Password needs to have at least one uppercase letter"}, {ErrorCode::PasswordsDoNotMatch, "Passwords do not match"}}; -auto getErrorMessage(const ErrorCode error) -> std::string; +auto getErrorMessage(const ErrorCode error) -> std::string_view; From 67e83f9dc37b4f7dbf7e4024bd52321f5df206a8 Mon Sep 17 00:00:00 2001 From: schlumphi Date: Mon, 16 Feb 2026 18:35:53 +0100 Subject: [PATCH 3/6] feat: doPasswordsMatch --- homework/password-check/validation.cpp | 4 ++++ homework/password-check/validation.hpp | 2 ++ 2 files changed, 6 insertions(+) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index 240f8018..736b5594 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -3,3 +3,7 @@ auto getErrorMessage(const ErrorCode error) -> std::string_view { return error_messages.at(error); } + +auto doPasswordsMatch(std::string_view lhs, std::string_view rhs) -> bool { + return lhs.compare(rhs); +} diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index d8878c89..f2eada9c 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -20,3 +20,5 @@ inline const std::map error_messages{ {ErrorCode::PasswordsDoNotMatch, "Passwords do not match"}}; auto getErrorMessage(const ErrorCode error) -> std::string_view; + +auto doPasswordsMatch(std::string_view lhs, std::string_view rhs) -> bool; From abf96b66375334c9ee3c7d362663ea71848508f1 Mon Sep 17 00:00:00 2001 From: schlumphi Date: Mon, 16 Feb 2026 19:03:08 +0100 Subject: [PATCH 4/6] feat: checkPasswordRules --- homework/password-check/validation.cpp | 27 ++++++++++++++++++++++++++ homework/password-check/validation.hpp | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index 736b5594..3bf7d96c 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -1,4 +1,6 @@ #include "validation.hpp" +#include +#include auto getErrorMessage(const ErrorCode error) -> std::string_view { return error_messages.at(error); @@ -7,3 +9,28 @@ auto getErrorMessage(const ErrorCode error) -> std::string_view { auto doPasswordsMatch(std::string_view lhs, std::string_view rhs) -> bool { return lhs.compare(rhs); } + +auto checkPasswordRules(std::string_view password) -> ErrorCode { + if (password.size() < MIN_PASSWORD_LEN) { + return ErrorCode::PasswordNeedsAtLeastNineCharacters; + } + if (std::none_of(password.begin(), password.end(), [](unsigned char c) { return std::isdigit(c); })) { + return ErrorCode::PasswordNeedsAtLeastOneNumber; + } + if (std::none_of(password.begin(), password.end(), [](unsigned char c) { return std::ispunct(c); })) { + return ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter; + } + if (std::none_of(password.begin(), password.end(), [](unsigned char c) { return std::isupper(c); })) { + return ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter; + } + return ErrorCode::Ok; +} + +enum class ErrorCode { + Ok, + PasswordNeedsAtLeastNineCharacters, + PasswordNeedsAtLeastOneNumber, + PasswordNeedsAtLeastOneSpecialCharacter, + PasswordNeedsAtLeastOneUppercaseLetter, + PasswordsDoNotMatch +}; \ No newline at end of file diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index f2eada9c..d34717ef 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -11,6 +11,8 @@ enum class ErrorCode { PasswordsDoNotMatch }; +inline constexpr size_t MIN_PASSWORD_LEN = 9; + inline const std::map error_messages{ {ErrorCode::Ok, "Ok"}, {ErrorCode::PasswordNeedsAtLeastNineCharacters, "Password needs to have at least nine characters"}, @@ -22,3 +24,5 @@ inline const std::map error_messages{ auto getErrorMessage(const ErrorCode error) -> std::string_view; auto doPasswordsMatch(std::string_view lhs, std::string_view rhs) -> bool; + +auto checkPasswordRules(std::string_view password) -> ErrorCode; From d59aa49f353b62c5ed09c2f27aba2dd850d7d11f Mon Sep 17 00:00:00 2001 From: schlumphi Date: Mon, 16 Feb 2026 19:07:44 +0100 Subject: [PATCH 5/6] feat: checkPassword --- homework/password-check/validation.cpp | 15 +++++++-------- homework/password-check/validation.hpp | 2 ++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index 3bf7d96c..df61e8b1 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -26,11 +26,10 @@ auto checkPasswordRules(std::string_view password) -> ErrorCode { return ErrorCode::Ok; } -enum class ErrorCode { - Ok, - PasswordNeedsAtLeastNineCharacters, - PasswordNeedsAtLeastOneNumber, - PasswordNeedsAtLeastOneSpecialCharacter, - PasswordNeedsAtLeastOneUppercaseLetter, - PasswordsDoNotMatch -}; \ No newline at end of file +auto checkPassword(std::string_view lhs, std::string_view rhs) -> ErrorCode { + if (doPasswordsMatch(lhs, rhs)) { + return checkPasswordRules(lhs); + } else { + return ErrorCode::PasswordsDoNotMatch; + } +} diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index d34717ef..a3402b8f 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -26,3 +26,5 @@ auto getErrorMessage(const ErrorCode error) -> std::string_view; auto doPasswordsMatch(std::string_view lhs, std::string_view rhs) -> bool; auto checkPasswordRules(std::string_view password) -> ErrorCode; + +auto checkPassword(std::string_view lhs, std::string_view rhs) -> ErrorCode; From 3d2a759f67ac4a521380fb63f348bbc814fc5986 Mon Sep 17 00:00:00 2001 From: schlumphi Date: Mon, 16 Feb 2026 19:10:50 +0100 Subject: [PATCH 6/6] fix: passwords comparision --- homework/password-check/validation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index df61e8b1..2fac7086 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -7,7 +7,7 @@ auto getErrorMessage(const ErrorCode error) -> std::string_view { } auto doPasswordsMatch(std::string_view lhs, std::string_view rhs) -> bool { - return lhs.compare(rhs); + return lhs == rhs; } auto checkPasswordRules(std::string_view password) -> ErrorCode {