Added Controller namespace

This commit is contained in:
kdeng00
2019-09-01 16:16:06 -04:00
parent f75ebe14a7
commit 1ec3511bc5
17 changed files with 305 additions and 202 deletions
+32 -31
View File
@@ -12,42 +12,43 @@
#include "../dto/loginResultDto.hpp"
#include "managers/token_manager.h"
class loginController : public oatpp::web::server::api::ApiController
namespace Controller
{
public:
loginController(std::string p, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
: oatpp::web::server::api::ApiController(objectMapper), exe_path(p)
{ }
loginController(const Model::BinaryPath& bConf, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
:oatpp::web::server::api::ApiController(objectMapper), m_bConf(bConf)
{ }
#include OATPP_CODEGEN_BEGIN(ApiController)
ENDPOINT("POST", "/api/v1/login", data, BODY_DTO(userDto::ObjectWrapper, usr))
class loginController : public oatpp::web::server::api::ApiController
{
OATPP_LOGI("icarus", "logging in");
public:
loginController(std::string p, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
: oatpp::web::server::api::ApiController(objectMapper), exe_path(p)
{ }
loginController(const Model::BinaryPath& bConf, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
:oatpp::web::server::api::ApiController(objectMapper), m_bConf(bConf)
{ }
Manager::token_manager tok;
//auto token = tok.retrieve_token(exe_path);
auto token = tok.retrieve_token(bconf);
auto logRes = loginResultDto::createShared();
logRes->id = 0; // TODO: change this later on to something meaningful
logRes->username = usr->username->c_str();
logRes->token = token.access_token.c_str();
logRes->token_type = token.token_type.c_str();
logRes->expiration = token.expiration;
logRes->message = "Successful";
#include OATPP_CODEGEN_BEGIN(ApiController)
ENDPOINT("POST", "/api/v1/login", data, BODY_DTO(userDto::ObjectWrapper, usr)) {
OATPP_LOGI("icarus", "logging in");
return createDtoResponse(Status::CODE_200, logRes);
}
Manager::token_manager tok;
//auto token = tok.retrieve_token(exe_path);
auto token = tok.retrieve_token(m_bConf);
#include OATPP_CODEGEN_END(ApiController)
private:
std::string exe_path;
Model::BinaryPath m_bConf;
};
auto logRes = loginResultDto::createShared();
logRes->id = 0; // TODO: change this later on to something meaningful
logRes->username = usr->username->c_str();
logRes->token = token.access_token.c_str();
logRes->token_type = token.token_type.c_str();
logRes->expiration = token.expiration;
logRes->message = "Successful";
return createDtoResponse(Status::CODE_200, logRes);
}
#include OATPP_CODEGEN_END(ApiController)
private:
std::string exe_path;
Model::BinaryPath m_bConf;
};
}
#endif
+119 -112
View File
@@ -27,65 +27,98 @@
namespace fs = std::filesystem;
class songController : public oatpp::web::server::api::ApiController
namespace Controller
{
public:
songController(std::string p, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
: oatpp::web::server::api::ApiController(objectMapper), m_exe_path(p)
{ }
#include OATPP_CODEGEN_BEGIN(ApiController)
// endpoint for uploading a song
ENDPOINT("POST", "/api/v1/song/data", songUpload,
REQUEST(std::shared_ptr<IncomingRequest>, request))
class songController : public oatpp::web::server::api::ApiController
{
auto authHeader = request->getHeader("Authorization");
public:
songController(std::string p, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
: oatpp::web::server::api::ApiController(objectMapper), m_exe_path(p)
{ }
OATPP_ASSERT_HTTP(authHeader, Status::CODE_403, "Nope");
songController(const Model::BinaryPath& bConf, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
: oatpp::web::server::api::ApiController(objectMapper), m_bConf(bConf)
{ }
auto auth = authHeader->std_str();
Manager::token_manager tok;
OATPP_ASSERT_HTTP(tok.is_token_valid(auth, Scope::upload), Status::CODE_403, "Not allowed");
#include OATPP_CODEGEN_BEGIN(ApiController)
auto mp = std::make_shared<oatpp::web::mime::multipart::Multipart>(request->getHeaders());
oatpp::web::mime::multipart::Reader mp_reader(mp.get());
mp_reader.setPartReader("file", oatpp::web::mime::multipart::createInMemoryPartReader(m_dataSize));
request->transferBody(&mp_reader);
auto file = mp->getNamedPart("file");
OATPP_ASSERT_HTTP(file, Status::CODE_400, "file is null");
auto buff = std::unique_ptr<char>(new char[file->getKnownSize()]);
auto buffSize = file->getInputStream()->read(buff.get(), file->getKnownSize());
std::vector<unsigned char> data(buff.get(), buff.get() + buffSize);
Model::Song sng;
sng.data = std::move(data);
Manager::song_manager s_mgr(m_exe_path);
s_mgr.saveSong(sng);
return createResponse(Status::CODE_200, "OK");
}
// endpoint for retrieving all song records in json format
ENDPOINT("GET", "/api/v1/song", songRecords,
// endpoint for uploading a song
ENDPOINT("POST", "/api/v1/song/data", songUpload,
REQUEST(std::shared_ptr<IncomingRequest>, request))
{
std::cout << "starting process of retrieving songs" << std::endl;
Database::songRepository songRepo(m_exe_path);
auto songsDb = songRepo.retrieveRecords();
auto songs = oatpp::data::mapping::type::List<songDto::ObjectWrapper>::createShared();
{
auto authHeader = request->getHeader("Authorization");
OATPP_ASSERT_HTTP(authHeader, Status::CODE_403, "Nope");
auto auth = authHeader->std_str();
Manager::token_manager tok;
OATPP_ASSERT_HTTP(tok.is_token_valid(auth, Scope::upload), Status::CODE_403, "Not allowed");
auto mp = std::make_shared<oatpp::web::mime::multipart::Multipart>(request->getHeaders());
oatpp::web::mime::multipart::Reader mp_reader(mp.get());
mp_reader.setPartReader("file", oatpp::web::mime::multipart::createInMemoryPartReader(m_dataSize));
request->transferBody(&mp_reader);
auto file = mp->getNamedPart("file");
OATPP_ASSERT_HTTP(file, Status::CODE_400, "file is null");
auto buff = std::unique_ptr<char>(new char[file->getKnownSize()]);
auto buffSize = file->getInputStream()->read(buff.get(), file->getKnownSize());
std::vector<unsigned char> data(buff.get(), buff.get() + buffSize);
Model::Song sng;
sng.data = std::move(data);
Manager::song_manager s_mgr(m_bConf);
s_mgr.saveSong(sng);
return createResponse(Status::CODE_200, "OK");
}
// endpoint for retrieving all song records in json format
ENDPOINT("GET", "/api/v1/song", songRecords,
REQUEST(std::shared_ptr<IncomingRequest>, request))
{
std::cout << "starting process of retrieving songs" << std::endl;
Database::songRepository songRepo(m_bConf);
auto songsDb = songRepo.retrieveRecords();
auto songs = oatpp::data::mapping::type::List<songDto::ObjectWrapper>::createShared();
std::cout << "creating object to send" << std::endl;
for (auto& songDb : songsDb) {
auto song = songDto::createShared();
song->id = songDb.id;
song->title = songDb.title.c_str();
song->artist = songDb.artist.c_str();
song->album = songDb.album.c_str();
song->genre = songDb.genre.c_str();
song->year = songDb.year;
song->duration = songDb.duration;
song->track = songDb.track;
song->disc = songDb.disc;
songs->pushBack(song);
}
return createDtoResponse(Status::CODE_200, songs);
}
// endpoint for retrieving song record by the song id in json format
ENDPOINT("GET", "/api/v1/song/{id}", songRecord,
PATH(Int32, id)) {
Database::songRepository songRepo(m_bConf);
Model::Song songDb;
songDb.id = id;
songDb = songRepo.retrieveRecord(songDb, songFilter::id);
std::cout << "creating object to send" << std::endl;
for (auto& songDb : songsDb) {
auto song = songDto::createShared();
song->id = songDb.id;
song->title = songDb.title.c_str();
@@ -97,80 +130,54 @@ public:
song->track = songDb.track;
song->disc = songDb.disc;
songs->pushBack(song);
return createDtoResponse(Status::CODE_200, song);
}
return createDtoResponse(Status::CODE_200, songs);
}
// endpoint for retrieving song record by the song id in json format
ENDPOINT("GET", "/api/v1/song/{id}", songRecord,
ENDPOINT("GET", "/api/v1/song/data/{id}", downloadSong,
PATH(Int32, id)) {
Database::songRepository songRepo(m_exe_path);
Model::Song songDb;
songDb.id = id;
Database::songRepository songRepo(m_bConf);
Model::Song songDb;
songDb.id = id;
songDb = songRepo.retrieveRecord(songDb, songFilter::id);
songDb = songRepo.retrieveRecord(songDb, songFilter::id);
std::ifstream fl(songDb.songPath.c_str(), std::ios::in | std::ios::binary | std::ios::ate);
fl.seekg(0);
auto song = songDto::createShared();
song->id = songDb.id;
song->title = songDb.title.c_str();
song->artist = songDb.artist.c_str();
song->album = songDb.album.c_str();
song->genre = songDb.genre.c_str();
song->year = songDb.year;
song->duration = songDb.duration;
song->track = songDb.track;
song->disc = songDb.disc;
std::stringstream buf;
std::copy(std::istreambuf_iterator<char>(fl),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(buf));
fl.close();
return createDtoResponse(Status::CODE_200, song);
}
ENDPOINT("GET", "/api/v1/song/data/{id}", downloadSong,
PATH(Int32, id)) {
Database::songRepository songRepo(m_exe_path);
Model::Song songDb;
songDb.id = id;
songDb = songRepo.retrieveRecord(songDb, songFilter::id);
std::ifstream fl(songDb.songPath.c_str(), std::ios::in | std::ios::binary | std::ios::ate);
fl.seekg(0);
std::stringstream buf;
std::copy(std::istreambuf_iterator<char>(fl),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(buf));
fl.close();
auto rawSong = std::make_shared<oatpp::String>(oatpp::String(buf.str().data(), (v_int32)buf.str().size(), true));
auto rawSong = std::make_shared<oatpp::String>(oatpp::String(buf.str().data(), (v_int32)buf.str().size(), true));
auto response = createResponse(Status::CODE_200, *rawSong);
response->putHeader(Header::CONTENT_TYPE, "audio/mpeg");
auto response = createResponse(Status::CODE_200, *rawSong);
response->putHeader(Header::CONTENT_TYPE, "audio/mpeg");
return response;
}
return response;
}
// TODO: create endpoint for updating songs
// TODO: create endpoint for updating songs
ENDPOINT("DELETE", "api/v1/song/data/{id}", songDelete, PATH(Int32, id)) {
ENDPOINT("DELETE", "api/v1/song/data/{id}", songDelete, PATH(Int32, id)) {
Model::Song song;
song.id = id;
Model::Song song;
song.id = id;
Manager::song_manager sngMgr(m_exe_path);
sngMgr.deleteSong(song);
Manager::song_manager sngMgr(m_bConf);
sngMgr.deleteSong(song);
return createResponse(Status::CODE_200, "OK");
}
return createResponse(Status::CODE_200, "OK");
}
// TODO: create endpoint for streaming songs
#include OATPP_CODEGEN_END(ApiController)
private:
std::string m_exe_path;
const long m_dataSize = std::numeric_limits<long long int>::max();
};
// TODO: create endpoint for streaming songs
#include OATPP_CODEGEN_END(ApiController)
private:
std::string m_exe_path;
Model::BinaryPath m_bConf;
const long m_dataSize = std::numeric_limits<long long int>::max();
};
}
#endif
+19 -6
View File
@@ -6,15 +6,19 @@
#include "managers/directory_manager.h"
base_repository::base_repository()
Database::base_repository::base_repository()
{ }
base_repository::base_repository(const std::string& path) : path(path)
Database::base_repository::base_repository(const std::string& path) : path(path)
{
intitalizeDetails();
}
Database::base_repository::base_repository(const Model::BinaryPath& bConf)
{
initializeDetails(bConf);
}
MYSQL* base_repository::setup_mysql_connection()
MYSQL* Database::base_repository::setup_mysql_connection()
{
MYSQL *conn = mysql_init(nullptr);
@@ -25,7 +29,7 @@ MYSQL* base_repository::setup_mysql_connection()
return conn;
}
MYSQL* base_repository::setup_mysql_connection(Model::database_connection details)
MYSQL* Database::base_repository::setup_mysql_connection(Model::database_connection details)
{
MYSQL *connection = mysql_init(NULL);
@@ -37,7 +41,7 @@ MYSQL* base_repository::setup_mysql_connection(Model::database_connection detail
return connection;
}
MYSQL_RES* base_repository::perform_mysql_query(MYSQL *conn, const std::string& query)
MYSQL_RES* Database::base_repository::perform_mysql_query(MYSQL *conn, const std::string& query)
{
// send the query to the database
if (mysql_query(conn, query.c_str()))
@@ -49,7 +53,7 @@ MYSQL_RES* base_repository::perform_mysql_query(MYSQL *conn, const std::string&
return mysql_use_result(conn);
}
void base_repository::intitalizeDetails()
void Database::base_repository::intitalizeDetails()
{
auto databaseConfig = Manager::directory_manager::databaseConfigContent(path);
@@ -58,3 +62,12 @@ void base_repository::intitalizeDetails()
details.server = databaseConfig["server"].get<std::string>();
details.username = databaseConfig["username"].get<std::string>();
}
void Database::base_repository::initializeDetails(const Model::BinaryPath& bConf)
{
auto databaseConfig = Manager::directory_manager::databaseConfigContent(bConf);
details.database = databaseConfig["database"].get<std::string>();
details.server = databaseConfig["server"].get<std::string>();
details.username = databaseConfig["username"].get<std::string>();
details.password = databaseConfig["password"].get<std::string>();
}
+8 -5
View File
@@ -5,10 +5,13 @@
#include <sstream>
#include <cstring>
coverArtRepository::coverArtRepository(const std::string& path) : base_repository(path)
Database::coverArtRepository::coverArtRepository(const std::string& path) : base_repository(path)
{ }
Model::Cover coverArtRepository::retrieveRecord(Model::Cover& cov, coverFilter filter = coverFilter::id)
Database::coverArtRepository::coverArtRepository(const Model::BinaryPath& bConf) : base_repository(bConf)
{ }
Model::Cover Database::coverArtRepository::retrieveRecord(Model::Cover& cov, coverFilter filter = coverFilter::id)
{
std::stringstream qry;
auto conn = setup_mysql_connection();
@@ -45,7 +48,7 @@ Model::Cover coverArtRepository::retrieveRecord(Model::Cover& cov, coverFilter f
return covDb;
}
void coverArtRepository::deleteRecord(const Model::Cover& cov)
void Database::coverArtRepository::deleteRecord(const Model::Cover& cov)
{
auto conn = setup_mysql_connection();
const std::string query("DELETE FROM CoverArt WHERE CoverArtId = " + std::to_string(cov.id));
@@ -55,7 +58,7 @@ void coverArtRepository::deleteRecord(const Model::Cover& cov)
mysql_close(conn);
}
void coverArtRepository::saveRecord(const Model::Cover& cov)
void Database::coverArtRepository::saveRecord(const Model::Cover& cov)
{
auto conn = setup_mysql_connection();
@@ -93,7 +96,7 @@ void coverArtRepository::saveRecord(const Model::Cover& cov)
std::cout << "done" << std::endl;
}
Model::Cover coverArtRepository::parseRecord(MYSQL_RES *results)
Model::Cover Database::coverArtRepository::parseRecord(MYSQL_RES *results)
{
std::cout << "parsing record" << std::endl;
Model::Cover cov;
+10 -7
View File
@@ -7,10 +7,13 @@
#include "types/songFilter.h"
songRepository::songRepository(const std::string& path) : base_repository(path)
Database::songRepository::songRepository(const std::string& path) : base_repository(path)
{ }
std::vector<Model::Song> songRepository::retrieveRecords()
Database::songRepository::songRepository(const Model::BinaryPath& bConf) : base_repository(bConf)
{ }
std::vector<Model::Song> Database::songRepository::retrieveRecords()
{
auto conn = setup_mysql_connection();
const std::string query = "SELECT * FROM Song";
@@ -24,7 +27,7 @@ std::vector<Model::Song> songRepository::retrieveRecords()
return songs;
}
Model::Song songRepository::retrieveRecord(Model::Song& song, songFilter filter)
Model::Song Database::songRepository::retrieveRecord(Model::Song& song, songFilter filter)
{
std::stringstream qry;
auto conn = setup_mysql_connection();
@@ -57,7 +60,7 @@ Model::Song songRepository::retrieveRecord(Model::Song& song, songFilter filter)
return song;
}
void songRepository::deleteRecord(const Model::Song& song)
void Database::songRepository::deleteRecord(const Model::Song& song)
{
auto conn = setup_mysql_connection();
auto status = 0;
@@ -69,7 +72,7 @@ void songRepository::deleteRecord(const Model::Song& song)
mysql_close(conn);
}
void songRepository::saveRecord(const Model::Song& song)
void Database::songRepository::saveRecord(const Model::Song& song)
{
auto conn = setup_mysql_connection();
auto status = 0;
@@ -148,7 +151,7 @@ void songRepository::saveRecord(const Model::Song& song)
std::cout << "done inserting song record" << std::endl;
}
std::vector<Model::Song> songRepository::parseRecords(MYSQL_RES* results)
std::vector<Model::Song> Database::songRepository::parseRecords(MYSQL_RES* results)
{
auto fieldNum = mysql_num_fields(results);
auto numRows = mysql_num_rows(results);
@@ -203,7 +206,7 @@ std::vector<Model::Song> songRepository::parseRecords(MYSQL_RES* results)
return songs;
}
Model::Song songRepository::parseRecord(MYSQL_RES* results)
Model::Song Database::songRepository::parseRecord(MYSQL_RES* results)
{
Model::Song song;
auto fieldNum = mysql_num_fields(results);
+3 -3
View File
@@ -24,8 +24,8 @@ void run(const Model::BinaryPath& bConf)
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);
auto logController = std::make_shared<loginController>(bConf);
auto sngController = std::make_shared<songController>(bConf);
auto logController = std::make_shared<Controller::loginController>(bConf);
auto sngController = std::make_shared<Controller::songController>(bConf);
logController->addEndpointsToRouter(router);
sngController->addEndpointsToRouter(router);
@@ -45,7 +45,7 @@ int main(int argc, char **argv)
oatpp::base::Environment::init();
//const std::string working_path = argv[0];
Model::BinaryPath bConf;
bConf.path = argv[0]
bConf.path = argv[0];
//run(working_path);
run(bConf);
+4 -1
View File
@@ -7,6 +7,9 @@
Manager::coverArtManager::coverArtManager(const std::string& configPath) : path(configPath)
{ }
Manager::coverArtManager::coverArtManager(const Model::BinaryPath& bConf) : m_bConf(bConf)
{ }
Model::Cover Manager::coverArtManager::saveCover(const Model::Song& song, std::string& rootPath, const std::string& stockCoverPath)
{
@@ -16,7 +19,7 @@ Model::Cover Manager::coverArtManager::saveCover(const Model::Song& song, std::s
cov = meta.update_cover_art(song, cov, stockCoverPath);
cov.songTitle = song.title;
Database::coverArtRepository covRepo(path);
Database::coverArtRepository covRepo(m_bConf);
std::cout << "saving record to the database" << std::endl;
covRepo.saveRecord(cov);
std::cout << "retrieving record from database" << std::endl;
+27 -3
View File
@@ -41,10 +41,13 @@ std::string Manager::directory_manager::configPath(std::string_view path)
{
return fs::canonical(path).parent_path().string();
}
std::string Manager::directory_manager::contentOfPath(std::string_view path)
std::string Manager::directory_manager::configPath(const Model::BinaryPath& bConf)
{
std::string configPath(path);
std::fstream a(configPath, std::ios::in);
return fs::canonical(bConf.path).parent_path().string();
}
std::string Manager::directory_manager::contentOfPath(const std::string& path)
{
std::fstream a(path, std::ios::in);
std::stringstream s;
s << a.rdbuf();
a.close();
@@ -59,6 +62,13 @@ nlohmann::json Manager::directory_manager::credentialConfigContent(const std::st
return nlohmann::json::parse(contentOfPath(path));
}
nlohmann::json Manager::directory_manager::credentialConfigContent(const Model::BinaryPath& bConf)
{
auto path = configPath(bConf);
path.append("/authcredentials.json");
return nlohmann::json::parse(contentOfPath(path));
}
nlohmann::json Manager::directory_manager::databaseConfigContent(const std::string& exe_path)
{
auto path = configPath(exe_path);
@@ -66,6 +76,13 @@ nlohmann::json Manager::directory_manager::databaseConfigContent(const std::stri
return nlohmann::json::parse(contentOfPath(path));
}
nlohmann::json Manager::directory_manager::databaseConfigContent(const Model::BinaryPath& bConf)
{
auto path = configPath(bConf);
path.append("/database.json");
return nlohmann::json::parse(contentOfPath(path));
}
nlohmann::json Manager::directory_manager::pathConfigContent(const std::string& exe_path)
{
auto path = configPath(exe_path);
@@ -73,6 +90,13 @@ nlohmann::json Manager::directory_manager::pathConfigContent(const std::string&
return nlohmann::json::parse(contentOfPath(path));
}
nlohmann::json Manager::directory_manager::pathConfigContent(const Model::BinaryPath& bConf)
{
auto path = configPath(bConf);
path.append("/paths.json");
return nlohmann::json::parse(contentOfPath(path));
}
void Manager::directory_manager::delete_cover_art_file(const std::string& cov_path, const std::string& stock_cover_path)
{
+12 -8
View File
@@ -18,6 +18,10 @@ Manager::song_manager::song_manager(std::string& x_path)
: exe_path(x_path)
{ }
Manager::song_manager::song_manager(const Model::BinaryPath& bConf)
: m_bConf(bConf)
{ }
void Manager::song_manager::saveSong(Model::Song& song)
{
@@ -27,12 +31,12 @@ void Manager::song_manager::saveSong(Model::Song& song)
song = meta.retrieve_metadata(song.songPath);
song.data = std::move(data);
coverArtManager covMgr(exe_path);
auto pathConfigContent = Manager::directory_manager::pathConfigContent(exe_path);
coverArtManager covMgr(m_bConf);
auto pathConfigContent = Manager::directory_manager::pathConfigContent(m_bConf);
auto coverRootPath = pathConfigContent["cover_root_path"].get<std::string>();
auto musicRootPath = pathConfigContent["root_music_path"].get<std::string>();
auto stockCoverPath = Manager::directory_manager::configPath(exe_path);
auto stockCoverPath = Manager::directory_manager::configPath(m_bConf);
stockCoverPath.append("/CoverArt.png");
auto cov = covMgr.saveCover(song, coverRootPath, stockCoverPath);
@@ -49,14 +53,14 @@ void Manager::song_manager::saveSong(Model::Song& song)
printSong(song);
Database::songRepository songRepo(exe_path);
Database::songRepository songRepo(m_bConf);
songRepo.saveRecord(song);
}
void Manager::song_manager::deleteSong(Model::Song& song)
{
Database::coverArtRepository covRepo(exe_path);
Database::songRepository songRepo(exe_path);
Database::coverArtRepository covRepo(m_bConf);
Database::songRepository songRepo(m_bConf);
song = songRepo.retrieveRecord(song, songFilter::id);
songRepo.deleteRecord(song);
@@ -66,7 +70,7 @@ void Manager::song_manager::deleteSong(Model::Song& song)
cov = covRepo.retrieveRecord(cov, coverFilter::id);
covRepo.deleteRecord(cov);
auto paths = Manager::directory_manager::pathConfigContent(exe_path);
auto paths = Manager::directory_manager::pathConfigContent(m_bConf);
const auto coverArtPath = paths["cover_root_path"].get<std::string>();
std::string stockCoverArtPath = coverArtPath;
stockCoverArtPath.append("CoverArt.png");
@@ -100,7 +104,7 @@ void Manager::song_manager::printSong(const Model::Song& song)
void Manager::song_manager::saveSongTemp(Model::Song& song)
{
auto config = Manager::directory_manager::pathConfigContent(exe_path);
auto config = Manager::directory_manager::pathConfigContent(m_bConf);
auto tmp_song = config["temp_root_path"].get<std::string>();
std::random_device dev;
+30 -2
View File
@@ -57,6 +57,34 @@ Model::loginResult Manager::token_manager::retrieve_token(std::string_view path)
return lr;
}
Model::loginResult Manager::token_manager::retrieve_token(const Model::BinaryPath& bConf)
{
auto cred = parse_auth_credentials(bConf);
nlohmann::json reqObj;
reqObj["client_id"] = cred.client_id;
reqObj["client_secret"] = cred.client_secret;
reqObj["audience"] = cred.api_identifier;
reqObj["grant_type"] = "client_credentials";
std::string uri{cred.uri};
uri.append("/");
uri.append(cred.endpoint);
auto r = cpr::Post(cpr::Url{uri},
cpr::Body{reqObj.dump()},
cpr::Header{{"Content-Type", "application/json"},
{"Connection", "keep-alive"}});
auto post_res = nlohmann::json::parse(r.text);
Model::loginResult lr;
lr.access_token = post_res["access_token"].get<std::string>();
lr.token_type = post_res["token_type"].get<std::string>();
lr.expiration = post_res["expires_in"].get<int>();
return lr;
}
bool Manager::token_manager::is_token_valid(std::string& auth, Scope scope)
{
@@ -104,10 +132,10 @@ Model::auth_credentials Manager::token_manager::parse_auth_credentials(std::stri
return auth;
}
Model::auth_credentials Manager::token_manager::parse_auth_credentials(const BinaryPath& bConf)
Model::auth_credentials Manager::token_manager::parse_auth_credentials(const Model::BinaryPath& bConf)
{
auto exePath = Manager::directory_manager::configPath(bConf);
exe_path.append("/auth_credentials.json");
exePath.append("/auth_credentials.json");
auto con = Manager::directory_manager::credentialConfigContent(exePath);