version 0.2.18
[fms.git] / src / nntp / extensiontrust.cpp
1 #include "../../include/nntp/extensiontrust.h"\r
2 #include "../../include/stringfunctions.h"\r
3 \r
4 #ifdef XMEM\r
5         #include <xmem.h>\r
6 #endif\r
7 \r
8 TrustExtension::TrustExtension()\r
9 {\r
10         m_localidentityid=-1;\r
11 }\r
12 \r
13 TrustExtension::TrustExtension(const int &localidentityid)\r
14 {\r
15         m_localidentityid=localidentityid;\r
16 }\r
17 \r
18 const int TrustExtension::GetIdentityID(const std::string &nntpname)\r
19 {\r
20         std::vector<std::string> nameparts;\r
21         StringFunctions::Split(nntpname,"@",nameparts);\r
22 \r
23         SQLite3DB::Statement st=m_db->Prepare("SELECT IdentityID, PublicKey FROM tblIdentity WHERE Name=? AND PublicKey IS NOT NULL AND PublicKey  <> '' ;");\r
24         st.Bind(0,nameparts[0]);\r
25         st.Step();\r
26 \r
27         while(st.RowReturned())\r
28         {\r
29                 int id=-1;\r
30                 std::vector<std::string> keyparts;\r
31                 std::string publickey="";\r
32 \r
33                 st.ResultText(1,publickey);\r
34                 StringFunctions::SplitMultiple(publickey,"@,",keyparts);\r
35 \r
36                 if(keyparts.size()>1)\r
37                 {\r
38                         if(nameparts[0]+"@"+keyparts[1]==nntpname)\r
39                         {\r
40                                 st.ResultInt(0,id);\r
41                                 return id;\r
42                         }\r
43                 }\r
44 \r
45                 st.Step();\r
46         }\r
47 \r
48         return -1;\r
49 \r
50 }\r
51 \r
52 const bool TrustExtension::GetMessageTrust(const std::string &nntpname, int &trust)\r
53 {\r
54         if(m_localidentityid>=0)\r
55         {\r
56                 int id=GetIdentityID(nntpname);\r
57                 if(id>=0)\r
58                 {\r
59                         SQLite3DB::Statement st=m_db->Prepare("SELECT LocalMessageTrust FROM tblIdentityTrust WHERE LocalIdentityID=? AND IdentityID=?;");\r
60                         st.Bind(0,m_localidentityid);\r
61                         st.Bind(1,id);\r
62                         st.Step();\r
63 \r
64                         if(st.RowReturned())\r
65                         {\r
66                                 int tr=-1;\r
67                                 if(st.ResultNull(0)==false)\r
68                                 {\r
69                                         st.ResultInt(0,tr);\r
70                                 }\r
71                                 trust=tr;\r
72                         }\r
73                         else\r
74                         {\r
75                                 trust=-1;\r
76                         }\r
77                         return true;\r
78                 }\r
79                 else\r
80                 {\r
81                         return false;\r
82                 }\r
83         }\r
84         else\r
85         {\r
86                 return false;\r
87         }\r
88 }\r
89 \r
90 const bool TrustExtension::GetPeerMessageTrust(const std::string &nntpname, int &trust)\r
91 {\r
92         if(m_localidentityid>=0)\r
93         {\r
94                 int id=GetIdentityID(nntpname);\r
95                 if(id>=0)\r
96                 {\r
97                         SQLite3DB::Statement st=m_db->Prepare("SELECT PeerMessageTrust FROM tblIdentity WHERE IdentityID=?;");\r
98                         st.Bind(0,id);\r
99                         st.Step();\r
100 \r
101                         if(st.RowReturned())\r
102                         {\r
103                                 int tr=-1;\r
104                                 if(st.ResultNull(0)==false)\r
105                                 {\r
106                                         st.ResultInt(0,tr);\r
107                                 }\r
108                                 trust=tr;\r
109                         }\r
110                         else\r
111                         {\r
112                                 trust=-1;\r
113                         }\r
114                         return true;\r
115                 }\r
116                 else\r
117                 {\r
118                         return false;\r
119                 }\r
120         }\r
121         else\r
122         {\r
123                 return false;\r
124         }\r
125 }\r
126 \r
127 const bool TrustExtension::GetPeerTrustListTrust(const std::string &nntpname, int &trust)\r
128 {\r
129         if(m_localidentityid>=0)\r
130         {\r
131                 int id=GetIdentityID(nntpname);\r
132                 if(id>=0)\r
133                 {\r
134                         SQLite3DB::Statement st=m_db->Prepare("SELECT PeerTrustListTrust FROM tblIdentity WHERE IdentityID=?;");\r
135                         st.Bind(0,id);\r
136                         st.Step();\r
137 \r
138                         if(st.RowReturned())\r
139                         {\r
140                                 int tr=-1;\r
141                                 if(st.ResultNull(0)==false)\r
142                                 {\r
143                                         st.ResultInt(0,tr);\r
144                                 }\r
145                                 trust=tr;\r
146                         }\r
147                         else\r
148                         {\r
149                                 trust=-1;\r
150                         }\r
151                         return true;\r
152                 }\r
153                 else\r
154                 {\r
155                         return false;\r
156                 }\r
157         }\r
158         else\r
159         {\r
160                 return false;\r
161         }\r
162 }\r
163 \r
164 const bool TrustExtension::GetTrustList(std::map<std::string,std::pair<int,int> > &trustlist)\r
165 {\r
166         if(m_localidentityid>=0)\r
167         {\r
168                 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
169                 st.Bind(0,m_localidentityid);\r
170                 st.Step();\r
171                 while(st.RowReturned())\r
172                 {\r
173                         int messagetrust=-1;\r
174                         int trustlisttrust=-1;\r
175                         std::string name="";\r
176                         std::string publickey="";\r
177                         std::vector<std::string> keyparts;\r
178                         std::string nntpname="";\r
179 \r
180                         if(st.ResultNull(0)==false)\r
181                         {\r
182                                 st.ResultInt(0,messagetrust);\r
183                         }\r
184                         if(st.ResultNull(1)==false)\r
185                         {\r
186                                 st.ResultInt(1,trustlisttrust);\r
187                         }\r
188                         st.ResultText(2,name);\r
189                         st.ResultText(3,publickey);\r
190 \r
191                         StringFunctions::SplitMultiple(publickey,"@,",keyparts);\r
192                         if(keyparts.size()>1)\r
193                         {\r
194                                 nntpname=name+"@"+keyparts[1];\r
195                         }\r
196 \r
197                         trustlist[nntpname]=std::pair<int,int>(messagetrust,trustlisttrust);\r
198 \r
199                         st.Step();\r
200                 }\r
201                 return true;\r
202         }\r
203         else\r
204         {\r
205                 return false;\r
206         }\r
207 }\r
208 \r
209 const bool TrustExtension::GetTrustListTrust(const std::string &nntpname, int &trust)\r
210 {\r
211         if(m_localidentityid>=0)\r
212         {\r
213                 int id=GetIdentityID(nntpname);\r
214                 if(id>=0)\r
215                 {\r
216                         SQLite3DB::Statement st=m_db->Prepare("SELECT LocalTrustListTrust FROM tblIdentityTrust WHERE LocalIdentityID=? AND IdentityID=?;");\r
217                         st.Bind(0,m_localidentityid);\r
218                         st.Bind(1,id);\r
219                         st.Step();\r
220 \r
221                         if(st.RowReturned())\r
222                         {\r
223                                 int tr=-1;\r
224                                 if(st.ResultNull(0)==false)\r
225                                 {\r
226                                         st.ResultInt(0,tr);\r
227                                 }\r
228                                 trust=tr;\r
229                         }\r
230                         else\r
231                         {\r
232                                 trust=-1;\r
233                         }\r
234                         return true;\r
235                 }\r
236                 else\r
237                 {\r
238                         return false;\r
239                 }\r
240         }\r
241         else\r
242         {\r
243                 return false;\r
244         }\r
245 }\r
246 \r
247 const bool TrustExtension::SetMessageTrust(const std::string &nntpname, const int trust)\r
248 {\r
249         if(m_localidentityid>=0 && trust>=-1 && trust<=100)\r
250         {\r
251                 int id=GetIdentityID(nntpname);\r
252                 if(id>=0)\r
253                 {\r
254                         SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET LocalMessageTrust=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
255                         if(trust==-1)\r
256                         {\r
257                                 st.Bind(0);\r
258                         }\r
259                         else\r
260                         {\r
261                                 st.Bind(0,trust);\r
262                         }\r
263                         st.Bind(1,m_localidentityid);\r
264                         st.Bind(2,id);\r
265                         st.Step();\r
266 \r
267                         return true;\r
268                 }\r
269                 else\r
270                 {\r
271                         return false;\r
272                 }\r
273         }\r
274         else\r
275         {\r
276                 return false;\r
277         }\r
278 }\r
279 \r
280 const bool TrustExtension::SetTrustListTrust(const std::string &nntpname, const int trust)\r
281 {\r
282         if(m_localidentityid>=0 && trust>=-1 && trust<=100)\r
283         {\r
284                 int id=GetIdentityID(nntpname);\r
285                 if(id>=0)\r
286                 {\r
287                         SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET LocalTrustListTrust=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
288                         if(trust==-1)\r
289                         {\r
290                                 st.Bind(0);\r
291                         }\r
292                         else\r
293                         {\r
294                                 st.Bind(0,trust);\r
295                         }\r
296                         st.Bind(1,m_localidentityid);\r
297                         st.Bind(2,id);\r
298                         st.Step();\r
299 \r
300                         return true;\r
301                 }\r
302                 else\r
303                 {\r
304                         return false;\r
305                 }\r
306         }\r
307         else\r
308         {\r
309                 return false;\r
310         }\r
311 }\r