File indexing completed on 2024-04-14 05:43:30

0001 /*
0002     SPDX-FileCopyrightText: 2009-2022 Rolf Eike Beer <kde@opensource.sf-tec.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "kgpgsigntransactionhelper.h"
0007 
0008 #include "model/kgpgitemnode.h"
0009 
0010 KGpgSignTransactionHelper::KGpgSignTransactionHelper(const QString &signer, const bool local, const carefulCheck checking)
0011     : m_node(nullptr),
0012     m_signer(signer),
0013     m_local(local),
0014     m_checking(checking),
0015     m_signerPos(-1)
0016 {
0017 }
0018 
0019 void
0020 KGpgSignTransactionHelper::setKey(const KGpgKeyNode *node)
0021 {
0022     m_node = node;
0023 }
0024 
0025 const KGpgKeyNode *
0026 KGpgSignTransactionHelper::getKey(void) const
0027 {
0028     return m_node;
0029 }
0030 
0031 KGpgSignTransactionHelper::lineParseResults
0032 KGpgSignTransactionHelper::nextLine(const QString &line)
0033 {
0034     if (!line.startsWith(QLatin1String("[GNUPG:]"))) {
0035         return notHandled;
0036     }
0037 
0038     if (line.contains(QLatin1String( "ALREADY_SIGNED" ))) {
0039         asTransaction()->setSuccess(TS_ALREADY_SIGNED);
0040         return handledFalse;
0041     } else  if (line.contains(QLatin1String( "GOOD_PASSPHRASE" ))) {
0042         asTransaction()->setSuccess(KGpgTransaction::TS_MSG_SEQUENCE);
0043         return handledFalse;
0044     } else if (line.contains(QLatin1String( "sign_uid.expire" ))) {
0045         asTransaction()->write("Never");
0046         return handledFalse;
0047     } else if (line.contains(QLatin1String( "sign_uid.class" ))) {
0048         asTransaction()->write(m_checking);
0049         return handledFalse;
0050     } else {
0051         return notHandled;
0052     }
0053 }
0054 
0055 KGpgTransaction::ts_boolanswer
0056 KGpgSignTransactionHelper::boolQuestion(const QString& line)
0057 {
0058     if (line == QLatin1String("sign_uid.okay")) {
0059         return KGpgTransaction::BA_YES;
0060     } else if (line == QLatin1String("keyedit.save.okay")) {
0061         KGpgTransaction *ta = asTransaction();
0062 
0063         switch (ta->getSuccess()) {
0064         case TS_ALREADY_SIGNED:
0065         case KGpgTransaction::TS_USER_ABORTED:
0066             break;
0067         default:
0068             asTransaction()->setSuccess(KGpgTransaction::TS_OK);
0069         }
0070 
0071         return KGpgTransaction::BA_YES;
0072     } else {
0073         return KGpgTransaction::BA_UNKNOWN;
0074     }
0075 }
0076 
0077 void
0078 KGpgSignTransactionHelper::setLocal(const bool local)
0079 {
0080     if (local == m_local)
0081         return;
0082 
0083     m_local = local;
0084     if (local)
0085         replaceCmd(QLatin1String( "lsign" ));
0086     else
0087         replaceCmd(QLatin1String( "sign" ));
0088 }
0089 
0090 bool
0091 KGpgSignTransactionHelper::getLocal(void) const
0092 {
0093     return m_local;
0094 }
0095 
0096 void
0097 KGpgSignTransactionHelper::setChecking(const carefulCheck level)
0098 {
0099     m_checking = level;
0100 }
0101 
0102 KGpgSignTransactionHelper::carefulCheck
0103 KGpgSignTransactionHelper::getChecking(void) const
0104 {
0105     return m_checking;
0106 }
0107 
0108 void
0109 KGpgSignTransactionHelper::setSigner(const QString &signer)
0110 {
0111     m_signer = signer;
0112     asTransaction()->replaceArgument(m_signerPos, signer);
0113 }
0114 
0115 
0116 QString
0117 KGpgSignTransactionHelper::getSigner(void) const
0118 {
0119     return m_signer;
0120 }
0121 
0122 void
0123 KGpgSignTransactionHelper::setSecringFile(const QString &filename)
0124 {
0125     QStringList secringargs(QLatin1String( "--secret-keyring" ));
0126     secringargs << filename;
0127 
0128     asTransaction()->insertArguments(1, secringargs);
0129 }