version 0.1.10
[fms.git] / src / http / pages / localidentitiespage.cpp
index e926b2f..84c28b3 100644 (file)
@@ -1,5 +1,6 @@
 #include "../../../include/http/pages/localidentitiespage.h"\r
 #include "../../../include/stringfunctions.h"\r
+#include "../../../include/http/identityexportxml.h"\r
 \r
 #ifdef XMEM\r
        #include <xmem.h>\r
@@ -33,7 +34,6 @@ const std::string LocalIdentitiesPage::GeneratePage(const std::string &method, c
        std::string countstr;\r
        std::string content="";\r
 \r
-\r
        if(queryvars.find("formaction")!=queryvars.end())\r
        {\r
                int id;\r
@@ -75,9 +75,111 @@ const std::string LocalIdentitiesPage::GeneratePage(const std::string &method, c
                                }\r
                        }\r
                }\r
+               if((*queryvars.find("formaction")).second=="export")\r
+               {\r
+                       IdentityExportXML xml;\r
+                       SQLite3DB::Statement exp=m_db->Prepare("SELECT Name,PublicKey,PrivateKey,SingleUse,PublishTrustList,PublishBoardList FROM tblLocalIdentity WHERE PublicKey IS NOT NULL AND PrivateKey IS NOT NULL;");\r
+                       exp.Step();\r
+                       while(exp.RowReturned())\r
+                       {\r
+                               std::string name="";\r
+                               std::string publickey="";\r
+                               std::string privatekey="";\r
+                               std::string tempval="";\r
+                               bool singleuse=false;\r
+                               bool publishtrustlist=false;\r
+                               bool publishboardlist=false;\r
+\r
+                               exp.ResultText(0,name);\r
+                               exp.ResultText(1,publickey);\r
+                               exp.ResultText(2,privatekey);\r
+                               exp.ResultText(3,tempval);\r
+                               if(tempval=="true")\r
+                               {\r
+                                       singleuse=true;\r
+                               }\r
+                               exp.ResultText(4,tempval);\r
+                               if(tempval=="true")\r
+                               {\r
+                                       publishtrustlist=true;\r
+                               }\r
+                               exp.ResultText(5,tempval);\r
+                               if(tempval=="true")\r
+                               {\r
+                                       publishboardlist=true;\r
+                               }\r
+\r
+                               xml.AddIdentity(name,publickey,privatekey,singleuse,publishtrustlist,publishboardlist);\r
+\r
+                               exp.Step();\r
+                       }\r
+                       return "HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\nContent-Disposition: attachment; filename=identities.xml\r\n\r\n"+xml.GetXML();\r
+               }\r
+               if((*queryvars.find("formaction")).second=="import")\r
+               {\r
+                       if(queryvars.find("file")!=queryvars.end())\r
+                       {\r
+                               IdentityExportXML xml;\r
+                               if(xml.ParseXML((*queryvars.find("file")).second))\r
+                               {\r
+                                       SQLite3DB::Statement imp=m_db->Prepare("INSERT INTO tblLocalIdentity(Name,PublicKey,PrivateKey,SingleUse,PublishTrustList,PublishBoardList) VALUES(?,?,?,?,?,?);");\r
+                                       for(int i=0; i<xml.GetCount(); i++)\r
+                                       {\r
+                                               std::string tempval="false";\r
+                                               imp.Bind(0,xml.GetName(i));\r
+                                               imp.Bind(1,xml.GetPublicKey(i));\r
+                                               imp.Bind(2,xml.GetPrivateKey(i));\r
+                                               if(xml.GetSingleUse(i))\r
+                                               {\r
+                                                       tempval="true";\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       tempval="false";\r
+                                               }\r
+                                               imp.Bind(3,tempval);\r
+                                               if(xml.GetPublishTrustList(i))\r
+                                               {\r
+                                                       tempval="true";\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       tempval="false";\r
+                                               }\r
+                                               imp.Bind(4,tempval);\r
+                                               if(xml.GetPublishBoardList(i))\r
+                                               {\r
+                                                       tempval="true";\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       tempval="false";\r
+                                               }\r
+                                               imp.Bind(5,tempval);\r
+                                               imp.Step();\r
+                                               imp.Reset();\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
        }\r
 \r
        content+="<h2>Local Identities</h2>";\r
+\r
+       content+="<table><tr><th>Export Identities</th><th>Import Identities</th></tr>";\r
+       content+="<tr><td>";\r
+       content+="<form name=\"frmexport\" method=\"POST\">";\r
+       content+="<input type=\"hidden\" name=\"formaction\" value=\"export\">";\r
+       content+="<input type=\"submit\" value=\"Export Identities\">";\r
+       content+="</form>";\r
+       content+="</td><td>";\r
+       content+="<form name=\"frmimport\" method=\"POST\" enctype=\"multipart/form-data\">";\r
+       content+="<input type=\"hidden\" name=\"formaction\" value=\"import\">";\r
+       content+="<input type=\"file\" name=\"file\">";\r
+       content+="<input type=\"submit\" value=\"Import Identities\">";\r
+       content+="</form>";\r
+       content+="</td></tr></table>";\r
+\r
        content+="<form name=\"frmlocalidentity\" method=\"POST\">";\r
        content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";\r
        content+="<table><tr><td></td><th>Name</th><th>Single Use</th><th>Publish Trust List</th><th>Announced? *</th></tr>";\r