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. Trust is recalculated once an hour from received 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 class=\"small90\">";
\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>";
\r
190 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"MessageCount",ReverseSort("MessageCount",sortby,sortorder))+"\">Message Count</a></th>";
\r
191 content+="</tr>\r\n";
\r
193 // get count of identities we are showing
\r
194 sql="SELECT COUNT(*) FROM tblIdentity";
\r
197 sql+=" WHERE Name LIKE '%' || ? || '%' AND tblIdentity.Hidden='false'";
\r
201 sql+=" WHERE tblIdentity.Hidden='false'";
\r
204 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
207 st.Bind(0,namesearch);
\r
210 st.ResultInt(0,identitycount);
\r
213 sql="SELECT tblIdentity.IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey,MessageTrustComment,TrustListTrustComment,COUNT(MessageID) AS 'MessageCount' FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID";
\r
216 sql+=" WHERE (Name LIKE '%' || ? || '%' OR PublicKey LIKE '%' || ? || '%') AND tblIdentity.Hidden='false'";
\r
220 sql+=" WHERE tblIdentity.Hidden='false'";
\r
222 sql+=" GROUP BY tblIdentity.IdentityID";
\r
226 sql+=" Name COLLATE NOCASE";
\r
234 sql+=" "+sortorder;
\r
236 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
237 st=m_db->Prepare(sql);
\r
240 st.Bind(0,namesearch);
\r
241 st.Bind(1,namesearch);
\r
245 while(st.RowReturned())
\r
247 std::string identityid;
\r
249 std::string localmessagetrust;
\r
250 std::string peermessagetrust;
\r
251 std::string localtrustlisttrust;
\r
252 std::string peertrustlisttrust;
\r
253 std::string publickey;
\r
254 std::string keypart="";
\r
255 std::string messagetrustcomment="";
\r
256 std::string trustlisttrustcomment="";
\r
257 std::string messagecountstr="";
\r
259 StringFunctions::Convert(count,countstr);
\r
261 st.ResultText(0,identityid);
\r
262 st.ResultText(1,name);
\r
263 st.ResultText(2,localmessagetrust);
\r
264 st.ResultText(3,peermessagetrust);
\r
265 st.ResultText(4,localtrustlisttrust);
\r
266 st.ResultText(5,peertrustlisttrust);
\r
267 st.ResultText(6,publickey);
\r
268 st.ResultText(7,messagetrustcomment);
\r
269 st.ResultText(8,trustlisttrustcomment);
\r
270 st.ResultText(9,messagecountstr);
\r
272 if(publickey.size()>8)
\r
274 keypart=publickey.substr(3,5);
\r
278 content+="<td title=\""+publickey+"\">";
\r
279 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";
\r
280 content+="<a href=\"peerdetails.htm?identityid="+identityid+"\">";
\r
283 content+=SanitizeOutput(name+keypart)+"...";
\r
287 content+="[Unknown Name]";
\r
291 content+="<td "+GetClassString(localmessagetrust)+">";
\r
292 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";
\r
293 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\" class=\"small90\"></td>";
\r
294 content+="<td "+GetClassString(localmessagetrust)+">";
\r
295 content+="<input type=\"hidden\" name=\"oldmessagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\">";
\r
296 content+="<input type=\"text\" name=\"messagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\" maxlength=\"50\" class=\"small90\">";
\r
298 content+="<td "+GetClassString(peermessagetrust)+">";
\r
299 content+=peermessagetrust+"</td>";
\r
300 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
301 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";
\r
302 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\" class=\"small90\"></td>";
\r
303 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
304 content+="<input type=\"hidden\" name=\"oldtrustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\">";
\r
305 content+="<input type=\"text\" name=\"trustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\" maxlength=\"50\" class=\"small90\">";
\r
307 content+="<td "+GetClassString(peertrustlisttrust)+">";
\r
308 content+=peertrustlisttrust+"</td>";
\r
309 content+="<td>"+messagecountstr+"</td>";
\r
310 content+="</tr>\r\n";
\r
315 if(startrow>0 || startrow+rowsperpage<identitycount)
\r
317 std::string tempstr;
\r
323 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
324 content+="<td colspan=\"3\" align=\"left\"><a href=\"peertrust.htm?"+BuildQueryString(startrow-rowsperpage,namesearch,sortby,sortorder)+"\"><-- Previous Page</a></td>";
\r
327 if(startrow+rowsperpage<identitycount)
\r
331 content+="<td></td>";
\r
334 content+="<td colspan=\"3\" align=\"right\"><a href=\"peertrust.htm?"+BuildQueryString(startrow+rowsperpage,namesearch,sortby,sortorder)+"\">Next Page --></a></td>";
\r
339 content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Trust\"></center></td></tr>";
\r
340 content+="</table>";
\r
341 content+="</form>";
\r
343 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
346 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)
\r
349 std::string tempstr;
\r
351 StringFunctions::Convert(trustlevel,tempint);
\r
353 StringFunctions::Convert(tempint,tempstr);
\r
357 return "class=\"trust"+tempstr+"\"";
\r
365 const std::string PeerTrustPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)
\r
367 if(sortname==currentsortby)
\r
369 if(currentsortorder=="ASC")
\r
380 return currentsortorder;
\r
384 const bool PeerTrustPage::WillHandleURI(const std::string &uri)
\r
386 if(uri.find("peertrust.")!=std::string::npos)
\r