X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fconfig.cpp;h=495231c8a377f1c9c5c5e86ed6ce3a0bfb4411de;hb=3d3967b16610579e977b5d8685f3eedb10cbc23a;hp=a518db568863ba5a5d6f775269bc717e8104a2ff;hpb=9e866a1a2facc8cb1565cd660c6b6d482f18ecb1;p=cassiopeia.git diff --git a/src/config.cpp b/src/config.cpp index a518db5..495231c 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -6,6 +6,8 @@ #include "crypto/sslUtil.h" +#include "log/logger.hpp" + std::string keyDir; std::unordered_map profiles; std::unordered_map> CAs; @@ -18,7 +20,7 @@ std::shared_ptr> parseConf( std::st config.open( path ); if( !config.is_open() ) { - std::cout << "Where is " << path << "?" << std::endl; + logger::notef( "Where is \"%s\"?", path ); throw "Config missing"; } @@ -32,7 +34,7 @@ std::shared_ptr> parseConf( std::st int splitter = line1.find( "=" ); if( splitter == -1 ) { - std::cerr << "Ignoring malformed config line: " << line1 << std::endl; + logger::warn( "Ignoring malformed config line: ", line1 ); continue; } @@ -46,17 +48,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; @@ -64,7 +56,7 @@ int parseConfig( std::string path ) { dp = opendir( "profiles" ); if( dp == NULL ) { - std::cerr << "Profiles not found " << std::endl; + logger::error( "Profiles directory not found" ); return -1; } @@ -78,14 +70,14 @@ int parseConfig( std::string path ) { int splitter = profileName.find( "-" ); if( splitter == -1 ) { - std::cerr << "Ignoring malformed profile: " << profileName << std::endl; + logger::warn( "Ignoring malformed profile: ", profileName ); continue; } std::string id = profileName.substr( 0, splitter ); if( profileName.substr( profileName.size() - 4 ) != ".cfg" ) { - std::cerr << "Ignoring malformed profile: " << profileName << std::endl; + logger::warn( "Ignoring malformed profile: ", profileName ); continue; } @@ -97,25 +89,62 @@ 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( map->at( "ca" ) ) ); - CAs.emplace( map->at( "ca" ), ca ); - } + 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 = CAs.at( map->at( "ca" ) ); + prof.ca.push_back( CAs.at( caName ) ); + logger::note( "Adding CA: ", caName ); + } + + closedir( dir ); + } else { + throw "Directory with CAConfigs not found"; + } profiles.emplace( profileName, prof ); - std::cout << "Profile: " << profileName << " up and running." << std::endl; + logger::notef( "Profile: \"%s\" up and running.", profileName ); } ( void ) closedir( dp ); + logger::notef( "%s profiles loaded.", profiles.size() ); - 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; + logger::error( "Missing config property key.directory" ); + return -1; + } + + if( parseProfiles() != 0 ) { return -1; }