• 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
kgpgchangekey.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008,2009,2010,2012,2014 Rolf Eike Beer <kde@opensource.sf-tec.de>
3  */
4 
5 /***************************************************************************
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  ***************************************************************************/
13 
14 #include "kgpgchangekey.h"
15 
16 #include "model/kgpgitemnode.h"
17 #include "transactions/kgpgchangetrust.h"
18 #include "transactions/kgpgchangeexpire.h"
19 #include "transactions/kgpgchangedisable.h"
20 
21 #include <QWidget>
22 
23 KGpgChangeKey::KGpgChangeKey(KGpgKeyNode *node, QWidget *widget)
24  : QObject(NULL),
25  m_expiration(node->getExpiration()),
26  m_key(*node->copyKey()),
27  m_node(node),
28  m_current(NULL),
29  m_parentWidget(widget),
30  m_step(0),
31  m_failed(0),
32  m_autodestroy(false)
33 {
34  m_disable = !m_key.valid();
35  m_owtrust = m_key.ownerTrust();
36 }
37 
38 KGpgChangeKey::~KGpgChangeKey()
39 {
40  Q_ASSERT(m_current == NULL);
41 }
42 
43 void KGpgChangeKey::setExpiration(const QDateTime &date)
44 {
45  m_expiration = date;
46 }
47 
48 void KGpgChangeKey::setDisable(const bool disable)
49 {
50  m_disable = disable;
51 }
52 
53 void KGpgChangeKey::setOwTrust(const gpgme_validity_t trust)
54 {
55  m_owtrust = trust;
56 }
57 
58 bool KGpgChangeKey::apply()
59 {
60  if (!wasChanged()) {
61  emit done(0);
62  return true;
63  }
64 
65  if (m_step != 0)
66  return false;
67 
68  m_step = 0;
69  m_failed = 0;
70 
71  nextStep(0);
72 
73  return true;
74 }
75 
76 void KGpgChangeKey::nextStep(int result)
77 {
78  if (m_step == 0) {
79  Q_ASSERT(sender() == NULL);
80  Q_ASSERT(m_current == NULL);
81  } else {
82  Q_ASSERT(sender() != NULL);
83  Q_ASSERT(sender() == m_current);
84  sender()->deleteLater();
85  m_current = NULL;
86  }
87 
88  m_step++;
89 
90  switch (m_step) {
91  case 1:
92  if (m_expiration != m_key.expirationDate()) {
93  m_current = new KGpgChangeExpire(m_parentWidget, m_key.fingerprint(), m_expiration);
94 
95  connect(m_current, SIGNAL(done(int)), SLOT(nextStep(int)));
96 
97  m_current->start();
98  break;
99  } else {
100  m_step++;
101  }
102  // fall through
103  case 2:
104  if (result == KGpgTransaction::TS_OK) {
105  m_key.setExpiration(m_expiration);
106  } else {
107  m_failed |= 1;
108  }
109  if (m_owtrust != m_key.ownerTrust()) {
110  m_current = new KGpgChangeTrust(m_parentWidget, m_key.fingerprint(), m_owtrust);
111 
112  connect(m_current, SIGNAL(done(int)), SLOT(nextStep(int)));
113 
114  m_current->start();
115  break;
116  } else {
117  m_step++;
118  }
119  // fall through
120  case 3:
121  if (result == KGpgTransaction::TS_OK) {
122  m_key.setOwnerTrust(m_owtrust);
123  } else {
124  m_failed |= 2;
125  }
126  if (m_key.valid() == m_disable) {
127  m_current = new KGpgChangeDisable(m_parentWidget, m_key.fingerprint(), m_disable);
128 
129  connect(m_current, SIGNAL(done(int)), SLOT(nextStep(int)));
130 
131  m_current->start();
132  break;
133  } else {
134  m_step++;
135  }
136  // fall through
137  default:
138  if (result == KGpgTransaction::TS_OK) {
139  m_key.setValid(!m_disable);
140  } else {
141  m_failed |= 4;
142  }
143  m_step = 0;
144  emit done(m_failed);
145  if (m_autodestroy) {
146  if (m_node)
147  emit keyNeedsRefresh(m_node);
148  deleteLater();
149  }
150  }
151 }
152 
153 bool KGpgChangeKey::wasChanged()
154 {
155  if (m_key.expirationDate() != m_expiration)
156  return true;
157 
158  if (m_key.ownerTrust() != m_owtrust)
159  return true;
160 
161  if (m_key.valid() == m_disable)
162  return true;
163 
164  return false;
165 }
166 
167 void KGpgChangeKey::selfdestruct(const bool applyChanges)
168 {
169  m_autodestroy = true;
170 
171  // if apply is already running it will take care of everything
172  if (m_step != 0)
173  return;
174 
175  if (applyChanges && wasChanged())
176  apply();
177  else
178  deleteLater();
179 }
180 
181 void KGpgChangeKey::setParentWidget(QWidget *widget)
182 {
183  m_parentWidget = widget;
184  if (m_current != NULL)
185  m_current->setParent(widget);
186 }
187 
188 #include "kgpgchangekey.moc"
KGpgChangeTrust
change the owner trust level of a public key
Definition: kgpgchangetrust.h:27
kgpgchangedisable.h
KGpgChangeKey::wasChanged
bool wasChanged()
Checks if the cached values differ from those of the key.
Definition: kgpgchangekey.cpp:153
KGpgChangeKey::KGpgChangeKey
KGpgChangeKey(KGpgKeyNode *node, QWidget *widget)
Creates a change object for a given key node.
Definition: kgpgchangekey.cpp:23
QWidget
KgpgCore::KgpgKey::ownerTrust
gpgme_validity_t ownerTrust() const
Definition: kgpgkey.cpp:288
KGpgTransaction::TS_OK
everything went fine
Definition: kgpgtransaction.h:60
QObject::sender
QObject * sender() const
KGpgChangeKey::setParentWidget
void setParentWidget(QWidget *widget)
set a new parent widget for the transactions
Definition: kgpgchangekey.cpp:181
KgpgCore::KgpgKey::setValid
void setValid(const bool valid)
Definition: kgpgkey.cpp:188
KGpgChangeKey::selfdestruct
void selfdestruct(const bool applyChanges)
Tell the object to remove itself once all work is done.
Definition: kgpgchangekey.cpp:167
KGpgTransaction::start
void start()
Start the operation.
Definition: kgpgtransaction.cpp:390
kgpgchangeexpire.h
KGpgChangeKey::setOwTrust
void setOwTrust(const gpgme_validity_t trust)
Cache new owner trust.
Definition: kgpgchangekey.cpp:53
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
KgpgCore::KgpgKey::setExpiration
void setExpiration(const QDateTime &date)
Definition: kgpgkey.cpp:218
KGpgChangeKey::~KGpgChangeKey
~KGpgChangeKey()
Destroys the object.
Definition: kgpgchangekey.cpp:38
QObject
KgpgCore::KgpgKey::setOwnerTrust
void setOwnerTrust(const gpgme_validity_t owtrust)
Definition: kgpgkey.cpp:213
KGpgChangeKey::done
void done(int result)
This signal gets emitted every time apply() has done all of it's work.
KGpgChangeKey::setExpiration
void setExpiration(const QDateTime &date)
Cache new expiration date.
Definition: kgpgchangekey.cpp:43
KGpgChangeExpire
change the key lifetime
Definition: kgpgchangeexpire.h:25
QObject::deleteLater
void deleteLater()
kgpgitemnode.h
KGpgChangeKey::setDisable
void setDisable(const bool disable)
Cache new disable flag.
Definition: kgpgchangekey.cpp:48
QObject::setParent
void setParent(QObject *parent)
kgpgchangetrust.h
kgpgchangekey.h
KGpgChangeKey::apply
bool apply()
Apply all cached changes to the key.
Definition: kgpgchangekey.cpp:58
KGpgChangeDisable
enable of disable a key
Definition: kgpgchangedisable.h:24
KGpgChangeKey::keyNeedsRefresh
void keyNeedsRefresh(KGpgKeyNode *node)
This signal get's emitted if apply finishes in detached mode.
KgpgCore::KgpgKey::valid
bool valid() const
Definition: kgpgkey.cpp:228
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QDateTime
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