version 0.1.14
[fms.git] / src / http / pages / peerdetailspage.cpp
1 #include "../../../include/http/pages/peerdetailspage.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 PeerDetailsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
9 {\r
10         std::string content="";\r
11         int identityid=0;\r
12         std::string identityidstr="";\r
13         std::string name;\r
14         std::string publickey;\r
15         std::string messagetrust;\r
16         std::string trustlisttrust;\r
17         std::string keypart="";\r
18         std::string lastseen="";\r
19         std::string dateadded="";\r
20 \r
21         if(queryvars.find("identityid")!=queryvars.end() && (*queryvars.find("identityid")).second!="")\r
22         {\r
23                 identityidstr=(*queryvars.find("identityid")).second;\r
24                 StringFunctions::Convert((*queryvars.find("identityid")).second,identityid);\r
25         }\r
26 \r
27         if(identityid!=0 && queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="deletemessages")\r
28         {\r
29                 SQLite3DB::Statement del=m_db->Prepare("DELETE FROM tblMessage WHERE IdentityID=?;");\r
30                 del.Bind(0,identityid);\r
31                 del.Step();\r
32         }\r
33 \r
34         SQLite3DB::Statement st=m_db->Prepare("SELECT Name,PublicKey,DateAdded,LastSeen FROM tblIdentity WHERE IdentityID=?;");\r
35         st.Bind(0,identityid);\r
36         st.Step();\r
37 \r
38         content+="<table>";\r
39         if(st.RowReturned())\r
40         {\r
41                 st.ResultText(0,name);\r
42                 st.ResultText(1,publickey);\r
43                 st.ResultText(2,dateadded);\r
44                 st.ResultText(3,lastseen);\r
45 \r
46                 content+="<tr><td>Name</td><td>"+SanitizeOutput(name)+"</td></tr>";\r
47                 content+="<tr><td>Public Key</td><td class=\"smaller\">"+SanitizeOutput(publickey)+"</td></tr>";\r
48                 content+="<tr><td>Date Added</td><td>"+dateadded+"</td></tr>";\r
49                 content+="<tr><td>Last Seen</td><td>"+lastseen+"</td></tr>";\r
50         }\r
51 \r
52         // get message count posted by this identity\r
53         st=m_db->Prepare("SELECT COUNT(MessageID) FROM tblMessage WHERE IdentityID=?;");\r
54         st.Bind(0,identityid);\r
55         st.Step();\r
56 \r
57         if(st.RowReturned())\r
58         {\r
59                 std::string messagecountstr="0";\r
60                 st.ResultText(0,messagecountstr);\r
61                 content+="<tr>";\r
62                 content+="<td>Message Count</td>";\r
63                 content+="<td>"+messagecountstr;\r
64                 content+="&nbsp;&nbsp;<form name=\"frmdeletemessages\" method=\"POST\">";\r
65                 content+="<input type=\"hidden\" name=\"identityid\" value=\""+identityidstr+"\">";\r
66                 content+="<input type=\"hidden\" name=\"formaction\" value=\"deletemessages\">";\r
67                 content+="<input type=\"submit\" value=\"Delete Messages\">";\r
68                 content+="</form>";\r
69                 content+="</td>";\r
70                 content+="</tr>";\r
71         }\r
72 \r
73         content+="</table>";\r
74 \r
75 \r
76         st=m_db->Prepare("SELECT Name,PublicKey,MessageTrust,TrustListTrust,tblIdentity.IdentityID FROM tblPeerTrust INNER JOIN tblIdentity ON tblPeerTrust.TargetIdentityID=tblIdentity.IdentityID WHERE tblPeerTrust.IdentityID=? ORDER BY Name COLLATE NOCASE;");\r
77         st.Bind(0,identityid);\r
78         st.Step();\r
79 \r
80         content+="<table>";\r
81         content+="<tr><th colspan=\"3\">";\r
82         content+="Trust List of this identity";\r
83         content+="</th></tr>";\r
84         content+="<tr><td></td><th>Message Trust</th><th>Trust List Trust</th></tr>";\r
85         while(st.RowReturned())\r
86         {\r
87                 std::string thisid="";\r
88 \r
89                 st.ResultText(0,name);\r
90                 st.ResultText(1,publickey);\r
91                 st.ResultText(2,messagetrust);\r
92                 st.ResultText(3,trustlisttrust);\r
93                 st.ResultText(4,thisid);\r
94 \r
95                 if(publickey.size()>8)\r
96                 {\r
97                         keypart=publickey.substr(3,5);\r
98                 }\r
99 \r
100                 content+="<tr>";\r
101                 content+="<td><a href=\"peerdetails.htm?identityid="+thisid+"\">"+SanitizeOutput(name+keypart)+"...</a></td>";\r
102                 content+="<td "+GetClassString(messagetrust)+">"+messagetrust+"</td>";\r
103                 content+="<td "+GetClassString(trustlisttrust)+">"+trustlisttrust+"</td>";\r
104                 content+="</tr>\r\n";\r
105 \r
106                 st.Step();\r
107         }\r
108 \r
109         st=m_db->Prepare("SELECT Name,PublicKey,MessageTrust,TrustListTrust,tblIdentity.IdentityID FROM tblPeerTrust INNER JOIN tblIdentity ON tblPeerTrust.IdentityID=tblIdentity.IdentityID WHERE tblPeerTrust.TargetIdentityID=? ORDER BY Name COLLATE NOCASE;");\r
110         st.Bind(0,identityid);\r
111         st.Step();\r
112 \r
113         content+="<tr><th colspan=\"3\">";\r
114         content+="Trust of this identity from other identities";\r
115         content+="</th></tr>";\r
116         content+="<tr><td></td><th>Message Trust</th><th>Trust List Trust</th></tr>";\r
117         while(st.RowReturned())\r
118         {\r
119                 std::string thisid="";\r
120 \r
121                 st.ResultText(0,name);\r
122                 st.ResultText(1,publickey);\r
123                 st.ResultText(2,messagetrust);\r
124                 st.ResultText(3,trustlisttrust);\r
125                 st.ResultText(4,thisid);\r
126                 \r
127                 if(publickey.size()>8)\r
128                 {\r
129                         keypart=publickey.substr(3,5);\r
130                 }\r
131 \r
132                 content+="<tr>";\r
133                 content+="<td><a href=\"peerdetails.htm?identityid="+thisid+"\">"+SanitizeOutput(name+keypart)+"...</a></td>";\r
134                 content+="<td "+GetClassString(messagetrust)+">"+messagetrust+"</td>";\r
135                 content+="<td "+GetClassString(trustlisttrust)+">"+trustlisttrust+"</td>";\r
136                 content+="</tr>";\r
137 \r
138                 st.Step();\r
139         }\r
140         content+="</table>";\r
141 \r
142         return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
143 }\r
144 \r
145 const std::string PeerDetailsPage::GetClassString(const std::string &trustlevel)\r
146 {\r
147         int tempint=0;\r
148         std::string tempstr;\r
149 \r
150         StringFunctions::Convert(trustlevel,tempint);\r
151         tempint/=10;\r
152         StringFunctions::Convert(tempint,tempstr);\r
153 \r
154         if(trustlevel!="")\r
155         {\r
156                 return "class=\"trust"+tempstr+"\"";\r
157         }\r
158         else\r
159         {\r
160                 return "";\r
161         }\r
162 }\r
163 \r
164 const bool PeerDetailsPage::WillHandleURI(const std::string &uri)\r
165 {\r
166         if(uri.find("peerdetails.")!=std::string::npos)\r
167         {\r
168                 return true;\r
169         }\r
170         else\r
171         {\r
172                 return false;\r
173         }\r
174 }\r