File indexing completed on 2024-04-21 05:50:41

0001 /*
0002     SPDX-FileCopyrightText: 2008-2022 Rolf Eike Beer <kde@opensource.sf-tec.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "kgpgdelkey.h"
0007 
0008 #include "gpgproc.h"
0009 
0010 #include <QString>
0011 #include <QStringList>
0012 
0013 static QStringList keyFingerprints(const KGpgKeyNode::List &keys)
0014 {
0015     QStringList ret;
0016     ret.reserve(keys.count());
0017 
0018     for (const KGpgKeyNode *key : keys)
0019         ret << key->getFingerprint();
0020 
0021     return ret;
0022 }
0023 
0024 KGpgDelKey::KGpgDelKey(QObject *parent, const KGpgKeyNode::List &keys)
0025     : KGpgTransaction(parent)
0026     , keys(keys)
0027     , fingerprints(keyFingerprints(keys))
0028 {
0029     setCmdLine();
0030     setExpectedFingerprints(fingerprints);
0031 }
0032 
0033 bool
0034 KGpgDelKey::nextLine(const QString &line)
0035 {
0036     if (!line.startsWith(QLatin1String("[GNUPG:] GOT_IT")))
0037         setSuccess(KGpgTransaction::TS_MSG_SEQUENCE);
0038 
0039     return false;
0040 }
0041 
0042 KGpgTransaction::ts_boolanswer
0043 KGpgDelKey::boolQuestion(const QString &line)
0044 {
0045     if (line.startsWith(QLatin1String("delete_key.okay")))
0046         return KGpgTransaction::BA_YES;
0047 
0048     if (line.startsWith(QLatin1String("delete_key.secret.okay")))
0049         return KGpgTransaction::BA_YES;
0050 
0051     return KGpgTransaction::boolQuestion(line);
0052 }
0053 
0054 bool
0055 KGpgDelKey::preStart()
0056 {
0057     GPGProc *proc = getProcess();
0058     const QStringList args = proc->program() + fingerprints;
0059 
0060     proc->setProgram(args);
0061 
0062     setSuccess(KGpgTransaction::TS_OK);
0063 
0064     return true;
0065 }
0066 
0067 void
0068 KGpgDelKey::setCmdLine()
0069 {
0070     addArguments( { QLatin1String("--status-fd=1"),
0071             QLatin1String("--command-fd=0"),
0072             QLatin1String("--delete-secret-and-public-key")
0073             });
0074 
0075     m_argscount = getProcess()->program().count();
0076 }