version 0.1.15
[fms.git] / src / http / pages / peermaintenancepage.cpp
1 #include "../../../include/http/pages/peermaintenancepage.h"\r
2 #include "../../../include/stringfunctions.h"\r
3 #include "../../../include/datetime.h"\r
4 \r
5 #ifdef XMEM\r
6         #include <xmem.h>\r
7 #endif\r
8 \r
9 const std::string PeerMaintenancePage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
10 {\r
11         std::string content="";\r
12         SQLite3DB::Statement st;\r
13         std::string tempval;\r
14         DateTime date;\r
15 \r
16         if(queryvars.find("formaction")!=queryvars.end())\r
17         {\r
18                 if((*queryvars.find("formaction")).second=="removenotseen")\r
19                 {\r
20                         m_db->Execute("DELETE FROM tblIdentity WHERE LastSeen IS NULL;");\r
21                 }\r
22                 else if((*queryvars.find("formaction")).second=="removelastseen20")\r
23                 {\r
24                         date.SetToGMTime();\r
25                         date.Add(0,0,0,-20);\r
26                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE LastSeen<?;");\r
27                         st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
28                         st.Step();\r
29                 }\r
30                 else if((*queryvars.find("formaction")).second=="removeneversent")\r
31                 {\r
32                         m_db->Execute("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID);");\r
33                 }\r
34                 else if((*queryvars.find("formaction")).second=="removelastseenneversent20")\r
35                 {\r
36                         date.SetToGMTime();\r
37                         date.Add(0,0,0,-20);\r
38                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID) AND LastSeen<?;");\r
39                         st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
40                         st.Step();\r
41                 }\r
42                 else if((*queryvars.find("formaction")).second=="removedaysago" && queryvars.find("daysago")!=queryvars.end() && (*queryvars.find("daysago")).second!="")\r
43                 {\r
44                         int tempint=10000;\r
45                         StringFunctions::Convert((*queryvars.find("daysago")).second,tempint);\r
46                         date.SetToGMTime();\r
47                         date.Add(0,0,0,-tempint);\r
48                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE LastSeen<?;");\r
49                         st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
50                         st.Step();\r
51                 }\r
52                 else if((*queryvars.find("formaction")).second=="removenulldaysago" && queryvars.find("daysago")!=queryvars.end() && (*queryvars.find("daysago")).second!="")\r
53                 {\r
54                         int tempint=10000;\r
55                         StringFunctions::Convert((*queryvars.find("daysago")).second,tempint);\r
56                         date.SetToGMTime();\r
57                         date.Add(0,0,0,-tempint);\r
58                         st=m_db->Prepare("DELETE FROM tblIdentity WHERE LastSeen<? AND LocalMessageTrust IS NULL AND LocalTrustListTrust IS NULL;");\r
59                         st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
60                         st.Step();\r
61                 }\r
62         }\r
63 \r
64         content+="<h2>Peer Maintenance</h2>";\r
65         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
66         content+="<table>";\r
67         content+="<tr><th colspan=\"3\">Stats</th></tr>";\r
68 \r
69         content+="<tr>";\r
70         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity;");\r
71         st.Step();\r
72         st.ResultText(0,tempval);\r
73         content+="<td>"+tempval+"</td>";\r
74         content+="<td>known peers</td>";\r
75         content+="</tr>";\r
76 \r
77         content+="<tr>";\r
78         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity WHERE LastSeen IS NULL;");\r
79         st.Step();\r
80         st.ResultText(0,tempval);\r
81         content+="<td>"+tempval+"</td>";\r
82         content+="<td>never seen</td>";\r
83         content+="<td>";\r
84         content+="<form name=\"frmremove\" method=\"POST\">";\r
85         content+="<input type=\"hidden\" name=\"formaction\" value=\"removenotseen\">";\r
86         content+="<input type=\"submit\" value=\"Remove\">";\r
87         content+="</form>";\r
88         content+="</td>";\r
89         content+="</tr>";\r
90 \r
91         date.SetToGMTime();\r
92         date.Add(0,0,0,-20);\r
93         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity WHERE LastSeen<?;");\r
94         st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
95         st.Step();\r
96         st.ResultText(0,tempval);\r
97         content+="<tr>";\r
98         content+="<td>"+tempval+"</td>";\r
99         content+="<td>last seen more than 20 days ago</td>";\r
100         content+="<td>";\r
101         content+="<form name=\"frmremove\" method=\"POST\">";\r
102         content+="<input type=\"hidden\" name=\"formaction\" value=\"removelastseen20\">";\r
103         content+="<input type=\"submit\" value=\"Remove\">";\r
104         content+="</form>";\r
105         content+="</td>";\r
106         content+="</tr>";\r
107 \r
108         st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.IdentityID IS NULL;");\r
109         st.Step();\r
110         st.ResultText(0,tempval);\r
111         content+="<tr>";\r
112         content+="<td>"+tempval+"</td>";\r
113         content+="<td>never sent a message</td>";\r
114         content+="<td>";\r
115         content+="<form name=\"frmremove\" method=\"POST\">";\r
116         content+="<input type=\"hidden\" name=\"formaction\" value=\"removeneversent\">";\r
117         content+="<input type=\"submit\" value=\"Remove\">";\r
118         content+="</form>";\r
119         content+="</td>";\r
120         content+="</tr>";\r
121 \r
122         date.SetToGMTime();\r
123         date.Add(0,0,0,-20);\r
124         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
125         st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
126         st.Step();\r
127         st.ResultText(0,tempval);\r
128         content+="<tr>";\r
129         content+="<td>"+tempval+"</td>";\r
130         content+="<td>last seen more than 20 days ago and never sent a message</td>";\r
131         content+="<td>";\r
132         content+="<form name=\"frmremove\" method=\"POST\">";\r
133         content+="<input type=\"hidden\" name=\"formaction\" value=\"removelastseenneversent20\">";\r
134         content+="<input type=\"submit\" value=\"Remove\">";\r
135         content+="</form>";\r
136         content+="</td>";\r
137         content+="</tr>";\r
138 \r
139         content+="<tr>";\r
140         content+="<td><form name=\"frmdelete\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"removedaysago\"></td>";\r
141         content+="<td>last seen <input type=\"text\" name=\"daysago\" size=\"2\"> days ago</td>";\r
142         content+="<td><input type=\"submit\" value=\"Remove\"></form></td>";\r
143         content+="</tr>";\r
144 \r
145         content+="<tr>";\r
146         content+="<td><form name=\"frmdelete\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"removenulldaysago\"></td>";\r
147         content+="<td>last seen <input type=\"text\" name=\"daysago\" size=\"2\"> days ago, and have null local trust</td>";\r
148         content+="<td><input type=\"submit\" value=\"Remove\"></form></td>";\r
149         content+="</tr>";\r
150 \r
151         content+="</table>";\r
152 \r
153         return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
154 }\r
155 \r
156 const bool PeerMaintenancePage::WillHandleURI(const std::string &uri)\r
157 {\r
158         if(uri.find("peermaintenance.")!=std::string::npos)\r
159         {\r
160                 return true;\r
161         }\r
162         else\r
163         {\r
164                 return false;\r
165         }\r
166 }\r