eb0a765ba560e21d34fdc090abd6e9470ceed394
[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,trust> &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,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
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                         int peermessagetrust=-1;\r
176                         int peertrustlisttrust=-1;\r
177                         std::string messagetrustcomment="";\r
178                         std::string trustlisttrustcomment="";\r
179                         std::string name="";\r
180                         std::string publickey="";\r
181                         std::vector<std::string> keyparts;\r
182                         std::string nntpname="";\r
183 \r
184                         if(st.ResultNull(0)==false)\r
185                         {\r
186                                 st.ResultInt(0,messagetrust);\r
187                         }\r
188                         if(st.ResultNull(1)==false)\r
189                         {\r
190                                 st.ResultInt(1,trustlisttrust);\r
191                         }\r
192                         st.ResultText(2,name);\r
193                         st.ResultText(3,publickey);\r
194                         st.ResultText(4,messagetrustcomment);\r
195                         st.ResultText(5,trustlisttrustcomment);\r
196                         if(st.ResultNull(6)==false)\r
197                         {\r
198                                 st.ResultInt(6,peermessagetrust);\r
199                         }\r
200                         if(st.ResultNull(7)==false)\r
201                         {\r
202                                 st.ResultInt(7,peertrustlisttrust);\r
203                         }\r
204 \r
205                         StringFunctions::SplitMultiple(publickey,"@,",keyparts);\r
206                         if(keyparts.size()>1)\r
207                         {\r
208                                 nntpname=name+"@"+keyparts[1];\r
209                         }\r
210 \r
211                         trustlist[nntpname]=trust(messagetrust,peermessagetrust,messagetrustcomment,trustlisttrust,peertrustlisttrust,trustlisttrustcomment);\r
212 \r
213                         st.Step();\r
214                 }\r
215                 return true;\r
216         }\r
217         else\r
218         {\r
219                 return false;\r
220         }\r
221 }\r
222 \r
223 const bool TrustExtension::GetTrustListTrust(const std::string &nntpname, int &trust)\r
224 {\r
225         if(m_localidentityid>=0)\r
226         {\r
227                 int id=GetIdentityID(nntpname);\r
228                 if(id>=0)\r
229                 {\r
230                         SQLite3DB::Statement st=m_db->Prepare("SELECT LocalTrustListTrust FROM tblIdentityTrust WHERE LocalIdentityID=? AND IdentityID=?;");\r
231                         st.Bind(0,m_localidentityid);\r
232                         st.Bind(1,id);\r
233                         st.Step();\r
234 \r
235                         if(st.RowReturned())\r
236                         {\r
237                                 int tr=-1;\r
238                                 if(st.ResultNull(0)==false)\r
239                                 {\r
240                                         st.ResultInt(0,tr);\r
241                                 }\r
242                                 trust=tr;\r
243                         }\r
244                         else\r
245                         {\r
246                                 trust=-1;\r
247                         }\r
248                         return true;\r
249                 }\r
250                 else\r
251                 {\r
252                         return false;\r
253                 }\r
254         }\r
255         else\r
256         {\r
257                 return false;\r
258         }\r
259 }\r
260 \r
261 const bool TrustExtension::SetMessageTrust(const std::string &nntpname, const int trust)\r
262 {\r
263         if(m_localidentityid>=0 && trust>=-1 && trust<=100)\r
264         {\r
265                 int id=GetIdentityID(nntpname);\r
266                 if(id>=0)\r
267                 {\r
268                         SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET LocalMessageTrust=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
269                         if(trust==-1)\r
270                         {\r
271                                 st.Bind(0);\r
272                         }\r
273                         else\r
274                         {\r
275                                 st.Bind(0,trust);\r
276                         }\r
277                         st.Bind(1,m_localidentityid);\r
278                         st.Bind(2,id);\r
279                         st.Step();\r
280 \r
281                         return true;\r
282                 }\r
283                 else\r
284                 {\r
285                         return false;\r
286                 }\r
287         }\r
288         else\r
289         {\r
290                 return false;\r
291         }\r
292 }\r
293 \r
294 const bool TrustExtension::SetMessageTrustComment(const std::string &nntpname, const std::string &comment)\r
295 {\r
296         if(m_localidentityid>=0)\r
297         {\r
298                 int id=GetIdentityID(nntpname);\r
299                 if(id>=0)\r
300                 {\r
301                         SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET MessageTrustComment=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
302                         if(comment=="")\r
303                         {\r
304                                 st.Bind(0);\r
305                         }\r
306                         else\r
307                         {\r
308                                 st.Bind(0,comment);\r
309                         }\r
310                         st.Bind(1,m_localidentityid);\r
311                         st.Bind(2,id);\r
312                         st.Step();\r
313 \r
314                         return true;\r
315                 }\r
316                 else\r
317                 {\r
318                         return false;\r
319                 }\r
320         }\r
321         else\r
322         {\r
323                 return false;\r
324         }\r
325 }\r
326 \r
327 const bool TrustExtension::SetTrustListTrust(const std::string &nntpname, const int trust)\r
328 {\r
329         if(m_localidentityid>=0 && trust>=-1 && trust<=100)\r
330         {\r
331                 int id=GetIdentityID(nntpname);\r
332                 if(id>=0)\r
333                 {\r
334                         SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET LocalTrustListTrust=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
335                         if(trust==-1)\r
336                         {\r
337                                 st.Bind(0);\r
338                         }\r
339                         else\r
340                         {\r
341                                 st.Bind(0,trust);\r
342                         }\r
343                         st.Bind(1,m_localidentityid);\r
344                         st.Bind(2,id);\r
345                         st.Step();\r
346 \r
347                         return true;\r
348                 }\r
349                 else\r
350                 {\r
351                         return false;\r
352                 }\r
353         }\r
354         else\r
355         {\r
356                 return false;\r
357         }\r
358 }\r
359 \r
360 const bool TrustExtension::SetTrustListTrustComment(const std::string &nntpname, const std::string &comment)\r
361 {\r
362         if(m_localidentityid>=0)\r
363         {\r
364                 int id=GetIdentityID(nntpname);\r
365                 if(id>=0)\r
366                 {\r
367                         SQLite3DB::Statement st=m_db->Prepare("UPDATE tblIdentityTrust SET TrustListTrustComment=? WHERE LocalIdentityID=? AND IdentityID=?;");\r
368                         if(comment=="")\r
369                         {\r
370                                 st.Bind(0);\r
371                         }\r
372                         else\r
373                         {\r
374                                 st.Bind(0,comment);\r
375                         }\r
376                         st.Bind(1,m_localidentityid);\r
377                         st.Bind(2,id);\r
378                         st.Step();\r
379 \r
380                         return true;\r
381                 }\r
382                 else\r
383                 {\r
384                         return false;\r
385                 }\r
386         }\r
387         else\r
388         {\r
389                 return false;\r
390         }\r
391 }\r