X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsslserver.h;h=eead9bfeda7c6a2baa398adab2cc00f49dfdd58a;hp=50b548c779dd3d8910ea642cd57cd76f5e6c74f5;hb=HEAD;hpb=694f9bfbf7f1af19108461c7e00d133e55082bce diff --git a/src/core/sslserver.h b/src/core/sslserver.h index 50b548c7..4997daae 100644 --- a/src/core/sslserver.h +++ b/src/core/sslserver.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-09 by the Quassel Project * + * Copyright (C) 2005-2022 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,46 +15,68 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef SSLSERVER_H -#define SSLSERVER_H - -#ifdef HAVE_SSL +#pragma once +#include #include #include #include -#include + +#include "metricsserver.h" class SslServer : public QTcpServer { Q_OBJECT public: - SslServer(QObject *parent = 0); + SslServer(QObject* parent = nullptr); + + const QSslCertificate& certificate() const { return _cert; } + const QSslKey& key() const { return _key; } + bool isCertValid() const { return _isCertValid; } - virtual inline bool hasPendingConnections() const { return !_pendingConnections.isEmpty(); } - virtual QTcpSocket *nextPendingConnection(); + /** + * Reloads SSL certificates used for connections + * + * If this command fails, it will try to maintain the most recent working certificate. Error + * conditions are automatically written to the log. + * + * @return True if certificates reloaded successfully, otherwise false. + */ + bool reloadCerts(); - virtual inline const QSslCertificate &certificate() const { return _cert; } - virtual inline const QSslKey &key() const { return _key; } - virtual inline bool isCertValid() const { return _isCertValid; } + void setMetricsServer(MetricsServer* metricsServer); protected: - virtual void incomingConnection(int socketDescriptor); - virtual bool setCertificate(const QString &path); + void incomingConnection(qintptr socketDescriptor) override; + + bool setCertificate(const QString& path, const QString& keyPath); private: - QLinkedList _pendingConnections; + /** + * Loads SSL certificates used for connections + * + * If this command fails, it will try to maintain the most recent working certificate. Will log + * specific failure points, but does not offer verbose guidance. + * + * @return True if certificates loaded successfully, otherwise false. + */ + bool loadCerts(); + QSslKey loadKey(QFile* keyFile); + + MetricsServer* _metricsServer{nullptr}; + QSslCertificate _cert; QSslKey _key; QList _ca; - bool _isCertValid; -}; + bool _isCertValid{false}; + // Used when reloading certificates later + QString _sslCertPath; /// Path to the certificate file + QString _sslKeyPath; /// Path to the private key file (may be in same file as above) -#endif //HAVE_SSL - -#endif //SSLSERVER_H + QDateTime _certificateExpires; +};