aboutsummaryrefslogtreecommitdiffstats
path: root/kgpg/core/KGpgKeyNode.h
diff options
context:
space:
mode:
Diffstat (limited to 'kgpg/core/KGpgKeyNode.h')
-rw-r--r--kgpg/core/KGpgKeyNode.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/kgpg/core/KGpgKeyNode.h b/kgpg/core/KGpgKeyNode.h
new file mode 100644
index 0000000..caf0ba4
--- /dev/null
+++ b/kgpg/core/KGpgKeyNode.h
@@ -0,0 +1,191 @@
+/* Copyright 2008,2009,2010,2012 Rolf Eike Beer <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef KGPGKEYNODE_H
+#define KGPGKEYNODE_H
+
+#include "KGpgSignableNode.h"
+#include "KGpgSignNode.h"
+
+#include "kgpgkey.h"
+
+class KGpgExpandableNode;
+class KGpgRefNode;
+
+/**
+ * @brief A public key with or without corresponding secret key
+ */
+class KGpgKeyNode : public KGpgSignableNode
+{
+ Q_OBJECT
+
+ friend class KGpgGroupMemberNode;
+
+private:
+ KgpgCore::KgpgKey *m_key;
+ int m_signs;
+
+protected:
+ virtual void readChildren();
+
+ QList<KGpgRefNode *> m_refs;
+ QList<KGpgRefNode *> getRefsOfType(const KgpgCore::KgpgItemType &type) const;
+
+public:
+ typedef QList<KGpgKeyNode *> List;
+ typedef QList<const KGpgKeyNode *> ConstList;
+
+ explicit KGpgKeyNode(KGpgRootNode *parent, const KgpgCore::KgpgKey &k);
+ virtual ~KGpgKeyNode();
+
+ virtual bool hasChildren() const;
+
+ static KgpgCore::KgpgItemType getType(const KgpgCore::KgpgKey *k);
+
+ virtual KgpgCore::KgpgItemType getType() const;
+ virtual KgpgCore::KgpgKeyTrust getTrust() const;
+ const QString &getFingerprint() const;
+ virtual QString getSize() const;
+ virtual QString getName() const;
+ virtual QString getEmail() const;
+ virtual QDateTime getExpiration() const;
+ virtual QDateTime getCreation() const;
+ virtual QString getId() const;
+ virtual KGpgKeyNode *getKeyNode(void);
+ virtual const KGpgKeyNode *getKeyNode(void) const;
+ /**
+ * @brief Return if this key has a private key
+ */
+ bool isSecret() const;
+ /**
+ * @brief Print the full key fingerprint with spaces inserted
+ *
+ * For display purposes you normally don't want to print the full
+ * fingerprint as is because it's too many hex characters at once.
+ * This function returns the fingerprint in the format usually used
+ * for printing this out, i.e. with a space after each fourth hex
+ * character.
+ *
+ * @return the full fingerprint with spaces inserted
+ */
+ QString getBeautifiedFingerprint() const;
+ virtual QString getComment() const;
+ /**
+ * @brief Return the number of signatures of the primary user id
+ *
+ * This is different from the number of children of this node as there
+ * is usually at least one subkey and there may also be additional
+ * user ids or attributes. This does not count the signatures to those
+ * slave objects, only the ones that are direct children of this node.
+ *
+ * @return the number of signatures to the primary user id
+ */
+ virtual QString getSignCount() const;
+ /**
+ * @brief Creates a copy of the KgpgKey that belongs to this class
+ */
+ virtual KgpgCore::KgpgKey *copyKey() const;
+ /**
+ * @brief Replaces the current key information with the new one.
+ * All sub-items (i.e. signatures, user ids ...) will be deleted. This must
+ * only be used when the id of both new and old key is the same.
+ */
+ void setKey(const KgpgCore::KgpgKey &key);
+ /**
+ * @brief Returns a reference to the key used in this object.
+ * This allows direct access to the values of the key e.g. for KgpgKeyInfo.
+ */
+ const KgpgCore::KgpgKey *getKey() const;
+
+ /**
+ * @brief Returns the size of the signing key.
+ * @return signing key size in bits
+ */
+ virtual unsigned int getSignKeySize() const;
+ /**
+ * @brief Returns the size of the first encryption subkey.
+ * @return encryption key size in bits
+ */
+ virtual unsigned int getEncryptionKeySize() const;
+ /**
+ * @brief Notify this key that a KGpgRefNode now references this key.
+ * @param node object that takes the reference
+ */
+ void addRef(KGpgRefNode *node);
+ /**
+ * @brief Remove a reference to this object
+ * @param node node that no longer has the reference
+ *
+ * Note that this must not be called as reply when this object
+ * emits updated(NULL)
+ */
+ void delRef(KGpgRefNode *node);
+ /**
+ * @brief returns a list of all groups this key is member of
+ */
+ QList<KGpgGroupNode *> getGroups(void) const;
+ /**
+ * @brief returns a list of all group member nodes that reference this key
+ */
+ QList<KGpgGroupMemberNode *> getGroupRefs(void) const;
+ /**
+ * @brief returns a list of all sign nodes that reference this key
+ */
+ KGpgSignNode::List getSignRefs(void) const;
+ /**
+ * @brief returns a list of signatures to this key
+ * @param subkeys if signatures on subkeys should be included
+ */
+ KGpgSignNode::List getSignatures(const bool subkeys) const;
+ /**
+ * @brief get the user id or user attribute with the given number
+ * @param index the index of the user id to return
+ * @return the requested subitem or NULL if that is not present
+ *
+ * User ids indexes are 1-based, so 0 is not a valid index. Passing
+ * 1 as index will return the object itself, representing the primary
+ * user id.
+ */
+ const KGpgSignableNode *getUid(const unsigned int index) const;
+
+ /**
+ * @brief compare the id of this node to the given other node
+ * @param other key id to compare to
+ * @return if ids are identical
+ *
+ * This handles different length of the id string.
+ */
+ bool compareId(const QString &other) const;
+Q_SIGNALS:
+ void expanded();
+
+public slots:
+ /**
+ * @brief read all subitems
+ *
+ * This will read in all subitems (e.g. subkeys, signatures). When
+ * this is done the expanded() signal is emitted. The signal is emitted
+ * immediately if the key has been expanded before.
+ *
+ * This will not update the child items in case they are already present.
+ * Use KGpgItemModel::refreshKey() instead.
+ */
+ void expand();
+};
+
+#endif /* KGPGKEYNODE_H */