diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2024-01-29 09:46:37 +0100 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2024-01-29 09:46:37 +0100 |
| commit | 3ad7afed8319d07639df483873cf94159c7cdadb (patch) | |
| tree | fc9a971c1176b5a33c30afa31856b8f35cf8dcc6 /gui/src/shared | |
| parent | fd4b9f08b3cf1501db6982e3c7dc6b8f1346bc28 (diff) | |
| parent | 4776f2890fe3ca76c78fe646956e3eeae74efce6 (diff) | |
| download | mullvadvpn-3ad7afed8319d07639df483873cf94159c7cdadb.tar.xz mullvadvpn-3ad7afed8319d07639df483873cf94159c7cdadb.zip | |
Merge branch 'api-access-methods'
Diffstat (limited to 'gui/src/shared')
| -rw-r--r-- | gui/src/shared/daemon-rpc-types.ts | 57 | ||||
| -rw-r--r-- | gui/src/shared/ipc-schema.ts | 11 | ||||
| -rw-r--r-- | gui/src/shared/localization-contexts.ts | 1 | ||||
| -rw-r--r-- | gui/src/shared/utils.ts | 3 |
4 files changed, 71 insertions, 1 deletions
diff --git a/gui/src/shared/daemon-rpc-types.ts b/gui/src/shared/daemon-rpc-types.ts index 48a4110e13..b409a6e835 100644 --- a/gui/src/shared/daemon-rpc-types.ts +++ b/gui/src/shared/daemon-rpc-types.ts @@ -173,7 +173,8 @@ export type DaemonEvent = | { relayList: IRelayListWithEndpointData } | { appVersionInfo: IAppVersionInfo } | { device: DeviceEvent } - | { deviceRemoval: Array<IDevice> }; + | { deviceRemoval: Array<IDevice> } + | { accessMethodSetting: AccessMethodSetting }; export interface ITunnelStateRelayInfo { endpoint: ITunnelEndpoint; @@ -427,6 +428,7 @@ export interface ISettings { splitTunnel: SplitTunnelSettings; obfuscationSettings: ObfuscationSettings; customLists: CustomLists; + apiAccessMethods: ApiAccessMethodSettings; } export type BridgeState = 'auto' | 'on' | 'off'; @@ -474,6 +476,59 @@ export type VoucherResponse = | { type: 'success'; newExpiry: string; secondsAdded: number } | { type: 'invalid' | 'already_used' | 'error' }; +export interface SocksAuth { + username: string; + password: string; +} + +export type Socks5LocalAccessMethod = { + type: 'socks5-local'; + remoteIp: string; + remotePort: number; + remoteTransportProtocol: RelayProtocol; + localPort: number; +}; + +export type Socks5RemoteAccessMethod = { + type: 'socks5-remote'; + ip: string; + port: number; + authentication?: SocksAuth; +}; + +export type ShadowsocksAccessMethod = { + type: 'shadowsocks'; + ip: string; + port: number; + password: string; + cipher: string; +}; + +export type CustomProxy = + | Socks5LocalAccessMethod + | Socks5RemoteAccessMethod + | ShadowsocksAccessMethod; + +export type AccessMethod = + | { + type: 'direct'; + } + | { + type: 'bridges'; + } + | CustomProxy; + +export type NewAccessMethodSetting = AccessMethod & { + name: string; + enabled: boolean; +}; + +export type AccessMethodSetting = NewAccessMethodSetting & { + id: string; +}; + +export type ApiAccessMethodSettings = Array<AccessMethodSetting>; + export function parseSocketAddress(socketAddrStr: string): ISocketAddress { const re = new RegExp(/(.+):(\d+)$/); const matches = socketAddrStr.match(re); diff --git a/gui/src/shared/ipc-schema.ts b/gui/src/shared/ipc-schema.ts index ecf34e93fb..3f348b1d86 100644 --- a/gui/src/shared/ipc-schema.ts +++ b/gui/src/shared/ipc-schema.ts @@ -2,11 +2,13 @@ import { GetTextTranslations } from 'gettext-parser'; import { ILinuxSplitTunnelingApplication, IWindowsApplication } from './application-types'; import { + AccessMethodSetting, AccountDataError, AccountToken, BridgeSettings, BridgeState, CustomListError, + CustomProxy, DeviceEvent, DeviceState, IAccountData, @@ -17,6 +19,7 @@ import { IDnsOptions, IRelayListWithEndpointData, ISettings, + NewAccessMethodSetting, ObfuscationSettings, RelaySettings, TunnelState, @@ -71,6 +74,7 @@ export interface IAppStateSnapshot { changelog: IChangelog; forceShowChanges: boolean; navigationHistory?: IHistoryObject; + currentApiAccessMethod?: AccessMethodSetting; } // The different types of requests are: @@ -160,6 +164,7 @@ export const ipcSchema = { }, settings: { '': notifyRenderer<ISettings>(), + apiAccessMethodSettingChange: notifyRenderer<AccessMethodSetting>(), setAllowLan: invoke<boolean, void>(), setShowBetaReleases: invoke<boolean, void>(), setEnableIpv6: invoke<boolean, void>(), @@ -172,6 +177,12 @@ export const ipcSchema = { updateBridgeSettings: invoke<BridgeSettings, void>(), setDnsOptions: invoke<IDnsOptions, void>(), setObfuscationSettings: invoke<ObfuscationSettings, void>(), + addApiAccessMethod: invoke<NewAccessMethodSetting, string>(), + updateApiAccessMethod: invoke<AccessMethodSetting, void>(), + removeApiAccessMethod: invoke<string, void>(), + setApiAccessMethod: invoke<string, void>(), + testApiAccessMethodById: invoke<string, boolean>(), + testCustomApiAccessMethod: invoke<CustomProxy, boolean>(), }, guiSettings: { '': notifyRenderer<IGuiSettingsState>(), diff --git a/gui/src/shared/localization-contexts.ts b/gui/src/shared/localization-contexts.ts index d342a4210e..081d5a622f 100644 --- a/gui/src/shared/localization-contexts.ts +++ b/gui/src/shared/localization-contexts.ts @@ -30,6 +30,7 @@ export type LocalizationContexts = | 'openvpn-settings-nav' | 'split-tunneling-view' | 'split-tunneling-nav' + | 'api-access-methods-view' | 'support-view' | 'select-language-nav' | 'tray-icon-context-menu' diff --git a/gui/src/shared/utils.ts b/gui/src/shared/utils.ts new file mode 100644 index 0000000000..24984e4412 --- /dev/null +++ b/gui/src/shared/utils.ts @@ -0,0 +1,3 @@ +export function hasValue<T>(value: T): value is NonNullable<T> { + return value !== undefined && value !== null; +} |
