#include "crypto/sslUtil.h"
+#include "log/logger.hpp"
+
std::string keyDir;
std::unordered_map<std::string, Profile> profiles;
std::unordered_map<std::string, std::shared_ptr<CAConfig>> CAs;
std::string serialPath;
std::shared_ptr<std::unordered_map<std::string, std::string>> parseConf( std::string path ) {
- std::shared_ptr<std::unordered_map<std::string, std::string>> map( new std::unordered_map<std::string, std::string>() );
+ auto map = std::make_shared<std::unordered_map<std::string, std::string>>();
std::ifstream config;
config.open( path );
if( !config.is_open() ) {
- std::cout << "Where is " << path << "?" << std::endl;
+ logger::notef( "Where is \"%s\"?", path );
throw "Config missing";
}
int splitter = line1.find( "=" );
if( splitter == -1 ) {
- std::cerr << "Ignoring malformed config line: " << line1 << std::endl;
+ logger::warn( "Ignoring malformed config line: ", line1 );
continue;
}
dp = opendir( "profiles" );
if( dp == NULL ) {
- std::cerr << "Profiles not found " << std::endl;
+ logger::error( "Profiles directory not found" );
return -1;
}
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;
}
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;
std::string cas = map->at( "ca" );
- for( size_t pos = 0; pos != std::string::npos; ) {
- size_t end = cas.find( ",", pos );
- std::string sub;
+ DIR* dir;
+ struct dirent* ent;
- if( end == std::string::npos ) {
- sub = cas.substr( pos );
- } else {
- sub = cas.substr( pos, end - pos );
- end++;
- }
+ if( ( dir = opendir( "ca" ) ) != NULL ) {
+ while( ( ent = readdir( dir ) ) != NULL ) {
+ std::string caName = std::string( ent->d_name );
- pos = end;
+ if( caName.find( cas ) != 0 ) {
+ continue;
+ }
- if( CAs.find( sub ) == CAs.end() ) {
- std::shared_ptr<CAConfig> ca( new CAConfig( sub ) );
- CAs.emplace( sub, ca );
- }
+ if( CAs.find( caName ) == CAs.end() ) {
+ auto ca = std::make_shared<CAConfig>( caName );
+ CAs.emplace( caName, ca );
+ }
- prof.ca.push_back( CAs.at( sub ) );
+ 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 );
-
- std::cout << profiles.size() << " profiles loaded." << std::endl;
+ logger::notef( "%s profiles loaded.", profiles.size() );
return 0;
}
int parseConfig( std::string path ) {
-
auto masterConf = parseConf( path );
keyDir = masterConf->at( "key.directory" );
serialPath = masterConf->at( "serialPath" );
if( keyDir == "" ) {
- std::cerr << "Missing config property key.directory" << std::endl;
+ logger::error( "Missing config property key.directory" );
return -1;
}