AusweisApp2/src/settings/RemoteServiceSettings.h

117 lines
3.0 KiB
C++

/*!
* \brief RemoteService settings
*
* \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany
*/
#pragma once
#include "AbstractSettings.h"
#include <QDateTime>
#include <QList>
#include <QSet>
#include <QSslCertificate>
#include <QSslKey>
#include <QString>
#include <QVector>
class test_RemoteServiceSettings;
class test_RemoteConnector;
class test_RemoteTlsServer;
class test_RemoteWebSocketServer;
namespace governikus
{
class RemoteServiceSettings
: public AbstractSettings
{
Q_OBJECT
friend class AppSettings;
friend class ::test_RemoteServiceSettings;
friend class ::test_RemoteConnector;
friend class ::test_RemoteTlsServer;
friend class ::test_RemoteWebSocketServer;
public:
class RemoteInfo
{
friend class RemoteServiceSettings;
friend class ::test_RemoteServiceSettings;
private:
QString mFingerprint;
QString mName;
QDateTime mLastConnected;
RemoteInfo(const QString& pFingerprint,
const QDateTime& pLastConnected = QDateTime(),
const QString& pName = QString());
public:
RemoteInfo() = default;
const QString& getFingerprint() const;
const QString& getName() const;
void setName(const QString& pName);
const QDateTime& getLastConnected() const;
void setLastConnected(const QDateTime& pLastConnected);
bool operator==(const RemoteInfo& pOther) const;
bool operator!=(const RemoteInfo& pOther) const;
};
private:
QSharedPointer<QSettings> mStore;
RemoteServiceSettings();
QString getDefaultServerName();
void setTrustedCertificates(const QList<QSslCertificate>& pCertificates);
void setUniqueTrustedCertificates(const QSet<QSslCertificate>& pCertificates);
void setRemoteInfos(const QVector<RemoteInfo>& pInfos);
void syncRemoteInfos(const QSet<QSslCertificate>& pCertificates);
public:
static QString generateFingerprint(const QSslCertificate& pCert);
virtual ~RemoteServiceSettings() override;
virtual void save() override;
QString getServerName() const;
void setServerName(const QString& pName);
bool getPinPadMode() const;
void setPinPadMode(bool pPinPadMode);
QList<QSslCertificate> getTrustedCertificates() const;
void addTrustedCertificate(const QSslCertificate& pCertificate);
void removeTrustedCertificate(const QSslCertificate& pCertificate);
void removeTrustedCertificate(const QString& pFingerprint);
bool checkAndGenerateKey(bool pForceGeneration = false);
QSslCertificate getCertificate() const;
void setCertificate(const QSslCertificate& pCert) const;
QSslKey getKey() const;
void setKey(const QSslKey& pKey) const;
RemoteInfo getRemoteInfo(const QSslCertificate& pCertificate) const;
RemoteInfo getRemoteInfo(const QString& pFingerprint) const;
QVector<RemoteInfo> getRemoteInfos() const;
bool updateRemoteInfo(const RemoteInfo& pInfo);
Q_SIGNALS:
void fireTrustedCertificatesChanged();
void fireTrustedRemoteInfosChanged();
};
} // namespace governikus
Q_DECLARE_TYPEINFO(governikus::RemoteServiceSettings::RemoteInfo, Q_MOVABLE_TYPE);