X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;ds=inline;f=src%2Fconfig.cpp;h=ce78f417582a8a8049389f18435279cde60b7fa8;hb=c51272489a64903f976c6d502fd79925cb537d9b;hp=f11edb112838386c74fb970db374397ebd8fe20b;hpb=a14002d5a4531462c0ae6631323dd038e8d9990e;p=cassiopeia.git diff --git a/src/config.cpp b/src/config.cpp index f11edb1..ce78f41 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -4,10 +4,11 @@ #include #include -#include "sslUtil.h" +#include "crypto/sslUtil.h" std::string keyDir; std::unordered_map profiles; +std::unordered_map> CAs; std::string sqlHost, sqlUser, sqlPass, sqlDB; std::string serialPath; @@ -45,18 +46,8 @@ std::shared_ptr> parseConf( std::st return map; } -int parseConfig( std::string path ) { - - auto masterConf = parseConf( path ); - - keyDir = masterConf->at( "key.directory" ); - sqlHost = masterConf->at( "sql.host" ); - sqlUser = masterConf->at( "sql.user" ); - sqlPass = masterConf->at( "sql.password" ); - sqlDB = masterConf->at( "sql.database" ); - serialPath = masterConf->at( "serialPath" ); - - std::shared_ptr>> CAs( new std::unordered_map>() ); +int parseProfiles() { + CAs = std::unordered_map>(); DIR* dp; struct dirent* ep; @@ -96,13 +87,31 @@ int parseConfig( std::string path ) { prof.id = std::stoi( id ); prof.eku = map->at( "eku" ); prof.ku = map->at( "ku" ); + prof.maxValidity = std::stoi( map->at( "days" ) ) * /* DAYS */24 * 60 * 60; - if( CAs->find( map->at( "ca" ) ) == CAs->end() ) { - std::shared_ptr ca( new CAConfig( "ca/" + map->at( "ca" ) ) ); - CAs->emplace( map->at( "ca" ), ca ); - } + std::string cas = map->at( "ca" ); + + for( size_t pos = 0; pos != std::string::npos; ) { + size_t end = cas.find( ",", pos ); + std::string sub; + + if( end == std::string::npos ) { + sub = cas.substr( pos ); + } else { + sub = cas.substr( pos, end - pos ); + end++; + } - prof.ca = CAs->at( map->at( "ca" ) ); + pos = end; + + if( CAs.find( sub ) == CAs.end() ) { + std::shared_ptr ca( new CAConfig( sub ) ); + CAs.emplace( sub, ca ); + } + + prof.ca.push_back( CAs.at( sub ) ); + + } profiles.emplace( profileName, prof ); std::cout << "Profile: " << profileName << " up and running." << std::endl; @@ -113,10 +122,28 @@ int parseConfig( std::string path ) { std::cout << profiles.size() << " profiles loaded." << std::endl; + return 0; +} + +int parseConfig( std::string path ) { + + auto masterConf = parseConf( path ); + + keyDir = masterConf->at( "key.directory" ); + sqlHost = masterConf->at( "sql.host" ); + sqlUser = masterConf->at( "sql.user" ); + sqlPass = masterConf->at( "sql.password" ); + sqlDB = masterConf->at( "sql.database" ); + serialPath = masterConf->at( "serialPath" ); + if( keyDir == "" ) { std::cerr << "Missing config property key.directory" << std::endl; return -1; } + if( parseProfiles() != 0 ) { + return -1; + } + return 0; }