• 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
  • transactions
kgpgdelsign.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2010,2012 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 "kgpgdelsign.h"
15 
16 #include "model/kgpgitemnode.h"
17 #include "gpgproc.h"
18 
19 #include <QStringList>
20 
21 KGpgDelSign::KGpgDelSign(QObject *parent, const KGpgSignNode::List &signids)
22  : KGpgUidTransaction(parent, signids.at(0)->getParentKeyNode()->getId())
23 {
24  addArgument(QLatin1String( "delsig" ));
25 
26  const QStringList args = getProcess()->program();
27 
28  // If we run with --no-tty GnuPG will not tell which sign it is currently
29  // asking to remove :(
30  int ntty = args.indexOf(QLatin1String("--no-tty"));
31  if (ntty >= 0)
32  replaceArgument(ntty, QLatin1String("--with-colons"));
33  else
34  insertArgument(1, QLatin1String( "--with-colons" ));
35 
36  if (signids.at(0)->getParentKeyNode()->getType() & KgpgCore::ITYPE_PUBLIC)
37  setUid(QLatin1String( "1" ));
38  else
39  setUid(signids.at(0)->getParentKeyNode()->getId());
40 
41 #ifndef QT_NO_DEBUG
42  foreach (const KGpgSignNode *snode, signids) {
43  Q_ASSERT(signids.at(0)->getParentKeyNode() == snode->getParentKeyNode());
44  }
45 #endif
46 
47  setSignIds(signids);
48 }
49 
50 KGpgDelSign::KGpgDelSign(QObject* parent, KGpgSignNode *signid)
51  : KGpgUidTransaction(parent, signid->getParentKeyNode()->getId())
52 {
53  addArgument(QLatin1String( "delsig" ));
54  insertArgument(1, QLatin1String( "--with-colons" ));
55 
56  if (signid->getParentKeyNode()->getType() & KgpgCore::ITYPE_PUBLIC)
57  setUid(QLatin1String( "1" ));
58  else
59  setUid(signid->getParentKeyNode()->getId());
60 
61  setSignId(signid);
62 }
63 
64 
65 KGpgDelSign::~KGpgDelSign()
66 {
67 }
68 
69 KGpgSignNode::List KGpgDelSign::getSignIds(void) const
70 {
71  return m_signids;
72 }
73 
74 void KGpgDelSign::setSignId(KGpgSignNode* keyid)
75 {
76  m_signids.clear();
77  m_signids << keyid;
78 }
79 
80 void KGpgDelSign::setSignIds(const KGpgSignNode::List &keyids)
81 {
82  m_signids = keyids;
83 }
84 
85 bool
86 KGpgDelSign::nextLine(const QString &line)
87 {
88  if (line.startsWith(QLatin1String("sig:"))) {
89  m_cachedid = line;
90  return false;
91  } else if (line.startsWith(QLatin1String("[GNUPG:] "))) {
92  return standardCommands(line);
93  } else {
94  // GnuPG will tell us a bunch of stuff because we are not in
95  // --no-tty mode but we don't care.
96  return false;
97  }
98 }
99 
100 KGpgTransaction::ts_boolanswer
101 KGpgDelSign::boolQuestion(const QString &line)
102 {
103  if (line.startsWith(QLatin1String("keyedit.delsig."))) {
104  const QStringList parts = m_cachedid.split(QLatin1Char( ':' ));
105 
106  if (parts.count() < 7)
107  return KGpgTransaction::BA_NO;
108 
109  const QString &sigid = parts[4];
110  const int snlen = sigid.length();
111  KGpgSignNode *signode = NULL;
112 
113  foreach (KGpgSignNode *snode, m_signids) {
114  if (sigid == snode->getId().right(snlen)) {
115  signode = snode;
116  break;
117  }
118  }
119 
120  if (signode == NULL)
121  return KGpgTransaction::BA_NO;
122 
123  const QDateTime creation = QDateTime::fromTime_t(parts[5].toUInt());
124  if (creation != signode->getCreation())
125  return KGpgTransaction::BA_NO;
126 
127  QDateTime sigexp;
128  if (!parts[6].isEmpty() && (parts[6] != QLatin1String("0")))
129  sigexp = QDateTime::fromTime_t(parts[6].toUInt());
130  if (sigexp != signode->getExpiration())
131  return KGpgTransaction::BA_NO;
132 
133  m_signids.removeOne(signode);
134  return KGpgTransaction::BA_YES;
135  } else {
136  return KGpgTransaction::boolQuestion(line);
137  }
138 }
139 
140 #include "kgpgdelsign.moc"
QList::clear
void clear()
KGpgDelSign::setSignIds
void setSignIds(const KGpgSignNode::List &keyids)
set the ids to delete
Definition: kgpgdelsign.cpp:80
KGpgTransaction::addArgument
int addArgument(const QString &arg)
add a command line argument to gpg process
Definition: kgpgtransaction.cpp:562
KGpgTransaction::BA_YES
answer "YES"
Definition: kgpgtransaction.h:75
KGpgNode::getParentKeyNode
KGpgExpandableNode * getParentKeyNode() const
Returns the parent node in the key hierarchy.
Definition: KGpgNode.cpp:330
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
QList::at
const T & at(int i) const
KGpgTransaction::replaceArgument
void replaceArgument(const int pos, const QString &arg)
replace the argument at the given position
Definition: kgpgtransaction.cpp:582
KGpgTransaction::getProcess
GPGProc * getProcess()
get a reference to the gpg process object
Definition: kgpgtransaction.cpp:556
KGpgSignNode::getExpiration
virtual QDateTime getExpiration() const
Definition: KGpgSignNode.cpp:64
KGpgTransaction::BA_NO
answer "NO"
Definition: kgpgtransaction.h:76
KGpgNode::getType
virtual KgpgCore::KgpgItemType getType() const =0
Returns the item type of this object.
QDateTime::fromTime_t
QDateTime fromTime_t(uint seconds)
QList::count
int count(const T &value) const
KGpgDelSign::boolQuestion
virtual ts_boolanswer boolQuestion(const QString &line)
Called for every boolean question GnuPG answers.
Definition: kgpgdelsign.cpp:101
KGpgUidTransaction::setUid
void setUid(const QString &uid)
set the uid number of the transaction to the given value
Definition: kgpguidtransaction.cpp:80
QObject
KgpgCore::ITYPE_PUBLIC
public key
Definition: kgpgkey.h:93
QString::startsWith
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
gpgproc.h
KGpgTransaction::boolQuestion
virtual ts_boolanswer boolQuestion(const QString &line)
Called for every boolean question GnuPG answers.
Definition: kgpgtransaction.cpp:457
QString
QList
kgpgdelsign.h
KGpgDelSign::nextLine
virtual bool nextLine(const QString &line)
Called for every line the gpg process writes.
Definition: kgpgdelsign.cpp:86
QStringList
KGpgTransaction::ts_boolanswer
ts_boolanswer
result codes for GnuPG boolean questions
Definition: kgpgtransaction.h:73
kgpgitemnode.h
QString::right
QString right(int n) const
QLatin1Char
KGpgDelSign::getSignIds
KGpgSignNode::List getSignIds(void) const
return the signature ids to delete
Definition: kgpgdelsign.cpp:69
QLatin1String
KGpgNode::getId
virtual QString getId() const
Definition: KGpgNode.cpp:318
KGpgRefNode::getId
virtual QString getId() const
Definition: KGpgRefNode.cpp:115
QString::length
int length() const
KGpgTransaction::insertArgument
void insertArgument(const int pos, const QString &arg)
insert an argument at the given position
Definition: kgpgtransaction.cpp:593
KGpgDelSign::~KGpgDelSign
virtual ~KGpgDelSign()
Definition: kgpgdelsign.cpp:65
QStringList::indexOf
int indexOf(const QRegExp &rx, int from) const
KGpgUidTransaction::standardCommands
bool standardCommands(const QString &line)
handle common GnuPG messages for uid transactions
Definition: kgpguidtransaction.cpp:45
KGpgSignNode
A signature to another key object.
Definition: KGpgSignNode.h:31
QList::removeOne
bool removeOne(const T &value)
KGpgSignNode::getCreation
virtual QDateTime getCreation() const
Definition: KGpgSignNode.cpp:72
KGpgDelSign::setSignId
void setSignId(KGpgSignNode *keyid)
set the id to delete
Definition: kgpgdelsign.cpp:74
QDateTime
KGpgUidTransaction
base class for transactions involving only one user id of a key
Definition: kgpguidtransaction.h:25
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