]> WPIA git - cassiopeia.git/blobdiff - src/apps/client.cpp
fix: Fix memory-leak in CRL.cpp, revocation from DB, multiple CAs
[cassiopeia.git] / src / apps / client.cpp
index 6613c94fd38f24f34a1d2976f063821bf4211c1b..1793de0027177b6a79e84598d88e92b4a24f02fa 100644 (file)
@@ -4,15 +4,16 @@
 #include <iostream>
 #include <fstream>
 #include <streambuf>
+#include <unordered_map>
 
-#include "database.h"
-#include "mysql.h"
-#include "simpleOpensslSigner.h"
+#include "db/database.h"
+#include "db/mysql.h"
+#include "crypto/simpleOpensslSigner.h"
+#include "crypto/remoteSigner.h"
+#include "crypto/sslUtil.h"
 #include "util.h"
-#include "bios.h"
-#include "slipBio.h"
-#include "remoteSigner.h"
-#include "sslUtil.h"
+#include "io/bios.h"
+#include "io/slipBio.h"
 #include "config.h"
 
 #ifdef NO_DAEMON
@@ -22,9 +23,9 @@
 #endif
 
 extern std::string keyDir;
-extern std::vector<Profile> profiles;
 extern std::string sqlHost, sqlUser, sqlPass, sqlDB;
 extern std::string serialPath;
+extern std::unordered_map<std::string, std::shared_ptr<CAConfig>> CAs;
 
 int main( int argc, const char* argv[] ) {
     ( void ) argc;
@@ -140,8 +141,23 @@ int main( int argc, const char* argv[] ) {
             } catch( std::string c ) {
                 log << "ERROR: " << c << std::endl;
             }
+        } else if( job->task == "revoke" ) {
+            std::cout << "Revoking!" << std::endl;
+
+            for( auto& x : CAs ) {
+                std::cout << " [" << x.first << ']' << std::endl;
+            }
+
+            try {
+                auto data = jp->getRevocationInfo( job );
+                sign->revoke( CAs.at( data.second ), data.first );
+                jp->finishJob( job );
+            } catch( const char* c ) {
+                std::cout << "Exception: " << c << std::endl;
+            }
         } else {
             log << "Unknown job type" << job->task << std::endl;
+            jp->failJob( job );
         }
 
         if( !DAEMON || once ) {