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