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 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 '%' || ? || '%'";
\r
200 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
203 st.Bind(0,namesearch);
\r
206 st.ResultInt(0,identitycount);
\r
209 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
212 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
214 sql+=" GROUP BY tblIdentity.IdentityID";
\r
218 sql+=" Name COLLATE NOCASE";
\r
226 sql+=" "+sortorder;
\r
228 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
229 st=m_db->Prepare(sql);
\r
232 st.Bind(0,namesearch);
\r
236 while(st.RowReturned())
\r
238 std::string identityid;
\r
240 std::string localmessagetrust;
\r
241 std::string peermessagetrust;
\r
242 std::string localtrustlisttrust;
\r
243 std::string peertrustlisttrust;
\r
244 std::string publickey;
\r
245 std::string keypart="";
\r
246 std::string messagetrustcomment="";
\r
247 std::string trustlisttrustcomment="";
\r
248 std::string messagecountstr="";
\r
250 StringFunctions::Convert(count,countstr);
\r
252 st.ResultText(0,identityid);
\r
253 st.ResultText(1,name);
\r
254 st.ResultText(2,localmessagetrust);
\r
255 st.ResultText(3,peermessagetrust);
\r
256 st.ResultText(4,localtrustlisttrust);
\r
257 st.ResultText(5,peertrustlisttrust);
\r
258 st.ResultText(6,publickey);
\r
259 st.ResultText(7,messagetrustcomment);
\r
260 st.ResultText(8,trustlisttrustcomment);
\r
261 st.ResultText(9,messagecountstr);
\r
263 if(publickey.size()>8)
\r
265 keypart=publickey.substr(3,5);
\r
269 content+="<td title=\""+publickey+"\">";
\r
270 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";
\r
271 content+="<a href=\"peerdetails.htm?identityid="+identityid+"\">";
\r
274 content+=SanitizeOutput(name+keypart)+"...";
\r
278 content+="[Unknown Name]";
\r
282 content+="<td "+GetClassString(localmessagetrust)+">";
\r
283 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";
\r
284 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\" class=\"small90\"></td>";
\r
285 content+="<td "+GetClassString(localmessagetrust)+">";
\r
286 content+="<input type=\"hidden\" name=\"oldmessagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\">";
\r
287 content+="<input type=\"text\" name=\"messagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\" maxlength=\"50\" class=\"small90\">";
\r
289 content+="<td "+GetClassString(peermessagetrust)+">";
\r
290 content+=peermessagetrust+"</td>";
\r
291 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
292 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";
\r
293 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\" class=\"small90\"></td>";
\r
294 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
295 content+="<input type=\"hidden\" name=\"oldtrustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\">";
\r
296 content+="<input type=\"text\" name=\"trustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\" maxlength=\"50\" class=\"small90\">";
\r
298 content+="<td "+GetClassString(peertrustlisttrust)+">";
\r
299 content+=peertrustlisttrust+"</td>";
\r
300 content+="<td>"+messagecountstr+"</td>";
\r
301 content+="</tr>\r\n";
\r
306 if(startrow>0 || startrow+rowsperpage<identitycount)
\r
308 std::string tempstr;
\r
314 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
315 content+="<td colspan=\"3\" align=\"left\"><a href=\"peertrust.htm?"+BuildQueryString(startrow-rowsperpage,namesearch,sortby,sortorder)+"\"><-- Previous Page</a></td>";
\r
318 if(startrow+rowsperpage<identitycount)
\r
322 content+="<td></td>";
\r
325 content+="<td colspan=\"3\" align=\"right\"><a href=\"peertrust.htm?"+BuildQueryString(startrow+rowsperpage,namesearch,sortby,sortorder)+"\">Next Page --></a></td>";
\r
330 content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Trust\"></center></td></tr>";
\r
331 content+="</table>";
\r
332 content+="</form>";
\r
334 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
337 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)
\r
340 std::string tempstr;
\r
342 StringFunctions::Convert(trustlevel,tempint);
\r
344 StringFunctions::Convert(tempint,tempstr);
\r
348 return "class=\"trust"+tempstr+"\"";
\r
356 const std::string PeerTrustPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)
\r
358 if(sortname==currentsortby)
\r
360 if(currentsortorder=="ASC")
\r
371 return currentsortorder;
\r
375 const bool PeerTrustPage::WillHandleURI(const std::string &uri)
\r
377 if(uri.find("peertrust.")!=std::string::npos)
\r