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 
12 #include <QAtomicInt>
13 #include <QAuthenticator>
14 #include <QDebug>
15 #include <QMessageLogger>
16 #include <QNetworkAccessManager>
17 #include <QNetworkProxy>
18 #include <QNetworkReply>
19 #include <QSsl>
20 
21 namespace governikus
22 {
23 
25  : public QObject
26 {
27  Q_OBJECT
28  friend class Env;
29 
30  private:
31  static bool mLockProxy;
32 
33  QNetworkAccessManager mNetAccessManager;
34  bool mApplicationExitInProgress;
35  QAtomicInt mOpenConnectionCount;
36 
37  void trackConnection(QNetworkReply* pResponse, const int pTimeoutInMilliSeconds);
38 
39  [[nodiscard]] QString getUserAgentHeader() const;
40 
41  public Q_SLOTS:
42  void onShutdown();
43  void onProxyChanged();
44 
45  protected:
47  ~NetworkManager() override;
48 
49  public:
50  enum class NetworkError
51  {
53  TimeOut,
54  ProxyError,
56  OtherError,
57  };
58  Q_ENUM(NetworkError)
59 
60  static void setApplicationProxyFactory();
61  static void lockProxy(bool pLocked)
62  {
63  mLockProxy = pLocked;
64  }
65 
66 
67  static int getLoggedStatusCode(const QSharedPointer<const QNetworkReply>& pReply, const QMessageLogger& pLogger);
68  static NetworkError toNetworkError(const QSharedPointer<const QNetworkReply>& pNetworkReply);
69  static GlobalStatus toTrustedChannelStatus(const QSharedPointer<const QNetworkReply>& pNetworkReply);
70  static GlobalStatus toStatus(const QSharedPointer<const QNetworkReply>& pNetworkReply);
71  static QString getTlsVersionString(QSsl::SslProtocol pProtocol);
72  static QByteArray getStatusMessage(int pStatus);
73 
74  virtual void clearConnections();
75  virtual QNetworkReply* paos(QNetworkRequest& pRequest,
76  const QByteArray& pNamespace,
77  const QByteArray& pData,
78  bool pUsePsk = true,
79  const QByteArray& pSslSession = QByteArray(),
80  int pTimeoutInMilliSeconds = 30000);
81  virtual QNetworkReply* get(QNetworkRequest& pRequest,
82  const QList<QSslCertificate>& pCaCerts = QList<QSslCertificate>(),
83  const QByteArray& pSslSession = QByteArray(),
84  int pTimeoutInMilliSeconds = 30000);
85 
86  virtual QNetworkReply* post(QNetworkRequest& pRequest,
87  const QByteArray& pData,
88  const QList<QSslCertificate>& pCaCerts = QList<QSslCertificate>(),
89  int pTimeoutInMilliSeconds = 30000);
90 
91  virtual bool checkUpdateServerCertificate(const QSharedPointer<const QNetworkReply>& pReply);
92 
93  int getOpenConnectionCount() const;
94 
95  Q_SIGNALS:
96  void fireProxyAuthenticationRequired(const QNetworkProxy& pProxy, QAuthenticator* pAuthenticator);
97  void fireShutdown();
98 };
99 
100 } // namespace governikus
101 
102 QDebug operator <<(QDebug pDbg, QSsl::SslProtocol pProtocol);
QDebug operator<<(QDebug pDbg, QSsl::SslProtocol pProtocol)
Definition: Env.h:44
Definition: GlobalStatus.h:20
Definition: NetworkManager.h:26
virtual bool checkUpdateServerCertificate(const QSharedPointer< const QNetworkReply > &pReply)
Definition: NetworkManager.cpp:130
NetworkError
Definition: NetworkManager.h:51
void onShutdown()
Definition: NetworkManager.cpp:147
virtual QNetworkReply * post(QNetworkRequest &pRequest, const QByteArray &pData, const QList< QSslCertificate > &pCaCerts=QList< QSslCertificate >(), int pTimeoutInMilliSeconds=30000)
Definition: NetworkManager.cpp:107
NetworkManager()
Definition: NetworkManager.cpp:26
void onProxyChanged()
Definition: NetworkManager.cpp:156
virtual void clearConnections()
Definition: NetworkManager.cpp:49
static GlobalStatus toStatus(const QSharedPointer< const QNetworkReply > &pNetworkReply)
Definition: NetworkManager.cpp:219
~NetworkManager() override
Definition: NetworkManager.cpp:38
static void setApplicationProxyFactory()
Definition: NetworkManager.cpp:364
static NetworkError toNetworkError(const QSharedPointer< const QNetworkReply > &pNetworkReply)
Definition: NetworkManager.cpp:162
virtual QNetworkReply * get(QNetworkRequest &pRequest, const QList< QSslCertificate > &pCaCerts=QList< QSslCertificate >(), const QByteArray &pSslSession=QByteArray(), int pTimeoutInMilliSeconds=30000)
Definition: NetworkManager.cpp:85
static QByteArray getStatusMessage(int pStatus)
Definition: NetworkManager.cpp:263
static void lockProxy(bool pLocked)
Definition: NetworkManager.h:61
virtual QNetworkReply * paos(QNetworkRequest &pRequest, const QByteArray &pNamespace, const QByteArray &pData, bool pUsePsk=true, const QByteArray &pSslSession=QByteArray(), int pTimeoutInMilliSeconds=30000)
Definition: NetworkManager.cpp:55
static GlobalStatus toTrustedChannelStatus(const QSharedPointer< const QNetworkReply > &pNetworkReply)
Definition: NetworkManager.cpp:192
int getOpenConnectionCount() const
Definition: NetworkManager.cpp:43
static QString getTlsVersionString(QSsl::SslProtocol pProtocol)
void fireProxyAuthenticationRequired(const QNetworkProxy &pProxy, QAuthenticator *pAuthenticator)
static int getLoggedStatusCode(const QSharedPointer< const QNetworkReply > &pReply, const QMessageLogger &pLogger)
Definition: NetworkManager.cpp:278
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:15