2021-05-10 02:33:31 +03:00
# include "errorstrings.h"
using namespace amnezia ;
2023-12-24 21:11:47 +07:00
QString errorString ( ErrorCode code ) {
QString errorMessage ;
2021-05-10 02:33:31 +03:00
switch ( code ) {
// General error codes
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : NoError ) : errorMessage = QObject : : tr ( " No error " ) ; break ;
2024-06-19 02:14:22 +03:00
case ( ErrorCode : : UnknownError ) : errorMessage = QObject : : tr ( " Unknown error " ) ; break ;
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : NotImplementedError ) : errorMessage = QObject : : tr ( " Function not implemented " ) ; break ;
case ( ErrorCode : : AmneziaServiceNotRunning ) : errorMessage = QObject : : tr ( " Background service is not running " ) ; break ;
2025-02-15 11:50:42 +07:00
case ( ErrorCode : : NotSupportedOnThisPlatform ) : errorMessage = QObject : : tr ( " The selected protocol is not supported on the current platform " ) ; break ;
2021-05-10 02:33:31 +03:00
// Server errors
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : ServerCheckFailed ) : errorMessage = QObject : : tr ( " Server check failed " ) ; break ;
case ( ErrorCode : : ServerPortAlreadyAllocatedError ) : errorMessage = QObject : : tr ( " Server port already used. Check for another software " ) ; break ;
case ( ErrorCode : : ServerContainerMissingError ) : errorMessage = QObject : : tr ( " Server error: Docker container missing " ) ; break ;
case ( ErrorCode : : ServerDockerFailedError ) : errorMessage = QObject : : tr ( " Server error: Docker failed " ) ; break ;
case ( ErrorCode : : ServerCancelInstallation ) : errorMessage = QObject : : tr ( " Installation canceled by user " ) ; break ;
2025-03-14 17:39:58 +04:00
case ( ErrorCode : : ServerUserNotInSudo ) : errorMessage = QObject : : tr ( " The user is not a member of the sudo group " ) ; break ;
case ( ErrorCode : : ServerPacketManagerError ) : errorMessage = QObject : : tr ( " Server error: Package manager error " ) ; break ;
2025-03-20 07:24:37 +04:00
case ( ErrorCode : : ServerSudoPackageIsNotPreinstalled ) : errorMessage = QObject : : tr ( " The sudo package is not pre-installed on the server " ) ; break ;
2025-03-14 17:39:58 +04:00
case ( ErrorCode : : ServerUserDirectoryNotAccessible ) : errorMessage = QObject : : tr ( " The server user's home directory is not accessible " ) ; break ;
case ( ErrorCode : : ServerUserNotAllowedInSudoers ) : errorMessage = QObject : : tr ( " Action not allowed in sudoers " ) ; break ;
case ( ErrorCode : : ServerUserPasswordRequired ) : errorMessage = QObject : : tr ( " The user's password is required " ) ; break ;
2021-05-10 02:33:31 +03:00
2022-12-23 14:50:48 +03:00
// Libssh errors
2024-06-19 02:14:22 +03:00
case ( ErrorCode : : SshRequestDeniedError ) : errorMessage = QObject : : tr ( " SSH request was denied " ) ; break ;
case ( ErrorCode : : SshInterruptedError ) : errorMessage = QObject : : tr ( " SSH request was interrupted " ) ; break ;
case ( ErrorCode : : SshInternalError ) : errorMessage = QObject : : tr ( " SSH internal error " ) ; break ;
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : SshPrivateKeyError ) : errorMessage = QObject : : tr ( " Invalid private key or invalid passphrase entered " ) ; break ;
case ( ErrorCode : : SshPrivateKeyFormatError ) : errorMessage = QObject : : tr ( " The selected private key format is not supported, use openssh ED25519 key types or PEM key types " ) ; break ;
case ( ErrorCode : : SshTimeoutError ) : errorMessage = QObject : : tr ( " Timeout connecting to server " ) ; break ;
2021-05-10 02:33:31 +03:00
2024-03-06 02:24:28 +01:00
// Ssh scp errors
2024-06-19 02:14:22 +03:00
case ( ErrorCode : : SshScpFailureError ) : errorMessage = QObject : : tr ( " SCP error: Generic failure " ) ; break ;
2021-05-10 02:33:31 +03:00
// Local errors
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : OpenVpnConfigMissing ) : errorMessage = QObject : : tr ( " OpenVPN config missing " ) ; break ;
case ( ErrorCode : : OpenVpnManagementServerError ) : errorMessage = QObject : : tr ( " OpenVPN management server error " ) ; break ;
2021-05-10 02:33:31 +03:00
// Distro errors
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : OpenVpnExecutableMissing ) : errorMessage = QObject : : tr ( " OpenVPN executable missing " ) ; break ;
2024-06-19 02:14:22 +03:00
case ( ErrorCode : : ShadowSocksExecutableMissing ) : errorMessage = QObject : : tr ( " Shadowsocks (ss-local) executable missing " ) ; break ;
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : CloakExecutableMissing ) : errorMessage = QObject : : tr ( " Cloak (ck-client) executable missing " ) ; break ;
case ( ErrorCode : : AmneziaServiceConnectionFailed ) : errorMessage = QObject : : tr ( " Amnezia helper service error " ) ; break ;
case ( ErrorCode : : OpenSslFailed ) : errorMessage = QObject : : tr ( " OpenSSL failed " ) ; break ;
2021-05-10 02:33:31 +03:00
// VPN errors
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : OpenVpnAdaptersInUseError ) : errorMessage = QObject : : tr ( " Can't connect: another VPN connection is active " ) ; break ;
case ( ErrorCode : : OpenVpnTapAdapterError ) : errorMessage = QObject : : tr ( " Can't setup OpenVPN TAP network adapter " ) ; break ;
case ( ErrorCode : : AddressPoolError ) : errorMessage = QObject : : tr ( " VPN pool error: no available addresses " ) ; break ;
2021-05-10 02:33:31 +03:00
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : ImportInvalidConfigError ) : errorMessage = QObject : : tr ( " The config does not contain any containers and credentials for connecting to the server " ) ; break ;
2024-10-18 14:57:20 +08:00
case ( ErrorCode : : ImportOpenConfigError ) : errorMessage = QObject : : tr ( " Unable to open config file " ) ; break ;
2025-02-15 11:50:42 +07:00
case ( ErrorCode : : NoInstalledContainersError ) : errorMessage = QObject : : tr ( " VPN Protocols is not installed. \n Please install VPN container at first " ) ; break ;
2023-06-05 15:49:10 +08:00
2023-12-22 15:35:24 +03:00
// Android errors
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : AndroidError ) : errorMessage = QObject : : tr ( " VPN connection error " ) ; break ;
2023-12-22 15:35:24 +03:00
2024-02-09 23:23:26 +05:00
// Api errors
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : ApiConfigDownloadError ) : errorMessage = QObject : : tr ( " Error when retrieving configuration from API " ) ; break ;
case ( ErrorCode : : ApiConfigAlreadyAdded ) : errorMessage = QObject : : tr ( " This config has already been added to the application " ) ; break ;
case ( ErrorCode : : ApiConfigEmptyError ) : errorMessage = QObject : : tr ( " In the response from the server, an empty config was received " ) ; break ;
case ( ErrorCode : : ApiConfigSslError ) : errorMessage = QObject : : tr ( " SSL error occurred " ) ; break ;
case ( ErrorCode : : ApiConfigTimeoutError ) : errorMessage = QObject : : tr ( " Server response timeout on api request " ) ; break ;
2024-08-20 16:54:05 +07:00
case ( ErrorCode : : ApiMissingAgwPublicKey ) : errorMessage = QObject : : tr ( " Missing AGW public key " ) ; break ;
2024-10-18 13:57:38 +04:00
case ( ErrorCode : : ApiConfigDecryptionError ) : errorMessage = QObject : : tr ( " Failed to decrypt response payload " ) ; break ;
2024-12-09 09:32:49 +03:00
case ( ErrorCode : : ApiServicesMissingError ) : errorMessage = QObject : : tr ( " Missing list of available services " ) ; break ;
2025-02-15 13:58:48 +07:00
case ( ErrorCode : : ApiConfigLimitError ) : errorMessage = QObject : : tr ( " The limit of allowed configurations per subscription has been exceeded " ) ; break ;
2025-02-23 14:26:04 +07:00
case ( ErrorCode : : ApiNotFoundError ) : errorMessage = QObject : : tr ( " Error when retrieving configuration from API " ) ; break ;
2024-12-09 09:32:49 +03:00
2024-03-06 02:24:28 +01:00
// QFile errors
2024-05-25 13:00:51 +03:00
case ( ErrorCode : : OpenError ) : errorMessage = QObject : : tr ( " QFile error: The file could not be opened " ) ; break ;
case ( ErrorCode : : ReadError ) : errorMessage = QObject : : tr ( " QFile error: An error occurred when reading from the file " ) ; break ;
case ( ErrorCode : : PermissionsError ) : errorMessage = QObject : : tr ( " QFile error: The file could not be accessed " ) ; break ;
case ( ErrorCode : : UnspecifiedError ) : errorMessage = QObject : : tr ( " QFile error: An unspecified error occurred " ) ; break ;
case ( ErrorCode : : FatalError ) : errorMessage = QObject : : tr ( " QFile error: A fatal error occurred " ) ; break ;
case ( ErrorCode : : AbortError ) : errorMessage = QObject : : tr ( " QFile error: The operation was aborted " ) ; break ;
case ( ErrorCode : : InternalError ) :
2021-05-10 02:33:31 +03:00
default :
2024-01-31 12:42:05 +07:00
errorMessage = QObject : : tr ( " Internal error " ) ; break ;
2021-05-10 02:33:31 +03:00
}
2023-12-24 21:11:47 +07:00
2024-01-29 21:33:35 +07:00
return QObject : : tr ( " ErrorCode: %1. " ) . arg ( code ) + errorMessage ;
2021-05-10 02:33:31 +03:00
}
QDebug operator < < ( QDebug debug , const ErrorCode & e )
{
QDebugStateSaver saver ( debug ) ;
debug . nospace ( ) < < " ErrorCode:: " < < int ( e ) < < " ( " < < errorString ( e ) < < " ) " ;
return debug ;
}