+ content+="<p class=\"paragraph\">* An identity is considered successfully announced when you have downloaded a trust list from someone that contains the identity. You must trust other identities' trust lists for this to happen. The number in parenthesis is how many trust lists the identity appears in.</p>";\r
+ content+="<p class=\"paragraph\">Single Use Identities will automatically be deleted 7 days after creation.</p>";\r
+ content+="<p class=\"paragraph\">Messages that each identity sends may be delayed by a random number of minutes between min and max. Set both to 0 to send messages as soon as possible.</p>";\r
+\r
+ return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
+}\r
+\r
+void LocalIdentitiesPage::HandleDelete(const std::map<std::string,std::string> &queryvars)\r
+{\r
+ int id=0;\r
+ std::vector<std::string> ids;\r
+ CreateArgArray(queryvars,"chkidentityid",ids);\r
+\r
+ SQLite3DB::Statement del=m_db->Prepare("DELETE FROM tblLocalIdentity WHERE LocalIdentityID=?;");\r
+ for(int i=0; i<ids.size(); i++)\r
+ {\r
+ if(ids[i]!="")\r
+ {\r
+ StringFunctions::Convert(ids[i],id);\r
+ del.Bind(0,id);\r
+ del.Step();\r
+ del.Reset();\r
+ }\r
+ }\r
+}\r
+\r
+const std::string LocalIdentitiesPage::HandleExport()\r
+{\r
+ IdentityExportXML xml;\r
+ SQLite3DB::Statement exp=m_db->Prepare("SELECT Name,PublicKey,PrivateKey,SingleUse,PublishTrustList,PublishBoardList,PublishFreesite 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
+ bool publishfreesite=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
+ exp.ResultText(6,tempval);\r
+ if(tempval=="true")\r
+ {\r
+ publishfreesite=true;\r
+ }\r
+\r
+ xml.AddIdentity(name,publickey,privatekey,singleuse,publishtrustlist,publishboardlist,publishfreesite);\r
+\r
+ exp.Step();\r
+ }\r
+ return xml.GetXML();\r
+}\r
+\r
+void LocalIdentitiesPage::HandleImport(const std::map<std::string,std::string> &queryvars)\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,PublishFreesite) 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
+ if(xml.GetPublishFreesite(i))\r
+ {\r
+ tempval="true";\r
+ }\r
+ else\r
+ {\r
+ tempval="false";\r
+ }\r
+ imp.Bind(6,tempval);\r
+ imp.Step();\r
+ imp.Reset();\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+void LocalIdentitiesPage::handleRequest(Poco::Net::HTTPServerRequest &request, Poco::Net::HTTPServerResponse &response)\r
+{\r
+ m_log->trace("LocalIdentitiesPages::handleRequest from "+request.clientAddress().toString());\r
+\r
+ std::map<std::string,std::string> vars;\r
+ CreateQueryVarMap(request,vars);\r
+\r
+ std::string formaction="";\r
+ if(vars.find("formaction")!=vars.end() && ValidateFormPassword(vars))\r
+ {\r
+ formaction=(*vars.find("formaction")).second;\r
+ if(formaction=="update")\r
+ {\r
+ HandleUpdate(vars);\r
+ }\r
+ else if(formaction=="delete")\r
+ {\r
+ HandleDelete(vars);\r
+ }\r
+ else if(formaction=="export")\r
+ {\r
+ response.setChunkedTransferEncoding(true);\r
+ response.setContentType("application/xml");\r
+ response.set("Content-Disposition","attachment; filename=identities.xml");\r
+ std::ostream &out=response.send();\r
+ out << HandleExport();\r
+ return;\r
+ }\r
+ else if(formaction=="import")\r
+ {\r
+ HandleImport(vars);\r
+ }\r
+ }\r
+\r
+ response.setChunkedTransferEncoding(true);\r
+ response.setContentType("text/html");\r
+\r
+ std::ostream &ostr = response.send();\r
+ ostr << GeneratePage(request.getMethod(),vars);\r
+}\r
+\r
+void LocalIdentitiesPage::HandleUpdate(const std::map<std::string,std::string> &queryvars)\r
+{\r
+ int id;\r
+ std::vector<std::string> ids;\r
+ std::vector<std::string> singleuse;\r
+ std::vector<std::string> publishtrustlist;\r
+ std::vector<std::string> publishboardlist;\r
+ std::vector<std::string> publishfreesite;\r
+ std::vector<std::string> mindelay;\r
+ std::vector<std::string> maxdelay;\r
+\r
+ CreateArgArray(queryvars,"chkidentityid",ids);\r
+ CreateArgArray(queryvars,"singleuse",singleuse);\r
+ CreateArgArray(queryvars,"publishtrustlist",publishtrustlist);\r
+ CreateArgArray(queryvars,"publishboardlist",publishboardlist);\r
+ CreateArgArray(queryvars,"publishfreesite",publishfreesite);\r
+ CreateArgArray(queryvars,"mindelay",mindelay);\r
+ CreateArgArray(queryvars,"maxdelay",maxdelay);\r