1 #include "../../../include/http/pages/peertrustpage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
8 const std::string PeerTrustPage::BuildQueryString(const long startrow, const std::string &namesearch, const std::string &sortby, const std::string &sortorder)
\r
10 std::string returnval="";
\r
11 std::string tempval="";
\r
15 StringFunctions::Convert(startrow,tempval);
\r
16 returnval+="startrow="+tempval;
\r
25 returnval+="namesearch="+namesearch;
\r
34 returnval+="sortby="+sortby;
\r
43 returnval+="sortorder="+sortorder;
\r
50 const std::string PeerTrustPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
53 std::string countstr;
\r
54 std::string content="";
\r
55 int identitycount=0; // total number of ids we know
\r
56 int rowsperpage=25; // how many ids to show per page
\r
57 std::string rowsperpagestr;
\r
59 std::string startrowstr="0";
\r
60 std::string namesearch="";
\r
62 std::string sortby="";
\r
63 std::string sortorder="";
\r
65 StringFunctions::Convert(rowsperpage,rowsperpagestr);
\r
67 if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="update")
\r
69 std::vector<std::string> identityids;
\r
70 std::vector<std::string> oldlmt;
\r
71 std::vector<std::string> lmt;
\r
72 std::vector<std::string> oldltlt;
\r
73 std::vector<std::string> ltlt;
\r
74 std::vector<std::string> oldmtc;
\r
75 std::vector<std::string> mtc;
\r
76 std::vector<std::string> oldtltc;
\r
77 std::vector<std::string> tltc;
\r
78 int localmessagetrust=0;
\r
79 int localtrustlisttrust=0;
\r
82 CreateArgArray(queryvars,"identityid",identityids);
\r
83 CreateArgArray(queryvars,"oldlocalmessagetrust",oldlmt);
\r
84 CreateArgArray(queryvars,"localmessagetrust",lmt);
\r
85 CreateArgArray(queryvars,"oldlocaltrustlisttrust",oldltlt);
\r
86 CreateArgArray(queryvars,"localtrustlisttrust",ltlt);
\r
87 CreateArgArray(queryvars,"oldmessagetrustcomment",oldmtc);
\r
88 CreateArgArray(queryvars,"messagetrustcomment",mtc);
\r
89 CreateArgArray(queryvars,"oldtrustlisttrustcomment",oldtltc);
\r
90 CreateArgArray(queryvars,"trustlisttrustcomment",tltc);
\r
92 SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=?, LocalTrustListTrust=?, MessageTrustComment=?, TrustListTrustComment=? WHERE IdentityID=?;");
\r
94 for(int i=0; i<identityids.size(); i++)
\r
96 if(oldlmt[i]!=lmt[i] || oldltlt[i]!=ltlt[i] || oldmtc[i]!=mtc[i] || oldtltc[i]!=tltc[i])
\r
98 StringFunctions::Convert(lmt[i],localmessagetrust);
\r
99 StringFunctions::Convert(ltlt[i],localtrustlisttrust);
\r
100 StringFunctions::Convert(identityids[i],identityid);
\r
104 update.Bind(0,localmessagetrust);
\r
112 update.Bind(1,localtrustlisttrust);
\r
118 update.Bind(2,mtc[i]);
\r
119 update.Bind(3,tltc[i]);
\r
120 update.Bind(4,identityid);
\r
128 // if startrow is specified
\r
129 if(queryvars.find("startrow")!=queryvars.end())
\r
131 startrowstr=(*queryvars.find("startrow")).second;
\r
132 // convert back and forth, just in case a number wasn't passed in startrow
\r
133 StringFunctions::Convert(startrowstr,startrow);
\r
138 StringFunctions::Convert(startrow,startrowstr);
\r
142 if(queryvars.find("sortby")!=queryvars.end())
\r
144 sortby=(*queryvars.find("sortby")).second;
\r
152 if(queryvars.find("sortorder")!=queryvars.end())
\r
154 sortorder=(*queryvars.find("sortorder")).second;
\r
161 // if we are searching by name
\r
162 if(queryvars.find("namesearch")!=queryvars.end())
\r
164 namesearch=(*queryvars.find("namesearch")).second;
\r
167 content+="<h2>Peer Trust</h2>";
\r
168 content+="Message Trust is how much you trust the identity to post good messages. Trust List Trust is how much weight you want the trust list of that identity to have when calculating the total. The local trust levels are set by you, and the peer trust levels are calculated by a weighted average using other identities' trust lists.";
\r
169 content+="<div style=\"text-align:center;\">";
\r
170 content+="<form name=\"frmsearch\" method=\"POST\" action=\"peertrust.htm\">";
\r
171 content+="<input type=\"text\" name=\"namesearch\" value=\""+SanitizeOutput(namesearch)+"\">";
\r
172 content+="<input type=\"submit\" value=\"Search\">";
\r
173 content+="</form>";
\r
175 content+="<form name=\"frmtrust\" method=\"POST\">";
\r
176 content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";
\r
177 content+="<input type=\"hidden\" name=\"startrow\" value=\""+startrowstr+"\">";
\r
180 content+="<input type=\"hidden\" name=\"namesearch\" value=\""+SanitizeOutput(namesearch)+"\">";
\r
182 content+="<table>";
\r
183 content+="<tr><th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"Name",ReverseSort("Name",sortby,sortorder))+"\">Name</a></th>";
\r
184 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalMessageTrust",ReverseSort("LocalMessageTrust",sortby,sortorder))+"\">Local Message Trust</a></th>";
\r
185 content+="<th>Message Comment</th>";
\r
186 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerMessageTrust",ReverseSort("PeerMessageTrust",sortby,sortorder))+"\">Peer Message Trust</a></th>";
\r
187 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalTrustListTrust",ReverseSort("LocalTrustListTrust",sortby,sortorder))+"\">Local Trust List Trust</a></th>";
\r
188 content+="<th>Trust Comment</th>";
\r
189 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerTrustListTrust",ReverseSort("PeerTrustListTrust",sortby,sortorder))+"\">Peer Trust List Trust</a></th></tr>";
\r
191 // get count of identities we are showing
\r
192 sql="SELECT COUNT(*) FROM tblIdentity";
\r
195 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
198 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
201 st.Bind(0,namesearch);
\r
204 st.ResultInt(0,identitycount);
\r
207 sql="SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey,MessageTrustComment,TrustListTrustComment FROM tblIdentity";
\r
210 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
215 sql+=" Name COLLATE NOCASE";
\r
223 sql+=" "+sortorder;
\r
225 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
226 st=m_db->Prepare(sql);
\r
229 st.Bind(0,namesearch);
\r
233 while(st.RowReturned())
\r
235 std::string identityid;
\r
237 std::string localmessagetrust;
\r
238 std::string peermessagetrust;
\r
239 std::string localtrustlisttrust;
\r
240 std::string peertrustlisttrust;
\r
241 std::string publickey;
\r
242 std::string keypart="";
\r
243 std::string messagetrustcomment="";
\r
244 std::string trustlisttrustcomment="";
\r
246 StringFunctions::Convert(count,countstr);
\r
248 st.ResultText(0,identityid);
\r
249 st.ResultText(1,name);
\r
250 st.ResultText(2,localmessagetrust);
\r
251 st.ResultText(3,peermessagetrust);
\r
252 st.ResultText(4,localtrustlisttrust);
\r
253 st.ResultText(5,peertrustlisttrust);
\r
254 st.ResultText(6,publickey);
\r
255 st.ResultText(7,messagetrustcomment);
\r
256 st.ResultText(8,trustlisttrustcomment);
\r
258 if(publickey.size()>8)
\r
260 keypart=publickey.substr(3,5);
\r
264 content+="<td title=\""+publickey+"\">";
\r
265 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";
\r
266 content+="<a href=\"peerdetails.htm?identityid="+identityid+"\">";
\r
269 content+=SanitizeOutput(name+keypart)+"...";
\r
273 content+="[Unknown Name]";
\r
277 content+="<td "+GetClassString(localmessagetrust)+">";
\r
278 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";
\r
279 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
280 content+="<td "+GetClassString(localmessagetrust)+">";
\r
281 content+="<input type=\"hidden\" name=\"oldmessagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\">";
\r
282 content+="<input type=\"text\" name=\"messagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\" maxlength=\"50\">";
\r
284 content+="<td "+GetClassString(peermessagetrust)+">";
\r
285 content+=peermessagetrust+"</td>";
\r
286 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
287 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";
\r
288 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
289 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
290 content+="<input type=\"hidden\" name=\"oldtrustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\">";
\r
291 content+="<input type=\"text\" name=\"trustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\" maxlength=\"50\">";
\r
293 content+="<td "+GetClassString(peertrustlisttrust)+">";
\r
294 content+=peertrustlisttrust+"</td>";
\r
300 if(startrow>0 || startrow+rowsperpage<identitycount)
\r
302 std::string tempstr;
\r
308 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
309 content+="<td colspan=\"3\" align=\"left\"><a href=\"peertrust.htm?"+BuildQueryString(startrow-rowsperpage,namesearch,sortby,sortorder)+"\"><-- Previous Page</a></td>";
\r
312 if(startrow+rowsperpage<identitycount)
\r
316 content+="<td></td>";
\r
319 content+="<td colspan=\"3\" align=\"right\"><a href=\"peertrust.htm?"+BuildQueryString(startrow+rowsperpage,namesearch,sortby,sortorder)+"\">Next Page --></a></td>";
\r
324 content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Trust\"></center></td></tr>";
\r
325 content+="</table>";
\r
326 content+="</form>";
\r
328 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
331 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)
\r
334 std::string tempstr;
\r
336 StringFunctions::Convert(trustlevel,tempint);
\r
338 StringFunctions::Convert(tempint,tempstr);
\r
342 return "class=\"trust"+tempstr+"\"";
\r
350 const std::string PeerTrustPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)
\r
352 if(sortname==currentsortby)
\r
354 if(currentsortorder=="ASC")
\r
365 return currentsortorder;
\r
369 const bool PeerTrustPage::WillHandleURI(const std::string &uri)
\r
371 if(uri.find("peertrust.")!=std::string::npos)
\r