X-Git-Url: http://code.wpia.club/?a=blobdiff_plain;f=src%2Futil.cpp;h=30f87b77e1569b53bfc396cdbdb56d2676a2e230;hb=156855b7e12c3a0254590da514b0d0e8efe469f4;hp=20d46606762d1aec69db186a9c24843bf9c60c5a;hpb=28e331e99235c616e8ccd27b7b5083bae47a1c1b;p=cassiopeia.git diff --git a/src/util.cpp b/src/util.cpp index 20d4660..30f87b7 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -9,26 +9,42 @@ #include void writeFile( const std::string& name, const std::string& content ) { - std::ofstream file; - - file.open( name ); + std::ofstream file( name ); file << content; - file.close(); + + //! \FIXME: Error checking } std::string readFile( const std::string& name ) { std::ifstream t( name ); std::string res = std::string( std::istreambuf_iterator( t ), std::istreambuf_iterator() ); - t.close(); return res; } std::string writeBackFile( const std::string& serial, const std::string& cert, const std::string& keydir ) { + errno = 0; + std::string filename = keydir; - mkdir( filename.c_str(), 0755 ); + + if( 0 != mkdir( filename.c_str(), 0755 ) ) { + if( EEXIST != errno ) { + throw std::runtime_error("Storage location could not be determined"); + } + + //! \FIXME: Check this is a directory + } + filename += "/crt"; - mkdir( filename.c_str(), 0755 ); + + if( 0 != mkdir( filename.c_str(), 0755 ) ) { + if( EEXIST != errno ) { + return ""; + } + + //! \FIXME: Check this is a directory + } + std::string first; if( serial.length() < 3 ) { @@ -38,12 +54,21 @@ std::string writeBackFile( const std::string& serial, const std::string& cert, c } filename += "/" + first; - mkdir( filename.c_str(), 0755 ); + + if( 0 != mkdir( filename.c_str(), 0755 ) ) { + if( EEXIST != errno ) { + return ""; + } + + //! \FIXME: Check this is a directory + } + filename += "/" + serial + ".crt"; writeFile( filename, cert ); return filename; } + bool isDigit( char c ) { return ( c >= '0' ) && ( c <= '9' ); } @@ -84,7 +109,7 @@ std::pair parseDate( const std::string& date ) { std::string checkS( check, siz ); if( checkS != date ) { - return std::pair( false, 0 ); + return { false, 0 }; } return std::pair( true, res ); @@ -109,7 +134,6 @@ std::pair addMonths( std::time_t t, int32_t count ) { } return std::pair( true, res ); - } std::pair parseMonthInterval( std::time_t t, const std::string& date ) { @@ -132,6 +156,7 @@ std::pair parseMonthInterval( std::time_t t, const std::string& da return std::pair( false, 0 ); } } + std::pair parseYearInterval( std::time_t t, const std::string& date ) { if( date[date.size() - 1] != 'y' ) { return std::pair( false, 0 ); @@ -152,3 +177,29 @@ std::pair parseYearInterval( std::time_t t, const std::string& dat return std::pair( false, 0 ); } } + +std::unique_ptr openLogfile( const std::string &name ) { + struct stat buffer; + std::string tname = name; + int ctr = 2; + + while( stat( tname.c_str(), &buffer ) == 0 ) { + tname = name + "_" + std::to_string( ctr++ ); + } + + auto res = std::make_unique( tname ); + + if( ! res->good() ) { + throw std::runtime_error( std::string("Failed to open file for logging: " ) + name ); + } + + return res; +} + +std::string timestamp(){ + time_t c_time; + if( time( &c_time ) == -1 ) { + throw std::runtime_error( "Error while fetching time?" ); + } + return std::to_string( c_time ); +}