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
168 content+="<table>";
\r
169 content+="<tr><th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"Name",ReverseSort("Name",sortby,sortorder))+"\">Name</a></th>";
\r
170 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalMessageTrust",ReverseSort("LocalMessageTrust",sortby,sortorder))+"\">Local Message Trust</a></th>";
\r
171 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerMessageTrust",ReverseSort("PeerMessageTrust",sortby,sortorder))+"\">Peer Message Trust</a></th>";
\r
172 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalTrustListTrust",ReverseSort("LocalTrustListTrust",sortby,sortorder))+"\">Local Trust List Trust</a></th>";
\r
173 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerTrustListTrust",ReverseSort("PeerTrustListTrust",sortby,sortorder))+"\">Peer Trust List Trust</a></th></tr>";
\r
175 // get count of identities we are showing
\r
176 sql="SELECT COUNT(*) FROM tblIdentity";
\r
179 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
182 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
185 st.Bind(0,namesearch);
\r
188 st.ResultInt(0,identitycount);
\r
191 sql="SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey FROM tblIdentity";
\r
194 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
199 sql+=" Name COLLATE NOCASE";
\r
207 sql+=" "+sortorder;
\r
209 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
210 st=m_db->Prepare(sql);
\r
213 st.Bind(0,namesearch);
\r
217 while(st.RowReturned())
\r
219 std::string identityid;
\r
221 std::string localmessagetrust;
\r
222 std::string peermessagetrust;
\r
223 std::string localtrustlisttrust;
\r
224 std::string peertrustlisttrust;
\r
225 std::string publickey;
\r
226 std::string keypart="";
\r
228 StringFunctions::Convert(count,countstr);
\r
230 st.ResultText(0,identityid);
\r
231 st.ResultText(1,name);
\r
232 st.ResultText(2,localmessagetrust);
\r
233 st.ResultText(3,peermessagetrust);
\r
234 st.ResultText(4,localtrustlisttrust);
\r
235 st.ResultText(5,peertrustlisttrust);
\r
236 st.ResultText(6,publickey);
\r
238 if(publickey.size()>8)
\r
240 keypart=publickey.substr(3,5);
\r
244 content+="<td title=\""+publickey+"\">";
\r
245 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";
\r
246 content+="<a href=\"peerdetails.htm?identityid="+identityid+"\">";
\r
249 content+=SanitizeOutput(name+keypart)+"...";
\r
253 content+="[Unknown Name]";
\r
257 content+="<td "+GetClassString(localmessagetrust)+">";
\r
258 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";
\r
259 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
260 content+="<td "+GetClassString(peermessagetrust)+">";
\r
261 content+=peermessagetrust+"</td>";
\r
262 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
263 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";
\r
264 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
265 content+="<td "+GetClassString(peertrustlisttrust)+">";
\r
266 content+=peertrustlisttrust+"</td>";
\r
272 if(startrow>0 || startrow+rowsperpage<identitycount)
\r
274 std::string tempstr;
\r
280 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
281 content+="<td colspan=\"2\" align=\"left\"><a href=\"peertrust.htm?"+BuildQueryString(startrow-rowsperpage,namesearch,sortby,sortorder)+"\"><-- Previous Page</a></td>";
\r
284 if(startrow+rowsperpage<identitycount)
\r
288 content+="<td></td>";
\r
291 content+="<td colspan=\"2\" align=\"right\"><a href=\"peertrust.htm?"+BuildQueryString(startrow+rowsperpage,namesearch,sortby,sortorder)+"\">Next Page --></a></td>";
\r
296 content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Trust\"></center></td></tr>";
\r
297 content+="</table>";
\r
298 content+="</form>";
\r
300 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
303 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)
\r
306 std::string tempstr;
\r
308 StringFunctions::Convert(trustlevel,tempint);
\r
310 StringFunctions::Convert(tempint,tempstr);
\r
314 return "class=\"trust"+tempstr+"\"";
\r
322 const std::string PeerTrustPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)
\r
324 if(sortname==currentsortby)
\r
326 if(currentsortorder=="ASC")
\r
337 return currentsortorder;
\r
341 const bool PeerTrustPage::WillHandleURI(const std::string &uri)
\r
343 if(uri.find("peertrust.")!=std::string::npos)
\r