222 lines
6.1 KiB
C++
222 lines
6.1 KiB
C++
/*!
|
|
* \brief A global mapping for errors
|
|
*
|
|
* \copyright Copyright (c) 2016-2018 Governikus GmbH & Co. KG, Germany
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "EnumHelper.h"
|
|
|
|
#include <QCoreApplication>
|
|
#include <QSharedData>
|
|
|
|
namespace governikus
|
|
{
|
|
|
|
|
|
class GlobalStatus
|
|
{
|
|
Q_GADGET
|
|
Q_DECLARE_TR_FUNCTIONS(governikus::GlobalStatus)
|
|
|
|
public:
|
|
enum class Code
|
|
{
|
|
Unknown_Error,
|
|
No_Error,
|
|
|
|
Network_ServiceUnavailable,
|
|
Network_Ssl_Establishment_Error,
|
|
Network_TimeOut,
|
|
Network_Proxy_Error,
|
|
Network_Other_Error,
|
|
|
|
Downloader_File_Not_Found,
|
|
Downloader_Cannot_Save_File,
|
|
Downloader_Data_Corrupted,
|
|
|
|
Workflow_AlreadyInProgress_Error,
|
|
Workflow_Communication_Missing_Redirect_Url,
|
|
Workflow_Cancellation_By_User,
|
|
Workflow_Card_Removed,
|
|
Workflow_Cannot_Confirm_IdCard_Authenticity,
|
|
Workflow_Unknown_Paos_Form_EidServer,
|
|
Workflow_Unexpected_Message_From_EidServer,
|
|
Workflow_Pin_Blocked_And_Puk_Objectionable,
|
|
Workflow_Preverification_Developermode_Error,
|
|
Workflow_Preverification_Error,
|
|
Workflow_No_Unique_AtCvc,
|
|
Workflow_No_Unique_DvCvc,
|
|
Workflow_No_Permission_Error,
|
|
Workflow_Certificate_No_Description,
|
|
Workflow_Certificate_No_Url_In_Description,
|
|
Workflow_Certificate_Hash_Error,
|
|
Workflow_Certificate_Sop_Error,
|
|
Workflow_Error_Page_Transmission_Error,
|
|
Workflow_Redirect_Transmission_Error,
|
|
Workflow_Processing_Error,
|
|
Workflow_TrustedChannel_Establishment_Error,
|
|
Workflow_TrustedChannel_Error_From_Server,
|
|
Workflow_TrustedChannel_Hash_Not_In_Description,
|
|
Workflow_TrustedChannel_No_Data_Received,
|
|
Workflow_TrustedChannel_Ssl_Certificate_Unsupported_Algorithm_Or_Length,
|
|
Workflow_TrustedChannel_ServiceUnavailable,
|
|
Workflow_TrustedChannel_TimeOut,
|
|
Workflow_TrustedChannel_Proxy_Error,
|
|
Workflow_TrustedChannel_Ssl_Establishment_Error,
|
|
Workflow_TrustedChannel_Server_Format_Error,
|
|
Workflow_TrustedChannel_Other_Network_Error,
|
|
Workflow_Reader_Became_Inaccessible,
|
|
Workflow_Reader_Communication_Error,
|
|
Workflow_Server_Incomplete_Information_Provided,
|
|
Workflow_Network_Ssl_Connection_Unsupported_Algorithm_Or_Length,
|
|
Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length,
|
|
Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description,
|
|
Workflow_Network_Empty_Redirect_Url,
|
|
Workflow_Network_Expected_Redirect,
|
|
Workflow_Network_Invalid_Scheme,
|
|
Workflow_Network_Malformed_Redirect_Url,
|
|
Workflow_Wrong_Parameter_Invocation,
|
|
|
|
Paos_Unexpected_Warning,
|
|
|
|
Paos_Error_AL_Unknown_Error,
|
|
Paos_Error_AL_No_Permission,
|
|
Paos_Error_AL_Internal_Error,
|
|
Paos_Error_AL_Parameter_Error,
|
|
Paos_Error_AL_Unkown_API_Function,
|
|
Paos_Error_AL_Not_Initialized,
|
|
Paos_Error_AL_Warning_Connection_Disconnected,
|
|
Paos_Error_AL_Session_Terminated_Warning,
|
|
Paos_Error_AL_Communication_Error,
|
|
Paos_Error_DP_Timeout_Error,
|
|
Paos_Error_DP_Unknown_Channel_Handle,
|
|
Paos_Error_DP_Communication_Error,
|
|
Paos_Error_DP_Trusted_Channel_Establishment_Failed,
|
|
Paos_Error_DP_Unknown_Protocol,
|
|
Paos_Error_DP_Unknown_Cipher_Suite,
|
|
Paos_Error_DP_Unknown_Webservice_Binding,
|
|
Paos_Error_DP_Node_Not_Reachable,
|
|
Paos_Error_IFDL_Timeout_Error,
|
|
Paos_Error_IFDL_InvalidSlotHandle,
|
|
Paos_Error_IFDL_CancellationByUser,
|
|
Paos_Error_KEY_KeyGenerationNotPossible,
|
|
Paos_Error_SAL_Cancellation_by_User,
|
|
Paos_Error_SAL_CertificateChainInterrupted,
|
|
Paos_Error_SAL_Invalid_Key,
|
|
Paos_Error_SAL_SecurityConditionNotSatisfied,
|
|
Paos_Error_SAL_MEAC_AgeVerificationFailedWarning,
|
|
Paos_Error_SAL_MEAC_CommunityVerificationFailedWarning,
|
|
Paos_Error_SAL_MEAC_DocumentValidityVerificationFailed,
|
|
|
|
Workflow_Reader_Device_Connection_Error,
|
|
Workflow_Reader_Device_Scan_Error,
|
|
|
|
Card_Not_Found,
|
|
Card_Communication_Error,
|
|
Card_Protocol_Error,
|
|
Card_Cancellation_By_User,
|
|
Card_Input_TimeOut,
|
|
Card_Invalid_Pin,
|
|
Card_Invalid_Can,
|
|
Card_Invalid_Puk,
|
|
Card_Pin_Blocked,
|
|
Card_Pin_Not_Blocked,
|
|
Card_Puk_Blocked,
|
|
Card_NewPin_Mismatch,
|
|
Card_NewPin_Invalid_Length,
|
|
|
|
RemoteReader_CloseCode_NormalClose,
|
|
RemoteReader_CloseCode_AbnormalClose,
|
|
RemoteReader_CloseCode_Undefined,
|
|
|
|
RemoteConnector_InvalidRequest,
|
|
RemoteConnector_EmptyPassword,
|
|
RemoteConnector_NoSupportedApiLevel,
|
|
RemoteConnector_ConnectionTimeout,
|
|
RemoteConnector_ConnectionError,
|
|
RemoteConnector_RemoteHostRefusedConnection
|
|
};
|
|
|
|
enum class Origin
|
|
{
|
|
Server, Client
|
|
};
|
|
|
|
Q_ENUM(Code)
|
|
Q_ENUM(Origin)
|
|
|
|
private:
|
|
class InternalStatus
|
|
: public QSharedData
|
|
{
|
|
public:
|
|
const Code mStatusCode;
|
|
const QStringList mExternalInformation;
|
|
const Origin mOrigin;
|
|
|
|
InternalStatus(Code pStatusCode, const QStringList& pExternalInformation, const Origin pOrigin)
|
|
: mStatusCode(pStatusCode)
|
|
, mExternalInformation(pExternalInformation)
|
|
, mOrigin(pOrigin)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
bool operator ==(const InternalStatus& pOther) const
|
|
{
|
|
return mStatusCode == pOther.mStatusCode &&
|
|
mExternalInformation == pOther.mExternalInformation &&
|
|
mOrigin == pOther.mOrigin;
|
|
}
|
|
|
|
|
|
};
|
|
|
|
QSharedDataPointer<InternalStatus> d;
|
|
const QString getExternalInfo(int pIndex = 0) const;
|
|
|
|
static QString maskMessage(const QString& pMessage, const bool pMask);
|
|
|
|
public:
|
|
GlobalStatus(Code pStatusCode = Code::Unknown_Error, const QStringList& pExternalInformation = QStringList(), const Origin pOrigin = Origin::Client)
|
|
: d(new InternalStatus(pStatusCode, pExternalInformation, pOrigin))
|
|
{
|
|
|
|
}
|
|
|
|
|
|
GlobalStatus(Code pStatusCode, const QString& pExternalInformation, const Origin pOrigin = Origin::Client)
|
|
: GlobalStatus(pStatusCode, QStringList(pExternalInformation), pOrigin)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
bool operator ==(const GlobalStatus& pOther) const;
|
|
bool is(const Code pStatusCode) const;
|
|
|
|
Code getStatusCode() const;
|
|
operator GlobalStatus::Code() const;
|
|
|
|
QString toErrorDescription(const bool pSimplifiedVersion = false) const;
|
|
|
|
Origin getOrigin() const;
|
|
bool isOriginServer() const;
|
|
|
|
bool isNoError() const;
|
|
bool isError() const;
|
|
bool isCancellationByUser() const;
|
|
};
|
|
|
|
using Origin = GlobalStatus::Origin;
|
|
|
|
defineEnumOperators(GlobalStatus::Code)
|
|
|
|
} /* namespace governikus */
|
|
|
|
|
|
QDebug operator <<(QDebug pDbg, const governikus::GlobalStatus& pStatus);
|