File indexing completed on 2024-06-16 04:55:55

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     crypto/certificateresolver.h
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2007 Klarälvdalens Datakonsult AB
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #pragma once
0011 
0012 #include <utils/pimpl_ptr.h>
0013 
0014 #include <KMime/Types>
0015 #include <gpgme++/key.h>
0016 
0017 #include <KSharedConfig>
0018 
0019 class KConfig;
0020 
0021 namespace GpgME
0022 {
0023 class Key;
0024 }
0025 
0026 namespace Kleo
0027 {
0028 namespace Crypto
0029 {
0030 
0031 class SigningPreferences
0032 {
0033 public:
0034     virtual ~SigningPreferences()
0035     {
0036     }
0037     virtual GpgME::Key preferredCertificate(GpgME::Protocol protocol) = 0;
0038     virtual void setPreferredCertificate(GpgME::Protocol protocol, const GpgME::Key &certificate) = 0;
0039 };
0040 
0041 class RecipientPreferences
0042 {
0043 public:
0044     virtual ~RecipientPreferences()
0045     {
0046     }
0047     virtual GpgME::Key preferredCertificate(const KMime::Types::Mailbox &recipient, GpgME::Protocol protocol) = 0;
0048     virtual void setPreferredCertificate(const KMime::Types::Mailbox &recipient, GpgME::Protocol protocol, const GpgME::Key &certificate) = 0;
0049 };
0050 
0051 class KConfigBasedRecipientPreferences : public RecipientPreferences
0052 {
0053 public:
0054     explicit KConfigBasedRecipientPreferences(const KSharedConfigPtr &config);
0055     ~KConfigBasedRecipientPreferences() override;
0056     GpgME::Key preferredCertificate(const KMime::Types::Mailbox &recipient, GpgME::Protocol protocol) override;
0057     void setPreferredCertificate(const KMime::Types::Mailbox &recipient, GpgME::Protocol protocol, const GpgME::Key &certificate) override;
0058 
0059 private:
0060     Q_DISABLE_COPY(KConfigBasedRecipientPreferences)
0061     class Private;
0062     kdtools::pimpl_ptr<Private> d;
0063 };
0064 
0065 class KConfigBasedSigningPreferences : public SigningPreferences
0066 {
0067 public:
0068     explicit KConfigBasedSigningPreferences(const KSharedConfigPtr &config);
0069     ~KConfigBasedSigningPreferences() override;
0070     GpgME::Key preferredCertificate(GpgME::Protocol protocol) override;
0071     void setPreferredCertificate(GpgME::Protocol protocol, const GpgME::Key &certificate) override;
0072 
0073 private:
0074     Q_DISABLE_COPY(KConfigBasedSigningPreferences)
0075     class Private;
0076     kdtools::pimpl_ptr<Private> d;
0077 };
0078 }
0079 }