version 0.1.10
[fms.git] / src / http / pages / peerdetailspage.cpp
diff --git a/src/http/pages/peerdetailspage.cpp b/src/http/pages/peerdetailspage.cpp
new file mode 100644 (file)
index 0000000..83b1b34
--- /dev/null
@@ -0,0 +1,139 @@
+#include "../../../include/http/pages/peerdetailspage.h"\r
+#include "../../../include/stringfunctions.h"\r
+\r
+#ifdef XMEM\r
+       #include <xmem.h>\r
+#endif\r
+\r
+const std::string PeerDetailsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
+{\r
+       std::string content="";\r
+       int identityid=0;\r
+       std::string name;\r
+       std::string publickey;\r
+       std::string messagetrust;\r
+       std::string trustlisttrust;\r
+       std::string keypart="";\r
+       std::string lastseen="";\r
+\r
+       if(queryvars.find("identityid")!=queryvars.end() && (*queryvars.find("identityid")).second!="")\r
+       {\r
+               StringFunctions::Convert((*queryvars.find("identityid")).second,identityid);\r
+       }\r
+\r
+       SQLite3DB::Statement st=m_db->Prepare("SELECT Name,PublicKey,LastSeen FROM tblIdentity WHERE IdentityID=?;");\r
+       st.Bind(0,identityid);\r
+       st.Step();\r
+\r
+       if(st.RowReturned())\r
+       {\r
+               st.ResultText(0,name);\r
+               st.ResultText(1,publickey);\r
+               st.ResultText(2,lastseen);\r
+\r
+               content+="<table>";\r
+               content+="<tr><td>Name</td><td>"+SanitizeOutput(name)+"</td></tr>";\r
+               content+="<tr><td>Public Key</td><td>"+SanitizeOutput(publickey)+"</td></tr>";\r
+               content+="<tr><td>Last Seen</td><td>"+lastseen+"</td></tr>";\r
+               content+="</table>";\r
+       }\r
+\r
+       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
+       st.Bind(0,identityid);\r
+       st.Step();\r
+\r
+       content+="<table>";\r
+       content+="<tr><th colspan=\"3\">";\r
+       content+="Trust List of this identity";\r
+       content+="</th></tr>";\r
+       content+="<tr><td></td><th>Message Trust</th><th>Trust List Trust</th></tr>";\r
+       while(st.RowReturned())\r
+       {\r
+               std::string thisid="";\r
+\r
+               st.ResultText(0,name);\r
+               st.ResultText(1,publickey);\r
+               st.ResultText(2,messagetrust);\r
+               st.ResultText(3,trustlisttrust);\r
+               st.ResultText(4,thisid);\r
+\r
+               if(publickey.size()>8)\r
+               {\r
+                       keypart=publickey.substr(3,5);\r
+               }\r
+\r
+               content+="<tr>";\r
+               content+="<td><a href=\"peerdetails.htm?identityid="+thisid+"\">"+SanitizeOutput(name+keypart)+"...</a></td>";\r
+               content+="<td "+GetClassString(messagetrust)+">"+messagetrust+"</td>";\r
+               content+="<td "+GetClassString(trustlisttrust)+">"+trustlisttrust+"</td>";\r
+               content+="</tr>\r\n";\r
+\r
+               st.Step();\r
+       }\r
+\r
+       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
+       st.Bind(0,identityid);\r
+       st.Step();\r
+\r
+       content+="<tr><th colspan=\"3\">";\r
+       content+="Trust of this identity from other identities";\r
+       content+="</th></tr>";\r
+       content+="<tr><td></td><th>Message Trust</th><th>Trust List Trust</th></tr>";\r
+       while(st.RowReturned())\r
+       {\r
+               std::string thisid="";\r
+\r
+               st.ResultText(0,name);\r
+               st.ResultText(1,publickey);\r
+               st.ResultText(2,messagetrust);\r
+               st.ResultText(3,trustlisttrust);\r
+               st.ResultText(4,thisid);\r
+               \r
+               if(publickey.size()>8)\r
+               {\r
+                       keypart=publickey.substr(3,5);\r
+               }\r
+\r
+               content+="<tr>";\r
+               content+="<td><a href=\"peerdetails.htm?identityid="+thisid+"\">"+SanitizeOutput(name+keypart)+"...</a></td>";\r
+               content+="<td "+GetClassString(messagetrust)+">"+messagetrust+"</td>";\r
+               content+="<td "+GetClassString(trustlisttrust)+">"+trustlisttrust+"</td>";\r
+               content+="</tr>";\r
+\r
+               st.Step();\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 std::string PeerDetailsPage::GetClassString(const std::string &trustlevel)\r
+{\r
+       int tempint=0;\r
+       std::string tempstr;\r
+\r
+       StringFunctions::Convert(trustlevel,tempint);\r
+       tempint/=10;\r
+       StringFunctions::Convert(tempint,tempstr);\r
+\r
+       if(trustlevel!="")\r
+       {\r
+               return "class=\"trust"+tempstr+"\"";\r
+       }\r
+       else\r
+       {\r
+               return "";\r
+       }\r
+}\r
+\r
+const bool PeerDetailsPage::WillHandleURI(const std::string &uri)\r
+{\r
+       if(uri.find("peerdetails.")!=std::string::npos)\r
+       {\r
+               return true;\r
+       }\r
+       else\r
+       {\r
+               return false;\r
+       }\r
+}\r