diff --git a/homework/password-check/validation.cpp b/homework/password-check/validation.cpp index a2f12ff3..f10d44bd 100644 --- a/homework/password-check/validation.cpp +++ b/homework/password-check/validation.cpp @@ -1,2 +1,69 @@ +#include #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 to have at least nine characters"; + case ErrorCode::PasswordNeedsAtLeastOneNumber: + return "Password needs to have at least one number"; + case ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter: + return "Password needs to have at least one special character"; + case ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter: + return "Password needs to have at least one uppercase letter"; + case ErrorCode::PasswordsDoNotMatch: + return "Passwords do not match"; + } + return "-1"; +} + +bool doPasswordsMatch(std::string p1, std::string p2) { + if (p1.empty() and p2.empty()) { + return true; + } + if (p1.empty() or p2.empty()) { + return false; + } + if (!p1.compare(p2)) { + return true; + } else { + return false; + } +} + +ErrorCode checkPasswordRules(std::string p) { + if (p.length() < 9) { + return ErrorCode::PasswordNeedsAtLeastNineCharacters; + } else if (!std::any_of(p.begin(), p.end(), ::isdigit)) { + return ErrorCode::PasswordNeedsAtLeastOneNumber; + } else if (std::all_of(p.begin(), p.end(), ::isalnum)) { + return ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter; + } else if (!std::any_of(p.begin(), p.end(), ::isupper)) { + return ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter; + } else { + return ErrorCode::Ok; + } + + // int max = 6; + // int min = 2; + // int randNum = rand() % (max - min + 1) + min; + + // ErrorCode forRandomPurpose[] = { + // ErrorCode::Ok, ErrorCode::PasswordNeedsAtLeastNineCharacters, + // ErrorCode::PasswordNeedsAtLeastOneNumber, + // ErrorCode::PasswordNeedsAtLeastOneSpecialCharacter, + // ErrorCode::PasswordNeedsAtLeastOneUppercaseLetter}; + // ErrorCode randomError = forRandomPurpose[randNum]; + // return randomError; +} + +ErrorCode checkPassword(std::string p1, std::string p2) { + if (doPasswordsMatch(p1, p2)) { + return checkPasswordRules(p1); + } else { + return ErrorCode::PasswordsDoNotMatch; + } +} diff --git a/homework/password-check/validation.hpp b/homework/password-check/validation.hpp index 85160868..373b9155 100644 --- a/homework/password-check/validation.hpp +++ b/homework/password-check/validation.hpp @@ -1,2 +1,14 @@ -// 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 + +enum class ErrorCode { Ok = 2, + PasswordNeedsAtLeastNineCharacters = 3, + PasswordNeedsAtLeastOneNumber = 4, + PasswordNeedsAtLeastOneSpecialCharacter = 5, + PasswordNeedsAtLeastOneUppercaseLetter = 6, + PasswordsDoNotMatch = 7 }; + +std::string getErrorMessage(ErrorCode code); +bool doPasswordsMatch(std::string p1, std::string p2); +ErrorCode checkPasswordRules(std::string p); +ErrorCode checkPassword(std::string p1, std::string p2);