version 0.1.11
[fms.git] / src / http / pages / peermaintenancepage.cpp
diff --git a/src/http/pages/peermaintenancepage.cpp b/src/http/pages/peermaintenancepage.cpp
new file mode 100644 (file)
index 0000000..f794600
--- /dev/null
@@ -0,0 +1,150 @@
+#include "../../../include/http/pages/peermaintenancepage.h"\r
+#include "../../../include/stringfunctions.h"\r
+#include "../../../include/datetime.h"\r
+\r
+#ifdef XMEM\r
+       #include <xmem.h>\r
+#endif\r
+\r
+const std::string PeerMaintenancePage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
+{\r
+       std::string content="";\r
+       SQLite3DB::Statement st;\r
+       std::string tempval;\r
+       DateTime date;\r
+\r
+       if(queryvars.find("formaction")!=queryvars.end())\r
+       {\r
+               if((*queryvars.find("formaction")).second=="removenotseen")\r
+               {\r
+                       m_db->Execute("DELETE FROM tblIdentity WHERE LastSeen IS NULL;");\r
+               }\r
+               else if((*queryvars.find("formaction")).second=="removelastseen20")\r
+               {\r
+                       date.SetToGMTime();\r
+                       date.Add(0,0,0,-20);\r
+                       st=m_db->Prepare("DELETE FROM tblIdentity WHERE LastSeen<?;");\r
+                       st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
+                       st.Step();\r
+               }\r
+               else if((*queryvars.find("formaction")).second=="removeneversent")\r
+               {\r
+                       m_db->Execute("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID);");\r
+               }\r
+               else if((*queryvars.find("formaction")).second=="removelastseenneversent20")\r
+               {\r
+                       date.SetToGMTime();\r
+                       date.Add(0,0,0,-20);\r
+                       st=m_db->Prepare("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID) AND LastSeen<?;");\r
+                       st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
+                       st.Step();\r
+               }\r
+               else if((*queryvars.find("formaction")).second=="removedaysago" && queryvars.find("daysago")!=queryvars.end() && (*queryvars.find("daysago")).second!="")\r
+               {\r
+                       int tempint=10000;\r
+                       StringFunctions::Convert((*queryvars.find("daysago")).second,tempint);\r
+                       date.SetToGMTime();\r
+                       date.Add(0,0,0,-tempint);\r
+                       st=m_db->Prepare("DELETE FROM tblIdentity WHERE IdentityID NOT IN (SELECT IdentityID FROM tblMessage GROUP BY IdentityID) AND LastSeen<?;");\r
+                       st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
+                       st.Step();\r
+               }\r
+       }\r
+\r
+       content+="<h2>Peer Maintenance</h2>";\r
+       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
+       content+="<table>";\r
+       content+="<tr><th colspan=\"3\">Stats</th></tr>";\r
+\r
+       content+="<tr>";\r
+       st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity;");\r
+       st.Step();\r
+       st.ResultText(0,tempval);\r
+       content+="<td>"+tempval+"</td>";\r
+       content+="<td>known peers</td>";\r
+       content+="</tr>";\r
+\r
+       content+="<tr>";\r
+       st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity WHERE LastSeen IS NULL;");\r
+       st.Step();\r
+       st.ResultText(0,tempval);\r
+       content+="<td>"+tempval+"</td>";\r
+       content+="<td>never seen</td>";\r
+       content+="<td>";\r
+       content+="<form name=\"frmremove\" method=\"POST\">";\r
+       content+="<input type=\"hidden\" name=\"formaction\" value=\"removenotseen\">";\r
+       content+="<input type=\"submit\" value=\"Remove\">";\r
+       content+="</form>";\r
+       content+="</td>";\r
+       content+="</tr>";\r
+\r
+       date.SetToGMTime();\r
+       date.Add(0,0,0,-20);\r
+       st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity WHERE LastSeen<?;");\r
+       st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
+       st.Step();\r
+       st.ResultText(0,tempval);\r
+       content+="<tr>";\r
+       content+="<td>"+tempval+"</td>";\r
+       content+="<td>last seen more than 20 days ago</td>";\r
+       content+="<td>";\r
+       content+="<form name=\"frmremove\" method=\"POST\">";\r
+       content+="<input type=\"hidden\" name=\"formaction\" value=\"removelastseen20\">";\r
+       content+="<input type=\"submit\" value=\"Remove\">";\r
+       content+="</form>";\r
+       content+="</td>";\r
+       content+="</tr>";\r
+\r
+       st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.IdentityID IS NULL;");\r
+       st.Step();\r
+       st.ResultText(0,tempval);\r
+       content+="<tr>";\r
+       content+="<td>"+tempval+"</td>";\r
+       content+="<td>never sent a message</td>";\r
+       content+="<td>";\r
+       content+="<form name=\"frmremove\" method=\"POST\">";\r
+       content+="<input type=\"hidden\" name=\"formaction\" value=\"removeneversent\">";\r
+       content+="<input type=\"submit\" value=\"Remove\">";\r
+       content+="</form>";\r
+       content+="</td>";\r
+       content+="</tr>";\r
+\r
+       date.SetToGMTime();\r
+       date.Add(0,0,0,-20);\r
+       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
+       st.Bind(0,date.Format("%Y-%m-%d %H:%M:%S"));\r
+       st.Step();\r
+       st.ResultText(0,tempval);\r
+       content+="<tr>";\r
+       content+="<td>"+tempval+"</td>";\r
+       content+="<td>last seen more than 20 days ago and never sent a message</td>";\r
+       content+="<td>";\r
+       content+="<form name=\"frmremove\" method=\"POST\">";\r
+       content+="<input type=\"hidden\" name=\"formaction\" value=\"removelastseenneversent20\">";\r
+       content+="<input type=\"submit\" value=\"Remove\">";\r
+       content+="</form>";\r
+       content+="</td>";\r
+       content+="</tr>";\r
+\r
+       content+="<tr>";\r
+       content+="<td><form name=\"frmdelete\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"removedaysago\"></td>";\r
+       content+="<td>last seen <input type=\"text\" name=\"daysago\" size=\"2\"> days ago</td>";\r
+       content+="<td><input type=\"submit\" value=\"Remove\"></form></td>";\r
+       content+="</tr>";\r
+\r
+       content+="</table>";\r
+\r
+       return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
+}\r
+\r
+const bool PeerMaintenancePage::WillHandleURI(const std::string &uri)\r
+{\r
+       if(uri.find("peermaintenance.")!=std::string::npos)\r
+       {\r
+               return true;\r
+       }\r
+       else\r
+       {\r
+               return false;\r
+       }\r
+}
\ No newline at end of file