AusweisApp2
AuthContext.h
gehe zur Dokumentation dieser Datei
1 
7 #pragma once
8 
9 #include "asn1/CVCertificate.h"
11 #include "ActivationContext.h"
14 #include "NetworkManager.h"
20 #include "paos/invoke/StartPaos.h"
25 #include "paos/retrieve/DidList.h"
29 #include "paos/retrieve/Transmit.h"
30 #include "TcToken.h"
31 #include "UrlUtil.h"
32 
33 #include <QDebug>
34 #include <QPointer>
35 #include <QSharedPointer>
36 #include <QSslCertificate>
37 #include <QUrl>
38 
39 class test_StateRedirectBrowser;
40 class test_StatePreVerification;
41 class test_StateCertificateDescriptionCheck;
42 
43 namespace governikus
44 {
45 class TestAuthContext;
46 
48  : public WorkflowContext
49 {
50  Q_OBJECT
51 
52  private:
53  friend class ::test_StateRedirectBrowser;
54  friend class ::test_StatePreVerification;
55  friend class ::test_StateProcessCertificatesFromEac2;
56  friend class ::test_StateCertificateDescriptionCheck;
57  friend class TestAuthContext;
58 
59  int mProgressValue;
60  QString mProgressMessage;
61  bool mTcTokenNotFound;
62  bool mErrorReportedToServer;
63  bool mSkipRedirect;
64 
65  QSharedPointer<ActivationContext> mActivationContext;
66  QUrl mTcTokenUrl;
67  QSharedPointer<const TcToken> mTcToken;
68  QUrl mRefreshUrl;
69  QString mReceivedMessageId;
70  QSharedPointer<StartPaos> mStartPaos;
71  QSharedPointer<InitializeFramework> mInitializeFramework;
72  QSharedPointer<InitializeFrameworkResponse> mInitializeFrameworkResponse;
73  QSharedPointer<DIDList> mDIDList;
74  QSharedPointer<DIDListResponse> mDIDListResponse;
75  QSharedPointer<DIDAuthenticateEAC1> mDIDAuthenticateEAC1;
76  QSharedPointer<DIDAuthenticateResponseEAC1> mDIDAuthenticateResponseEAC1;
77  QSharedPointer<DIDAuthenticateEAC2> mDIDAuthenticateEAC2;
78  QSharedPointer<DIDAuthenticateResponseEAC2> mDIDAuthenticateResponseEACAdditionalInputType;
79  QSharedPointer<DIDAuthenticateEACAdditional> mDIDAuthenticateEACAdditionalInputType;
80  QSharedPointer<DIDAuthenticateResponseEAC2> mDIDAuthenticateResponseEAC2;
81  QVector<QSharedPointer<Transmit>> mTransmits;
82  QVector<QSharedPointer<TransmitResponse>> mTransmitResponses;
83  QSharedPointer<Disconnect> mDisconnect;
84  QSharedPointer<DisconnectResponse> mDisconnectResponse;
85  QSharedPointer<StartPaosResponse> mStartPaosResponse;
86  QSharedPointer<AccessRightManager> mAccessRightManager;
87  QMultiMap<QUrl, QSslCertificate> mCertificates;
88  QSharedPointer<const CVCertificate> mDvCvc;
89  CVCertificateChainBuilder mCvcChainBuilderProd, mCvcChainBuilderTest;
90  QByteArray mSslSession;
91 
92  Q_SIGNALS:
93  void fireProgressChanged();
95  void fireAccessRightManagerCreated(QSharedPointer<AccessRightManager> pAccessRightManager);
96 
97  public:
98  explicit AuthContext(const QSharedPointer<ActivationContext>& pActivationContext);
99 
100  [[nodiscard]] bool isErrorReportedToServer() const
101  {
102  return mErrorReportedToServer;
103  }
104 
105 
106  void setErrorReportedToServer(bool pErrorReportedToServer)
107  {
108  mErrorReportedToServer = pErrorReportedToServer;
109  }
110 
111 
112  [[nodiscard]] int getProgressValue() const
113  {
114  return mProgressValue;
115  }
116 
117 
118  [[nodiscard]] const QString getProgressMessage() const
119  {
120  return mProgressMessage;
121  }
122 
123 
124  void setProgress(int pValue, const QString& pMessage);
125 
126 
127  [[nodiscard]] bool isTcTokenNotFound() const
128  {
129  return mTcTokenNotFound;
130  }
131 
132 
133  void setTcTokenNotFound(bool pTcTokenNotFound)
134  {
135  mTcTokenNotFound = pTcTokenNotFound;
136  }
137 
138 
139  [[nodiscard]] bool isSkipRedirect() const
140  {
141  return mSkipRedirect;
142  }
143 
144 
145  void setSkipRedirect(bool pSkipRedirect)
146  {
147  mSkipRedirect = pSkipRedirect;
148  }
149 
150 
151  [[nodiscard]] QList<QSslCertificate> getCertificateList() const
152  {
153  return mCertificates.values();
154  }
155 
156 
157  [[nodiscard]] bool containsCertificateFor(const QUrl& pUrl) const
158  {
159  return mCertificates.contains(UrlUtil::getUrlOrigin(pUrl));
160  }
161 
162 
163  void addCertificateData(const QUrl& pUrl, const QSslCertificate& pCert)
164  {
165  QUrl originUrl = UrlUtil::getUrlOrigin(pUrl);
166  qDebug() << "Adding certificate CN=" << pCert.subjectInfo(QSslCertificate::CommonName) << "SN=" << pCert.serialNumber() << "for URL origin" << originUrl;
167  mCertificates.insert(originUrl, pCert);
168  }
169 
170 
172  {
173  return mActivationContext.data();
174  }
175 
176 
177  [[nodiscard]] const QUrl& getTcTokenUrl() const
178  {
179  return mTcTokenUrl;
180  }
181 
182 
183  void setTcTokenUrl(const QUrl& pTcTokenUrl)
184  {
185  mTcTokenUrl = pTcTokenUrl;
186  }
187 
188 
189  [[nodiscard]] const QSharedPointer<const TcToken>& getTcToken() const
190  {
191  return mTcToken;
192  }
193 
194 
195  void setTcToken(const QSharedPointer<const TcToken>& pTcToken)
196  {
197  mTcToken = pTcToken;
198  }
199 
200 
201  [[nodiscard]] const QString& getReceivedMessageId() const
202  {
203  return mReceivedMessageId;
204  }
205 
206 
207  void setReceivedMessageId(const QString& pReceivedMessageId)
208  {
209  mReceivedMessageId = pReceivedMessageId;
210  }
211 
212 
213  [[nodiscard]] const QUrl& getRefreshUrl() const
214  {
215  return mRefreshUrl;
216  }
217 
218 
219  void setRefreshUrl(const QUrl& pRefreshUrl)
220  {
221  mRefreshUrl = pRefreshUrl;
222  }
223 
224 
225  [[nodiscard]] const QSharedPointer<DIDAuthenticateEAC1>& getDidAuthenticateEac1() const
226  {
227  return mDIDAuthenticateEAC1;
228  }
229 
230 
231  void setDidAuthenticateEac1(const QSharedPointer<DIDAuthenticateEAC1>& pDIDAuthenticateEAC1)
232  {
233  mDIDAuthenticateEAC1 = pDIDAuthenticateEAC1;
235  }
236 
237 
238  [[nodiscard]] const QSharedPointer<DIDAuthenticateEAC2>& getDidAuthenticateEac2() const
239  {
240  return mDIDAuthenticateEAC2;
241  }
242 
243 
244  void setDidAuthenticateEac2(const QSharedPointer<DIDAuthenticateEAC2>& pDidAuthenticateEac2)
245  {
246  mDIDAuthenticateEAC2 = pDidAuthenticateEac2;
247  }
248 
249 
250  [[nodiscard]] const QSharedPointer<DIDAuthenticateResponseEAC1>& getDidAuthenticateResponseEac1() const
251  {
252  return mDIDAuthenticateResponseEAC1;
253  }
254 
255 
256  void setDidAuthenticateResponseEac1(const QSharedPointer<DIDAuthenticateResponseEAC1>& pDidAuthenticateResponseEac1)
257  {
258  mDIDAuthenticateResponseEAC1 = pDidAuthenticateResponseEac1;
259  }
260 
261 
262  [[nodiscard]] const QSharedPointer<DIDAuthenticateResponseEAC2>& getDidAuthenticateResponseEacAdditionalInputType() const
263  {
264  return mDIDAuthenticateResponseEACAdditionalInputType;
265  }
266 
267 
268  void setDidAuthenticateResponseEacAdditionalInputType(const QSharedPointer<DIDAuthenticateResponseEAC2>& pDidAuthenticateResponseEacAdditionalInputType)
269  {
270  mDIDAuthenticateResponseEACAdditionalInputType = pDidAuthenticateResponseEacAdditionalInputType;
271  }
272 
273 
274  [[nodiscard]] const QSharedPointer<DIDAuthenticateEACAdditional>& getDidAuthenticateEacAdditional() const
275  {
276  return mDIDAuthenticateEACAdditionalInputType;
277  }
278 
279 
280  void setDidAuthenticateEacAdditional(const QSharedPointer<DIDAuthenticateEACAdditional>& pDidAuthenticateEacAdditionalInputType)
281  {
282  mDIDAuthenticateEACAdditionalInputType = pDidAuthenticateEacAdditionalInputType;
283  }
284 
285 
286  [[nodiscard]] const QSharedPointer<DIDAuthenticateResponseEAC2>& getDidAuthenticateResponseEac2() const
287  {
288  return mDIDAuthenticateResponseEAC2;
289  }
290 
291 
292  void setDidAuthenticateResponseEac2(const QSharedPointer<DIDAuthenticateResponseEAC2>& pDidAuthenticateResponseEac2)
293  {
294  mDIDAuthenticateResponseEAC2 = pDidAuthenticateResponseEac2;
295  }
296 
297 
298  [[nodiscard]] const QSharedPointer<DIDList>& getDidList() const
299  {
300  return mDIDList;
301  }
302 
303 
304  void setDidList(const QSharedPointer<DIDList>& pDidList)
305  {
306  mDIDList = pDidList;
307  }
308 
309 
310  const QSharedPointer<DIDListResponse>& getDidListResponse()
311  {
312  return mDIDListResponse;
313  }
314 
315 
316  void setDidListResponse(const QSharedPointer<DIDListResponse>& pDidListResponse)
317  {
318  mDIDListResponse = pDidListResponse;
319  }
320 
321 
322  [[nodiscard]] const QSharedPointer<InitializeFramework>& getInitializeFramework() const
323  {
324  return mInitializeFramework;
325  }
326 
327 
328  void setInitializeFramework(const QSharedPointer<InitializeFramework>& pInitializeFramework)
329  {
330  mInitializeFramework = pInitializeFramework;
331  }
332 
333 
334  [[nodiscard]] const QSharedPointer<InitializeFrameworkResponse>& getInitializeFrameworkResponse() const
335  {
336  return mInitializeFrameworkResponse;
337  }
338 
339 
340  void setInitializeFrameworkResponse(const QSharedPointer<InitializeFrameworkResponse>& pInitializeFrameworkResponse)
341  {
342  mInitializeFrameworkResponse = pInitializeFrameworkResponse;
343  }
344 
345 
346  [[nodiscard]] const QSharedPointer<Disconnect>& getDisconnect() const
347  {
348  return mDisconnect;
349  }
350 
351 
352  void setDisconnect(const QSharedPointer<Disconnect>& pDisconnect)
353  {
354  mDisconnect = pDisconnect;
355  }
356 
357 
358  const QSharedPointer<DisconnectResponse>& getDisconnectResponse()
359  {
360  return mDisconnectResponse;
361  }
362 
363 
364  void setDisconnectResponse(const QSharedPointer<DisconnectResponse>& pDisconnectResponse)
365  {
366  mDisconnectResponse = pDisconnectResponse;
367  }
368 
369 
370  [[nodiscard]] const QSharedPointer<StartPaosResponse>& getStartPaosResponse() const
371  {
372  return mStartPaosResponse;
373  }
374 
375 
376  void setStartPaosResponse(const QSharedPointer<StartPaosResponse>& pStartPaosResponse)
377  {
378  mStartPaosResponse = pStartPaosResponse;
379  }
380 
381 
382  const QVector<QSharedPointer<TransmitResponse>>& getTransmitResponses()
383  {
384  return mTransmitResponses;
385  }
386 
387 
388  void addTransmitResponse(const QSharedPointer<TransmitResponse>& pTransmitResponse)
389  {
390  Q_ASSERT(!pTransmitResponse.isNull());
391  mTransmitResponses += pTransmitResponse;
392  }
393 
394 
395  const QVector<QSharedPointer<Transmit>>& getTransmits()
396  {
397  return mTransmits;
398  }
399 
400 
401  void addTransmit(const QSharedPointer<Transmit>& pTransmit)
402  {
403  Q_ASSERT(!pTransmit.isNull());
404  mTransmits += pTransmit;
405  }
406 
407 
408  [[nodiscard]] QSharedPointer<AccessRightManager> getAccessRightManager() const
409  {
410  return mAccessRightManager;
411  }
412 
413 
414  QByteArray encodeEffectiveChat();
415 
416 
417  [[nodiscard]] const QSharedPointer<StartPaos>& getStartPaos() const
418  {
419  return mStartPaos;
420  }
421 
422 
423  void setStartPaos(const QSharedPointer<StartPaos>& pStartPaos)
424  {
425  mStartPaos = pStartPaos;
426  }
427 
428 
429  [[nodiscard]] CVCertificateChain getChainStartingWith(const QSharedPointer<const CVCertificate>& pChainRoot) const;
430 
431 
432  [[nodiscard]] bool hasChainForCertificationAuthority(const EstablishPaceChannelOutput& pPaceOutput) const;
433 
434 
436 
437 
438  void initCvcChainBuilder(const QVector<QSharedPointer<const CVCertificate>>& pAdditionalCertificates = QVector<QSharedPointer<const CVCertificate>>());
439 
440 
441  [[nodiscard]] const QSharedPointer<const CVCertificate>& getDvCvc() const
442  {
443  return mDvCvc;
444  }
445 
446 
447  void setDvCvc(const QSharedPointer<const CVCertificate>& dvCvc)
448  {
449  mDvCvc = dvCvc;
450  }
451 
452 
453  void initAccessRightManager(const QSharedPointer<const CVCertificate>& pTerminalCvc);
454  [[nodiscard]] bool isCanAllowedMode() const override;
455 
456  [[nodiscard]] const QByteArray& getSslSession() const;
457  void setSslSession(const QByteArray& pSession);
458 };
459 
460 } // namespace governikus
void initAccessRightManager(const QSharedPointer< const CVCertificate > &pTerminalCvc)
Definition: AuthContext.cpp:76
const QSharedPointer< StartPaosResponse > & getStartPaosResponse() const
Definition: AuthContext.h:370
const QSharedPointer< const TcToken > & getTcToken() const
Definition: AuthContext.h:189
const QSharedPointer< Disconnect > & getDisconnect() const
Definition: AuthContext.h:346
const QSharedPointer< InitializeFramework > & getInitializeFramework() const
Definition: AuthContext.h:322
const QString getProgressMessage() const
Definition: AuthContext.h:118
const QSharedPointer< DisconnectResponse > & getDisconnectResponse()
Definition: AuthContext.h:358
bool hasChainForCertificationAuthority(const EstablishPaceChannelOutput &pPaceOutput) const
Definition: AuthContext.cpp:134
void setReceivedMessageId(const QString &pReceivedMessageId)
Definition: AuthContext.h:207
void setTcToken(const QSharedPointer< const TcToken > &pTcToken)
Definition: AuthContext.h:195
void setDidList(const QSharedPointer< DIDList > &pDidList)
Definition: AuthContext.h:304
Definition: AuthContext.h:47
int getProgressValue() const
Definition: AuthContext.h:112
void setStartPaos(const QSharedPointer< StartPaos > &pStartPaos)
Definition: AuthContext.h:423
const QVector< QSharedPointer< Transmit > > & getTransmits()
Definition: AuthContext.h:395
void setDisconnectResponse(const QSharedPointer< DisconnectResponse > &pDisconnectResponse)
Definition: AuthContext.h:364
Definition: CVCertificateChainBuilder.h:18
const QSharedPointer< DIDAuthenticateEAC1 > & getDidAuthenticateEac1() const
Definition: AuthContext.h:225
void addTransmit(const QSharedPointer< Transmit > &pTransmit)
Definition: AuthContext.h:401
void initCvcChainBuilder(const QVector< QSharedPointer< const CVCertificate >> &pAdditionalCertificates=QVector< QSharedPointer< const CVCertificate >>())
Definition: AuthContext.cpp:152
const QSharedPointer< DIDListResponse > & getDidListResponse()
Definition: AuthContext.h:310
void setDidAuthenticateEac2(const QSharedPointer< DIDAuthenticateEAC2 > &pDidAuthenticateEac2)
Definition: AuthContext.h:244
AuthContext(const QSharedPointer< ActivationContext > &pActivationContext)
Definition: AuthContext.cpp:17
void setDvCvc(const QSharedPointer< const CVCertificate > &dvCvc)
Definition: AuthContext.h:447
void setSkipRedirect(bool pSkipRedirect)
Definition: AuthContext.h:145
CVCertificateChain getChainForCertificationAuthority(const EstablishPaceChannelOutput &pPaceOutput) const
Definition: AuthContext.cpp:140
void setInitializeFrameworkResponse(const QSharedPointer< InitializeFrameworkResponse > &pInitializeFrameworkResponse)
Definition: AuthContext.h:340
void setTcTokenUrl(const QUrl &pTcTokenUrl)
Definition: AuthContext.h:183
const QUrl & getRefreshUrl() const
Definition: AuthContext.h:213
void setStartPaosResponse(const QSharedPointer< StartPaosResponse > &pStartPaosResponse)
Definition: AuthContext.h:376
Definition: CVCertificateChain.h:20
void setRefreshUrl(const QUrl &pRefreshUrl)
Definition: AuthContext.h:219
void addCertificateData(const QUrl &pUrl, const QSslCertificate &pCert)
Definition: AuthContext.h:163
static QUrl getUrlOrigin(const QUrl &pUrl)
Determines the URL origin, i.e.
Definition: UrlUtil.cpp:19
const QUrl & getTcTokenUrl() const
Definition: AuthContext.h:177
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:14
void setSslSession(const QByteArray &pSession)
Definition: AuthContext.cpp:97
bool isTcTokenNotFound() const
Definition: AuthContext.h:127
void setDidAuthenticateResponseEacAdditionalInputType(const QSharedPointer< DIDAuthenticateResponseEAC2 > &pDidAuthenticateResponseEacAdditionalInputType)
Definition: AuthContext.h:268
void fireDidAuthenticateEac1Changed()
const QSharedPointer< DIDAuthenticateResponseEAC2 > & getDidAuthenticateResponseEac2() const
Definition: AuthContext.h:286
const QSharedPointer< DIDAuthenticateResponseEAC2 > & getDidAuthenticateResponseEacAdditionalInputType() const
Definition: AuthContext.h:262
void setDidAuthenticateEac1(const QSharedPointer< DIDAuthenticateEAC1 > &pDIDAuthenticateEAC1)
Definition: AuthContext.h:231
Definition: WorkflowContext.h:22
void setDidListResponse(const QSharedPointer< DIDListResponse > &pDidListResponse)
Definition: AuthContext.h:316
bool isSkipRedirect() const
Definition: AuthContext.h:139
const QString & getReceivedMessageId() const
Definition: AuthContext.h:201
const QSharedPointer< InitializeFrameworkResponse > & getInitializeFrameworkResponse() const
Definition: AuthContext.h:334
void fireAccessRightManagerCreated(QSharedPointer< AccessRightManager > pAccessRightManager)
void setErrorReportedToServer(bool pErrorReportedToServer)
Definition: AuthContext.h:106
void setDidAuthenticateResponseEac2(const QSharedPointer< DIDAuthenticateResponseEAC2 > &pDidAuthenticateResponseEac2)
Definition: AuthContext.h:292
bool containsCertificateFor(const QUrl &pUrl) const
Definition: AuthContext.h:157
const QSharedPointer< const CVCertificate > & getDvCvc() const
Definition: AuthContext.h:441
const QSharedPointer< DIDAuthenticateResponseEAC1 > & getDidAuthenticateResponseEac1() const
Definition: AuthContext.h:250
void setDidAuthenticateResponseEac1(const QSharedPointer< DIDAuthenticateResponseEAC1 > &pDidAuthenticateResponseEac1)
Definition: AuthContext.h:256
QByteArray encodeEffectiveChat()
Definition: AuthContext.cpp:103
QList< QSslCertificate > getCertificateList() const
Definition: AuthContext.h:151
void setProgress(int pValue, const QString &pMessage)
Definition: AuthContext.cpp:56
const QVector< QSharedPointer< TransmitResponse > > & getTransmitResponses()
Definition: AuthContext.h:382
void setInitializeFramework(const QSharedPointer< InitializeFramework > &pInitializeFramework)
Definition: AuthContext.h:328
Definition: EstablishPaceChannelOutput.h:47
friend class TestAuthContext
Definition: AuthContext.h:57
void setDisconnect(const QSharedPointer< Disconnect > &pDisconnect)
Definition: AuthContext.h:352
const QSharedPointer< DIDAuthenticateEACAdditional > & getDidAuthenticateEacAdditional() const
Definition: AuthContext.h:274
bool isErrorReportedToServer() const
Definition: AuthContext.h:100
void setTcTokenNotFound(bool pTcTokenNotFound)
Definition: AuthContext.h:133
CVCertificateChain getChainStartingWith(const QSharedPointer< const CVCertificate > &pChainRoot) const
Definition: AuthContext.cpp:114
const QSharedPointer< DIDAuthenticateEAC2 > & getDidAuthenticateEac2() const
Definition: AuthContext.h:238
const QSharedPointer< DIDList > & getDidList() const
Definition: AuthContext.h:298
QSharedPointer< AccessRightManager > getAccessRightManager() const
Definition: AuthContext.h:408
void addTransmitResponse(const QSharedPointer< TransmitResponse > &pTransmitResponse)
Definition: AuthContext.h:388
ActivationContext * getActivationContext() const
Definition: AuthContext.h:171
Definition: ActivationContext.h:17
const QByteArray & getSslSession() const
Definition: AuthContext.cpp:91
bool isCanAllowedMode() const override
Definition: AuthContext.cpp:85
void setDidAuthenticateEacAdditional(const QSharedPointer< DIDAuthenticateEACAdditional > &pDidAuthenticateEacAdditionalInputType)
Definition: AuthContext.h:280
const QSharedPointer< StartPaos > & getStartPaos() const
Definition: AuthContext.h:417