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 int localmessagetrust=0;
\r
75 int localtrustlisttrust=0;
\r
78 CreateArgArray(queryvars,"identityid",identityids);
\r
79 CreateArgArray(queryvars,"oldlocalmessagetrust",oldlmt);
\r
80 CreateArgArray(queryvars,"localmessagetrust",lmt);
\r
81 CreateArgArray(queryvars,"oldlocaltrustlisttrust",oldltlt);
\r
82 CreateArgArray(queryvars,"localtrustlisttrust",ltlt);
\r
84 SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=?, LocalTrustListTrust=? WHERE IdentityID=?;");
\r
86 for(int i=0; i<identityids.size(); i++)
\r
88 if(oldlmt[i]!=lmt[i] || oldltlt[i]!=ltlt[i])
\r
90 StringFunctions::Convert(lmt[i],localmessagetrust);
\r
91 StringFunctions::Convert(ltlt[i],localtrustlisttrust);
\r
92 StringFunctions::Convert(identityids[i],identityid);
\r
96 update.Bind(0,localmessagetrust);
\r
104 update.Bind(1,localtrustlisttrust);
\r
110 update.Bind(2,identityid);
\r
118 // if startrow is specified
\r
119 if(queryvars.find("startrow")!=queryvars.end())
\r
121 startrowstr=(*queryvars.find("startrow")).second;
\r
122 // convert back and forth, just in case a number wasn't passed in startrow
\r
123 StringFunctions::Convert(startrowstr,startrow);
\r
128 StringFunctions::Convert(startrow,startrowstr);
\r
132 if(queryvars.find("sortby")!=queryvars.end())
\r
134 sortby=(*queryvars.find("sortby")).second;
\r
142 if(queryvars.find("sortorder")!=queryvars.end())
\r
144 sortorder=(*queryvars.find("sortorder")).second;
\r
151 // if we are searching by name
\r
152 if(queryvars.find("namesearch")!=queryvars.end())
\r
154 namesearch=(*queryvars.find("namesearch")).second;
\r
157 content+="<h2>Peer Trust</h2>";
\r
158 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
159 content+="<div style=\"text-align:center;\">";
\r
160 content+="<form name=\"frmsearch\" method=\"POST\" action=\"peertrust.htm\">";
\r
161 content+="<input type=\"text\" name=\"namesearch\" value=\""+SanitizeOutput(namesearch)+"\">";
\r
162 content+="<input type=\"submit\" value=\"Search\">";
\r
163 content+="</form>";
\r
165 content+="<form name=\"frmtrust\" method=\"POST\">";
\r
166 content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";
\r
167 content+="<input type=\"hidden\" name=\"startrow\" value=\""+startrowstr+"\">";
\r
170 content+="<input type=\"hidden\" name=\"namesearch\" value=\""+SanitizeOutput(namesearch)+"\">";
\r
172 content+="<table>";
\r
173 content+="<tr><th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"Name",ReverseSort("Name",sortby,sortorder))+"\">Name</a></th>";
\r
174 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalMessageTrust",ReverseSort("LocalMessageTrust",sortby,sortorder))+"\">Local Message Trust</a></th>";
\r
175 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerMessageTrust",ReverseSort("PeerMessageTrust",sortby,sortorder))+"\">Peer Message Trust</a></th>";
\r
176 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalTrustListTrust",ReverseSort("LocalTrustListTrust",sortby,sortorder))+"\">Local Trust List Trust</a></th>";
\r
177 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerTrustListTrust",ReverseSort("PeerTrustListTrust",sortby,sortorder))+"\">Peer Trust List Trust</a></th></tr>";
\r
179 // get count of identities we are showing
\r
180 sql="SELECT COUNT(*) FROM tblIdentity";
\r
183 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
186 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
189 st.Bind(0,namesearch);
\r
192 st.ResultInt(0,identitycount);
\r
195 sql="SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey FROM tblIdentity";
\r
198 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
203 sql+=" Name COLLATE NOCASE";
\r
211 sql+=" "+sortorder;
\r
213 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
214 st=m_db->Prepare(sql);
\r
217 st.Bind(0,namesearch);
\r
221 while(st.RowReturned())
\r
223 std::string identityid;
\r
225 std::string localmessagetrust;
\r
226 std::string peermessagetrust;
\r
227 std::string localtrustlisttrust;
\r
228 std::string peertrustlisttrust;
\r
229 std::string publickey;
\r
230 std::string keypart="";
\r
232 StringFunctions::Convert(count,countstr);
\r
234 st.ResultText(0,identityid);
\r
235 st.ResultText(1,name);
\r
236 st.ResultText(2,localmessagetrust);
\r
237 st.ResultText(3,peermessagetrust);
\r
238 st.ResultText(4,localtrustlisttrust);
\r
239 st.ResultText(5,peertrustlisttrust);
\r
240 st.ResultText(6,publickey);
\r
242 if(publickey.size()>8)
\r
244 keypart=publickey.substr(3,5);
\r
248 content+="<td title=\""+publickey+"\">";
\r
249 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";
\r
250 content+="<a href=\"peerdetails.htm?identityid="+identityid+"\">";
\r
253 content+=SanitizeOutput(name+keypart)+"...";
\r
257 content+="[Unknown Name]";
\r
261 content+="<td "+GetClassString(localmessagetrust)+">";
\r
262 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";
\r
263 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
264 content+="<td "+GetClassString(peermessagetrust)+">";
\r
265 content+=peermessagetrust+"</td>";
\r
266 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
267 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";
\r
268 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
269 content+="<td "+GetClassString(peertrustlisttrust)+">";
\r
270 content+=peertrustlisttrust+"</td>";
\r
276 if(startrow>0 || startrow+rowsperpage<identitycount)
\r
278 std::string tempstr;
\r
284 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
285 content+="<td colspan=\"2\" align=\"left\"><a href=\"peertrust.htm?"+BuildQueryString(startrow-rowsperpage,namesearch,sortby,sortorder)+"\"><-- Previous Page</a></td>";
\r
288 if(startrow+rowsperpage<identitycount)
\r
292 content+="<td></td>";
\r
295 content+="<td colspan=\"2\" align=\"right\"><a href=\"peertrust.htm?"+BuildQueryString(startrow+rowsperpage,namesearch,sortby,sortorder)+"\">Next Page --></a></td>";
\r
300 content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Trust\"></center></td></tr>";
\r
301 content+="</table>";
\r
302 content+="</form>";
\r
304 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
307 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)
\r
310 std::string tempstr;
\r
312 StringFunctions::Convert(trustlevel,tempint);
\r
314 StringFunctions::Convert(tempint,tempstr);
\r
318 return "class=\"trust"+tempstr+"\"";
\r
326 const std::string PeerTrustPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)
\r
328 if(sortname==currentsortby)
\r
330 if(currentsortorder=="ASC")
\r
341 return currentsortorder;
\r
345 const bool PeerTrustPage::WillHandleURI(const std::string &uri)
\r
347 if(uri.find("peertrust.")!=std::string::npos)
\r