AusweisApp2
NetworkManager.h
gehe zur Dokumentation dieser Datei
1 /*
2  * \brief Wrapper around QNetworkAccessManager
3  *
4  * \copyright Copyright (c) 2014-2022 Governikus GmbH & Co. KG, Germany
5  */
6 
7 #pragma once
8 
9 #include "Env.h"
10 #include "GlobalStatus.h"
11 #include "LogHandler.h"
12 
13 #include <QAtomicInt>
14 #include <QAuthenticator>
15 #include <QDebug>
16 #include <QNetworkAccessManager>
17 #include <QNetworkProxy>
18 #include <QNetworkReply>
19 #include <QSsl>
20 
21 class test_NetworkManager;
22 
23 namespace governikus
24 {
25 
27  : public QObject
28 {
29  Q_OBJECT
30  friend class Env;
31  friend class ::test_NetworkManager;
32 
33  private:
34  static bool mLockProxy;
35 
36  QNetworkAccessManager mNetAccessManager;
37  bool mApplicationExitInProgress;
38  QAtomicInt mOpenConnectionCount;
39  QSet<QByteArray> mUpdaterSessions;
40 
41  bool prepareConnection(QNetworkRequest& pRequest);
42  [[nodiscard]] QSharedPointer<QNetworkReply> trackConnection(QNetworkReply* pResponse);
43  [[nodiscard]] QSharedPointer<QNetworkReply> processRequest(QNetworkRequest& pRequest,
44  const std::function<QSharedPointer<QNetworkReply>(QNetworkRequest&)>& pInvoke);
45  [[nodiscard]] QSharedPointer<QNetworkReply> processUpdaterRequest(QNetworkRequest& pRequest,
46  const std::function<QSharedPointer<QNetworkReply>(QNetworkRequest&)>& pInvoke);
47 
48  [[nodiscard]] QString getUserAgentHeader() const;
49 
50  public Q_SLOTS:
51  void onShutdown();
52  void onProxyChanged();
53 
54  protected:
56  ~NetworkManager() override = default;
57 
58  public:
59  enum class NetworkError
60  {
62  TimeOut,
63  ProxyError,
65  OtherError,
66  };
67  Q_ENUM(NetworkError)
68 
69  static void setApplicationProxyFactory();
70  static void lockProxy(bool pLocked)
71  {
72  mLockProxy = pLocked;
73  }
74 
75 
76  [[nodiscard]] static bool isLoggingAllowed(const QSharedPointer<const QNetworkReply>& pReply);
77  [[nodiscard]] static int getLoggedStatusCode(const QSharedPointer<const QNetworkReply>& pReply, const MessageLogger& pLogger);
78  [[nodiscard]] static NetworkError toNetworkError(const QSharedPointer<const QNetworkReply>& pNetworkReply);
79  [[nodiscard]] static GlobalStatus toTrustedChannelStatus(const QSharedPointer<const QNetworkReply>& pNetworkReply);
80  [[nodiscard]] static GlobalStatus toStatus(const QSharedPointer<const QNetworkReply>& pNetworkReply);
81  [[nodiscard]] static QString getTlsVersionString(QSsl::SslProtocol pProtocol);
82  [[nodiscard]] static QByteArray getStatusMessage(int pStatus);
83  [[nodiscard]] static QString getFormattedStatusMessage(int pStatus);
84 
85  virtual void clearConnections();
86  [[nodiscard]] virtual QSharedPointer<QNetworkReply> paos(QNetworkRequest& pRequest,
87  const QByteArray& pNamespace,
88  const QByteArray& pData,
89  bool pUsePsk = true,
90  const QByteArray& pSslSession = QByteArray());
91  [[nodiscard]] virtual QSharedPointer<QNetworkReply> get(QNetworkRequest& pRequest);
92  [[nodiscard]] virtual QSharedPointer<QNetworkReply> post(QNetworkRequest& pRequest,
93  const QByteArray& pData);
94  [[nodiscard]] virtual QSharedPointer<QNetworkReply> deleteResource(QNetworkRequest& pRequest);
95 
96  [[nodiscard]] QSharedPointer<QNetworkReply> getAsUpdater(QNetworkRequest& pRequest);
97  [[nodiscard]] QSharedPointer<QNetworkReply> postAsUpdater(QNetworkRequest& pRequest,
98  const QByteArray& pData);
99 
100  [[nodiscard]] int getOpenConnectionCount() const;
101 
102  Q_SIGNALS:
103  void fireProxyAuthenticationRequired(const QNetworkProxy& pProxy, QAuthenticator* pAuthenticator);
104  void fireShutdown();
105 };
106 
107 } // namespace governikus
108 
109 QDebug operator <<(QDebug pDbg, QSsl::SslProtocol pProtocol);
QDebug operator<<(QDebug pDbg, QSsl::SslProtocol pProtocol)
Definition: Env.h:44
Definition: GlobalStatus.h:20
Definition: LogHandler.h:33
Definition: NetworkManager.h:28
QSharedPointer< QNetworkReply > getAsUpdater(QNetworkRequest &pRequest)
Definition: NetworkManager.cpp:105
virtual QSharedPointer< QNetworkReply > get(QNetworkRequest &pRequest)
Definition: NetworkManager.cpp:78
virtual QSharedPointer< QNetworkReply > paos(QNetworkRequest &pRequest, const QByteArray &pNamespace, const QByteArray &pData, bool pUsePsk=true, const QByteArray &pSslSession=QByteArray())
Definition: NetworkManager.cpp:57
NetworkError
Definition: NetworkManager.h:60
void onShutdown()
Definition: NetworkManager.cpp:204
virtual QSharedPointer< QNetworkReply > post(QNetworkRequest &pRequest, const QByteArray &pData)
Definition: NetworkManager.cpp:86
virtual QSharedPointer< QNetworkReply > deleteResource(QNetworkRequest &pRequest)
Definition: NetworkManager.cpp:97
~NetworkManager() override=default
NetworkManager()
Definition: NetworkManager.cpp:30
QSharedPointer< QNetworkReply > postAsUpdater(QNetworkRequest &pRequest, const QByteArray &pData)
Definition: NetworkManager.cpp:113
void onProxyChanged()
Definition: NetworkManager.cpp:213
virtual void clearConnections()
Definition: NetworkManager.cpp:50
static GlobalStatus toStatus(const QSharedPointer< const QNetworkReply > &pNetworkReply)
Definition: NetworkManager.cpp:276
static QString getFormattedStatusMessage(int pStatus)
Definition: NetworkManager.cpp:360
static void setApplicationProxyFactory()
Definition: NetworkManager.cpp:470
static NetworkError toNetworkError(const QSharedPointer< const QNetworkReply > &pNetworkReply)
Definition: NetworkManager.cpp:219
static int getLoggedStatusCode(const QSharedPointer< const QNetworkReply > &pReply, const MessageLogger &pLogger)
Definition: NetworkManager.cpp:379
static QByteArray getStatusMessage(int pStatus)
Definition: NetworkManager.cpp:345
static void lockProxy(bool pLocked)
Definition: NetworkManager.h:70
static GlobalStatus toTrustedChannelStatus(const QSharedPointer< const QNetworkReply > &pNetworkReply)
Definition: NetworkManager.cpp:249
int getOpenConnectionCount() const
Definition: NetworkManager.cpp:44
static bool isLoggingAllowed(const QSharedPointer< const QNetworkReply > &pReply)
Definition: NetworkManager.cpp:366
static QString getTlsVersionString(QSsl::SslProtocol pProtocol)
void fireProxyAuthenticationRequired(const QNetworkProxy &pProxy, QAuthenticator *pAuthenticator)
A simple template renderer.
Definition: ActivationContext.h:15