+#include "../../include/nntp/extensiontrust.h"\r
+#include "../../include/stringfunctions.h"\r
+\r
+#ifdef XMEM\r
+ #include <xmem.h>\r
+#endif\r
+\r
+TrustExtension::TrustExtension()\r
+{\r
+ m_localidentityid=-1;\r
+}\r
+\r
+TrustExtension::TrustExtension(const int &localidentityid)\r
+{\r
+ m_localidentityid=localidentityid;\r
+}\r
+\r
+const int TrustExtension::GetIdentityID(const std::string &nntpname)\r
+{\r
+ std::vector<std::string> nameparts;\r
+ StringFunctions::Split(nntpname,"@",nameparts);\r
+\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT IdentityID, PublicKey FROM tblIdentity WHERE Name=? AND PublicKey IS NOT NULL AND PublicKey <> '' ;");\r
+ st.Bind(0,nameparts[0]);\r
+ st.Step();\r
+\r
+ while(st.RowReturned())\r
+ {\r
+ int id=-1;\r
+ std::vector<std::string> keyparts;\r
+ std::string publickey="";\r
+\r
+ st.ResultText(1,publickey);\r
+ StringFunctions::SplitMultiple(publickey,"@,",keyparts);\r
+\r
+ if(keyparts.size()>1)\r
+ {\r
+ publickey=StringFunctions::Replace(StringFunctions::Replace(keyparts[1],"~",""),"-","");\r
+ if(nameparts[0]+"@"+publickey==nntpname)\r
+ {\r
+ st.ResultInt(0,id);\r
+ return id;\r
+ }\r
+ }\r
+\r
+ st.Step();\r
+ }\r
+\r
+ return -1;\r
+\r
+}\r
+\r
+const bool TrustExtension::GetMessageTrust(const std::string &nntpname, int &trust)\r
+{\r
+ if(m_localidentityid>=0)\r
+ {\r
+ int id=GetIdentityID(nntpname);\r
+ if(id>=0)\r
+ {\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT LocalMessageTrust FROM tblIdentityTrust WHERE LocalIdentityID=? AND IdentityID=?;");\r
+ st.Bind(0,m_localidentityid);\r
+ st.Bind(1,id);\r
+ st.Step();\r
+\r
+ if(st.RowReturned())\r
+ {\r
+ int tr=-1;\r
+ if(st.ResultNull(0)==false)\r
+ {\r
+ st.ResultInt(0,tr);\r
+ }\r
+ trust=tr;\r
+ }\r
+ else\r
+ {\r
+ trust=-1;\r
+ }\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+}\r
+\r
+const bool TrustExtension::GetTrustList(std::map<std::string,std::pair<int,int> > &trustlist)\r
+{\r
+ if(m_localidentityid>=0)\r
+ {\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT tblIdentityTrust.LocalMessageTrust,tblIdentityTrust.LocalTrustListTrust,tblIdentity.Name,tblIdentity.PublicKey FROM tblIdentityTrust INNER JOIN tblIdentity ON tblIdentityTrust.IdentityID=tblIdentity.IdentityID WHERE tblIdentityTrust.LocalIdentityID=? AND tblIdentity.Name IS NOT NULL AND tblIdentity.PublicKey IS NOT NULL AND tblIdentity.PublicKey <> '' ;");\r
+ st.Bind(0,m_localidentityid);\r
+ st.Step();\r
+ while(st.RowReturned())\r
+ {\r
+ int messagetrust=-1;\r
+ int trustlisttrust=-1;\r
+ std::string name="";\r
+ std::string publickey="";\r
+ std::vector<std::string> keyparts;\r
+ std::string nntpname="";\r
+\r
+ if(st.ResultNull(0)==false)\r
+ {\r
+ st.ResultInt(0,messagetrust);\r
+ }\r
+ if(st.ResultNull(1)==false)\r
+ {\r
+ st.ResultInt(1,trustlisttrust);\r
+ }\r
+ st.ResultText(2,name);\r
+ st.ResultText(3,publickey);\r
+\r
+ StringFunctions::SplitMultiple(publickey,"@,",keyparts);\r
+ if(keyparts.size()>1)\r
+ {\r
+ publickey=StringFunctions::Replace(StringFunctions::Replace(keyparts[1],"~",""),"-","");\r
+ nntpname=name+"@"+publickey;\r
+ }\r
+\r
+ trustlist[nntpname]=std::pair<int,int>(messagetrust,trustlisttrust);\r
+\r
+ st.Step();\r
+ }\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+}\r
+\r
+const bool TrustExtension::GetTrustListTrust(const std::string &nntpname, int &trust)\r
+{\r
+ if(m_localidentityid>=0)\r
+ {\r
+ int id=GetIdentityID(nntpname);\r
+ if(id>=0)\r
+ {\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT LocalTrustListTrust FROM tblIdentityTrust WHERE LocalIdentityID=? AND IdentityID=?;");\r
+ st.Bind(0,m_localidentityid);\r
+ st.Bind(1,id);\r
+ st.Step();\r
+\r
+ if(st.RowReturned())\r
+ {\r
+ int tr=-1;\r
+ if(st.ResultNull(0)==false)\r
+ {\r
+ st.ResultInt(0,tr);\r
+ }\r
+ trust=tr;\r
+ }\r
+ else\r
+ {\r
+ trust=-1;\r
+ }\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+}\r
+\r
+const bool TrustExtension::SetMessageTrust(const std::string &nntpname, const int trust)\r
+{\r
+ if(m_localidentityid>=0 && trust>=-1 && trust<=100)\r
+ {\r
+ int id=GetIdentityID(nntpname);\r
+ if(id>=0)\r
+ {\r
+ SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET LocalMessageTrust=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
+ if(trust==-1)\r
+ {\r
+ st.Bind(0);\r
+ }\r
+ else\r
+ {\r
+ st.Bind(0,trust);\r
+ }\r
+ st.Bind(1,m_localidentityid);\r
+ st.Bind(2,id);\r
+ st.Step();\r
+\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+}\r
+\r
+const bool TrustExtension::SetTrustListTrust(const std::string &nntpname, const int trust)\r
+{\r
+ if(m_localidentityid>=0 && trust>=-1 && trust<=100)\r
+ {\r
+ int id=GetIdentityID(nntpname);\r
+ if(id>=0)\r
+ {\r
+ SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET LocalTrustListTrust=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
+ if(trust==-1)\r
+ {\r
+ st.Bind(0);\r
+ }\r
+ else\r
+ {\r
+ st.Bind(0,trust);\r
+ }\r
+ st.Bind(1,m_localidentityid);\r
+ st.Bind(2,id);\r
+ st.Step();\r
+\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+}\r