File indexing completed on 2024-04-21 05:50:43
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 "kgpgsignuid.h" 0007 0008 #include "gpgproc.h" 0009 #include "model/kgpgitemnode.h" 0010 0011 KGpgSignUid::KGpgSignUid(QObject *parent, const QString &signer, const KGpgSignableNode *uid, const bool local, const carefulCheck checking) 0012 : KGpgUidTransaction(parent), 0013 KGpgSignTransactionHelper(signer, !local, checking) 0014 { 0015 insertArgument(1, QLatin1String( "-u" )); 0016 insertArgument(2, signer); 0017 m_signerPos = 2; 0018 addArgumentRef(&m_signerPos); 0019 0020 m_cmdPos = addArgument(QString()); 0021 addArgumentRef(&m_cmdPos); 0022 0023 addArgument(QLatin1String("save")); 0024 0025 setUid(uid); 0026 0027 setLocal(local); 0028 } 0029 0030 void 0031 KGpgSignUid::setUid(const KGpgSignableNode *uid) 0032 { 0033 switch (uid->getType()) { 0034 case ITYPE_PUBLIC: 0035 case ITYPE_PAIR: 0036 KGpgUidTransaction::setUid(1); 0037 setKey(uid->toKeyNode()); 0038 break; 0039 case ITYPE_UAT: 0040 case ITYPE_UID: 0041 KGpgUidTransaction::setUid(uid->getId()); 0042 setKey(uid->getParentKeyNode()->toKeyNode()); 0043 break; 0044 default: 0045 Q_ASSERT(0); 0046 } 0047 0048 setKeyId(getKey()->getId()); 0049 } 0050 0051 bool 0052 KGpgSignUid::preStart() 0053 { 0054 if (!KGpgUidTransaction::preStart()) 0055 return false; 0056 0057 /* GnuPG >= 2.1 do not send a GOOD_PASSPHRASE anymore which could be used as a trigger that 0058 * everything worked fine, so just assume everything is OK until an ERROR is received. */ 0059 if (GPGProc::gpgVersion(GPGProc::gpgVersionString(QString())) > 0x20100) 0060 setSuccess(TS_OK); 0061 0062 return true; 0063 } 0064 0065 bool 0066 KGpgSignUid::nextLine(const QString &line) 0067 { 0068 switch (KGpgSignTransactionHelper::nextLine(line)) { 0069 case KGpgSignTransactionHelper::handledFalse: 0070 return false; 0071 case KGpgSignTransactionHelper::handledTrue: 0072 return true; 0073 default: 0074 Q_ASSERT(0); 0075 case KGpgSignTransactionHelper::notHandled: 0076 if (line.contains(QLatin1String(" ERROR keysig "))) { 0077 setSuccess(TS_BAD_PASSPHRASE); 0078 return true; 0079 } else if (line.contains(QLatin1String(" ERROR "))) { 0080 setSuccess(TS_MSG_SEQUENCE); 0081 return true; 0082 } else { 0083 return standardCommands(line); 0084 } 0085 } 0086 } 0087 0088 KGpgTransaction::ts_boolanswer 0089 KGpgSignUid::boolQuestion(const QString& line) 0090 { 0091 ts_boolanswer ret = KGpgSignTransactionHelper::boolQuestion(line); 0092 0093 if (ret == BA_UNKNOWN) 0094 ret = KGpgTransaction::boolQuestion(line); 0095 0096 return ret; 0097 } 0098 0099 bool 0100 KGpgSignUid::passphraseReceived() 0101 { 0102 setSuccess(KGpgTransaction::TS_OK); 0103 return true; 0104 } 0105 0106 KGpgTransaction * 0107 KGpgSignUid::asTransaction() 0108 { 0109 return this; 0110 } 0111 0112 void 0113 KGpgSignUid::replaceCmd(const QString &cmd) 0114 { 0115 replaceArgument(m_cmdPos, cmd); 0116 }