1 #include "BasicRequestAuthentication.h"
4 #include "RequestAuthenticationBase.h"
6 namespace Odb::Lib::App
8 BasicRequestAuthentication::BasicRequestAuthentication(
bool disableAuthentication)
9 : RequestAuthenticationBase(disableAuthentication)
13 crow::response BasicRequestAuthentication::AuthenticateRequest(
const crow::request& req)
15 auto resp = RequestAuthenticationBase::AuthenticateRequest(req);
16 if (resp.code != crow::status::OK)
18 const auto& authHeader = req.get_header_value(AUTHORIZATION_HEADER_NAME);
19 if (authHeader.empty())
return crow::response(crow::status::UNAUTHORIZED,
"Unauthorized");
21 auto authValue = authHeader.substr(6);
22 if (authValue.empty())
return crow::response(crow::status::UNAUTHORIZED,
"Unauthorized");
24 auto authValueDecoded = crow::utility::base64decode(authValue, authValue.size());
25 if (authValueDecoded.empty())
return crow::response(crow::status::UNAUTHORIZED,
"Unauthorized");
27 auto seperatorPos = authValueDecoded.find(
':');
28 if (seperatorPos == std::string::npos)
return crow::response(crow::status::UNAUTHORIZED,
"Unauthorized");
30 auto username = authValueDecoded.substr(0, seperatorPos);
31 auto password = authValueDecoded.substr(seperatorPos + 1);
33 resp = VerifyCredentials(username, password);
38 crow::response BasicRequestAuthentication::VerifyCredentials(
const std::string& username,
const std::string& password)
41 std::string validUsername = std::getenv(USERNAME_ENV_NAME);
42 if (validUsername.empty())
45 validUsername =
"odb";
48 std::string validPassword = std::getenv(PASSWORD_ENV_NAME);
49 if (validPassword.empty())
52 validPassword =
"plusplus";
56 if (username != validUsername ||
57 password != validPassword)
59 return crow::response(crow::status::FORBIDDEN,
"Invalid username or password");
63 return crow::response(crow::status::OK,
"Authorized");