AusweisApp2
WorkflowRequest.h
gehe zur Dokumentation dieser Datei
1 
5 #pragma once
6 
8 
9 #include <QPair>
10 
11 #include <functional>
12 #include <utility>
13 
14 namespace governikus
15 {
16 defineEnumType(WorkflowControl
17  , UNHANDLED
18  , SKIP
19  , ENQUEUE
20  )
21 
22 class WorkflowController;
23 
24 class WorkflowRequest final
25 {
26  Q_GADGET
27 
28  using BusyHandler = std::function<WorkflowControl (WorkflowRequest&, const QSharedPointer<WorkflowRequest>&, const QSharedPointer<WorkflowRequest>&)>;
29 
30  private:
31  const std::function<QSharedPointer<WorkflowController>(const QSharedPointer<WorkflowContext>& pContext)> mGeneratorController;
32  const std::function<QSharedPointer<WorkflowContext>()> mGeneratorContext;
33  const BusyHandler mBusyHandler;
34 
35  QSharedPointer<WorkflowController> mController;
36  QSharedPointer<WorkflowContext> mContext;
37 
38  template<typename Controller, typename Context, typename ... Args>
39  static auto getGenerator(Args&& ... pArgs)
40  {
41  const auto& controller = [](const QSharedPointer<WorkflowContext>& pContext){
42  return QSharedPointer<Controller>::create(pContext.staticCast<Context>());
43  };
44 
45  const auto& context = [pArgs ...]() mutable {
46  return QSharedPointer<Context>::create(std::forward<Args>(pArgs) ...);
47  };
48 
49  return qMakePair(controller, context);
50  }
51 
52  public:
53  template<typename Controller, typename Context, typename Request = WorkflowRequest, typename ... Args>
54  static QSharedPointer<WorkflowRequest> createWorkflowRequest(Args&& ... pArgs)
55  {
56  auto [controller, context] = getGenerator<Controller, Context, Args...>(std::forward<Args>(pArgs) ...);
57  return QSharedPointer<Request>::create(controller, context);
58  }
59 
60 
61  template<typename Controller, typename Context, typename Request = WorkflowRequest, typename ... Args>
62  static QSharedPointer<WorkflowRequest> createWorkflowRequestHandler(const BusyHandler& pBusyHandler, Args&& ... pArgs)
63  {
64  auto [controller, context] = getGenerator<Controller, Context, Args...>(std::forward<Args>(pArgs) ...);
65  return QSharedPointer<Request>::create(controller, context, pBusyHandler);
66  }
67 
68 
69  WorkflowRequest(const std::function<QSharedPointer<WorkflowController>(const QSharedPointer<WorkflowContext>& pContext)>& pGeneratorController,
70  const std::function<QSharedPointer<WorkflowContext>()>& pGeneratorContext,
71  const BusyHandler& pBusyHandler = BusyHandler());
72 
73  void initialize();
74  [[nodiscard]] bool isInitialized() const;
75  [[nodiscard]] Action getAction() const;
76  [[nodiscard]] QSharedPointer<WorkflowController> getController() const;
77  [[nodiscard]] QSharedPointer<WorkflowContext> getContext() const;
78  [[nodiscard]] WorkflowControl handleBusyWorkflow(const QSharedPointer<WorkflowRequest>& pActiveWorkflow, const QSharedPointer<WorkflowRequest>& pWaitingWorkflow);
79 };
80 
81 } // namespace governikus
Definition: WorkflowController.h:20
Definition: WorkflowRequest.h:25
Action getAction() const
Definition: WorkflowRequest.cpp:41
void initialize()
Definition: WorkflowRequest.cpp:26
QSharedPointer< WorkflowContext > getContext() const
Definition: WorkflowRequest.cpp:53
static QSharedPointer< WorkflowRequest > createWorkflowRequest(Args &&... pArgs)
Definition: WorkflowRequest.h:54
QSharedPointer< WorkflowController > getController() const
Definition: WorkflowRequest.cpp:47
WorkflowControl handleBusyWorkflow(const QSharedPointer< WorkflowRequest > &pActiveWorkflow, const QSharedPointer< WorkflowRequest > &pWaitingWorkflow)
Definition: WorkflowRequest.cpp:59
bool isInitialized() const
Definition: WorkflowRequest.cpp:35
WorkflowRequest(const std::function< QSharedPointer< WorkflowController >(const QSharedPointer< WorkflowContext > &pContext)> &pGeneratorController, const std::function< QSharedPointer< WorkflowContext >()> &pGeneratorContext, const BusyHandler &pBusyHandler=BusyHandler())
static QSharedPointer< WorkflowRequest > createWorkflowRequestHandler(const BusyHandler &pBusyHandler, Args &&... pArgs)
Definition: WorkflowRequest.h:62
Implementation of GeneralAuthenticate response APDUs.
Definition: CommandApdu.h:16
defineEnumType(KnownOid, ID_SIGNED_DATA, EC_PS_PUBLICKEY, STANDARDIZED_DOMAINPARAMETERS, BSI_DE_PROTOCOLS_SMARTCARD, ID_PK, ID_PK_DH, ID_PK_ECDH, ID_PS_PK, ID_PS_PK_ECDH_ESCHNORR, ID_TA, ID_TA_RSA, ID_TA_RSA_V1_5_SHA_1, ID_TA_RSA_V1_5_SHA_256, ID_TA_RSA_PSS_SHA_1, ID_TA_RSA_PSS_SHA_256, ID_TA_RSA_V1_5_SHA_512, ID_TA_RSA_PSS_SHA_512, ID_TA_ECDSA, ID_TA_ECDSA_SHA_1, ID_TA_ECDSA_SHA_224, ID_TA_ECDSA_SHA_256, ID_TA_ECDSA_SHA_384, ID_TA_ECDSA_SHA_512, ID_CA, ID_CA_DH, ID_CA_DH_3DES_CBC_CBC, ID_CA_DH_AES_CBC_CMAC_128, ID_CA_DH_AES_CBC_CMAC_192, ID_CA_DH_AES_CBC_CMAC_256, ID_CA_ECDH, ID_CA_ECDH_3DES_CBC_CBC, ID_CA_ECDH_AES_CBC_CMAC_128, ID_CA_ECDH_AES_CBC_CMAC_192, ID_CA_ECDH_AES_CBC_CMAC_256, ID_PACE, ID_PACE_DH_GM, ID_PACE_DH_GM_3DES_CBC_CBC, ID_PACE_DH_GM_AES_CBC_CMAC_128, ID_PACE_DH_GM_AES_CBC_CMAC_192, ID_PACE_DH_GM_AES_CBC_CMAC_256, ID_PACE_ECDH_GM, ID_PACE_ECDH_GM_3DES_CBC_CBC, ID_PACE_ECDH_GM_AES_CBC_CMAC_128, ID_PACE_ECDH_GM_AES_CBC_CMAC_192, ID_PACE_ECDH_GM_AES_CBC_CMAC_256, ID_PACE_DH_IM, ID_PACE_DH_IM_3DES_CBC_CBC, ID_PACE_DH_IM_AES_CBC_CMAC_128, ID_PACE_DH_IM_AES_CBC_CMAC_192, ID_PACE_DH_IM_AES_CBC_CMAC_256, ID_PACE_ECDH_IM, ID_PACE_ECDH_IM_3DES_CBC_CBC, ID_PACE_ECDH_IM_AES_CBC_CMAC_128, ID_PACE_ECDH_IM_AES_CBC_CMAC_192, ID_PACE_ECDH_IM_AES_CBC_CMAC_256, ID_PACE_ECDH_CAM, ID_PACE_ECDH_CAM_AES_CBC_CMAC_128, ID_PACE_ECDH_CAM_AES_CBC_CMAC_192, ID_PACE_ECDH_CAM_AES_CBC_CMAC_256, ID_RI, ID_RI_DH, ID_RI_DH_SHA_1, ID_RI_DH_SHA_224, ID_RI_DH_SHA_256, ID_RI_DH_SHA_384, ID_RI_DH_SHA_512, ID_RI_ECDH, ID_RI_ECDH_SHA_1, ID_RI_ECDH_SHA_224, ID_RI_ECDH_SHA_256, ID_RI_ECDH_SHA_384, ID_RI_ECDH_SHA_512, ID_CI, ID_EID_SECURITY, ID_PT, ID_PS, ID_PSA, ID_PSA_ECDH_ECSCHNORR, ID_PSA_ECDH_ECSCHNORR_SHA_256, ID_PSA_ECDH_ECSCHNORR_SHA_384, ID_PSA_ECDH_ECSCHNORR_SHA_512, ID_PASSWORDTYPE, ID_PASSWORDTYPE_MRZ, ID_PASSWORDTYPE_CAN, ID_PASSWORDTYPE_PIN, ID_PASSWORDTYPE_PUK, ID_AUXILIARY_DATA, ID_DATE_OF_BIRTH, ID_DATE_OF_EXPIRY, ID_MUNICIPALITY_ID, ID_PSM_MESSAGE, ID_SECURITY_OBJECT, ID_ROLES, ID_IS, ID_AT, ID_ST, ID_EXTENSIONS, ID_DESCRIPTION, ID_PLAIN_FORMAT, ID_HTML_FORMAT, ID_PFD_FORMAT, ID_SECTOR, ID_EID_TYPE, ID_CARD_EID_TYPE, ID_MOBILE_EID_TYPE, ID_MOBILE_EID_TYPE_SE_CERTIFIED, ID_MOBILE_EID_TYPE_SE_ENDORSED, ID_MOBILE_EID_TYPE_HW_KEYSTORE) class Oid
Definition: Oid.h:21