diff --git a/CMakeLists.txt b/CMakeLists.txt index dc1a8de..9815658 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ set(HEADERS include/directory_manager.h include/imageFile.h include/metadata_retriever.h + include/token_manager.h ) set (TAGLIB @@ -60,6 +61,9 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cpr) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/taglib) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/oatpp) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/appsettings.json ${CMAKE_BINARY_DIR}/bin/appsettings.json COPYONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/authcredentials.json ${CMAKE_BINARY_DIR}/bin/authcredentials.json COPYONLY) + add_executable(icarus ${SOURCES} ${HEADERS}) target_include_directories(icarus PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/jwt-cpp/include) target_link_libraries(icarus "-lstdc++fs" tag oatpp ${CONAN_LIBS} ${CPR_LIBRARIES}) diff --git a/authcredentials.json b/authcredentials.json new file mode 100644 index 0000000..463d848 --- /dev/null +++ b/authcredentials.json @@ -0,0 +1,6 @@ +{ + "Domain": "[domain].auth0.com", + "ApiIdentifier": "https://[identifier]/api", + "ClientId": "dfdfdfdf", + "ClientSecret": "dfdfdfdf" +} diff --git a/include/models.h b/include/models.h index dbc5c67..1b71544 100644 --- a/include/models.h +++ b/include/models.h @@ -1,6 +1,8 @@ #ifndef MODELS_H_ #define MODELS_H_ +#include + struct Song { int Id; @@ -30,6 +32,24 @@ struct LoginRes int Expiration; }; +struct loginResult +{ + int user_id; + std::string username; + std::string access_token; + std::string token_type; + std::string message; + int expiration; +}; + +struct auth_credentials +{ + std::string domain; + std::string api_identifier; + std::string client_id; + std::string client_secret; +}; + struct TokenReq { char ClientId[1024]; diff --git a/include/token_manager.h b/include/token_manager.h new file mode 100644 index 0000000..6d32217 --- /dev/null +++ b/include/token_manager.h @@ -0,0 +1,18 @@ +#ifndef TOKEN_MANAGER_H_ +#define TOKEN_MANAGER_H_ + +#include "models.h" + +class token_manager +{ +public: + token_manager(); + + loginResult retrieve_token(); + + //LoginRes* retrieve_token(TokenReq *tok); +private: + auth_credentials parse_auth_credentials(); +}; + +#endif diff --git a/src/controller/loginController.hpp b/src/controller/loginController.hpp index 3d2ff6c..7cd7683 100644 --- a/src/controller/loginController.hpp +++ b/src/controller/loginController.hpp @@ -1,18 +1,29 @@ #ifndef LOGINCONTROLLER_H_ #define LOGINCONTROLLER_H_ +#include +#include +#include + #include "oatpp/core/macro/codegen.hpp" #include "oatpp/core/macro/component.hpp" #include "oatpp/web/server/api/ApiController.hpp" #include "../dto/loginResultDto.hpp" +#include "token_manager.h" + +namespace fs = std::filesystem; class loginController : public oatpp::web::server::api::ApiController { public: - loginController(OATPP_COMPONENT(std::shared_ptr, objectMapper)) - : oatpp::web::server::api::ApiController(objectMapper) - { } + loginController(std::string p, OATPP_COMPONENT(std::shared_ptr, objectMapper)) + : oatpp::web::server::api::ApiController(objectMapper), exe_path(fs::canonical(p.c_str()).parent_path().string()) + { + std::cout << "p is " << p << std::endl; + std::cout << "working path " << exe_path.string() << std::endl; + } + #include OATPP_CODEGEN_BEGIN(ApiController) @@ -20,15 +31,19 @@ public: { OATPP_LOGI("icarus", "logging in"); + token_manager tok; + auto token = tok.retrieve_token(); + auto logRes = loginResultDto::createShared(); - logRes->access_token = "sdfsdfsdfsdert"; - logRes->token_type = "Special"; + logRes->access_token = token.access_token.c_str(); + logRes->token_type = token.token_type.c_str(); return createDtoResponse(Status::CODE_200, logRes); } #include OATPP_CODEGEN_END(ApiController) private: + fs::path exe_path; }; #endif diff --git a/src/main.cpp b/src/main.cpp index 741ed6c..68ea3b4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,7 @@ #include +#include #include +#include #include "oatpp/network/server/Server.hpp" #include "oatpp/network/server/SimpleTCPConnectionProvider.hpp" @@ -9,7 +11,9 @@ #include "controller/loginController.hpp" //#include "loginHandler.hpp" -void run() +namespace fs = std::filesystem; + +void run(const std::string& working_path) { appComponent component; @@ -17,7 +21,7 @@ void run() OATPP_COMPONENT(std::shared_ptr, router); //router->route("GET", "/test", std::make_shared()); - auto logController = std::make_shared(); + auto logController = std::make_shared(working_path); logController->addEndpointsToRouter(router); OATPP_COMPONENT(std::shared_ptr, connectionHandler); @@ -31,11 +35,14 @@ void run() server.run(); } + int main(int argc, char **argv) { oatpp::base::Environment::init(); + std::string working_path = argv[0]; + //std::cout << fs::canonical(fs::path(working_path.c_str())).parent_path().string() << std::endl; - run(); + run(working_path); oatpp::base::Environment::destroy(); diff --git a/src/token_manager.cpp b/src/token_manager.cpp index 7162920..e529fd7 100644 --- a/src/token_manager.cpp +++ b/src/token_manager.cpp @@ -1,18 +1,48 @@ #include +#include #include +#include #include #include #include -#include "models.h" +//#include "models.h" +#include "token_manager.h" + +namespace fs = std::filesystem; + +//extern "C" +//{ -extern "C" +token_manager::token_manager() { +} +loginResult token_manager::retrieve_token() +{ + auto cred = parse_auth_credentials(); -LoginRes* retrieve_token(TokenReq *tok) + loginResult lr; + lr.access_token = "dsfdsf"; + lr.token_type = "demo"; + + return lr; +} + +auth_credentials token_manager::parse_auth_credentials() +{ + auth_credentials auth; + //auto ss = working_path.string(); + //auto path = fs::canonical(fs::path(".")); + //std::cout << "canonical path " << path.string() << std::endl; + + return auth; +} + +/** +LoginRes* token_manager::retrieve_token(TokenReq *tok) { LoginRes *res = new LoginRes; @@ -38,4 +68,5 @@ LoginRes* retrieve_token(TokenReq *tok) return res; } -} +*/ +//}