2017-07-03 09:33:28 +02:00
/*!
2018-03-28 15:10:51 +02:00
* \ copyright Copyright ( c ) 2016 - 2018 Governikus GmbH & Co . KG , Germany
2017-07-03 09:33:28 +02:00
*/
# include "GlobalStatus.h"
2017-12-20 14:54:05 +01:00
# include "Initializer.h"
2017-07-03 09:33:28 +02:00
# include <QDebug>
# define MESSAGE_SORRY "Sorry, that should not have happened! Please contact the support team."
using namespace governikus ;
2017-12-20 14:54:05 +01:00
static Initializer : : Entry E ( [ ] {
qRegisterMetaType < GlobalStatus : : Code > ( " GlobalStatus::Code " ) ;
qRegisterMetaType < GlobalStatus > ( " GlobalStatus " ) ;
} ) ;
2017-07-03 09:33:28 +02:00
const QString GlobalStatus : : getExternalInfo ( int pIndex ) const
{
return d - > mExternalInformation . value ( pIndex ) ;
}
QString GlobalStatus : : maskMessage ( const QString & pMessage , const bool pMask )
{
return pMask ? tr ( " An error occurred. Please contact our support at <a href= \" https://www.ausweisapp.bund.de/en/service/support/ \" >AusweisApp2 Support</a>. " ) : pMessage ;
}
bool GlobalStatus : : operator = = ( const GlobalStatus & pOther ) const
{
return * d = = * pOther . d ;
}
bool GlobalStatus : : is ( const GlobalStatus : : Code pStatusCode ) const
{
return d - > mStatusCode = = pStatusCode ;
}
GlobalStatus : : Code GlobalStatus : : getStatusCode ( ) const
{
return d - > mStatusCode ;
}
GlobalStatus : : operator GlobalStatus : : Code ( ) const
{
return getStatusCode ( ) ;
}
QString GlobalStatus : : toErrorDescription ( const bool pSimplifiedVersion ) const
{
switch ( d - > mStatusCode )
{
case Code : : Workflow_Communication_Missing_Redirect_Url :
return QString ( ) ;
case Code : : No_Error :
return tr ( " No error occurred. " ) ;
case Code : : Unknown_Error :
return tr ( " An unexpected error has occurred during processing. " ) ;
2017-12-20 14:54:05 +01:00
case Code : : Workflow_AlreadyInProgress_Error :
return tr ( " Cannot start authentication. An operation is already in progress. " ) ;
2017-07-03 09:33:28 +02:00
case Code : : Workflow_Card_Removed :
return tr ( " The ID card has been removed. The process is aborted. " ) ;
case Code : : Workflow_Cannot_Confirm_IdCard_Authenticity :
return tr ( " The authenticity of your ID card could not be confirmed. " ) ;
case Code : : Workflow_Unknown_Paos_Form_EidServer :
return maskMessage ( tr ( " The program received an unknown message from the server. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Unexpected_Message_From_EidServer :
return maskMessage ( tr ( " The program received an unexpected message from the server. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Pin_Blocked_And_Puk_Objectionable :
2018-03-28 15:10:51 +02:00
return tr ( " After three wrong entries your PIN is blocked. Please use the PIN management in this app to unblock it with the help of your PUK. " ) ;
2017-07-03 09:33:28 +02:00
case Code : : Workflow_Preverification_Developermode_Error :
return tr ( " Using the developer mode is only allowed in a test environment. " ) ;
case Code : : Workflow_Preverification_Error :
return maskMessage ( tr ( " Pre-verification failed. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_No_Unique_AtCvc :
return maskMessage ( tr ( " No unique AT CVC " ) , pSimplifiedVersion ) ;
case Code : : Workflow_No_Unique_DvCvc :
return maskMessage ( tr ( " No unique DV CVC " ) , pSimplifiedVersion ) ;
case Code : : Workflow_No_Permission_Error :
return tr ( " Authentication failed. " ) ;
case Code : : Workflow_Certificate_No_Description :
return maskMessage ( tr ( " No certificate description available. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Certificate_No_Url_In_Description :
return maskMessage ( tr ( " No subject url available in certificate description. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Certificate_Hash_Error :
return maskMessage ( tr ( " The certificate description does not match the certificate. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Certificate_Sop_Error :
return maskMessage ( tr ( " The subject URL in the certificate description and the TCToken URL don't satisfy the same origin policy. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Error_Page_Transmission_Error :
case Code : : Workflow_Processing_Error :
case Code : : Workflow_Redirect_Transmission_Error :
return maskMessage ( getExternalInfo ( ) , pSimplifiedVersion ) ;
case Code : : Workflow_TrustedChannel_Establishment_Error :
return maskMessage ( tr ( " Failed to establish secure connection " ) , pSimplifiedVersion ) ;
case Code : : Workflow_TrustedChannel_Error_From_Server :
return maskMessage ( tr ( " The program received an error from the server. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_TrustedChannel_Hash_Not_In_Description :
case Code : : Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description :
return maskMessage ( tr ( " Hash of certificate not in certificate description " ) , pSimplifiedVersion ) ;
case Code : : Workflow_TrustedChannel_No_Data_Received :
return maskMessage ( tr ( " Received no data. " ) , pSimplifiedVersion ) ;
2017-12-20 14:54:05 +01:00
case Code : : Workflow_TrustedChannel_ServiceUnavailable :
case Code : : Network_ServiceUnavailable :
return tr ( " The service is temporarily not available. Please try again later. " ) ;
2017-07-03 09:33:28 +02:00
case Code : : Network_TimeOut :
case Code : : Workflow_TrustedChannel_TimeOut :
return maskMessage ( tr ( " Establishing a connection is taking too long. " ) , pSimplifiedVersion ) ;
case Code : : Network_Proxy_Error :
case Code : : Workflow_TrustedChannel_Proxy_Error :
return maskMessage ( tr ( " Establishing a connection via the proxy did not succeed. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_TrustedChannel_Server_Format_Error :
return maskMessage ( tr ( " It wasn't possible to connect to the server: the server sent a non-standard response. " ) , pSimplifiedVersion ) ;
case Code : : Network_Ssl_Establishment_Error :
case Code : : Workflow_TrustedChannel_Ssl_Establishment_Error :
return maskMessage ( tr ( " It wasn't possible to connect to the server: a secure connection could not be established. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Wrong_Parameter_Invocation :
return maskMessage ( tr ( " Application was invoked with wrong parameters. " ) , pSimplifiedVersion ) ;
case Code : : Network_Other_Error :
case Code : : Workflow_TrustedChannel_Other_Network_Error :
return maskMessage ( tr ( " An unknown network error occurred. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Reader_Became_Inaccessible :
return tr ( " The selected card reader cannot be accessed anymore. " ) ;
case Code : : Workflow_Reader_Communication_Error :
return tr ( " An error occurred while communicating with the card reader. " ) ;
case Code : : Workflow_Server_Incomplete_Information_Provided :
return tr ( " The server provided no or incomplete information. Your personal data could not be read out. " ) ;
case Code : : Workflow_Network_Ssl_Connection_Unsupported_Algorithm_Or_Length :
return maskMessage ( tr ( " Error while connecting to the service provider. The SSL connection uses an unsupported key algorithm or length. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_TrustedChannel_Ssl_Certificate_Unsupported_Algorithm_Or_Length :
case Code : : Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length :
return maskMessage ( tr ( " Error while connecting to the server. The SSL certificate uses an unsupported key algorithm or length. " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Network_Empty_Redirect_Url :
return maskMessage ( tr ( " Empty redirect URL " ) , pSimplifiedVersion ) ;
case Code : : Workflow_Network_Expected_Redirect :
return maskMessage ( tr ( " Expected redirect, got %1 " ) . arg ( getExternalInfo ( ) ) , pSimplifiedVersion ) ;
case Code : : Workflow_Network_Invalid_Scheme :
return maskMessage ( tr ( " Invalid scheme: %1 " ) . arg ( getExternalInfo ( ) ) , pSimplifiedVersion ) ;
case Code : : Workflow_Network_Malformed_Redirect_Url :
return maskMessage ( tr ( " Malformed redirect URL: %1 " ) . arg ( getExternalInfo ( ) ) , pSimplifiedVersion ) ;
case Code : : Workflow_Cancellation_By_User :
case Code : : Card_Cancellation_By_User :
return tr ( " The process was cancelled by the user. " ) ;
case Code : : Paos_Unexpected_Warning :
case Code : : Paos_Error_AL_Unknown_Error :
case Code : : Paos_Error_AL_No_Permission :
case Code : : Paos_Error_AL_Internal_Error :
case Code : : Paos_Error_AL_Parameter_Error :
case Code : : Paos_Error_AL_Unkown_API_Function :
case Code : : Paos_Error_AL_Not_Initialized :
case Code : : Paos_Error_AL_Warning_Connection_Disconnected :
case Code : : Paos_Error_AL_Session_Terminated_Warning :
case Code : : Paos_Error_AL_Communication_Error :
case Code : : Paos_Error_DP_Timeout_Error :
case Code : : Paos_Error_DP_Unknown_Channel_Handle :
case Code : : Paos_Error_DP_Communication_Error :
case Code : : Paos_Error_DP_Trusted_Channel_Establishment_Failed :
case Code : : Paos_Error_DP_Unknown_Protocol :
case Code : : Paos_Error_DP_Unknown_Cipher_Suite :
case Code : : Paos_Error_DP_Unknown_Webservice_Binding :
case Code : : Paos_Error_DP_Node_Not_Reachable :
case Code : : Paos_Error_IFDL_Timeout_Error :
case Code : : Paos_Error_IFDL_InvalidSlotHandle :
case Code : : Paos_Error_IFDL_CancellationByUser :
case Code : : Paos_Error_KEY_KeyGenerationNotPossible :
case Code : : Paos_Error_SAL_Cancellation_by_User :
case Code : : Paos_Error_SAL_CertificateChainInterrupted :
case Code : : Paos_Error_SAL_Invalid_Key :
case Code : : Paos_Error_SAL_SecurityConditionNotSatisfied :
case Code : : Paos_Error_SAL_MEAC_AgeVerificationFailedWarning :
case Code : : Paos_Error_SAL_MEAC_CommunityVerificationFailedWarning :
case Code : : Paos_Error_SAL_MEAC_DocumentValidityVerificationFailed :
return getExternalInfo ( ) ;
case Code : : Card_Input_TimeOut :
return tr ( " The maximum time was exceeded during input process. " ) ;
case Code : : Card_Not_Found :
return tr ( " Card does not exist " ) ;
case Code : : Card_Communication_Error :
2017-12-20 14:54:05 +01:00
return tr ( " An error occurred while communicating with the ID card. Please make sure that your ID card is placed correctly on the card reader and try again. " ) ;
2017-07-03 09:33:28 +02:00
case Code : : Card_Protocol_Error :
2017-12-20 14:54:05 +01:00
return QStringLiteral ( " %1 <a href= \" %2 \" >%3</a>. " ) . arg (
tr ( " A protocol error occurred. Please make sure that your ID card is placed correctly on the card reader and try again. If the problem occurs again, please contact our support at " ) ,
tr ( " https://www.ausweisapp.bund.de/en/service/support/ " ) ,
tr ( " AusweisApp2 Support " ) ) ;
2017-07-03 09:33:28 +02:00
case Code : : Card_Invalid_Pin :
return tr ( " The given PIN is invalid. " ) ;
case Code : : Card_Invalid_Can :
return tr ( " The given card access number (CAN) is invalid . " ) ;
case Code : : Card_Invalid_Puk :
return tr ( " The given PUK is invalid. " ) ;
case Code : : Card_Pin_Blocked :
return tr ( " The PIN was blocked after too many unsuccessful attempts. " ) ;
case Code : : Card_Pin_Not_Blocked :
return tr ( " The PIN is not blocked. " ) ;
case Code : : Card_Puk_Blocked :
return tr ( " The PUK was used ten times and is set inoperative. Please contact the competent authority that issued your ID document to unlock the PIN. " ) ;
case Code : : Card_NewPin_Mismatch :
return tr ( " The new PIN and the confirmation do not match. " ) ;
case Code : : Card_NewPin_Invalid_Length :
return tr ( " The length of the new PIN is not valid. " ) ;
case Code : : Workflow_Reader_Device_Connection_Error :
return tr ( " An error occurred while connecting to a reader device. " ) ;
case Code : : Workflow_Reader_Device_Scan_Error :
return tr ( " An error occurred while scanning for reader devices. " ) ;
case Code : : RemoteReader_CloseCode_NormalClose :
return tr ( " The remote reader connection was closed properly. " ) ;
case Code : : RemoteReader_CloseCode_AbnormalClose :
return tr ( " The remote card reader connection was not closed properly. " ) ;
case Code : : RemoteReader_CloseCode_Undefined :
return tr ( " Undefined error code occured when the remote card reader connection was closed. " ) ;
2017-12-20 14:54:05 +01:00
case Code : : RemoteConnector_InvalidRequest :
return tr ( " Remote reader connection request contains invalid parameters. " ) ;
case Code : : RemoteConnector_EmptyPassword :
return tr ( " Empty password in extended encryption of remote reader connection request. " ) ;
case Code : : RemoteConnector_NoSupportedApiLevel :
2018-03-28 15:10:51 +02:00
return tr ( " Your remote reader version is incompatible with the local version. Please install the latest AusweisApp2 version on both your smartphone and your computer. " ) ;
2017-12-20 14:54:05 +01:00
case Code : : RemoteConnector_ConnectionTimeout :
return tr ( " A timeout occurred while trying to establish a connection to a remote reader. " ) ;
case Code : : RemoteConnector_ConnectionError :
return tr ( " An error occurred while trying to establish a connection to a remote reader. " ) ;
case Code : : RemoteConnector_RemoteHostRefusedConnection :
return tr ( " Remote device has rejected the connection. Please check the pairing code. " ) ;
case Code : : Downloader_File_Not_Found :
return tr ( " File not found. " ) ;
case Code : : Downloader_Cannot_Save_File :
return tr ( " Cannot save file. " ) ;
case Code : : Downloader_Data_Corrupted :
return tr ( " Received data were corrupted. " ) ;
2017-07-03 09:33:28 +02:00
}
2017-12-20 14:54:05 +01:00
Q_UNREACHABLE ( ) ;
2017-07-03 09:33:28 +02:00
}
GlobalStatus : : Origin GlobalStatus : : getOrigin ( ) const
{
return d - > mOrigin ;
}
bool GlobalStatus : : isOriginServer ( ) const
{
return d - > mOrigin = = Origin : : Server ;
}
bool GlobalStatus : : isNoError ( ) const
{
return d - > mStatusCode = = Code : : No_Error ;
}
bool GlobalStatus : : isError ( ) const
{
return ! isNoError ( ) ;
}
bool GlobalStatus : : isCancellationByUser ( ) const
{
return d - > mStatusCode = = Code : : Workflow_Cancellation_By_User | |
d - > mStatusCode = = Code : : Card_Cancellation_By_User | |
d - > mStatusCode = = Code : : Paos_Error_SAL_Cancellation_by_User ;
}
QDebug operator < < ( QDebug pDbg , const GlobalStatus & pStatus )
{
pDbg < < pStatus . getStatusCode ( ) < < " | " < < pStatus . toErrorDescription ( ) ;
return pDbg ;
}