version 0.3.0
[fms.git] / src / http / pages / peermaintenancepage.cpp
1 #include "../../../include/http/pages/peermaintenancepage.h"\r
2 #include "../../../include/stringfunctions.h"\r
3 \r
4 #include <Poco/DateTime.h>\r
5 #include <Poco/Timestamp.h>\r
6 #include <Poco/Timespan.h>\r
7 #include <Poco/DateTimeFormatter.h>\r
8 \r
9 #ifdef XMEM\r
10         #include <xmem.h>\r
11 #endif\r
12 \r
13 const std::string PeerMaintenancePage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
14 {\r
15         std::string content="";\r
16         SQLite3DB::Statement st;\r
17         std::string tempval;\r
18         Poco::DateTime date;\r
19 \r
20         if(queryvars.find("formaction")!=queryvars.end())\r
21         {\r
22                 if((*queryvars.find("formaction")).second=="removenotseen")\r
23                 {\r
24                         m_db->Execute("DELETE FROM tblIdentity WHERE LastSeen IS NULL;");\r
25                 }\r
26                 else if((*queryvars.find("formaction")).second=="removelastseen20")\r
27                 {\r
28                         date=Poco::Timestamp();\r
29                         date-=Poco::Timespan(20,0,0,0,0);\r
30                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE LastSeen<?;");\r
31                         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
32                         st.Step();\r
33                 }\r
34                 else if((*queryvars.find("formaction")).second=="removeneversent")\r
35                 {\r
36                         m_db->Execute("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID);");\r
37                 }\r
38                 else if((*queryvars.find("formaction")).second=="removelastseenneversent20")\r
39                 {\r
40                         date=Poco::Timestamp();\r
41                         date-=Poco::Timespan(20,0,0,0,0);\r
42                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID) AND LastSeen<?;");\r
43                         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
44                         st.Step();\r
45                 }\r
46                 else if((*queryvars.find("formaction")).second=="removedaysago" && queryvars.find("daysago")!=queryvars.end() && (*queryvars.find("daysago")).second!="")\r
47                 {\r
48                         int tempint=10000;\r
49                         StringFunctions::Convert((*queryvars.find("daysago")).second,tempint);\r
50                         date=Poco::Timestamp();\r
51                         date-=Poco::Timespan(tempint,0,0,0,0);\r
52                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE LastSeen<?;");\r
53                         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
54                         st.Step();\r
55                 }\r
56                 else if((*queryvars.find("formaction")).second=="removenulldaysago" && queryvars.find("daysago")!=queryvars.end() && (*queryvars.find("daysago")).second!="")\r
57                 {\r
58                         int tempint=10000;\r
59                         StringFunctions::Convert((*queryvars.find("daysago")).second,tempint);\r
60                         date=Poco::Timestamp();\r
61                         date-=Poco::Timespan(tempint,0,0,0,0);\r
62                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE LastSeen<? AND LocalMessageTrust IS NULL AND LocalTrustListTrust IS NULL;");\r
63                         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
64                         st.Step();\r
65                 }\r
66                 else if((*queryvars.find("formaction")).second=="removeposted30daysago")\r
67                 {\r
68                         date=Poco::Timestamp();\r
69                         date-=Poco::Timespan(30,0,0,0,0);\r
70                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE IdentityID IN (SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE (SELECT MAX(MessageDate) FROM tblMessage WHERE tblMessage.IdentityID=tblIdentity.IdentityID)<=? GROUP BY tblIdentity.IdentityID);");\r
71                         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d"));\r
72                         st.Step();\r
73                 }\r
74                 else if((*queryvars.find("formaction")).second=="removeadded20daysneversent")\r
75                 {\r
76                         date=Poco::Timestamp();\r
77                         date-=Poco::Timespan(20,0,0,0,0);\r
78                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE IdentityID IN (SELECT tblIdentity.IdentityID FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.IdentityID IS NULL AND tblIdentity.DateAdded<?);");\r
79                         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
80                         st.Step();\r
81                 }\r
82         }\r
83 \r
84         content+="<h2>Peer Maintenance</h2>";\r
85         content+="<p class=\"paragraph\">Removing a peer will not remove the messages they sent, but will remove everything else about that peer, including their trust levels.</p>";\r
86         content+="<table>";\r
87         content+="<tr><th colspan=\"3\">Stats</th></tr>";\r
88 \r
89         content+="<tr>";\r
90         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity;");\r
91         st.Step();\r
92         st.ResultText(0,tempval);\r
93         content+="<td>"+tempval+"</td>";\r
94         content+="<td>known peers</td>";\r
95         content+="</tr>";\r
96 \r
97         content+="<tr>";\r
98         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity WHERE LastSeen IS NULL;");\r
99         st.Step();\r
100         st.ResultText(0,tempval);\r
101         content+="<td>"+tempval+"</td>";\r
102         content+="<td>never seen</td>";\r
103         content+="<td>";\r
104         content+="<form name=\"frmremove\" method=\"POST\">";\r
105         content+="<input type=\"hidden\" name=\"formaction\" value=\"removenotseen\">";\r
106         content+="<input type=\"submit\" value=\"Remove\">";\r
107         content+="</form>";\r
108         content+="</td>";\r
109         content+="</tr>";\r
110 \r
111         date=Poco::Timestamp();\r
112         date-=Poco::Timespan(20,0,0,0,0);\r
113         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity WHERE LastSeen<?;");\r
114         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
115         st.Step();\r
116         st.ResultText(0,tempval);\r
117         content+="<tr>";\r
118         content+="<td>"+tempval+"</td>";\r
119         content+="<td>last seen more than 20 days ago</td>";\r
120         content+="<td>";\r
121         content+="<form name=\"frmremove\" method=\"POST\">";\r
122         content+="<input type=\"hidden\" name=\"formaction\" value=\"removelastseen20\">";\r
123         content+="<input type=\"submit\" value=\"Remove\">";\r
124         content+="</form>";\r
125         content+="</td>";\r
126         content+="</tr>";\r
127 \r
128         date=Poco::Timestamp();\r
129         date-=Poco::Timespan(30,0,0,0,0);\r
130         st=m_db->Prepare("SELECT COUNT(*) FROM (SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE (SELECT MAX(MessageDate) FROM tblMessage WHERE tblMessage.IdentityID=tblIdentity.IdentityID)<=? GROUP BY tblIdentity.IdentityID);");\r
131         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d"));\r
132         st.Step();\r
133         st.ResultText(0,tempval);\r
134         content+="<tr>";\r
135         content+="<td>"+tempval+"</td>";\r
136         content+="<td>last sent a message more than 30 days ago</td>";\r
137         content+="<td>";\r
138         content+="<form name=\"frmremove\" method=\"POST\">";\r
139         content+="<input type=\"hidden\" name=\"formaction\" value=\"removeposted30daysago\">";\r
140         content+="<input type=\"submit\" value=\"Remove\">";\r
141         content+="</form>";\r
142         content+="</td>";\r
143         content+="</tr>";\r
144 \r
145         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.IdentityID IS NULL;");\r
146         st.Step();\r
147         st.ResultText(0,tempval);\r
148         content+="<tr>";\r
149         content+="<td>"+tempval+"</td>";\r
150         content+="<td>never sent a message</td>";\r
151         content+="<td>";\r
152         content+="<form name=\"frmremove\" method=\"POST\">";\r
153         content+="<input type=\"hidden\" name=\"formaction\" value=\"removeneversent\">";\r
154         content+="<input type=\"submit\" value=\"Remove\">";\r
155         content+="</form>";\r
156         content+="</td>";\r
157         content+="</tr>";\r
158 \r
159         date=Poco::Timestamp();\r
160         date-=Poco::Timespan(20,0,0,0,0);\r
161         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.IdentityID IS NULL AND tblIdentity.DateAdded<?;");\r
162         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
163         st.Step();\r
164         st.ResultText(0,tempval);\r
165         content+="<tr>";\r
166         content+="<td>"+tempval+"</td>";\r
167         content+="<td>added more than 20 days ago and never sent a message</td>";\r
168         content+="<td>";\r
169         content+="<form name=\"frmremove\" method=\"POST\">";\r
170         content+="<input type=\"hidden\" name=\"formaction\" value=\"removeadded20daysneversent\">";\r
171         content+="<input type=\"submit\" value=\"Remove\">";\r
172         content+="</form>";\r
173         content+="</td>";\r
174         content+="</tr>";\r
175 \r
176         date=Poco::Timestamp();\r
177         date-=Poco::Timespan(20,0,0,0,0);\r
178         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.IdentityID IS NULL AND tblIdentity.LastSeen<?;");\r
179         st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S"));\r
180         st.Step();\r
181         st.ResultText(0,tempval);\r
182         content+="<tr>";\r
183         content+="<td>"+tempval+"</td>";\r
184         content+="<td>last seen more than 20 days ago and never sent a message</td>";\r
185         content+="<td>";\r
186         content+="<form name=\"frmremove\" method=\"POST\">";\r
187         content+="<input type=\"hidden\" name=\"formaction\" value=\"removelastseenneversent20\">";\r
188         content+="<input type=\"submit\" value=\"Remove\">";\r
189         content+="</form>";\r
190         content+="</td>";\r
191         content+="</tr>";\r
192 \r
193         content+="<tr>";\r
194         content+="<td><form name=\"frmdelete\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"removedaysago\"></td>";\r
195         content+="<td>last seen <input type=\"text\" name=\"daysago\" size=\"2\"> days ago</td>";\r
196         content+="<td><input type=\"submit\" value=\"Remove\"></form></td>";\r
197         content+="</tr>";\r
198 \r
199         content+="<tr>";\r
200         content+="<td><form name=\"frmdelete\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"removenulldaysago\"></td>";\r
201         content+="<td>last seen <input type=\"text\" name=\"daysago\" size=\"2\"> days ago, and have null local trust</td>";\r
202         content+="<td><input type=\"submit\" value=\"Remove\"></form></td>";\r
203         content+="</tr>";\r
204 \r
205         content+="</table>";\r
206 \r
207         return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
208 }\r
209 \r
210 const bool PeerMaintenancePage::WillHandleURI(const std::string &uri)\r
211 {\r
212         if(uri.find("peermaintenance.")!=std::string::npos)\r
213         {\r
214                 return true;\r
215         }\r
216         else\r
217         {\r
218                 return false;\r
219         }\r
220 }\r