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
94 update.Bind(0,localmessagetrust);
\r
95 update.Bind(1,localtrustlisttrust);
\r
96 update.Bind(2,identityid);
\r
104 // if startrow is specified
\r
105 if(queryvars.find("startrow")!=queryvars.end())
\r
107 startrowstr=(*queryvars.find("startrow")).second;
\r
108 // convert back and forth, just in case a number wasn't passed in startrow
\r
109 StringFunctions::Convert(startrowstr,startrow);
\r
114 StringFunctions::Convert(startrow,startrowstr);
\r
118 if(queryvars.find("sortby")!=queryvars.end())
\r
120 sortby=(*queryvars.find("sortby")).second;
\r
128 if(queryvars.find("sortorder")!=queryvars.end())
\r
130 sortorder=(*queryvars.find("sortorder")).second;
\r
137 // if we are searching by name
\r
138 if(queryvars.find("namesearch")!=queryvars.end())
\r
140 namesearch=(*queryvars.find("namesearch")).second;
\r
143 content+="<h2>Peer Trust</h2>";
\r
144 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
145 content+="<div style=\"text-align:center;\">";
\r
146 content+="<form name=\"frmsearch\" method=\"POST\" action=\"peertrust.htm\">";
\r
147 content+="<input type=\"text\" name=\"namesearch\">";
\r
148 content+="<input type=\"submit\" value=\"Search\">";
\r
149 content+="</form>";
\r
151 content+="<form name=\"frmtrust\" method=\"POST\">";
\r
152 content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";
\r
153 content+="<input type=\"hidden\" name=\"startrow\" value=\""+startrowstr+"\">";
\r
154 content+="<table>";
\r
155 content+="<tr><th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"Name",ReverseSort("Name",sortby,sortorder))+"\">Name</a></th>";
\r
156 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalMessageTrust",ReverseSort("LocalMessageTrust",sortby,sortorder))+"\">Local Message Trust</a></th>";
\r
157 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerMessageTrust",ReverseSort("PeerMessageTrust",sortby,sortorder))+"\">Peer Message Trust</a></th>";
\r
158 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalTrustListTrust",ReverseSort("LocalTrustListTrust",sortby,sortorder))+"\">Local Trust List Trust</a></th>";
\r
159 content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerTrustListTrust",ReverseSort("PeerTrustListTrust",sortby,sortorder))+"\">Peer Trust List Trust</a></th></tr>";
\r
161 // get count of identities we are showing
\r
162 sql="SELECT COUNT(*) FROM tblIdentity";
\r
165 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
168 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
171 st.Bind(0,namesearch);
\r
174 st.ResultInt(0,identitycount);
\r
177 sql="SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey FROM tblIdentity";
\r
180 sql+=" WHERE Name LIKE '%' || ? || '%'";
\r
185 sql+=" Name COLLATE NOCASE";
\r
193 sql+=" "+sortorder;
\r
195 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
196 st=m_db->Prepare(sql);
\r
199 st.Bind(0,namesearch);
\r
203 while(st.RowReturned())
\r
205 std::string identityid;
\r
207 std::string localmessagetrust;
\r
208 std::string peermessagetrust;
\r
209 std::string localtrustlisttrust;
\r
210 std::string peertrustlisttrust;
\r
211 std::string publickey;
\r
212 std::string keypart="";
\r
214 StringFunctions::Convert(count,countstr);
\r
216 st.ResultText(0,identityid);
\r
217 st.ResultText(1,name);
\r
218 st.ResultText(2,localmessagetrust);
\r
219 st.ResultText(3,peermessagetrust);
\r
220 st.ResultText(4,localtrustlisttrust);
\r
221 st.ResultText(5,peertrustlisttrust);
\r
222 st.ResultText(6,publickey);
\r
224 if(publickey.size()>8)
\r
226 keypart=publickey.substr(3,5);
\r
230 content+="<td title=\""+publickey+"\">";
\r
231 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";
\r
232 content+="<a href=\"peerdetails.htm?identityid="+identityid+"\">";
\r
235 content+=SanitizeOutput(name+keypart)+"...";
\r
239 content+="[Unknown Name]";
\r
243 content+="<td "+GetClassString(localmessagetrust)+">";
\r
244 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";
\r
245 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
246 content+="<td "+GetClassString(peermessagetrust)+">";
\r
247 content+=peermessagetrust+"</td>";
\r
248 content+="<td "+GetClassString(localtrustlisttrust)+">";
\r
249 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";
\r
250 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";
\r
251 content+="<td "+GetClassString(peertrustlisttrust)+">";
\r
252 content+=peertrustlisttrust+"</td>";
\r
258 if(startrow>0 || startrow+rowsperpage<identitycount)
\r
260 std::string tempstr;
\r
266 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
267 content+="<td colspan=\"2\" align=\"left\"><a href=\"peertrust.htm?"+BuildQueryString(startrow-rowsperpage,namesearch,sortby,sortorder)+"\"><-- Previous Page</a></td>";
\r
270 if(startrow+rowsperpage<identitycount)
\r
274 content+="<td></td>";
\r
277 content+="<td colspan=\"2\" align=\"right\"><a href=\"peertrust.htm?"+BuildQueryString(startrow+rowsperpage,namesearch,sortby,sortorder)+"\">Next Page --></a></td>";
\r
282 content+="<tr><td colspan=\"5\"><input type=\"submit\" value=\"Update Trust\"></td></tr>";
\r
283 content+="</table>";
\r
284 content+="</form>";
\r
286 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
289 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)
\r
292 std::string tempstr;
\r
294 StringFunctions::Convert(trustlevel,tempint);
\r
296 StringFunctions::Convert(tempint,tempstr);
\r
300 return "class=\"trust"+tempstr+"\"";
\r
308 const std::string PeerTrustPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)
\r
310 if(sortname==currentsortby)
\r
312 if(currentsortorder=="ASC")
\r
323 return currentsortorder;
\r
327 const bool PeerTrustPage::WillHandleURI(const std::string &uri)
\r
329 if(uri.find("peertrust.")!=std::string::npos)
\r