1 #include "../../../include/http/pages/localidentitiespage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
3 #include "../../../include/http/identityexportxml.h"
\r
9 const std::string LocalIdentitiesPage::CreateTrueFalseDropDown(const std::string &name, const std::string &selected)
\r
11 std::string rval="";
\r
13 rval+="<select name=\""+name+"\">";
\r
14 rval+="<option value=\"true\"";
\r
15 if(selected=="true")
\r
19 rval+=">true</option>";
\r
20 rval+="<option value=\"false\"";
\r
21 if(selected=="false")
\r
25 rval+=">false</option>";
\r
31 const std::string LocalIdentitiesPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
34 std::string countstr;
\r
35 std::string content="";
\r
37 if(queryvars.find("formaction")!=queryvars.end())
\r
40 std::vector<std::string> ids;
\r
41 std::vector<std::string> singleuse;
\r
42 std::vector<std::string> publishtrustlist;
\r
43 std::vector<std::string> publishboardlist;
\r
44 std::vector<std::string> publishfreesite;
\r
46 CreateArgArray(queryvars,"chkidentityid",ids);
\r
47 CreateArgArray(queryvars,"singleuse",singleuse);
\r
48 CreateArgArray(queryvars,"publishtrustlist",publishtrustlist);
\r
49 CreateArgArray(queryvars,"publishboardlist",publishboardlist);
\r
50 CreateArgArray(queryvars,"publishfreesite",publishfreesite);
\r
52 if((*queryvars.find("formaction")).second=="update")
\r
54 SQLite3DB::Statement update=m_db->Prepare("UPDATE tblLocalIdentity SET SingleUse=?, PublishTrustList=?, PublishBoardList=?, PublishFreesite=? WHERE LocalIdentityID=?;");
\r
55 for(int i=0; i<ids.size(); i++)
\r
59 StringFunctions::Convert(ids[i],id);
\r
60 update.Bind(0,singleuse[i]);
\r
61 update.Bind(1,publishtrustlist[i]);
\r
62 update.Bind(2,publishboardlist[i]);
\r
63 update.Bind(3,publishfreesite[i]);
\r
70 if((*queryvars.find("formaction")).second=="delete")
\r
72 SQLite3DB::Statement del=m_db->Prepare("DELETE FROM tblLocalIdentity WHERE LocalIdentityID=?;");
\r
73 for(int i=0; i<ids.size(); i++)
\r
77 StringFunctions::Convert(ids[i],id);
\r
84 if((*queryvars.find("formaction")).second=="export")
\r
86 IdentityExportXML xml;
\r
87 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
89 while(exp.RowReturned())
\r
91 std::string name="";
\r
92 std::string publickey="";
\r
93 std::string privatekey="";
\r
94 std::string tempval="";
\r
95 bool singleuse=false;
\r
96 bool publishtrustlist=false;
\r
97 bool publishboardlist=false;
\r
98 bool publishfreesite=false;
\r
100 exp.ResultText(0,name);
\r
101 exp.ResultText(1,publickey);
\r
102 exp.ResultText(2,privatekey);
\r
103 exp.ResultText(3,tempval);
\r
104 if(tempval=="true")
\r
108 exp.ResultText(4,tempval);
\r
109 if(tempval=="true")
\r
111 publishtrustlist=true;
\r
113 exp.ResultText(5,tempval);
\r
114 if(tempval=="true")
\r
116 publishboardlist=true;
\r
118 exp.ResultText(6,tempval);
\r
119 if(tempval=="true")
\r
121 publishfreesite=true;
\r
124 xml.AddIdentity(name,publickey,privatekey,singleuse,publishtrustlist,publishboardlist,publishfreesite);
\r
128 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
130 if((*queryvars.find("formaction")).second=="import")
\r
132 if(queryvars.find("file")!=queryvars.end())
\r
134 IdentityExportXML xml;
\r
135 if(xml.ParseXML((*queryvars.find("file")).second))
\r
137 SQLite3DB::Statement imp=m_db->Prepare("INSERT INTO tblLocalIdentity(Name,PublicKey,PrivateKey,SingleUse,PublishTrustList,PublishBoardList,PublishFreesite) VALUES(?,?,?,?,?,?,?);");
\r
138 for(int i=0; i<xml.GetCount(); i++)
\r
140 std::string tempval="false";
\r
141 imp.Bind(0,xml.GetName(i));
\r
142 imp.Bind(1,xml.GetPublicKey(i));
\r
143 imp.Bind(2,xml.GetPrivateKey(i));
\r
144 if(xml.GetSingleUse(i))
\r
152 imp.Bind(3,tempval);
\r
153 if(xml.GetPublishTrustList(i))
\r
161 imp.Bind(4,tempval);
\r
162 if(xml.GetPublishBoardList(i))
\r
170 imp.Bind(5,tempval);
\r
171 if(xml.GetPublishFreesite(i))
\r
179 imp.Bind(6,tempval);
\r
188 content+="<h2>Local Identities</h2>";
\r
190 content+="<table><tr><th>Export Identities</th><th>Import Identities</th></tr>";
\r
191 content+="<tr><td>";
\r
192 content+="<form name=\"frmexport\" method=\"POST\">";
\r
193 content+="<input type=\"hidden\" name=\"formaction\" value=\"export\">";
\r
194 content+="<input type=\"submit\" value=\"Export Identities\">";
\r
195 content+="</form>";
\r
196 content+="</td><td>";
\r
197 content+="<form name=\"frmimport\" method=\"POST\" enctype=\"multipart/form-data\">";
\r
198 content+="<input type=\"hidden\" name=\"formaction\" value=\"import\">";
\r
199 content+="<input type=\"file\" name=\"file\">";
\r
200 content+="<input type=\"submit\" value=\"Import Identities\">";
\r
201 content+="</form>";
\r
202 content+="</td></tr></table>";
\r
206 // content+="<form name=\"frmlocalidentity\" method=\"POST\">";
\r
207 // content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";
\r
208 content+="<table><tr><th>Name</th><th>Single Use</th><th>Publish Trust List</th><th>Publish Board List</th><th>Publish Freesite</th><th>Announced? *</th></tr>";
\r
210 SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID,tblLocalIdentity.Name,tblLocalIdentity.PublicKey,tbLLocalIdentity.PublishTrustList,tblLocalIdentity.SingleUse,tblLocalIdentity.PublishBoardList,tblIdentity.IdentityID,tblLocalIdentity.PublishFreesite FROM tblLocalIdentity LEFT JOIN tblIdentity ON tblLocalIdentity.PublicKey=tblIdentity.PublicKey ORDER BY tblLocalIdentity.Name;");
\r
214 while(st.RowReturned())
\r
216 StringFunctions::Convert(count,countstr);
\r
218 std::string name="";
\r
219 std::string publickey="";
\r
220 std::string publishtrustlist="";
\r
221 std::string singleuse="";
\r
222 std::string keypart="";
\r
223 std::string publishboardlist="";
\r
224 std::string publishfreesite="";
\r
226 st.ResultText(0,id);
\r
227 st.ResultText(1,name);
\r
228 st.ResultText(2,publickey);
\r
229 st.ResultText(3,publishtrustlist);
\r
230 st.ResultText(4,singleuse);
\r
231 st.ResultText(5,publishboardlist);
\r
232 st.ResultText(7,publishfreesite);
\r
234 if(publickey.size()>8)
\r
236 keypart=publickey.substr(3,5);
\r
240 // content+="<td><input type=\"checkbox\" name=\"chkidentityid["+countstr+"]\" value=\""+id+"\"></td>";
\r
241 content+="<td title=\""+publickey+"\"><form name=\"frmupdate\""+countstr+"\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"update\"><input type=\"hidden\" name=\"chkidentityid["+countstr+"]\" value=\""+id+"\">"+SanitizeOutput(name+keypart)+"...</td>";
\r
242 content+="<td>"+CreateTrueFalseDropDown("singleuse["+countstr+"]",singleuse)+"</td>";
\r
243 content+="<td>"+CreateTrueFalseDropDown("publishtrustlist["+countstr+"]",publishtrustlist)+"</td>";
\r
244 content+="<td>"+CreateTrueFalseDropDown("publishboardlist["+countstr+"]",publishboardlist)+"</td>";
\r
245 content+="<td>"+CreateTrueFalseDropDown("publishfreesite["+countstr+"]",publishfreesite)+"</td>";
\r
246 if(st.ResultNull(6))
\r
248 content+="<td>No</td>";
\r
252 content+="<td>Yes</td>";
\r
254 content+="<td><input type=\"submit\" value=\"Update\"></form></td>";
\r
255 content+="<td><form name=\"frmdel\""+countstr+"\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"delete\"><input type=\"hidden\" name=\"chkidentityid["+countstr+"]\" value=\""+id+"\"><input type=\"submit\" value=\"Delete\"></form></td>";
\r
261 // content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Selected\"> <input type=\"submit\" value=\"Delete Selected\" onClick=\"if(confirm('Delete Selected Identities?')){frmlocalidentity.formaction.value='delete';}else{return false;}\"></td></tr>";
\r
262 content+="</table>";
\r
263 content+="<p class=\"paragraph\">* An identity is considered successfully announced when you have downloaded a trust list from someone that contains the identity.</p>";
\r
264 content+="<p class=\"paragraph\">Single Use Identities will automatically be deleted 7 days after creation.</p>";
\r
266 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
269 const bool LocalIdentitiesPage::WillHandleURI(const std::string &uri)
\r
271 if(uri.find("localidentities.")!=std::string::npos)
\r