version 0.3.29
[fms.git] / src / http / pages / peerdetailspage.cpp
1 #include "../../../include/http/pages/peerdetailspage.h"\r
2 #include "../../../include/stringfunctions.h"\r
3 #include "../../../include/option.h"\r
4 #include "../../../include/global.h"\r
5 \r
6 #ifdef XMEM\r
7         #include <xmem.h>\r
8 #endif\r
9 \r
10 const std::string PeerDetailsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
11 {\r
12         std::string content="";\r
13         int identityid=0;\r
14         std::string identityidstr="";\r
15         std::string name;\r
16         std::string publickey;\r
17         std::string messagetrust;\r
18         std::string trustlisttrust;\r
19         std::string lastseen="";\r
20         std::string dateadded="";\r
21         std::string addedmethod="";\r
22         std::string usk="";\r
23         std::string fcphost="127.0.0.1";\r
24         std::string hidden="";\r
25         int freesiteedition=-1;\r
26         std::string publishtrustlist="";\r
27         std::string messagebase="";\r
28 \r
29         Option option(m_db);\r
30         std::string fproxyport="8888";\r
31         option.Get("FProxyPort",fproxyport);\r
32         option.Get("MessageBase",messagebase);\r
33         option.Get("FCPHost",fcphost);\r
34 \r
35         if(queryvars.find("identityid")!=queryvars.end() && (*queryvars.find("identityid")).second!="")\r
36         {\r
37                 identityidstr=(*queryvars.find("identityid")).second;\r
38                 StringFunctions::Convert((*queryvars.find("identityid")).second,identityid);\r
39         }\r
40 \r
41         if(identityid!=0 && queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="deletemessages" && ValidateFormPassword(queryvars))\r
42         {\r
43                 SQLite3DB::Statement del=m_db->Prepare("DELETE FROM tblMessage WHERE IdentityID=?;");\r
44                 del.Bind(0,identityid);\r
45                 del.Step();\r
46         }\r
47 \r
48         if(identityid!=0 && queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="hide" && ValidateFormPassword(queryvars))\r
49         {\r
50                 SQLite3DB::Statement del=m_db->Prepare("UPDATE tblIdentity SET Hidden='true' WHERE IdentityID=?;");\r
51                 del.Bind(0,identityid);\r
52                 del.Step();\r
53         }\r
54         \r
55         if(identityid!=0 && queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="show" && ValidateFormPassword(queryvars))\r
56         {\r
57                 SQLite3DB::Statement del=m_db->Prepare("UPDATE tblIdentity SET Hidden='false' WHERE IdentityID=?;");\r
58                 del.Bind(0,identityid);\r
59                 del.Step();\r
60         }\r
61 \r
62         SQLite3DB::Statement st=m_db->Prepare("SELECT Name,PublicKey,DateAdded,LastSeen,AddedMethod,Hidden,FreesiteEdition,PublishTrustList FROM tblIdentity WHERE IdentityID=?;");\r
63         st.Bind(0,identityid);\r
64         st.Step();\r
65 \r
66         content+="<table>";\r
67         if(st.RowReturned())\r
68         {\r
69                 st.ResultText(0,name);\r
70                 st.ResultText(1,publickey);\r
71                 st.ResultText(2,dateadded);\r
72                 st.ResultText(3,lastseen);\r
73                 st.ResultText(4,addedmethod);\r
74                 st.ResultText(5,hidden);\r
75                 if(st.ResultNull(6)==false)\r
76                 {\r
77                         st.ResultInt(6,freesiteedition);\r
78                 }\r
79                 st.ResultText(7,publishtrustlist);\r
80 \r
81                 usk=publickey;\r
82                 if(freesiteedition>=0 && usk.find("SSK@")==0)\r
83                 {\r
84                         std::string editionstr="";\r
85                         usk.erase(0,3);\r
86                         StringFunctions::Convert(freesiteedition,editionstr);\r
87                         usk="USK"+usk+messagebase+"/"+editionstr+"/";\r
88                 }\r
89                 else\r
90                 {\r
91                         usk="";\r
92                 }\r
93 \r
94                 content+="<tr><td>Name</td><td>"+SanitizeOutput(name)+"</td></tr>";\r
95                 content+="<tr><td>Public Key</td><td class=\"smaller\">"+SanitizeOutput(publickey)+"</td></tr>";\r
96                 if(usk!="")\r
97                 {\r
98                         content+="<tr><td>Freesite</td><td class=\"smaller\"><a href=\"http://"+fcphost+":"+fproxyport+"/"+SanitizeOutput(usk)+"\">"+SanitizeOutput(usk)+"</a></td></tr>";\r
99                 }\r
100                 if(publishtrustlist=="true")\r
101                 {\r
102                         std::string lastseendate=lastseen;\r
103                         if(lastseendate.size()>=10)\r
104                         {\r
105                                 lastseendate=lastseendate.substr(0,10);\r
106                         }\r
107                         content+="<tr><td>Trust List XML</td><td class=\"smaller\"><a href=\"http://"+fcphost+":"+fproxyport+"/"+SanitizeOutput(publickey)+messagebase+"|"+lastseendate+"|TrustList|0.xml\">Trust List</a></td></tr>";\r
108                 }\r
109                 content+="<tr><td>Date Added</td><td>"+dateadded+"</td></tr>";\r
110                 content+="<tr><td>Last Seen</td><td>"+lastseen+"</td></tr>";\r
111                 content+="<tr><td>Added Method</td><td class=\"smaller\">"+SanitizeOutput(addedmethod)+"</td></tr>";\r
112                 content+="<tr><td>Hidden in Main Peer Trust Page</td>";\r
113                 content+="<td>"+hidden;\r
114                 content+="&nbsp;<form name=\"frmhidden\" method=\"POST\">";\r
115                 content+=CreateFormPassword();\r
116                 content+="<input type=\"hidden\" name=\"identityid\" value=\""+identityidstr+"\">";\r
117                 if(hidden=="false")\r
118                 {\r
119                         content+="<input type=\"hidden\" name=\"formaction\" value=\"hide\">";\r
120                         content+="<input type=\"submit\" value=\"Hide\">";\r
121                 }\r
122                 else\r
123                 {\r
124                         content+="<input type=\"hidden\" name=\"formaction\" value=\"show\">";\r
125                         content+="<input type=\"submit\" value=\"Show\">";\r
126                 }\r
127                 content+="</form>";\r
128                 content+="</td></tr>";\r
129         }\r
130 \r
131         // get message count posted by this identity\r
132         st=m_db->Prepare("SELECT COUNT(MessageID) FROM tblMessage WHERE IdentityID=?;");\r
133         st.Bind(0,identityid);\r
134         st.Step();\r
135 \r
136         if(st.RowReturned())\r
137         {\r
138                 std::string messagecountstr="0";\r
139                 st.ResultText(0,messagecountstr);\r
140                 content+="<tr>";\r
141                 content+="<td>Message Count</td>";\r
142                 content+="<td>"+messagecountstr;\r
143                 content+="&nbsp;&nbsp;<form name=\"frmdeletemessages\" method=\"POST\">";\r
144                 content+=CreateFormPassword();\r
145                 content+="<input type=\"hidden\" name=\"identityid\" value=\""+identityidstr+"\">";\r
146                 content+="<input type=\"hidden\" name=\"formaction\" value=\"deletemessages\">";\r
147                 content+="<input type=\"submit\" value=\"Delete Messages\">";\r
148                 content+="</form>";\r
149                 content+="</td>";\r
150                 content+="</tr>";\r
151         }\r
152 \r
153         content+="</table>";\r
154 \r
155 \r
156         st=m_db->Prepare("SELECT Name,PublicKey,MessageTrust,TrustListTrust,tblIdentity.IdentityID,tblPeerTrust.MessageTrustComment,tblPeerTrust.TrustListTrustComment FROM tblPeerTrust INNER JOIN tblIdentity ON tblPeerTrust.TargetIdentityID=tblIdentity.IdentityID WHERE tblPeerTrust.IdentityID=? ORDER BY Name COLLATE NOCASE;");\r
157         st.Bind(0,identityid);\r
158         st.Step();\r
159 \r
160         content+="<table>";\r
161         content+="<tr><th colspan=\"5\">";\r
162         content+="Trust List of this identity";\r
163         content+="</th></tr>";\r
164         content+="<tr><td></td><th>Message Trust</th><th>Message Comment</th><th>Trust List Trust</th><th>Trust Comment</th></tr>";\r
165         while(st.RowReturned())\r
166         {\r
167                 std::string thisid="";\r
168                 std::string messagetrustcomment="";\r
169                 std::string trustlisttrustcomment="";\r
170 \r
171                 st.ResultText(0,name);\r
172                 st.ResultText(1,publickey);\r
173                 st.ResultText(2,messagetrust);\r
174                 st.ResultText(3,trustlisttrust);\r
175                 st.ResultText(4,thisid);\r
176                 st.ResultText(5,messagetrustcomment);\r
177                 st.ResultText(6,trustlisttrustcomment);\r
178 \r
179                 content+="<tr>";\r
180                 content+="<td><a href=\"peerdetails.htm?identityid="+thisid+"\">"+SanitizeOutput(CreateShortIdentityName(name,publickey))+"</a></td>";\r
181                 content+="<td "+GetClassString(messagetrust)+">"+messagetrust+"</td>";\r
182                 content+="<td>"+SanitizeOutput(messagetrustcomment)+"</td>";\r
183                 content+="<td "+GetClassString(trustlisttrust)+">"+trustlisttrust+"</td>";\r
184                 content+="<td>"+SanitizeOutput(trustlisttrustcomment)+"</td>";\r
185                 content+="</tr>\r\n";\r
186 \r
187                 st.Step();\r
188         }\r
189 \r
190         st=m_db->Prepare("SELECT Name,PublicKey,MessageTrust,TrustListTrust,tblIdentity.IdentityID,tblPeerTrust.MessageTrustComment,tblPeerTrust.TrustListTrustComment FROM tblPeerTrust INNER JOIN tblIdentity ON tblPeerTrust.IdentityID=tblIdentity.IdentityID WHERE tblPeerTrust.TargetIdentityID=? ORDER BY Name COLLATE NOCASE;");\r
191         st.Bind(0,identityid);\r
192         st.Step();\r
193 \r
194         content+="<tr><th colspan=\"5\"><hr></th></tr>";\r
195         content+="<tr><th colspan=\"5\">";\r
196         content+="Trust of this identity from other identities";\r
197         content+="</th></tr>";\r
198         content+="<tr><td></td><th>Message Trust</th><th>Message Comment</th><th>Trust List Trust</th><th>Trust Comment</th></tr>";\r
199         while(st.RowReturned())\r
200         {\r
201                 std::string thisid="";\r
202                 std::string messagetrustcomment="";\r
203                 std::string trustlisttrustcomment="";\r
204 \r
205                 st.ResultText(0,name);\r
206                 st.ResultText(1,publickey);\r
207                 st.ResultText(2,messagetrust);\r
208                 st.ResultText(3,trustlisttrust);\r
209                 st.ResultText(4,thisid);\r
210                 st.ResultText(5,messagetrustcomment);\r
211                 st.ResultText(6,trustlisttrustcomment);\r
212 \r
213                 content+="<tr>";\r
214                 content+="<td><a href=\"peerdetails.htm?identityid="+thisid+"\">"+SanitizeOutput(CreateShortIdentityName(name,publickey))+"</a></td>";\r
215                 content+="<td "+GetClassString(messagetrust)+">"+messagetrust+"</td>";\r
216                 content+="<td>"+SanitizeOutput(messagetrustcomment)+"</td>";\r
217                 content+="<td "+GetClassString(trustlisttrust)+">"+trustlisttrust+"</td>";\r
218                 content+="<td>"+SanitizeOutput(trustlisttrustcomment)+"</td>";\r
219                 content+="</tr>";\r
220 \r
221                 st.Step();\r
222         }\r
223         content+="</table>";\r
224 \r
225         return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
226 }\r
227 \r
228 const std::string PeerDetailsPage::GetClassString(const std::string &trustlevel)\r
229 {\r
230         int tempint=0;\r
231         std::string tempstr;\r
232 \r
233         StringFunctions::Convert(trustlevel,tempint);\r
234         tempint/=10;\r
235         StringFunctions::Convert(tempint,tempstr);\r
236 \r
237         if(trustlevel!="")\r
238         {\r
239                 return "class=\"trust"+tempstr+"\"";\r
240         }\r
241         else\r
242         {\r
243                 return "";\r
244         }\r
245 }\r
246 \r
247 const bool PeerDetailsPage::WillHandleURI(const std::string &uri)\r
248 {\r
249         if(uri.find("peerdetails.")!=std::string::npos)\r
250         {\r
251                 return true;\r
252         }\r
253         else\r
254         {\r
255                 return false;\r
256         }\r
257 }\r