• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeutils API Reference
  • KDE Home
  • Contact Us
 

kgpg

  • sources
  • kde-4.14
  • kdeutils
  • kgpg
  • core
KGpgKeyNode.cpp
Go to the documentation of this file.
1 /* Copyright 2008,2009,2010,2012,2013,2014 Rolf Eike Beer <kde@opensource.sf-tec.de>
2  *
3  * This program is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU General Public License as
5  * published by the Free Software Foundation; either version 2 of
6  * the License or (at your option) version 3 or any later version
7  * accepted by the membership of KDE e.V. (or its successor approved
8  * by the membership of KDE e.V.), which shall act as a proxy
9  * defined in Section 14 of version 3 of the license.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 #include "KGpgKeyNode.h"
20 
21 #include "KGpgGroupMemberNode.h"
22 #include "KGpgRootNode.h"
23 #include "KGpgSubkeyNode.h"
24 #include "KGpgUatNode.h"
25 #include "KGpgUidNode.h"
26 #include "convert.h"
27 #include "kgpginterface.h"
28 #include "kgpgsettings.h"
29 #include "model/kgpgitemmodel.h"
30 
31 #include <KLocale>
32 
33 KGpgKeyNode::KGpgKeyNode(KGpgRootNode *parent, const KgpgCore::KgpgKey &k)
34  : KGpgSignableNode(parent),
35  m_key(new KgpgCore::KgpgKey(k)),
36  m_signs(0)
37 {
38 }
39 
40 KGpgKeyNode::~KGpgKeyNode()
41 {
42  foreach (KGpgRefNode *nd, m_refs) {
43  nd->unRef(m_parent->toRootNode());
44  }
45 }
46 
47 KgpgCore::KgpgItemType
48 KGpgKeyNode::getType() const
49 {
50  return getType(m_key);
51 }
52 
53 bool
54 KGpgKeyNode::hasChildren() const
55 {
56  return true;
57 }
58 
59 KgpgCore::KgpgItemType
60 KGpgKeyNode::getType(const KgpgCore::KgpgKey *k)
61 {
62  if (k->secret())
63  return KgpgCore::ITYPE_PAIR;
64 
65  return KgpgCore::ITYPE_PUBLIC;
66 }
67 
68 KgpgCore::KgpgKeyTrust
69 KGpgKeyNode::getTrust() const
70 {
71  return m_key->trust();
72 }
73 
74 const QString &
75 KGpgKeyNode::getFingerprint() const
76 {
77  return m_key->fingerprint();
78 }
79 
80 QString
81 KGpgKeyNode::getSize() const
82 {
83  return i18nc("size of signing key / size of encryption key",
84  "%1 / %2", QString::number(getSignKeySize()),
85  QString::number(getEncryptionKeySize()));
86 }
87 
88 QString
89 KGpgKeyNode::getName() const
90 {
91  return m_key->name();
92 }
93 
94 QString
95 KGpgKeyNode::getEmail() const
96 {
97  return m_key->email();
98 }
99 
100 QDateTime
101 KGpgKeyNode::getExpiration() const
102 {
103  return m_key->expirationDate();
104 }
105 
106 QDateTime
107 KGpgKeyNode::getCreation() const
108 {
109  return m_key->creationDate();
110 }
111 
112 QString
113 KGpgKeyNode::getId() const
114 {
115  return m_key->fullId();
116 }
117 
118 KGpgKeyNode *
119 KGpgKeyNode::getKeyNode(void)
120 {
121  return this;
122 }
123 
124 bool
125 KGpgKeyNode::isSecret() const
126 {
127  return m_key->secret();
128 }
129 
130 const KGpgKeyNode *
131 KGpgKeyNode::getKeyNode(void) const
132 {
133  return this;
134 }
135 
136 QString
137 KGpgKeyNode::getBeautifiedFingerprint() const
138 {
139  static const QChar space = QLatin1Char(' ');
140  QString fingervalue = m_key->fingerprint();
141  int len = fingervalue.length();
142  if ((len > 0) && (len % 4 == 0))
143  for (int n = 0; 4 * (n + 1) < len; n++)
144  fingervalue.insert(5 * n + 4, space);
145  return fingervalue;
146 }
147 
148 QString
149 KGpgKeyNode::getComment() const
150 {
151  return m_key->comment();
152 }
153 
154 void
155 KGpgKeyNode::readChildren()
156 {
157  KgpgInterface::readSignatures(this);
158 
159  m_signs = 0;
160  foreach(KGpgNode *n, children)
161  if (n->getType() == ITYPE_SIGN)
162  m_signs++;
163 }
164 
165 QString
166 KGpgKeyNode::getSignCount() const
167 {
168  if (!wasExpanded())
169  return QString();
170  return i18np("1 signature", "%1 signatures", m_signs);
171 }
172 
173 KgpgKey *
174 KGpgKeyNode::copyKey() const
175 {
176  return new KgpgKey(*m_key);
177 }
178 
179 void
180 KGpgKeyNode::setKey(const KgpgKey &key)
181 {
182  Q_ASSERT(m_key->fingerprint() == key.fingerprint());
183  delete m_key;
184 
185  for (int i = 0; i < children.count(); i++)
186  delete children.at(i);
187  children.clear();
188 
189  m_key = new KgpgKey(key);
190 }
191 
192 const KgpgKey *
193 KGpgKeyNode::getKey() const
194 {
195  return m_key;
196 }
197 
198 unsigned int
199 KGpgKeyNode::getSignKeySize() const
200 {
201  return m_key->size();
202 }
203 
204 unsigned int
205 KGpgKeyNode::getEncryptionKeySize() const
206 {
207  return m_key->encryptionSize();
208 }
209 
210 void
211 KGpgKeyNode::addRef(KGpgRefNode *node)
212 {
213  Q_ASSERT(m_refs.indexOf(node) == -1);
214  m_refs.append(node);
215 }
216 
217 void
218 KGpgKeyNode::delRef(KGpgRefNode *node)
219 {
220  Q_ASSERT(m_refs.indexOf(node) != -1);
221  m_refs.removeOne(node);
222  Q_ASSERT(m_refs.indexOf(node) == -1);
223 }
224 
225 QList<KGpgGroupNode *>
226 KGpgKeyNode::getGroups(void) const
227 {
228  QList<KGpgGroupNode *> ret;
229 
230  foreach (KGpgGroupMemberNode *gnd, getGroupRefs())
231  ret.append(gnd->getParentKeyNode());
232 
233  return ret;
234 }
235 
236 QList<KGpgRefNode *>
237 KGpgKeyNode::getRefsOfType(const KgpgItemType &type) const
238 {
239  QList<KGpgRefNode *> ret;
240 
241  foreach (KGpgRefNode *nd, m_refs) {
242  if (nd->getType() & type)
243  ret.append(nd);
244  }
245 
246  return ret;
247 }
248 
249 QList<KGpgGroupMemberNode *>
250 KGpgKeyNode::getGroupRefs(void) const
251 {
252  QList<KGpgGroupMemberNode *> ret;
253 
254  foreach (KGpgRefNode *rn, getRefsOfType(KgpgCore::ITYPE_GROUP))
255  ret.append(rn->toGroupMemberNode());
256 
257  return ret;
258 }
259 
260 KGpgSignNode::List
261 KGpgKeyNode::getSignRefs(void) const
262 {
263  KGpgSignNode::List ret;
264 
265  QList<KGpgRefNode *> refs = getRefsOfType(KgpgCore::ITYPE_SIGN);
266 
267  foreach (KGpgRefNode *rn, refs)
268  ret.append(rn->toSignNode());
269 
270  return ret;
271 }
272 
273 KGpgSignNode::List
274 KGpgKeyNode::getSignatures(const bool subkeys) const
275 {
276  KGpgSignNode::List ret = KGpgSignableNode::getSignatures();
277 
278  if (!subkeys)
279  return ret;
280 
281  foreach (KGpgNode *child, children) {
282  KGpgSignNode::List tmp;
283 
284  switch (child->getType()) {
285  case KgpgCore::ITYPE_UID:
286  case KgpgCore::ITYPE_UAT:
287  tmp = child->toSignableNode()->getSignatures();
288  break;
289  default:
290  continue;
291  }
292 
293  foreach (KGpgSignNode *sn, tmp) {
294  bool found = false;
295  const QString snid(sn->getId());
296 
297  foreach (const KGpgSignNode *retsn, ret) {
298  found = (retsn->getId() == snid);
299  if (found)
300  break;
301  }
302 
303  if (!found)
304  ret << sn;
305  }
306  }
307 
308  return ret;
309 }
310 
311 const KGpgSignableNode *
312 KGpgKeyNode::getUid(const unsigned int index) const
313 {
314  Q_ASSERT(index > 0);
315 
316  if (index == 1)
317  return this;
318 
319  const QString idxstr(QString::number(index));
320 
321  foreach (const KGpgNode *child, children) {
322  KGpgSignNode::List tmp;
323 
324  switch (child->getType()) {
325  case KgpgCore::ITYPE_UID:
326  case KgpgCore::ITYPE_UAT:
327  if (child->getId() == idxstr)
328  return child->toSignableNode();
329  break;
330  default:
331  continue;
332  }
333  }
334 
335  return NULL;
336 }
337 
338 bool
339 KGpgKeyNode::compareId(const QString &other) const
340 {
341  if (other.length() == m_key->fullId().length())
342  return (other.compare(m_key->fullId(), Qt::CaseInsensitive) == 0);
343 
344  if (other.length() == m_key->fingerprint().length())
345  return (other.compare(m_key->fingerprint(), Qt::CaseInsensitive) == 0);
346 
347  const QString comId = m_key->fullId().isEmpty() ? m_key->fingerprint() : m_key->fullId();
348 
349  return (other.right(comId.length()).compare(
350  comId.right(other.length()),
351  Qt::CaseInsensitive) == 0);
352 }
353 
354 bool
355 KGpgKeyNode::canEncrypt() const
356 {
357  return ((m_key->keytype() & KgpgCore::SKT_ENCRYPTION) != 0);
358 }
359 
360 void
361 KGpgKeyNode::expand()
362 {
363  if (!wasExpanded())
364  readChildren();
365 
366  emit expanded();
367 }
368 
369 #include "KGpgKeyNode.moc"
KGpgUidNode.h
QObject::child
QObject * child(const char *objName, const char *inheritsClass, bool recursiveSearch) const
KGpgUatNode.h
KGpgNode::toRootNode
KGpgRootNode * toRootNode()
Definition: KGpgNode.cpp:112
KGpgKeyNode::getName
virtual QString getName() const
Definition: KGpgKeyNode.cpp:89
KGpgKeyNode::delRef
void delRef(KGpgRefNode *node)
Remove a reference to this object.
Definition: KGpgKeyNode.cpp:218
KGpgKeyNode::getUid
const KGpgSignableNode * getUid(const unsigned int index) const
get the user id or user attribute with the given number
Definition: KGpgKeyNode.cpp:312
KgpgCore::SKT_ENCRYPTION
Definition: kgpgkey.h:72
KGpgKeyNode::getKey
const KgpgCore::KgpgKey * getKey() const
Returns a reference to the key used in this object.
Definition: KGpgKeyNode.cpp:193
KGpgKeyNode::getSignCount
virtual QString getSignCount() const
Return the number of signatures of the primary user id.
Definition: KGpgKeyNode.cpp:166
KgpgCore::KgpgKey::size
uint size() const
Definition: kgpgkey.cpp:263
KGpgKeyNode::getId
virtual QString getId() const
Definition: KGpgKeyNode.cpp:113
QChar
KGpgGroupMemberNode.h
KgpgCore::KgpgKey::creationDate
QDateTime creationDate() const
Definition: kgpgkey.cpp:298
KgpgCore::KgpgKey::keytype
KgpgSubKeyType keytype() const
Definition: kgpgkey.cpp:335
QObject::children
const QObjectList & children() const
KGpgKeyNode::~KGpgKeyNode
virtual ~KGpgKeyNode()
Definition: KGpgKeyNode.cpp:40
KgpgCore::KgpgKey
Definition: kgpgkey.h:236
KGpgRefNode::unRef
void unRef(KGpgRootNode *root)
Break the current reference.
Definition: KGpgRefNode.cpp:106
KGpgKeyNode::expanded
void expanded()
KgpgCore::KgpgKey::fullId
QString fullId() const
Definition: kgpgkey.cpp:238
KGpgRootNode.h
KGpgKeyNode::getComment
virtual QString getComment() const
Definition: KGpgKeyNode.cpp:149
KGpgKeyNode
A public key with or without corresponding secret key.
Definition: KGpgKeyNode.h:33
KgpgCore::KgpgKey::fingerprint
const QString & fingerprint() const
Definition: kgpgkey.cpp:258
QList::indexOf
int indexOf(const T &value, int from) const
KgpgCore::KgpgKey::name
QString name() const
Definition: kgpgkey.cpp:243
KGpgNode::getType
virtual KgpgCore::KgpgItemType getType() const =0
Returns the item type of this object.
QString::number
QString number(int n, int base)
KGpgNode::toSignableNode
KGpgSignableNode * toSignableNode()
Definition: KGpgNode.cpp:78
KGpgRootNode
The parent of all key data objects.
Definition: KGpgRootNode.h:38
QList::append
void append(const T &value)
QString::insert
QString & insert(int position, QChar ch)
KGpgKeyNode::getFingerprint
const QString & getFingerprint() const
Definition: KGpgKeyNode.cpp:75
KgpgCore::KgpgKey::encryptionSize
uint encryptionSize() const
Definition: kgpgkey.cpp:268
KgpgCore::KgpgKey::email
QString email() const
Definition: kgpgkey.cpp:248
KgpgInterface::readSignatures
void readSignatures(KGpgKeyNode *node)
Definition: kgpginterface.cpp:305
KGpgNode::toGroupMemberNode
KGpgGroupMemberNode * toGroupMemberNode()
Definition: KGpgNode.cpp:208
kgpgitemmodel.h
KGpgKeyNode::canEncrypt
bool canEncrypt() const
return if this key can be used for encryption
Definition: KGpgKeyNode.cpp:355
QString::isEmpty
bool isEmpty() const
KGpgRefNode
Class for child objects that are only a reference to a primary key.
Definition: KGpgRefNode.h:39
KgpgCore::ITYPE_PUBLIC
public key
Definition: kgpgkey.h:93
KgpgCore::KgpgKey::comment
QString comment() const
Definition: kgpgkey.cpp:253
kgpginterface.h
KGpgGroupMemberNode::getParentKeyNode
virtual KGpgGroupNode * getParentKeyNode() const
Definition: KGpgGroupMemberNode.cpp:97
QString
QList
KgpgCore::ITYPE_GROUP
the element is a GnuPG key group
Definition: kgpgkey.h:91
QString::right
QString right(int n) const
KGpgKeyNode::getEncryptionKeySize
virtual unsigned int getEncryptionKeySize() const
Returns the size of the first encryption subkey.
Definition: KGpgKeyNode.cpp:205
KGpgNode
The abstract base class for all classes representing keyring data.
Definition: KGpgNode.h:42
KgpgCore::ITYPE_PAIR
key pair
Definition: kgpgkey.h:94
KgpgCore::KgpgKey::trust
KgpgKeyTrust trust() const
Definition: kgpgkey.cpp:293
QLatin1Char
KGpgKeyNode::getSignKeySize
virtual unsigned int getSignKeySize() const
Returns the size of the signing key.
Definition: KGpgKeyNode.cpp:199
KGpgKeyNode::getExpiration
virtual QDateTime getExpiration() const
Definition: KGpgKeyNode.cpp:101
kgpgsettings.h
KgpgCore::ITYPE_SIGN
signature (to a key, uid or uat)
Definition: kgpgkey.h:102
KGpgKeyNode::getSize
virtual QString getSize() const
Returns a string describing the size of this object.
Definition: KGpgKeyNode.cpp:81
KGpgKeyNode::addRef
void addRef(KGpgRefNode *node)
Notify this key that a KGpgRefNode now references this key.
Definition: KGpgKeyNode.cpp:211
KGpgKeyNode::isSecret
bool isSecret() const
Return if this key has a private key.
Definition: KGpgKeyNode.cpp:125
KGpgKeyNode::getKeyNode
virtual KGpgKeyNode * getKeyNode(void)
returns the key node this node belongs to
Definition: KGpgKeyNode.cpp:119
KGpgKeyNode::KGpgKeyNode
KGpgKeyNode(KGpgRootNode *parent, const KgpgCore::KgpgKey &k)
Definition: KGpgKeyNode.cpp:33
KGpgNode::getId
virtual QString getId() const
Definition: KGpgNode.cpp:318
KGpgRefNode::getId
virtual QString getId() const
Definition: KGpgRefNode.cpp:115
KGpgExpandableNode::wasExpanded
virtual bool wasExpanded() const
check if there are any child nodes present in memory
Definition: KGpgExpandableNode.cpp:64
KGpgKeyNode::getEmail
virtual QString getEmail() const
Definition: KGpgKeyNode.cpp:95
KGpgGroupMemberNode
A member of a GnuPG group.
Definition: KGpgGroupMemberNode.h:35
KGpgNode::m_parent
KGpgExpandableNode * m_parent
Definition: KGpgNode.h:50
KgpgCore::ITYPE_UAT
user attribute to a key (i.e. photo id)
Definition: kgpgkey.h:100
KGpgKeyNode::getType
virtual KgpgCore::KgpgItemType getType() const
Returns the item type of this object.
Definition: KGpgKeyNode.cpp:48
KGpgKeyNode.h
KGpgSignableNode::getSignatures
KGpgSignNode::List getSignatures(void) const
Definition: KGpgSignableNode.cpp:33
QString::length
int length() const
KGpgNode::toSignNode
KGpgSignNode * toSignNode()
Definition: KGpgNode.cpp:224
KGpgKeyNode::copyKey
virtual KgpgCore::KgpgKey * copyKey() const
Creates a copy of the KgpgKey that belongs to this class.
Definition: KGpgKeyNode.cpp:174
KGpgKeyNode::getGroupRefs
QList< KGpgGroupMemberNode * > getGroupRefs(void) const
returns a list of all group member nodes that reference this key
Definition: KGpgKeyNode.cpp:250
KgpgCore::KgpgKey::secret
bool secret() const
Definition: kgpgkey.cpp:223
KGpgSubkeyNode.h
KGpgKeyNode::compareId
bool compareId(const QString &other) const
compare the id of this node to the given other node
Definition: KGpgKeyNode.cpp:339
KGpgKeyNode::m_refs
QList< KGpgRefNode * > m_refs
Definition: KGpgKeyNode.h:46
KGpgKeyNode::expand
void expand()
read all subitems
Definition: KGpgKeyNode.cpp:361
KGpgSignNode
A signature to another key object.
Definition: KGpgSignNode.h:31
KGpgKeyNode::getCreation
virtual QDateTime getCreation() const
Definition: KGpgKeyNode.cpp:107
KGpgKeyNode::hasChildren
virtual bool hasChildren() const
check if there are any child nodes
Definition: KGpgKeyNode.cpp:54
KGpgKeyNode::setKey
void setKey(const KgpgCore::KgpgKey &key)
Replaces the current key information with the new one.
Definition: KGpgKeyNode.cpp:180
QString::compare
int compare(const QString &other) const
KGpgKeyNode::getBeautifiedFingerprint
QString getBeautifiedFingerprint() const
Print the full key fingerprint with spaces inserted.
Definition: KGpgKeyNode.cpp:137
KGpgKeyNode::getGroups
QList< KGpgGroupNode * > getGroups(void) const
returns a list of all groups this key is member of
Definition: KGpgKeyNode.cpp:226
KgpgCore::ITYPE_UID
additional user id
Definition: kgpgkey.h:99
QList::removeOne
bool removeOne(const T &value)
convert.h
KGpgKeyNode::getSignRefs
KGpgSignNode::List getSignRefs(void) const
returns a list of all sign nodes that reference this key
Definition: KGpgKeyNode.cpp:261
KGpgSignableNode
An object that may have KGpgSignNode children.
Definition: KGpgSignableNode.h:31
QDateTime
KGpgKeyNode::getTrust
virtual KgpgCore::KgpgKeyTrust getTrust() const
Definition: KGpgKeyNode.cpp:69
KGpgKeyNode::readChildren
virtual void readChildren()
reimplemented in every base class to read in the child data
Definition: KGpgKeyNode.cpp:155
KGpgKeyNode::getRefsOfType
QList< KGpgRefNode * > getRefsOfType(const KgpgCore::KgpgItemType &type) const
Definition: KGpgKeyNode.cpp:237
KgpgCore::KgpgKey::expirationDate
QDateTime expirationDate() const
Definition: kgpgkey.cpp:303
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:42:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kgpg

Skip menu "kgpg"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • ktimer
  • kwallet
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal