1 /*
2 SPDX-FileCopyrightText: 2008, 2009, 2012, 2016, 2017, 2018 Rolf Eike Beer <kde@opensource.sf-tec.de>
3 SPDX-License-Identifier: GPL-2.0-or-later
4 */
5
6 #include "kgpgdelkey.h"
7
8 #include "gpgproc.h"
9
10 #include <QString>
11 #include <QStringList>
12
keyFingerprints(const KGpgKeyNode::List & keys)13 static QStringList keyFingerprints(const KGpgKeyNode::List &keys)
14 {
15 QStringList ret;
16 ret.reserve(keys.count());
17
18 for (const KGpgKeyNode *key : keys)
19 ret << key->getFingerprint();
20
21 return ret;
22 }
23
KGpgDelKey(QObject * parent,const KGpgKeyNode::List & keys)24 KGpgDelKey::KGpgDelKey(QObject *parent, const KGpgKeyNode::List &keys)
25 : KGpgTransaction(parent)
26 , keys(keys)
27 , fingerprints(keyFingerprints(keys))
28 {
29 setCmdLine();
30 setExpectedFingerprints(fingerprints);
31 }
32
~KGpgDelKey()33 KGpgDelKey::~KGpgDelKey()
34 {
35 }
36
37 bool
nextLine(const QString & line)38 KGpgDelKey::nextLine(const QString &line)
39 {
40 if (!line.startsWith(QLatin1String("[GNUPG:] GOT_IT")))
41 setSuccess(KGpgTransaction::TS_MSG_SEQUENCE);
42
43 return false;
44 }
45
46 KGpgTransaction::ts_boolanswer
boolQuestion(const QString & line)47 KGpgDelKey::boolQuestion(const QString &line)
48 {
49 if (line.startsWith(QLatin1String("delete_key.okay")))
50 return KGpgTransaction::BA_YES;
51
52 if (line.startsWith(QLatin1String("delete_key.secret.okay")))
53 return KGpgTransaction::BA_YES;
54
55 return KGpgTransaction::boolQuestion(line);
56 }
57
58 bool
preStart()59 KGpgDelKey::preStart()
60 {
61 GPGProc *proc = getProcess();
62 const QStringList args = proc->program() + fingerprints;
63
64 proc->setProgram(args);
65
66 setSuccess(KGpgTransaction::TS_OK);
67
68 return true;
69 }
70
71 void
setCmdLine()72 KGpgDelKey::setCmdLine()
73 {
74 addArguments( { QLatin1String("--status-fd=1"),
75 QLatin1String("--command-fd=0"),
76 QLatin1String("--delete-secret-and-public-key")
77 });
78
79 m_argscount = getProcess()->program().count();
80 }
81