diff --git a/src/www/app/app.ts b/src/www/app/app.ts index 0f8795ffe1..3f9ba8a441 100644 --- a/src/www/app/app.ts +++ b/src/www/app/app.ts @@ -599,13 +599,6 @@ export class App { connectionState: ServerConnectionState.DISCONNECTED, }; - if (server.providerErrorResponse) { - serverListItem.message = { - type: 'error', - content: server.providerErrorResponse.message, - }; - } - return serverListItem; } diff --git a/src/www/app/outline_server_repository/access_key_serialization.ts b/src/www/app/outline_server_repository/access_key_serialization.ts index 4f1c53c430..8cc184d67e 100644 --- a/src/www/app/outline_server_repository/access_key_serialization.ts +++ b/src/www/app/outline_server_repository/access_key_serialization.ts @@ -38,12 +38,8 @@ export function staticKeyToShadowsocksSessionConfig(staticKey: string): Shadowso function parseShadowsocksSessionConfigJson( maybeJsonText: string -): ShadowsocksSessionConfig | errors.ProviderErrorResponse | null { - const {method, password, server, server_port, prefix, ...rest} = JSON.parse(maybeJsonText); - - if ('code' in rest && 'message' in rest) { - return rest as errors.ProviderErrorResponse; - } +): ShadowsocksSessionConfig | null { + const {method, password, server, server_port, prefix, error} = JSON.parse(maybeJsonText); // These are the mandatory keys. const missingKeys = []; @@ -64,6 +60,7 @@ function parseShadowsocksSessionConfigJson( host: server, port: server_port, prefix, + error }; } @@ -71,7 +68,7 @@ function parseShadowsocksSessionConfigJson( // TODO(daniellacosse): unit tests export async function fetchShadowsocksSessionConfig( configLocation: URL -): Promise { +): Promise { let response; try { response = await fetch(configLocation, {cache: 'no-store', redirect: 'follow'}); @@ -86,10 +83,6 @@ export async function fetchShadowsocksSessionConfig( return staticKeyToShadowsocksSessionConfig(responseBody); } - if (responseBody.toLocaleUpperCase().includes('ERROR')) { - return {code: 0, message: responseBody, details: {}}; - } - return parseShadowsocksSessionConfigJson(responseBody); } catch (cause) { throw new errors.ServerAccessKeyInvalid('Failed to parse VPN information fetched from dynamic access key.', { diff --git a/src/www/app/outline_server_repository/server.ts b/src/www/app/outline_server_repository/server.ts index bcf9133310..8cc9b6dd22 100644 --- a/src/www/app/outline_server_repository/server.ts +++ b/src/www/app/outline_server_repository/server.ts @@ -28,7 +28,6 @@ export class OutlineServer implements Server { private static readonly SUPPORTED_CIPHERS = ['chacha20-ietf-poly1305', 'aes-128-gcm', 'aes-192-gcm', 'aes-256-gcm']; errorMessageId?: string; - providerErrorResponse?: errors.ProviderErrorResponse<{}>; private sessionConfig?: ShadowsocksSessionConfig; constructor( @@ -97,15 +96,11 @@ export class OutlineServer implements Server { async connect() { if (this.type === ServerType.DYNAMIC_CONNECTION) { - const sessionConfigOrError = await fetchShadowsocksSessionConfig(this.sessionConfigLocation); + this.sessionConfig = await fetchShadowsocksSessionConfig(this.sessionConfigLocation); - if ('code' in sessionConfigOrError && 'message' in sessionConfigOrError) { - this.providerErrorResponse = sessionConfigOrError as errors.ProviderErrorResponse; - - throw new errors.SessionConfigFetchFailed('Failed to fetch VPN information from dynamic access key.'); + if ('error' in this.sessionConfig) { + this.errorMessageId = this.sessionConfig.error.message; } - - this.sessionConfig = sessionConfigOrError as ShadowsocksSessionConfig; } try { diff --git a/src/www/app/tunnel.ts b/src/www/app/tunnel.ts index fc475e2a21..39d41e0ab9 100644 --- a/src/www/app/tunnel.ts +++ b/src/www/app/tunnel.ts @@ -12,12 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +import * as errors from '../model/errors'; + export interface ShadowsocksSessionConfig { host?: string; port?: number; password?: string; method?: string; prefix?: string; + error?: errors.SessionConfigError; } export const enum TunnelStatus { diff --git a/src/www/model/errors.ts b/src/www/model/errors.ts index da13d8f6af..19fdf3a94d 100644 --- a/src/www/model/errors.ts +++ b/src/www/model/errors.ts @@ -15,10 +15,8 @@ import {Server} from './server'; import {CustomError} from '../../infrastructure/custom_error'; -export interface ProviderErrorResponse { - code: number; +export interface SessionConfigError { message: string; - details: T; } export class ServerAlreadyAdded extends CustomError { diff --git a/src/www/model/server.ts b/src/www/model/server.ts index 985c42fdf7..f789f78331 100644 --- a/src/www/model/server.ts +++ b/src/www/model/server.ts @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -import {ProviderErrorResponse} from './errors'; - // TODO: add guidelines for this file export enum ServerType { @@ -50,9 +48,6 @@ export interface Server { // must match one of the localized app message. errorMessageId?: string; - // Provider error returned pertaining to the server's status - providerErrorResponse?: ProviderErrorResponse; - // Connects to the server, redirecting the device's traffic. connect(): Promise; diff --git a/src/www/views/servers_view/server_list_item/index.ts b/src/www/views/servers_view/server_list_item/index.ts index c518284ba3..be1086e1ca 100644 --- a/src/www/views/servers_view/server_list_item/index.ts +++ b/src/www/views/servers_view/server_list_item/index.ts @@ -34,13 +34,6 @@ export interface ServerListItem { id: string; name: string; connectionState: ServerConnectionState; - message?: { - type: 'error' | 'warning' | 'info'; - content: string; - }; - contact?: { - email: string; - }; } /**