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