AusweisApp
Lade ...
Suche ...
Keine Treffer
GlobalStatus.h
gehe zur Dokumentation dieser Datei
1
5#pragma once
6
7#include "EnumHelper.h"
8
9#include <QCoreApplication>
10#include <QMap>
11#include <QPair>
12#include <QSharedData>
13
14
15namespace governikus
16{
17defineEnumTypeQmlExposed(GlobalStatusCode,
18 Unknown_Error,
19 No_Error,
20
21 Network_ServiceUnavailable,
22 Network_ServerError,
23 Network_ClientError,
24 Network_Ssl_Establishment_Error,
25 Network_TimeOut,
26 Network_Proxy_Error,
27 Network_Other_Error,
28
29 Downloader_File_Not_Found,
30 Downloader_Cannot_Save_File,
31 Downloader_Data_Corrupted,
32 Downloader_Missing_Platform,
33 Downloader_Aborted,
34
35 Update_Execution_Failed,
36
37 Workflow_AlreadyInProgress_Error,
38 Workflow_Communication_Missing_Redirect_Url,
39 Workflow_InternalError_BeforeTcToken,
40 Workflow_Cancellation_By_User,
41 Workflow_Card_Removed,
42 Workflow_Cannot_Confirm_IdCard_Authenticity,
43 Workflow_Unknown_Paos_From_EidServer,
44 Workflow_Start_Paos_Response_Missing,
45 Workflow_Unexpected_Message_From_EidServer,
46 Workflow_Preverification_Developermode_Error,
47 Workflow_Preverification_Error,
48 Workflow_No_Unique_AtCvc,
49 Workflow_No_Unique_DvCvc,
50 Workflow_No_Permission_Error,
51 Workflow_Wrong_Length_Error,
52 Workflow_Certificate_No_Description,
53 Workflow_Certificate_No_Url_In_Description,
54 Workflow_Certificate_Hash_Error,
55 Workflow_Certificate_Sop_Error,
56 Workflow_Browser_Transmission_Error,
57 Workflow_TrustedChannel_Establishment_Error,
58 Workflow_TrustedChannel_Server_Error,
59 Workflow_TrustedChannel_Client_Error,
60 Workflow_TrustedChannel_Hash_Not_In_Description,
61 Workflow_TrustedChannel_No_Data_Received,
62 Workflow_TrustedChannel_Ssl_Connection_Unsupported_Algorithm_Or_Length,
63 Workflow_TrustedChannel_Ssl_Certificate_Unsupported_Algorithm_Or_Length,
64 Workflow_TrustedChannel_ServiceUnavailable,
65 Workflow_TrustedChannel_TimeOut,
66 Workflow_TrustedChannel_Proxy_Error,
67 Workflow_TrustedChannel_Server_Format_Error,
68 Workflow_TrustedChannel_Other_Network_Error,
69 Workflow_Reader_Became_Inaccessible,
70 Workflow_Server_Incomplete_Information_Provided,
71 Workflow_Network_Ssl_Connection_Unsupported_Algorithm_Or_Length,
72 Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length,
73 Workflow_Network_Ssl_Hash_Not_In_Certificate_Description,
74 Workflow_Network_Empty_Redirect_Url,
75 Workflow_Network_Expected_Redirect,
76 Workflow_Network_Invalid_Scheme,
77 Workflow_Network_Malformed_Redirect_Url,
78 Workflow_Wrong_Parameter_Invocation,
79 Workflow_Smart_eID_Unavailable,
80 Workflow_Smart_eID_Applet_Preparation_Failed,
81 Workflow_Smart_eID_Authentication_Failed,
82 Workflow_Smart_eID_ServiceInformation_Query_Failed,
83 Workflow_Smart_eID_PrePersonalization_Failed,
84 Workflow_Smart_eID_Personalization_Failed,
85 Workflow_Smart_eID_Personalization_Denied,
86
87 Paos_Unexpected_Warning,
88
89 Paos_Generic_Server_Error,
90
91 Paos_Error_AL_Unknown_Error,
92 Paos_Error_AL_Internal_Error,
93 Paos_Error_AL_Communication_Error,
94 Paos_Error_DP_Trusted_Channel_Establishment_Failed,
95 Paos_Error_SAL_Cancellation_by_User,
96 Paos_Error_SAL_Invalid_Key,
97
98 Card_Not_Found,
99 Card_Communication_Error,
100 Card_Protocol_Error,
101 Card_Unexpected_Transmit_Status,
102 Card_Cancellation_By_User,
103 Card_Input_TimeOut,
104 Card_Pin_Deactivated,
105 Card_Invalid_Pin,
106 Card_Invalid_Can,
107 Card_Invalid_Puk,
108 Card_Pin_Blocked,
109 Card_Pin_Not_Blocked,
110 Card_Puk_Blocked,
111 Card_NewPin_Mismatch,
112 Card_NewPin_Invalid_Length,
113 Card_ValidityVerificationFailed,
114 Card_Smart_Invalid,
115
116 RemoteReader_CloseCode_AbnormalClose,
117
118 IfdConnector_InvalidRequest,
119 IfdConnector_NoSupportedApiLevel,
120 IfdConnector_ConnectionError,
121 IfdConnector_RemoteHostRefusedConnection
122 )
123
124class GlobalStatus
125{
126 Q_GADGET
127 Q_DECLARE_TR_FUNCTIONS(governikus::GlobalStatus)
128
129 public:
130 using Code = GlobalStatusCode;
131
132 enum class Origin
133 {
134 Server, Client
135 };
136
137 enum class ExternalInformation
138 {
139 ECARDAPI_ERROR,
140 ECARDAPI_SERVERMESSAGE,
141 LAST_URL,
142 HTTP_STATUS_CODE,
143 REDIRECT_URL,
144 CERTIFICATE_ISSUER_NAME,
145 URL_SCHEME,
146 ACTIVATION_ERROR,
147 PERSONALIZATION_RESTRICTION_DATE
148 };
149
150 using ExternalInfoMap = QMap<ExternalInformation, QString>;
151
152 Q_ENUM(Code)
153 Q_ENUM(Origin)
154 Q_ENUM(ExternalInformation)
155
156 private:
157 class InternalStatus
158 : public QSharedData
159 {
160 public:
161 const Code mStatusCode;
162 const ExternalInfoMap mExternalInformation;
163 const Origin mOrigin;
164
165 InternalStatus(Code pStatusCode, const ExternalInfoMap& pExternalInformation, const Origin pOrigin)
166 : mStatusCode(pStatusCode)
167 , mExternalInformation(pExternalInformation)
168 , mOrigin(pOrigin)
169 {
170 }
171
172
173 InternalStatus(Code pStatusCode, const QPair<ExternalInformation, QString>& pExternalInformation, const Origin pOrigin)
174 : mStatusCode(pStatusCode)
175 , mExternalInformation({
176 {pExternalInformation.first, pExternalInformation.second}
177 })
178 , mOrigin(pOrigin)
179 {
180 }
181
182
183 bool operator ==(const InternalStatus& pOther) const
184 {
185 return mStatusCode == pOther.mStatusCode &&
186 mExternalInformation == pOther.mExternalInformation &&
187 mOrigin == pOther.mOrigin;
188 }
189
190
191 };
192
193 QSharedDataPointer<InternalStatus> d;
194 [[nodiscard]] QString getExternalInfo(ExternalInformation pType) const;
195
196 [[nodiscard]] QString toErrorDescriptionInternal() const;
197
198 public:
199 GlobalStatus(Code pStatusCode, const ExternalInfoMap& pExternalInformation, const Origin pOrigin = Origin::Client)
200 : d(new InternalStatus(pStatusCode, pExternalInformation, pOrigin))
201 {
202 }
203
204
205 GlobalStatus(Code pStatusCode, const QPair<ExternalInformation, QString>& pExternalInformation, const Origin pOrigin = Origin::Client)
206 : d(new InternalStatus(pStatusCode, pExternalInformation, pOrigin))
207 {
208 }
209
210
211 GlobalStatus(Code pStatusCode = Code::Unknown_Error, const Origin pOrigin = Origin::Client)
212 : d(new InternalStatus(pStatusCode, ExternalInfoMap(), pOrigin))
213 {
214 }
215
216
217 bool operator ==(const GlobalStatus& pOther) const;
218 [[nodiscard]] bool is(const Code pStatusCode) const;
219
220 [[nodiscard]] Code getStatusCode() const;
221
222 [[nodiscard]] QString toErrorDescription(const bool pSimplifiedVersion = false) const;
223 [[nodiscard]] QString getExternalInfo(const QString& pToken = QStringLiteral("; ")) const;
224
225 [[nodiscard]] Origin getOrigin() const;
226 [[nodiscard]] bool isOriginServer() const;
227
228 [[nodiscard]] bool isNoError() const;
229 [[nodiscard]] bool isError() const;
230 [[nodiscard]] bool isCancellationByUser() const;
231 [[nodiscard]] bool isMessageMasked() const;
232};
233
234using Origin = GlobalStatus::Origin;
235
236} // namespace governikus
237
238
239QDebug operator <<(QDebug pDbg, const governikus::GlobalStatus& pStatus);
#define defineEnumTypeQmlExposed(enumName,...)
Definition EnumHelper.h:88
QDebug operator<<(QDebug pDbg, const governikus::GlobalStatus &pStatus)
Defines the AccessRight and AccessRole enum.
Definition CommandApdu.h:17
GlobalStatus::Origin Origin
Definition GlobalStatus.h:234