b353243972d0d9e482c0b5cf40f1a531016d7cbe
[fms.git] / src / http / pages / peertrustpage.cpp
1 #include "../../../include/http/pages/peertrustpage.h"\r
2 #include "../../../include/stringfunctions.h"\r
3 \r
4 #ifdef XMEM\r
5         #include <xmem.h>\r
6 #endif\r
7 \r
8 const std::string PeerTrustPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
9 {\r
10         int count=0;\r
11         std::string countstr;\r
12         std::string content="";\r
13         int identitycount=0;            // total number of ids we know\r
14         int rowsperpage=25;                     // how many ids to show per page\r
15         std::string rowsperpagestr;\r
16         int startrow=0;\r
17         std::string startrowstr="0";\r
18 \r
19         StringFunctions::Convert(rowsperpage,rowsperpagestr);\r
20 \r
21         if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="update")\r
22         {\r
23                 std::vector<std::string> identityids;\r
24                 std::vector<std::string> oldlmt;\r
25                 std::vector<std::string> lmt;\r
26                 std::vector<std::string> oldltlt;\r
27                 std::vector<std::string> ltlt;\r
28                 int localmessagetrust=0;\r
29                 int localtrustlisttrust=0;\r
30                 int identityid;\r
31 \r
32                 CreateArgArray(queryvars,"identityid",identityids);\r
33                 CreateArgArray(queryvars,"oldlocalmessagetrust",oldlmt);\r
34                 CreateArgArray(queryvars,"localmessagetrust",lmt);\r
35                 CreateArgArray(queryvars,"oldlocaltrustlisttrust",oldltlt);\r
36                 CreateArgArray(queryvars,"localtrustlisttrust",ltlt);\r
37                 \r
38                 SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=?, LocalTrustListTrust=? WHERE IdentityID=?;");\r
39 \r
40                 for(int i=0; i<identityids.size(); i++)\r
41                 {\r
42                         if(oldlmt[i]!=lmt[i] || oldltlt[i]!=ltlt[i])\r
43                         {\r
44                                 StringFunctions::Convert(lmt[i],localmessagetrust);\r
45                                 StringFunctions::Convert(ltlt[i],localtrustlisttrust);\r
46                                 StringFunctions::Convert(identityids[i],identityid);\r
47 \r
48                                 update.Bind(0,localmessagetrust);\r
49                                 update.Bind(1,localtrustlisttrust);\r
50                                 update.Bind(2,identityid);\r
51                                 update.Step();\r
52                                 update.Reset();\r
53                         }\r
54                 }\r
55 \r
56         }\r
57 \r
58         // if startrow is specified\r
59         if(queryvars.find("startrow")!=queryvars.end())\r
60         {\r
61                 startrowstr=(*queryvars.find("startrow")).second;\r
62                 // convert back and forth, just in case a number wasn't passed in startrow\r
63                 StringFunctions::Convert(startrowstr,startrow);\r
64                 if(startrow<0)\r
65                 {\r
66                         startrow=0;\r
67                 }\r
68                 StringFunctions::Convert(startrow,startrowstr);\r
69         }\r
70 \r
71         content+="<h2>Peer Trust</h2>";\r
72         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
73         content+="<form name=\"frmtrust\" method=\"POST\">";\r
74         content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";\r
75         content+="<input type=\"hidden\" name=\"startrow\" value=\""+startrowstr+"\">";\r
76         content+="<table>";\r
77         content+="<tr><th>Name</th><th>Local Message Trust</th><th>Peer Message Trust</th><th>Local Trust List Trust</th><th>Peer Trust List Trust</th></tr>";\r
78         \r
79         SQLite3DB::Statement st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity;");\r
80         st.Step();\r
81         st.ResultInt(0,identitycount);\r
82         st.Finalize();\r
83 \r
84         st=m_db->Prepare("SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey FROM tblIdentity ORDER BY Name COLLATE NOCASE LIMIT "+startrowstr+","+rowsperpagestr+";");\r
85         st.Step();\r
86 \r
87         while(st.RowReturned())\r
88         {\r
89                 std::string identityid;\r
90                 std::string name;\r
91                 std::string localmessagetrust;\r
92                 std::string peermessagetrust;\r
93                 std::string localtrustlisttrust;\r
94                 std::string peertrustlisttrust;\r
95                 std::string publickey;\r
96                 std::string keypart="";\r
97 \r
98                 StringFunctions::Convert(count,countstr);\r
99 \r
100                 st.ResultText(0,identityid);\r
101                 st.ResultText(1,name);\r
102                 st.ResultText(2,localmessagetrust);\r
103                 st.ResultText(3,peermessagetrust);\r
104                 st.ResultText(4,localtrustlisttrust);\r
105                 st.ResultText(5,peertrustlisttrust);\r
106                 st.ResultText(6,publickey);\r
107 \r
108                 if(publickey.size()>8)\r
109                 {\r
110                         keypart=publickey.substr(3,5);\r
111                 }\r
112 \r
113                 content+="<tr>";\r
114                 content+="<td title=\""+publickey+"\">";\r
115                 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";\r
116                 if(name!="")\r
117                 {\r
118                         content+=SanitizeOutput(name+keypart)+"...";\r
119                 }\r
120                 else\r
121                 {\r
122                         content+="[Unknown Name]";\r
123                 }\r
124                 content+="</td>";\r
125                 content+="<td "+GetClassString(localmessagetrust)+">";\r
126                 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";\r
127                 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
128                 content+="<td "+GetClassString(peermessagetrust)+">";\r
129                 content+=peermessagetrust+"</td>";\r
130                 content+="<td "+GetClassString(localtrustlisttrust)+">";\r
131                 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";\r
132                 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
133                 content+="<td "+GetClassString(peertrustlisttrust)+">";\r
134                 content+=peertrustlisttrust+"</td>";\r
135                 content+="</tr>";\r
136                 st.Step();\r
137                 count++;\r
138         }\r
139         \r
140         if(startrow>0 || startrow+rowsperpage<identitycount)\r
141         {\r
142                 std::string tempstr;\r
143                 int cols=0;\r
144 \r
145                 content+="<tr>";\r
146                 if(startrow>0)\r
147                 {\r
148                         StringFunctions::Convert(startrow-rowsperpage,tempstr);\r
149                         content+="<td colspan=\"2\" align=\"left\"><a href=\"peertrust.htm?startrow="+tempstr+"\"><-- Previous Page</a></td>";\r
150                         cols+=2;\r
151                 }\r
152                 if(startrow+rowsperpage<identitycount)\r
153                 {\r
154                         StringFunctions::Convert(startrow+rowsperpage,tempstr);\r
155                         while(cols<3)\r
156                         {\r
157                                 content+="<td></td>";\r
158                                 cols++;\r
159                         }\r
160                         content+="<td colspan=\"2\" align=\"right\"><a href=\"peertrust.htm?startrow="+tempstr+"\">Next Page --></a></td>";\r
161                 }\r
162                 content+="</tr>";\r
163         }\r
164 \r
165         content+="<tr><td colspan=\"5\"><input type=\"submit\" value=\"Update Trust\"></td></tr>";\r
166         content+="</table>";\r
167         content+="</form>";\r
168 \r
169         return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
170 }\r
171 \r
172 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)\r
173 {\r
174         int tempint=0;\r
175         std::string tempstr;\r
176 \r
177         StringFunctions::Convert(trustlevel,tempint);\r
178         tempint/=10;\r
179         StringFunctions::Convert(tempint,tempstr);\r
180 \r
181         if(trustlevel!="")\r
182         {\r
183                 return "class=\"trust"+tempstr+"\"";\r
184         }\r
185         else\r
186         {\r
187                 return "";\r
188         }\r
189 }\r
190 \r
191 const bool PeerTrustPage::WillHandleURI(const std::string &uri)\r
192 {\r
193         if(uri.find("peertrust.")!=std::string::npos)\r
194         {\r
195                 return true;\r
196         }\r
197         else\r
198         {\r
199                 return false;\r
200         }\r
201 }\r