1 #include "../../../include/http/pages/peermaintenancepage.h"
\r
2 #include "../../../include/stringfunctions.h"
\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
13 const std::string PeerMaintenancePage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
15 std::string content="";
\r
16 SQLite3DB::Statement st;
\r
17 std::string tempval;
\r
18 Poco::DateTime date;
\r
20 if(queryvars.find("formaction")!=queryvars.end())
\r
22 if((*queryvars.find("formaction")).second=="removenotseen")
\r
24 m_db->Execute("DELETE FROM tblIdentity WHERE LastSeen IS NULL;");
\r
26 else if((*queryvars.find("formaction")).second=="removelastseen20")
\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
34 else if((*queryvars.find("formaction")).second=="removeneversent")
\r
36 m_db->Execute("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID);");
\r
38 else if((*queryvars.find("formaction")).second=="removelastseenneversent20")
\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
46 else if((*queryvars.find("formaction")).second=="removedaysago" && queryvars.find("daysago")!=queryvars.end() && (*queryvars.find("daysago")).second!="")
\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
56 else if((*queryvars.find("formaction")).second=="removenulldaysago" && queryvars.find("daysago")!=queryvars.end() && (*queryvars.find("daysago")).second!="")
\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
66 else if((*queryvars.find("formaction")).second=="removeposted30daysago")
\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
74 else if((*queryvars.find("formaction")).second=="removeadded20daysneversent")
\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
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
87 content+="<tr><th colspan=\"3\">Stats</th></tr>";
\r
90 st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity;");
\r
92 st.ResultText(0,tempval);
\r
93 content+="<td>"+tempval+"</td>";
\r
94 content+="<td>known peers</td>";
\r
98 st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity WHERE LastSeen IS NULL;");
\r
100 st.ResultText(0,tempval);
\r
101 content+="<td>"+tempval+"</td>";
\r
102 content+="<td>never seen</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
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
116 st.ResultText(0,tempval);
\r
118 content+="<td>"+tempval+"</td>";
\r
119 content+="<td>last seen more than 20 days ago</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
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
133 st.ResultText(0,tempval);
\r
135 content+="<td>"+tempval+"</td>";
\r
136 content+="<td>last sent a message more than 30 days ago</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
145 st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.IdentityID IS NULL;");
\r
147 st.ResultText(0,tempval);
\r
149 content+="<td>"+tempval+"</td>";
\r
150 content+="<td>never sent a message</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
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
164 st.ResultText(0,tempval);
\r
166 content+="<td>"+tempval+"</td>";
\r
167 content+="<td>added more than 20 days ago and never sent a message</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
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
181 st.ResultText(0,tempval);
\r
183 content+="<td>"+tempval+"</td>";
\r
184 content+="<td>last seen more than 20 days ago and never sent a message</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
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
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
205 content+="</table>";
\r
207 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
210 const bool PeerMaintenancePage::WillHandleURI(const std::string &uri)
\r
212 if(uri.find("peermaintenance.")!=std::string::npos)
\r