1 /*************************************************************************** 2 * Copyright (C) 2005-2020 by the Quassel Project * 3 * devel@quassel-irc.org * 4 * * 5 * This program is free software; you can redistribute it and/or modify * 6 * it under the terms of the GNU General Public License as published by * 7 * the Free Software Foundation; either version 2 of the License, or * 8 * (at your option) version 3. * 9 * * 10 * This program is distributed in the hope that it will be useful, * 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 13 * GNU General Public License for more details. * 14 * * 15 * You should have received a copy of the GNU General Public License * 16 * along with this program; if not, write to the * 17 * Free Software Foundation, Inc., * 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 19 ***************************************************************************/ 20 21 #pragma once 22 23 #include "client-export.h" 24 25 #include "identity.h" 26 27 class ClientCertManager; 28 29 class CLIENT_EXPORT CertIdentity : public Identity 30 { 31 Q_OBJECT 32 33 public: 34 CertIdentity(IdentityId id = 0, QObject* parent = nullptr); 35 CertIdentity(const Identity& other, QObject* parent = nullptr); 36 CertIdentity(const CertIdentity& other, QObject* parent = nullptr); 37 isDirty()38 inline bool isDirty() const { return _isDirty; } 39 40 void enableEditSsl(bool enable = true); sslKey()41 inline const QSslKey& sslKey() const { return _sslKey; } sslCert()42 inline const QSslCertificate& sslCert() const { return _sslCert; } 43 44 void setSslKey(const QSslKey& key); 45 void setSslCert(const QSslCertificate& cert); 46 47 public slots: 48 void requestUpdateSslSettings(); 49 50 signals: 51 void sslSettingsUpdated(); 52 53 private slots: 54 void markClean(); 55 56 private: 57 ClientCertManager* _certManager{nullptr}; 58 bool _isDirty{false}; 59 QSslKey _sslKey; 60 QSslCertificate _sslCert; 61 }; 62 63 // ======================================== 64 // ClientCertManager 65 // ======================================== 66 67 class ClientCertManager : public CertManager 68 { 69 Q_OBJECT 70 71 public: ClientCertManager(IdentityId id,CertIdentity * parent)72 ClientCertManager(IdentityId id, CertIdentity* parent) 73 : CertManager(id, parent) 74 , _certIdentity(parent) 75 {} 76 sslKey()77 inline const QSslKey& sslKey() const override { return _certIdentity->sslKey(); } sslCert()78 inline const QSslCertificate& sslCert() const override { return _certIdentity->sslCert(); } 79 80 public slots: 81 void setSslKey(const QByteArray& encoded) override; 82 void setSslCert(const QByteArray& encoded) override; 83 84 private: 85 CertIdentity* _certIdentity; 86 }; 87 88