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