version 0.3.29
[fms.git] / src / nntp / extensiontrust.cpp
index 6e49a93..e0a7ad4 100644 (file)
@@ -5,12 +5,12 @@
        #include <xmem.h>\r
 #endif\r
 \r
-TrustExtension::TrustExtension()\r
+TrustExtension::TrustExtension(SQLite3DB::DB *db):IDatabase(db)\r
 {\r
        m_localidentityid=-1;\r
 }\r
 \r
-TrustExtension::TrustExtension(const int &localidentityid)\r
+TrustExtension::TrustExtension(SQLite3DB::DB *db, const int &localidentityid):IDatabase(db)\r
 {\r
        m_localidentityid=localidentityid;\r
 }\r
@@ -35,8 +35,7 @@ const int TrustExtension::GetIdentityID(const std::string &nntpname)
 \r
                if(keyparts.size()>1)\r
                {\r
-                       publickey=StringFunctions::Replace(StringFunctions::Replace(keyparts[1],"~",""),"-","");\r
-                       if(nameparts[0]+"@"+publickey==nntpname)\r
+                       if(nameparts[0]+"@"+keyparts[1]==nntpname)\r
                        {\r
                                st.ResultInt(0,id);\r
                                return id;\r
@@ -88,17 +87,95 @@ const bool TrustExtension::GetMessageTrust(const std::string &nntpname, int &tru
        }\r
 }\r
 \r
-const bool TrustExtension::GetTrustList(std::map<std::string,std::pair<int,int> > &trustlist)\r
+const bool TrustExtension::GetPeerMessageTrust(const std::string &nntpname, int &trust)\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
+               int id=GetIdentityID(nntpname);\r
+               if(id>=0)\r
+               {\r
+                       SQLite3DB::Statement st=m_db->Prepare("SELECT PeerMessageTrust FROM tblIdentity WHERE IdentityID=?;");\r
+                       st.Bind(0,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::GetPeerTrustListTrust(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 PeerTrustListTrust FROM tblIdentity WHERE IdentityID=?;");\r
+                       st.Bind(0,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,trust> &trustlist)\r
+{\r
+       if(m_localidentityid>=0)\r
+       {\r
+               SQLite3DB::Statement st=m_db->Prepare("SELECT tblIdentityTrust.LocalMessageTrust,tblIdentityTrust.LocalTrustListTrust,tblIdentity.Name,tblIdentity.PublicKey,tblIdentityTrust.MessageTrustComment,tblIdentityTrust.TrustListTrustComment,tblIdentity.PeerMessageTrust,tblIdentity.PeerTrustListTrust 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
+                       int peermessagetrust=-1;\r
+                       int peertrustlisttrust=-1;\r
+                       std::string messagetrustcomment="";\r
+                       std::string trustlisttrustcomment="";\r
                        std::string name="";\r
                        std::string publickey="";\r
                        std::vector<std::string> keyparts;\r
@@ -114,15 +191,24 @@ const bool TrustExtension::GetTrustList(std::map<std::string,std::pair<int,int>
                        }\r
                        st.ResultText(2,name);\r
                        st.ResultText(3,publickey);\r
+                       st.ResultText(4,messagetrustcomment);\r
+                       st.ResultText(5,trustlisttrustcomment);\r
+                       if(st.ResultNull(6)==false)\r
+                       {\r
+                               st.ResultInt(6,peermessagetrust);\r
+                       }\r
+                       if(st.ResultNull(7)==false)\r
+                       {\r
+                               st.ResultInt(7,peertrustlisttrust);\r
+                       }\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
+                               nntpname=name+"@"+keyparts[1];\r
                        }\r
 \r
-                       trustlist[nntpname]=std::pair<int,int>(messagetrust,trustlisttrust);\r
+                       trustlist[nntpname]=trust(messagetrust,peermessagetrust,messagetrustcomment,trustlisttrust,peertrustlisttrust,trustlisttrustcomment);\r
 \r
                        st.Step();\r
                }\r
@@ -205,6 +291,39 @@ const bool TrustExtension::SetMessageTrust(const std::string &nntpname, const in
        }\r
 }\r
 \r
+const bool TrustExtension::SetMessageTrustComment(const std::string &nntpname, const std::string &comment)\r
+{\r
+       if(m_localidentityid>=0)\r
+       {\r
+               int id=GetIdentityID(nntpname);\r
+               if(id>=0)\r
+               {\r
+                       SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET MessageTrustComment=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
+                       if(comment=="")\r
+                       {\r
+                               st.Bind(0);\r
+                       }\r
+                       else\r
+                       {\r
+                               st.Bind(0,comment);\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
@@ -237,3 +356,36 @@ const bool TrustExtension::SetTrustListTrust(const std::string &nntpname, const
                return false;\r
        }\r
 }\r
+\r
+const bool TrustExtension::SetTrustListTrustComment(const std::string &nntpname, const std::string &comment)\r
+{\r
+       if(m_localidentityid>=0)\r
+       {\r
+               int id=GetIdentityID(nntpname);\r
+               if(id>=0)\r
+               {\r
+                       SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET TrustListTrustComment=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
+                       if(comment=="")\r
+                       {\r
+                               st.Bind(0);\r
+                       }\r
+                       else\r
+                       {\r
+                               st.Bind(0,comment);\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