version 0.1.8
[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 \r
97                 StringFunctions::Convert(count,countstr);\r
98 \r
99                 st.ResultText(0,identityid);\r
100                 st.ResultText(1,name);\r
101                 st.ResultText(2,localmessagetrust);\r
102                 st.ResultText(3,peermessagetrust);\r
103                 st.ResultText(4,localtrustlisttrust);\r
104                 st.ResultText(5,peertrustlisttrust);\r
105                 st.ResultText(6,publickey);\r
106 \r
107                 content+="<tr>";\r
108                 content+="<td title=\""+publickey+"\">";\r
109                 content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";\r
110                 if(name!="")\r
111                 {\r
112                         content+=name;\r
113                 }\r
114                 else\r
115                 {\r
116                         content+="[Unknown Name]";\r
117                 }\r
118                 content+="</td>";\r
119                 content+="<td "+GetClassString(localmessagetrust)+">";\r
120                 content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";\r
121                 content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
122                 content+="<td "+GetClassString(peermessagetrust)+">";\r
123                 content+=peermessagetrust+"</td>";\r
124                 content+="<td "+GetClassString(localtrustlisttrust)+">";\r
125                 content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";\r
126                 content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
127                 content+="<td "+GetClassString(peertrustlisttrust)+">";\r
128                 content+=peertrustlisttrust+"</td>";\r
129                 content+="</tr>";\r
130                 st.Step();\r
131                 count++;\r
132         }\r
133         \r
134         if(startrow>0 || startrow+rowsperpage<identitycount)\r
135         {\r
136                 int tempint;\r
137                 std::string tempstr;\r
138                 int cols=0;\r
139 \r
140                 content+="<tr>";\r
141                 if(startrow>0)\r
142                 {\r
143                         StringFunctions::Convert(startrow-rowsperpage,tempstr);\r
144                         content+="<td colspan=\"2\" align=\"left\"><a href=\"peertrust.htm?startrow="+tempstr+"\"><-- Previous Page</a></td>";\r
145                         cols+=2;\r
146                 }\r
147                 if(startrow+rowsperpage<identitycount)\r
148                 {\r
149                         StringFunctions::Convert(startrow+rowsperpage,tempstr);\r
150                         while(cols<3)\r
151                         {\r
152                                 content+="<td></td>";\r
153                                 cols++;\r
154                         }\r
155                         content+="<td colspan=\"2\" align=\"right\"><a href=\"peertrust.htm?startrow="+tempstr+"\">Next Page --></a></td>";\r
156                 }\r
157                 content+="</tr>";\r
158         }\r
159 \r
160         content+="<tr><td colspan=\"5\"><input type=\"submit\" value=\"Update Trust\"></td></tr>";\r
161         content+="</table>";\r
162         content+="</form>";\r
163 \r
164         return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
165 }\r
166 \r
167 const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)\r
168 {\r
169         int tempint=0;\r
170         std::string tempstr;\r
171 \r
172         StringFunctions::Convert(trustlevel,tempint);\r
173         tempint/=10;\r
174         StringFunctions::Convert(tempint,tempstr);\r
175 \r
176         if(trustlevel!="")\r
177         {\r
178                 return "class=\"trust"+tempstr+"\"";\r
179         }\r
180         else\r
181         {\r
182                 return "";\r
183         }\r
184 }\r
185 \r
186 const bool PeerTrustPage::WillHandleURI(const std::string &uri)\r
187 {\r
188         if(uri.find("peertrust.")!=std::string::npos)\r
189         {\r
190                 return true;\r
191         }\r
192         else\r
193         {\r
194                 return false;\r
195         }\r
196 }\r