File indexing completed on 2024-06-23 05:13:44
0001 /* -*- mode: c++; c-basic-offset:4 -*- 0002 commands/newcertificatesigningrequestcommand.cpp 0003 0004 This file is part of Kleopatra, the KDE keymanager 0005 SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB 0006 SPDX-FileCopyrightText: 2022 g10 Code GmbH 0007 SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de> 0008 0009 SPDX-License-Identifier: GPL-2.0-or-later 0010 */ 0011 0012 #include <config-kleopatra.h> 0013 0014 #include "newcertificatesigningrequestcommand.h" 0015 0016 #include "command_p.h" 0017 0018 #include "newcertificatewizard/newcertificatewizard.h" 0019 0020 #include <settings.h> 0021 0022 #include <kleopatra_debug.h> 0023 0024 using namespace Kleo; 0025 using namespace Kleo::Commands; 0026 using namespace GpgME; 0027 0028 class NewCertificateSigningRequestCommand::Private : public Command::Private 0029 { 0030 friend class ::Kleo::Commands::NewCertificateSigningRequestCommand; 0031 NewCertificateSigningRequestCommand *q_func() const 0032 { 0033 return static_cast<NewCertificateSigningRequestCommand *>(q); 0034 } 0035 0036 public: 0037 explicit Private(NewCertificateSigningRequestCommand *qq, KeyListController *c) 0038 : Command::Private{qq, c} 0039 { 0040 } 0041 0042 void createCSR(); 0043 0044 private: 0045 void slotDialogAccepted(); 0046 0047 private: 0048 QPointer<NewCertificateWizard> dialog; 0049 }; 0050 0051 NewCertificateSigningRequestCommand::Private *NewCertificateSigningRequestCommand::d_func() 0052 { 0053 return static_cast<Private *>(d.get()); 0054 } 0055 const NewCertificateSigningRequestCommand::Private *NewCertificateSigningRequestCommand::d_func() const 0056 { 0057 return static_cast<const Private *>(d.get()); 0058 } 0059 0060 #define d d_func() 0061 #define q q_func() 0062 0063 void NewCertificateSigningRequestCommand::Private::createCSR() 0064 { 0065 Q_ASSERT(!dialog); 0066 0067 dialog = new NewCertificateWizard; 0068 applyWindowID(dialog); 0069 dialog->setAttribute(Qt::WA_DeleteOnClose); 0070 0071 connect(dialog, &QDialog::accepted, q, [this]() { 0072 slotDialogAccepted(); 0073 }); 0074 connect(dialog, &QDialog::rejected, q, [this]() { 0075 canceled(); 0076 }); 0077 0078 dialog->setProtocol(GpgME::CMS); 0079 dialog->show(); 0080 } 0081 0082 void NewCertificateSigningRequestCommand::Private::slotDialogAccepted() 0083 { 0084 finished(); 0085 } 0086 0087 NewCertificateSigningRequestCommand::NewCertificateSigningRequestCommand() 0088 : NewCertificateSigningRequestCommand(nullptr, nullptr) 0089 { 0090 } 0091 0092 NewCertificateSigningRequestCommand::NewCertificateSigningRequestCommand(QAbstractItemView *v, KeyListController *c) 0093 : Command(v, new Private(this, c)) 0094 { 0095 } 0096 0097 NewCertificateSigningRequestCommand::~NewCertificateSigningRequestCommand() = default; 0098 0099 void NewCertificateSigningRequestCommand::doStart() 0100 { 0101 const Kleo::Settings settings{}; 0102 if (settings.cmsEnabled() && settings.cmsCertificateCreationAllowed()) { 0103 d->createCSR(); 0104 } else { 0105 d->error(i18n("You are not allowed to create S/MIME certificate signing requests.")); 0106 d->finished(); 0107 } 0108 } 0109 0110 void NewCertificateSigningRequestCommand::doCancel() 0111 { 0112 if (d->dialog) { 0113 d->dialog->close(); 0114 } 0115 } 0116 0117 #undef d 0118 #undef q 0119 0120 #include "moc_newcertificatesigningrequestcommand.cpp"