From c8147daf6f76a84923a3f738f62dbdc761c6483f Mon Sep 17 00:00:00 2001 From: Pulsarnixx Date: Sun, 30 Aug 2026 13:19:01 +0200 Subject: [PATCH 1/5] Added ErrorCodes and getErrorMessage(). --- homework/password-check/validation.cpp | 41 +++++++++++++++++++++++++- homework/password-check/validation.hpp | 19 ++++++++++-- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index a2f12ff3..e2544038 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -1,2 +1,41 @@ #include "validation.hpp" -// TODO: Put implementations here \ No newline at end of file + +std::string getErrorMessage(ErrorCode code) { + switch (code) { + case ErrorCode::Ok: + return { + "Ok." + } + break; + case ErrorCode::PasswordNeedsAtLeastNineCharacters: + return { + "Password needs at least nine characters." + } + break; + case ErrorCode::PasswordNeedsAtLeastOneNumber: + return { + "Password needs at least one number." + } + break; + case ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter: + return { + "Password needs at least one special character." + } + break; + case ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter: + return { + "Password needs at least one uppercase letter." + } + break; + case ErrorCode::PasswordsDoNotMatch: + return { + "Passwords do not match." + } + break; + default: + return { + "Invalid error code." + } + break; + } +} diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index 85160868..49430b02 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -1,2 +1,17 @@ -// TODO: I'm empty :) Put enum and function headers here. -// Don't forget the header guard - #pragma once \ No newline at end of file +#ifndef VALIDATION_H +#define VALIDATION_H + +#include + +enum class ErrorCode { + Ok, + PasswordNeedsAtLeastNineCharacters, + PasswordNeedsAtLeastOneNumber, + PasswordNeedsAtLeastOneSpecialCharacter, + PasswordNeedsAtLeastOneUppercaseLetter, + PasswordsDoNotMatch +}; + +std::string getErrorMessage(ErrorCode code); + +#endif From 15b2fb5aa8c4f71f0088c2cb12a781dbef5b0e12 Mon Sep 17 00:00:00 2001 From: Pulsarnixx Date: Sun, 30 Aug 2026 13:23:33 +0200 Subject: [PATCH 2/5] Added doPasswordsMatch(). --- homework/password-check/validation.cpp | 4 ++++ homework/password-check/validation.hpp | 1 + 2 files changed, 5 insertions(+) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index e2544038..b9aa6642 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -39,3 +39,7 @@ std::string getErrorMessage(ErrorCode code) { break; } } + +bool doPasswordsMatch(const std::string& pass1, const std::string& pass2) { + return (pass1 == pass2); +} diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index 49430b02..b6b246bb 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -13,5 +13,6 @@ enum class ErrorCode { }; std::string getErrorMessage(ErrorCode code); +bool doPasswordsMatch(const std::string& pass1, const std::string& pass2); #endif From 7e2dfa19deea6f74b9c3198daf51c6d1a880b9df Mon Sep 17 00:00:00 2001 From: Pulsarnixx Date: Sun, 30 Aug 2026 13:39:40 +0200 Subject: [PATCH 3/5] Modified error messages, added checkPasswordRules. --- homework/password-check/validation.cpp | 36 ++++++++++++++++---------- homework/password-check/validation.hpp | 3 +++ 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index b9aa6642..507ec7fe 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -1,41 +1,35 @@ #include "validation.hpp" +#include std::string getErrorMessage(ErrorCode code) { switch (code) { case ErrorCode::Ok: return { - "Ok." - } + "Ok"}; break; case ErrorCode::PasswordNeedsAtLeastNineCharacters: return { - "Password needs at least nine characters." - } + "Password needs to have at least nine characters"}; break; case ErrorCode::PasswordNeedsAtLeastOneNumber: return { - "Password needs at least one number." - } + "Password needs to have at least one number"}; break; case ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter: return { - "Password needs at least one special character." - } + "Password needs to have at least one special character"}; break; case ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter: return { - "Password needs at least one uppercase letter." - } + "Password needs to have at least one uppercase letter"}; break; case ErrorCode::PasswordsDoNotMatch: return { - "Passwords do not match." - } + "Passwords do not match"}; break; default: return { - "Invalid error code." - } + "Invalid error code"}; break; } } @@ -43,3 +37,17 @@ std::string getErrorMessage(ErrorCode code) { bool doPasswordsMatch(const std::string& pass1, const std::string& pass2) { return (pass1 == pass2); } + +ErrorCode checkPasswordRules(const std::string& pass) { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> distrib(0, 5); + + const int number = distrib(gen); + + return static_cast(number); +} + +ErrorCode checkPassword(const std::string& pass1, const std::string& pass2) { + return ErrorCode::Ok; +} diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index b6b246bb..171b965d 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -14,5 +14,8 @@ enum class ErrorCode { std::string getErrorMessage(ErrorCode code); bool doPasswordsMatch(const std::string& pass1, const std::string& pass2); +ErrorCode checkPasswordRules(const std::string& pass); + +ErrorCode checkPassword(const std::string& pass1, const std::string& pass2); #endif From e819b4e641103b9352ba9e929debacd74d041703 Mon Sep 17 00:00:00 2001 From: Pulsarnixx Date: Sun, 30 Aug 2026 13:51:23 +0200 Subject: [PATCH 4/5] Finished standard password check. --- homework/password-check/validation.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index 507ec7fe..a4a555b6 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -41,7 +41,7 @@ bool doPasswordsMatch(const std::string& pass1, const std::string& pass2) { ErrorCode checkPasswordRules(const std::string& pass) { std::random_device rd; std::mt19937 gen(rd()); - std::uniform_int_distribution<> distrib(0, 5); + std::uniform_int_distribution<> distrib(0, 4); const int number = distrib(gen); @@ -49,5 +49,9 @@ ErrorCode checkPasswordRules(const std::string& pass) { } ErrorCode checkPassword(const std::string& pass1, const std::string& pass2) { - return ErrorCode::Ok; + if (doPasswordsMatch(pass1, pass2)) { + return checkPasswordRules(pass1); + } + + return ErrorCode::PasswordsDoNotMatch; } From 2c2e810352e03e7ab31d797656b76807e56ed6b9 Mon Sep 17 00:00:00 2001 From: Pulsarnixx Date: Sun, 30 Aug 2026 14:11:59 +0200 Subject: [PATCH 5/5] Added bonus exercise. --- homework/password-check/validation.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index a4a555b6..e5827130 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -1,5 +1,6 @@ #include "validation.hpp" -#include +#include +#include std::string getErrorMessage(ErrorCode code) { switch (code) { @@ -39,13 +40,23 @@ bool doPasswordsMatch(const std::string& pass1, const std::string& pass2) { } ErrorCode checkPasswordRules(const std::string& pass) { - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution<> distrib(0, 4); + if (pass.size() < 9u) { + return ErrorCode::PasswordNeedsAtLeastNineCharacters; + } + + if (std::none_of(pass.begin(), pass.end(), [](unsigned char c) { return std::isdigit(c); })) { + return ErrorCode::PasswordNeedsAtLeastOneNumber; + } - const int number = distrib(gen); + if (std::none_of(pass.begin(), pass.end(), [](unsigned char c) { return !std::isalnum(c); })) { + return ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter; + } + + if (std::none_of(pass.begin(), pass.end(), [](unsigned char c) { return std::isupper(c); })) { + return ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter; + } - return static_cast(number); + return ErrorCode::Ok; } ErrorCode checkPassword(const std::string& pass1, const std::string& pass2) {