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