2026-04-30 14:53:03 +08:00
# include "errorStrings.h"
2021-05-10 02:33:31 +03:00
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 ;
2025-04-23 09:12:23 +04:00
case ( ErrorCode : : ServerDockerOnCgroupsV2 ) : errorMessage = QObject : : tr ( " Docker error: runc doesn't work on cgroups v2 " ) ; break ;
case ( ErrorCode : : ServerCgroupMountpoint ) : errorMessage = QObject : : tr ( " Server error: cgroup mountpoint does not exist " ) ; break ;
2025-06-23 06:32:56 +04:00
case ( ErrorCode : : DockerPullRateLimit ) : errorMessage = QObject : : tr ( " Docker error: The pull rate limit has been reached " ) ; break ;
2026-01-30 08:04:27 +04:00
case ( ErrorCode : : ServerLinuxKernelTooOld ) : errorMessage = QObject : : tr ( " Server error: Linux kernel is too old " ) ; 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 ;
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 ;
2026-04-30 14:53:03 +08:00
case ( ErrorCode : : ImportBackupFileUseRestoreInstead ) : errorMessage = QObject : : tr ( " Backup files cannot be imported here. Use 'Restore from backup' instead. " ) ; break ;
case ( ErrorCode : : RestoreBackupInvalidError ) : errorMessage = QObject : : tr ( " Backup file is corrupted or has invalid format " ) ; break ;
2026-05-15 12:33:36 +08:00
case ( ErrorCode : : LegacyApiV1NotSupportedError ) : errorMessage = QObject : : tr ( " This legacy Amnezia subscription format is no longer supported " ) ; break ;
2024-10-18 14:57:20 +08:00
case ( ErrorCode : : ImportOpenConfigError ) : errorMessage = QObject : : tr ( " Unable to open config file " ) ; break ;
2026-04-30 14:53:03 +08: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 ;
2025-05-20 05:55:24 +03:00
case ( ErrorCode : : ApiMigrationError ) : errorMessage = QObject : : tr ( " A migration error has occurred. Please contact our technical support " ) ; break ;
2025-05-23 14:53:55 +08:00
case ( ErrorCode : : ApiUpdateRequestError ) : errorMessage = QObject : : tr ( " Please update the application to use this feature " ) ; break ;
2025-08-26 20:31:41 +08:00
case ( ErrorCode : : ApiSubscriptionExpiredError ) : errorMessage = QObject : : tr ( " Your Amnezia Premium subscription has expired. \n Please check your email for renewal instructions. \n If you haven't received an email, please contact our support. " ) ; break ;
2025-12-18 16:36:12 +02:00
case ( ErrorCode : : ApiPurchaseError ) : errorMessage = QObject : : tr ( " Unable to process purchase " ) ; break ;
2026-04-08 11:21:12 +07:00
case ( ErrorCode : : ApiSubscriptionNotActiveError ) : errorMessage = QObject : : tr ( " No active subscription found " ) ; break ;
case ( ErrorCode : : ApiNoPurchasedSubscriptionsError ) : errorMessage = QObject : : tr ( " No purchased subscriptions found. Please purchase a subscription first " ) ; break ;
2026-04-10 21:24:00 +07:00
case ( ErrorCode : : ApiTrialAlreadyUsedError ) : errorMessage = QObject : : tr ( " This email address has already been used to activate a trial " ) ; 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 ;
}