summaryrefslogtreecommitdiffhomepage
path: root/gui/src/shared
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2024-01-29 09:46:37 +0100
committerOskar Nyberg <oskar@mullvad.net>2024-01-29 09:46:37 +0100
commit3ad7afed8319d07639df483873cf94159c7cdadb (patch)
treefc9a971c1176b5a33c30afa31856b8f35cf8dcc6 /gui/src/shared
parentfd4b9f08b3cf1501db6982e3c7dc6b8f1346bc28 (diff)
parent4776f2890fe3ca76c78fe646956e3eeae74efce6 (diff)
downloadmullvadvpn-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.ts57
-rw-r--r--gui/src/shared/ipc-schema.ts11
-rw-r--r--gui/src/shared/localization-contexts.ts1
-rw-r--r--gui/src/shared/utils.ts3
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;
+}