X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;ds=inline;f=src%2Fconfig.cpp;h=ad3c1375963a16602d07611b62bc7ff502e31606;hb=51d4000dfb0ae0c571084c21a070fa1dd020d91c;hp=a518db568863ba5a5d6f775269bc717e8104a2ff;hpb=9e866a1a2facc8cb1565cd660c6b6d482f18ecb1;p=cassiopeia.git diff --git a/src/config.cpp b/src/config.cpp index a518db5..ad3c137 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -46,17 +46,7 @@ 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" ); - +int parseProfiles() { CAs = std::unordered_map>(); DIR* dp; @@ -97,14 +87,32 @@ int parseConfig( std::string path ) { prof.id = std::stoi( id ); prof.eku = map->at( "eku" ); prof.ku = map->at( "ku" ); - - if( CAs.find( map->at( "ca" ) ) == CAs.end() ) { - std::shared_ptr ca( new CAConfig( map->at( "ca" ) ) ); - CAs.emplace( map->at( "ca" ), ca ); + prof.maxValidity = std::stoi( map->at( "days" ) ) * /* DAYS */24 * 60 * 60; + + std::string cas = map->at( "ca" ); + + DIR *dir; + struct dirent *ent; + if ((dir = opendir ("ca")) != NULL) { + while ((ent = readdir (dir)) != NULL) { + std::string caName = std::string(ent->d_name); + if( caName.find( cas ) != 0 ){ + continue; + } + + if( CAs.find( caName ) == CAs.end() ) { + std::shared_ptr ca( new CAConfig( caName ) ); + CAs.emplace( caName, ca ); + } + + prof.ca.push_back( CAs.at( caName ) ); + std::cout << "Adding CA: " << caName << std::endl; + } + closedir (dir); + } else { + throw "Directory with CAConfigs not found"; } - prof.ca = CAs.at( map->at( "ca" ) ); - profiles.emplace( profileName, prof ); std::cout << "Profile: " << profileName << " up and running." << std::endl; } @@ -114,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; }