diff --git a/CMakeLists.txt b/CMakeLists.txt index f0ed330..660e793 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,9 @@ add_executable(App ./src/main.cpp ./src/endpoints_handlers/IExecutor.h ./src/endpoints_handlers/AuthRegistrationExecutor.h ./src/endpoints_handlers/RootExecutor.h + src/DAO/IAuthDAO.h + src/DAO/MemoryAuthDAO.cpp + src/DAO/MemoryAuthDAO.h ) target_link_libraries(App PRIVATE Boost::boost Boost::json Threads::Threads mysql::concpp) diff --git a/src/DAO/IAuthDAO.h b/src/DAO/IAuthDAO.h new file mode 100644 index 0000000..eccea50 --- /dev/null +++ b/src/DAO/IAuthDAO.h @@ -0,0 +1,21 @@ +#pragma once + +#include + + +#include "../entities/User.h" + +namespace uad +{ +class IAuthDAO +{ +public: + virtual std::string Login(const std::string& registrated_user_uuid) = 0; + + virtual bool HasAuthorizedUser(const std::string& auth_token) = 0; + + virtual bool Logout(const std::string& user_token) = 0; + + virtual ~IAuthDAO() = default; +}; +} diff --git a/src/DAO/IUserDAO.h b/src/DAO/IUserDAO.h index 51b576c..991ff8c 100644 --- a/src/DAO/IUserDAO.h +++ b/src/DAO/IUserDAO.h @@ -1,7 +1,8 @@ +#pragma once + #include #include #include -#pragma once #include "../entities/User.h" diff --git a/src/DAO/MemoryAuthDAO.cpp b/src/DAO/MemoryAuthDAO.cpp new file mode 100644 index 0000000..b6aaa44 --- /dev/null +++ b/src/DAO/MemoryAuthDAO.cpp @@ -0,0 +1,41 @@ +#include + +#include "MemoryAuthDAO.h" + +using namespace std; + +namespace uad +{ +MemoryAuthDAO::MemoryAuthDAO(mysqlx::Session& session): session_(session) +{ +} + +std::string MemoryAuthDAO::Login(const std::string& registrated_user_uuid) +{ + boost::uuids::random_generator generator; + boost::uuids::uuid uuid = generator(); + std::string auth_token = boost::uuids::to_string(uuid); + + users_uuids_to_auth_tokens_[registrated_user_uuid] = auth_token; + auth_tokens_to_users_uuids_[auth_token] = registrated_user_uuid; + + return auth_token; +} + +bool MemoryAuthDAO::HasAuthorizedUser(const std::string& auth_token) +{ + return auth_tokens_to_users_uuids_.count(auth_token) > 0; +} + +bool MemoryAuthDAO::Logout(const std::string& auth_token) +{ + string user_uuid = auth_tokens_to_users_uuids_[auth_token]; + + if (!HasAuthorizedUser()) return false; + + users_uuids_to_auth_tokens_.erase(user_uuid); + auth_tokens_to_users_uuids_.erase(auth_token); + + return true; +} +} diff --git a/src/DAO/MemoryAuthDAO.h b/src/DAO/MemoryAuthDAO.h new file mode 100644 index 0000000..919350d --- /dev/null +++ b/src/DAO/MemoryAuthDAO.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include +#include + +#include + +#include "IAuthDAO.h" + +namespace uad +{ +class MemoryAuthDAO : public uad::IAuthDAO +{ + std::unordered_map users_uuids_to_auth_tokens_; + std::unordered_map auth_tokens_to_users_uuids_; + + mysqlx::Session& session_; +public: + explicit MemoryAuthDAO(mysqlx::Session& session); + + std::string Login(const std::string& registrated_user_uuid) override; + + bool HasAuthorizedUser(const std::string& auth_token) override; + + bool Logout(const std::string& auth_token) override; +}; +}