summaryrefslogtreecommitdiffhomepage
path: root/gui/src/shared/auth-failure.ts
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2020-06-04 13:45:06 +0200
committerOskar Nyberg <oskar@mullvad.net>2020-06-10 13:46:17 +0200
commitbfd3b02a3936451ae43867f8f3e2f986a2a2f9bc (patch)
tree3ab241e849f8f22f5bc0a8e5af226c8b30e4552e /gui/src/shared/auth-failure.ts
parentd7fdccb58e8205ae26023629873922979644bfdd (diff)
downloadmullvadvpn-bfd3b02a3936451ae43867f8f3e2f986a2a2f9bc.tar.xz
mullvadvpn-bfd3b02a3936451ae43867f8f3e2f986a2a2f9bc.zip
Categorize notifications and their logic into notification definition
Diffstat (limited to 'gui/src/shared/auth-failure.ts')
-rw-r--r--gui/src/shared/auth-failure.ts81
1 files changed, 81 insertions, 0 deletions
diff --git a/gui/src/shared/auth-failure.ts b/gui/src/shared/auth-failure.ts
new file mode 100644
index 0000000000..bbd990bf89
--- /dev/null
+++ b/gui/src/shared/auth-failure.ts
@@ -0,0 +1,81 @@
+import { messages } from './gettext';
+
+export enum AuthFailureKind {
+ invalidAccount,
+ expiredAccount,
+ tooManyConnections,
+ unknown,
+}
+
+interface IAuthFailure {
+ kind: AuthFailureKind;
+ message: string;
+}
+
+export function parseAuthFailure(rawFailureMessage?: string): IAuthFailure {
+ if (rawFailureMessage) {
+ const results = /^\[(\w+)\]\s*(.*)$/.exec(rawFailureMessage);
+
+ if (results && results.length === 3) {
+ const kind = parseRawFailureKind(results[1]);
+ const message = kind === AuthFailureKind.unknown ? results[2] : messageForFailureKind(kind);
+
+ return {
+ kind,
+ message,
+ };
+ } else {
+ return {
+ kind: AuthFailureKind.unknown,
+ message: rawFailureMessage,
+ };
+ }
+ } else {
+ return {
+ kind: AuthFailureKind.unknown,
+ message: messageForFailureKind(AuthFailureKind.unknown),
+ };
+ }
+}
+
+function parseRawFailureKind(failureId: string): AuthFailureKind {
+ // These strings should match up with mullvad-types/src/auth_failed.rs
+ switch (failureId) {
+ case 'INVALID_ACCOUNT':
+ return AuthFailureKind.invalidAccount;
+
+ case 'EXPIRED_ACCOUNT':
+ return AuthFailureKind.expiredAccount;
+
+ case 'TOO_MANY_CONNECTIONS':
+ return AuthFailureKind.tooManyConnections;
+
+ default:
+ return AuthFailureKind.unknown;
+ }
+}
+
+function messageForFailureKind(kind: AuthFailureKind): string {
+ switch (kind) {
+ case AuthFailureKind.invalidAccount:
+ return messages.pgettext(
+ 'auth-failure',
+ "You've logged in with an account number that is not valid. Please log out and try another one.",
+ );
+
+ case AuthFailureKind.expiredAccount:
+ return messages.pgettext(
+ 'auth-failure',
+ 'You have no more VPN time left on this account. Please log in on our website to buy more credit.',
+ );
+
+ case AuthFailureKind.tooManyConnections:
+ return messages.pgettext(
+ 'auth-failure',
+ 'This account has too many simultaneous connections. Disconnect another device or try connecting again shortly.',
+ );
+
+ case AuthFailureKind.unknown:
+ return messages.pgettext('auth-failure', 'Account authentication failed.');
+ }
+}