summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2019-01-23 15:05:24 +0100
committerAndrej Mihajlov <and@mullvad.net>2019-01-24 13:45:45 +0100
commite42a8d4749c68d075cb7879df9d7b237e7fd31a1 (patch)
tree53240ad653a8567eeb6059f6070a50db0d09eaa2
parent3f951dc3b9ba9f076aa21aa5f048d7b70a8a9aac (diff)
downloadmullvadvpn-e42a8d4749c68d075cb7879df9d7b237e7fd31a1.tar.xz
mullvadvpn-e42a8d4749c68d075cb7879df9d7b237e7fd31a1.zip
Deprecate and remove DaemonRpcProxy
-rw-r--r--gui/packages/desktop/src/main/index.js46
-rw-r--r--gui/packages/desktop/src/renderer/app.js23
-rw-r--r--gui/packages/desktop/src/renderer/components/Account.js2
-rw-r--r--gui/packages/desktop/src/renderer/components/Login.js2
-rw-r--r--gui/packages/desktop/src/renderer/components/NotificationArea.js2
-rw-r--r--gui/packages/desktop/src/renderer/components/SelectLocation.js2
-rw-r--r--gui/packages/desktop/src/renderer/components/Support.js2
-rw-r--r--gui/packages/desktop/src/renderer/components/TunnelControl.js2
-rw-r--r--gui/packages/desktop/src/renderer/lib/daemon-rpc-proxy.js242
-rw-r--r--gui/packages/desktop/src/renderer/lib/relay-settings-builder.js2
-rw-r--r--gui/packages/desktop/src/renderer/redux/account/actions.js2
-rw-r--r--gui/packages/desktop/src/renderer/redux/account/reducers.js2
-rw-r--r--gui/packages/desktop/src/renderer/redux/connection/actions.js2
-rw-r--r--gui/packages/desktop/src/renderer/redux/connection/reducers.js2
-rw-r--r--gui/packages/desktop/src/renderer/redux/settings/reducers.js2
-rw-r--r--gui/packages/desktop/src/renderer/redux/version/actions.js2
-rw-r--r--gui/packages/desktop/src/shared/ipc-event-channel.js79
-rw-r--r--gui/packages/desktop/test/account-data-cache.spec.js2
18 files changed, 116 insertions, 302 deletions
diff --git a/gui/packages/desktop/src/main/index.js b/gui/packages/desktop/src/main/index.js
index d1598c3210..7ebd88a8c7 100644
--- a/gui/packages/desktop/src/main/index.js
+++ b/gui/packages/desktop/src/main/index.js
@@ -23,6 +23,7 @@ import type {
AppVersionInfo,
Location,
RelayList,
+ RelaySettingsUpdate,
Settings,
TunnelStateTransition,
} from './daemon-rpc';
@@ -497,7 +498,7 @@ const ApplicationMain = {
}
if (this._windowController) {
- IpcMainEventChannel.tunnelState.notify(this._windowController.webContents, newState);
+ IpcMainEventChannel.tunnel.notify(this._windowController.webContents, newState);
}
},
@@ -733,27 +734,6 @@ const ApplicationMain = {
},
_registerIpcListeners() {
- ipcMain.on('daemon-rpc-call', async (event, id: string, method: string, payload: any) => {
- log.debug(`Got daemon-rpc-call: ${id} ${method}`);
-
- try {
- // $FlowFixMe: flow does not like index accessors.
- const result = await this._daemonRpc[method](payload);
-
- log.debug(`Send daemon-rpc-reply-${id} ${method} with success`);
- event.sender.send(`daemon-rpc-reply-${id}`, result);
- } catch (error) {
- log.debug(`Send daemon-rpc-reply-${id} ${method} with error: ${error.message}`);
- event.sender.send(`daemon-rpc-reply-${id}`, undefined, {
- className: error.constructor.name || '',
- data: {
- message: error.message,
- ...JSON.parse(JSON.stringify(error)),
- },
- });
- }
- });
-
IpcMainEventChannel.state.handleGet(() => ({
isConnected: this._connectedToDaemon,
autoStart: getOpenAtLogin(),
@@ -766,10 +746,29 @@ const ApplicationMain = {
guiSettings: this._guiSettings.state,
}));
+ IpcMainEventChannel.settings.handleAllowLan((allowLan: boolean) =>
+ this._daemonRpc.setAllowLan(allowLan),
+ );
+ IpcMainEventChannel.settings.handleEnableIpv6((enableIpv6: boolean) =>
+ this._daemonRpc.setEnableIpv6(enableIpv6),
+ );
+ IpcMainEventChannel.settings.handleBlockWhenDisconnected((blockWhenDisconnected: boolean) =>
+ this._daemonRpc.setBlockWhenDisconnected(blockWhenDisconnected),
+ );
+ IpcMainEventChannel.settings.handleOpenVpnMssfix((mssfix: ?number) =>
+ this._daemonRpc.setOpenVpnMssfix(mssfix),
+ );
+ IpcMainEventChannel.settings.handleUpdateRelaySettings((update: RelaySettingsUpdate) =>
+ this._daemonRpc.updateRelaySettings(update),
+ );
+
IpcMainEventChannel.autoStart.handleSet((autoStart: boolean) => {
return this._setAutoStart(autoStart);
});
+ IpcMainEventChannel.tunnel.handleConnect(() => this._daemonRpc.connectTunnel());
+ IpcMainEventChannel.tunnel.handleDisconnect(() => this._daemonRpc.disconnectTunnel());
+
IpcMainEventChannel.guiSettings.handleAutoConnect((autoConnect: boolean) => {
this._guiSettings.autoConnect = autoConnect;
});
@@ -786,6 +785,9 @@ const ApplicationMain = {
this._daemonRpc.setAccount(token),
);
IpcMainEventChannel.account.handleUnset(() => this._daemonRpc.setAccount(null));
+ IpcMainEventChannel.account.handleGetData((token: AccountToken) =>
+ this._daemonRpc.getAccountData(token),
+ );
IpcMainEventChannel.accountHistory.handleGet(() => this._daemonRpc.getAccountHistory());
IpcMainEventChannel.accountHistory.handleRemoveItem((token: AccountToken) =>
diff --git a/gui/packages/desktop/src/renderer/app.js b/gui/packages/desktop/src/renderer/app.js
index dbb2200e87..bc4a93021e 100644
--- a/gui/packages/desktop/src/renderer/app.js
+++ b/gui/packages/desktop/src/renderer/app.js
@@ -36,18 +36,15 @@ import type {
RelaySettings,
Settings,
TunnelStateTransition,
-} from './lib/daemon-rpc-proxy';
-
-import DaemonRpcProxy from './lib/daemon-rpc-proxy';
+} from '../main/daemon-rpc';
export default class AppRenderer {
_memoryHistory = createMemoryHistory();
_reduxStore = configureStore(null, this._memoryHistory);
_reduxActions: *;
- _daemonRpc = new DaemonRpcProxy();
_accountDataCache = new AccountDataCache(
(accountToken) => {
- return this._daemonRpc.getAccountData(accountToken);
+ return IpcRendererEventChannel.account.getData(accountToken);
},
(accountData) => {
const expiry = accountData ? accountData.expiry : null;
@@ -100,7 +97,7 @@ export default class AppRenderer {
this._onDaemonDisconnected(errorMessage ? new Error(errorMessage) : null);
});
- IpcRendererEventChannel.tunnelState.listen((newState: TunnelStateTransition) => {
+ IpcRendererEventChannel.tunnel.listen((newState: TunnelStateTransition) => {
this._setTunnelState(newState);
});
@@ -236,16 +233,16 @@ export default class AppRenderer {
// switch to the connecting state ahead of time to make the app look more responsive
this._reduxActions.connection.connecting(null);
- return this._daemonRpc.connectTunnel();
+ return IpcRendererEventChannel.tunnel.connect();
}
}
disconnectTunnel(): Promise<void> {
- return this._daemonRpc.disconnectTunnel();
+ return IpcRendererEventChannel.tunnel.disconnect();
}
updateRelaySettings(relaySettings: RelaySettingsUpdate) {
- return this._daemonRpc.updateRelaySettings(relaySettings);
+ return IpcRendererEventChannel.settings.updateRelaySettings(relaySettings);
}
_setRelaySettings(relaySettings: RelaySettings) {
@@ -313,26 +310,26 @@ export default class AppRenderer {
async setAllowLan(allowLan: boolean) {
const actions = this._reduxActions;
- await this._daemonRpc.setAllowLan(allowLan);
+ await IpcRendererEventChannel.settings.setAllowLan(allowLan);
actions.settings.updateAllowLan(allowLan);
}
async setEnableIpv6(enableIpv6: boolean) {
const actions = this._reduxActions;
- await this._daemonRpc.setEnableIpv6(enableIpv6);
+ await IpcRendererEventChannel.settings.setEnableIpv6(enableIpv6);
actions.settings.updateEnableIpv6(enableIpv6);
}
async setBlockWhenDisconnected(blockWhenDisconnected: boolean) {
const actions = this._reduxActions;
- await this._daemonRpc.setBlockWhenDisconnected(blockWhenDisconnected);
+ await IpcRendererEventChannel.settings.setBlockWhenDisconnected(blockWhenDisconnected);
actions.settings.updateBlockWhenDisconnected(blockWhenDisconnected);
}
async setOpenVpnMssfix(mssfix: ?number) {
const actions = this._reduxActions;
actions.settings.updateOpenVpnMssfix(mssfix);
- await this._daemonRpc.setOpenVpnMssfix(mssfix);
+ await IpcRendererEventChannel.settings.setOpenVpnMssfix(mssfix);
}
async setAutoConnect(autoConnect: boolean) {
diff --git a/gui/packages/desktop/src/renderer/components/Account.js b/gui/packages/desktop/src/renderer/components/Account.js
index 6d5c537f92..aaedd96db2 100644
--- a/gui/packages/desktop/src/renderer/components/Account.js
+++ b/gui/packages/desktop/src/renderer/components/Account.js
@@ -9,7 +9,7 @@ import { Layout, Container } from './Layout';
import { NavigationBar, BackBarItem } from './NavigationBar';
import styles from './AccountStyles';
-import type { AccountToken } from '../lib/daemon-rpc-proxy';
+import type { AccountToken } from '../../main/daemon-rpc';
type Props = {
accountToken: AccountToken,
diff --git a/gui/packages/desktop/src/renderer/components/Login.js b/gui/packages/desktop/src/renderer/components/Login.js
index fe7f23cc8f..1e69316393 100644
--- a/gui/packages/desktop/src/renderer/components/Login.js
+++ b/gui/packages/desktop/src/renderer/components/Login.js
@@ -10,7 +10,7 @@ import styles from './LoginStyles';
import { colors } from '../../config';
import type { LoginState } from '../redux/account/reducers';
-import type { AccountToken } from '../lib/daemon-rpc-proxy';
+import type { AccountToken } from '../../main/daemon-rpc';
type Props = {
accountToken: ?AccountToken,
diff --git a/gui/packages/desktop/src/renderer/components/NotificationArea.js b/gui/packages/desktop/src/renderer/components/NotificationArea.js
index 3eba431a52..7f6b01f081 100644
--- a/gui/packages/desktop/src/renderer/components/NotificationArea.js
+++ b/gui/packages/desktop/src/renderer/components/NotificationArea.js
@@ -15,7 +15,7 @@ import {
import { AuthFailure } from '../lib/auth-failure';
import AccountExpiry from '../lib/account-expiry';
-import type { BlockReason, TunnelStateTransition } from '../lib/daemon-rpc-proxy';
+import type { BlockReason, TunnelStateTransition } from '../../main/daemon-rpc';
import type { VersionReduxState } from '../redux/version/reducers';
type Props = {
diff --git a/gui/packages/desktop/src/renderer/components/SelectLocation.js b/gui/packages/desktop/src/renderer/components/SelectLocation.js
index 0f45133da0..448a63ebbd 100644
--- a/gui/packages/desktop/src/renderer/components/SelectLocation.js
+++ b/gui/packages/desktop/src/renderer/components/SelectLocation.js
@@ -19,7 +19,7 @@ import CityRow from './CityRow';
import RelayRow from './RelayRow';
import type { RelaySettingsRedux, RelayLocationRedux } from '../redux/settings/reducers';
-import type { RelayLocation } from '../lib/daemon-rpc-proxy';
+import type { RelayLocation } from '../../main/daemon-rpc';
type Props = {
relaySettings: RelaySettingsRedux,
diff --git a/gui/packages/desktop/src/renderer/components/Support.js b/gui/packages/desktop/src/renderer/components/Support.js
index 0398976589..62d94f4127 100644
--- a/gui/packages/desktop/src/renderer/components/Support.js
+++ b/gui/packages/desktop/src/renderer/components/Support.js
@@ -16,7 +16,7 @@ import { Layout, Container } from './Layout';
import { NavigationBar, BackBarItem } from './NavigationBar';
import styles from './SupportStyles';
-import type { AccountToken } from '../lib/daemon-rpc-proxy';
+import type { AccountToken } from '../../main/daemon-rpc';
import type { SupportReportForm } from '../redux/support/actions';
type SupportState = {
email: string,
diff --git a/gui/packages/desktop/src/renderer/components/TunnelControl.js b/gui/packages/desktop/src/renderer/components/TunnelControl.js
index 6590a17818..7ec3f72687 100644
--- a/gui/packages/desktop/src/renderer/components/TunnelControl.js
+++ b/gui/packages/desktop/src/renderer/components/TunnelControl.js
@@ -6,7 +6,7 @@ import { ConnectionInfo, SecuredLabel, SecuredDisplayStyle, ImageView } from '@m
import * as AppButton from './AppButton';
import { colors } from '../../config';
-import type { TunnelStateTransition, RelayProtocol } from '../lib/daemon-rpc-proxy';
+import type { TunnelStateTransition, RelayProtocol } from '../../main/daemon-rpc';
export type RelayInAddress = {
ip: string,
diff --git a/gui/packages/desktop/src/renderer/lib/daemon-rpc-proxy.js b/gui/packages/desktop/src/renderer/lib/daemon-rpc-proxy.js
deleted file mode 100644
index 45a4abe89c..0000000000
--- a/gui/packages/desktop/src/renderer/lib/daemon-rpc-proxy.js
+++ /dev/null
@@ -1,242 +0,0 @@
-// @flow
-
-import { ipcRenderer } from 'electron';
-import log from 'electron-log';
-import uuid from 'uuid';
-
-// Re-export types
-export type {
- AccountToken,
- AccountData,
- AppVersionInfo,
- Settings,
- TunnelStateTransition,
- RelayList,
- RelaySettingsUpdate,
- RelaySettings,
- RelaySettingsCustom,
- RelaySettingsNormalUpdate,
- RelayLocation,
- RelayProtocol,
- Ip,
- Location,
- TunnelEndpoint,
- BlockReason,
- AfterDisconnect,
- ResponseParseError,
- TunnelState,
- DaemonRpcProtocol,
-} from '../../main/daemon-rpc';
-
-export { ConnectionObserver, SubscriptionListener } from '../../main/daemon-rpc';
-
-import type {
- AccountToken,
- AccountData,
- AppVersionInfo,
- DaemonRpcProtocol,
- RelaySettingsUpdate,
- RelayList,
- TunnelStateTransition,
- Settings,
- Location,
-} from '../../main/daemon-rpc';
-
-import { ConnectionObserver, SubscriptionListener } from '../../main/daemon-rpc';
-
-import {
- NoCreditError,
- NoInternetError,
- NoDaemonError,
- InvalidAccountError,
- CommunicationError,
-} from '../../main/errors';
-
-import { TimeOutError, RemoteError } from '../../main/jsonrpc-client';
-
-type ErrorInfo = {
- className: string,
- data: Object,
-};
-
-export default class DaemonRpcProxy implements DaemonRpcProtocol {
- _connectionObservers: Array<ConnectionObserver> = [];
- _stateListeners: Array<SubscriptionListener<TunnelStateTransition>> = [];
- _settingsListeners: Array<SubscriptionListener<Settings>> = [];
-
- constructor() {
- ipcRenderer.on('connected-daemon', () => {
- for (const observer of this._connectionObservers) {
- observer._onOpen();
- }
- });
-
- ipcRenderer.on('disconnected-daemon', (_event: Event, error: ?Error) => {
- for (const observer of this._connectionObservers) {
- observer._onClose(error);
- }
- });
-
- ipcRenderer.on('state-changed', (_event: Event, newState: TunnelStateTransition) => {
- for (const listener of this._stateListeners) {
- listener._onEvent(newState);
- }
- });
-
- ipcRenderer.on('settings-changed', (_event: Event, newSettings: Settings) => {
- for (const listener of this._settingsListeners) {
- listener._onEvent(newSettings);
- }
- });
- }
-
- connect(_connectionInfo: { path: string }): void {
- throw new Error('Do not call this method.');
- }
-
- disconnect(): void {
- throw new Error('Do not call this method.');
- }
-
- getAccountData(accountToken: AccountToken): Promise<AccountData> {
- return this._sendMessage('getAccountData', accountToken);
- }
-
- getRelayLocations(): Promise<RelayList> {
- return this._sendMessage('getRelayLocations');
- }
-
- setAccount(_accountToken: ?AccountToken): Promise<void> {
- throw new Error('Do not use this method');
- }
-
- updateRelaySettings(update: RelaySettingsUpdate): Promise<void> {
- return this._sendMessage('updateRelaySettings', update);
- }
-
- setAllowLan(allowLan: boolean): Promise<void> {
- return this._sendMessage('setAllowLan', allowLan);
- }
-
- setEnableIpv6(enableIpv6: boolean): Promise<void> {
- return this._sendMessage('setEnableIpv6', enableIpv6);
- }
-
- setBlockWhenDisconnected(blockWhenDisconnected: boolean): Promise<void> {
- return this._sendMessage('setBlockWhenDisconnected', blockWhenDisconnected);
- }
-
- setOpenVpnMssfix(mssfix: ?number): Promise<void> {
- return this._sendMessage('setOpenVpnMssfix', mssfix);
- }
-
- setAutoConnect(_autoConnect: boolean): Promise<void> {
- throw new Error('Do not call this method.');
- }
-
- connectTunnel(): Promise<void> {
- return this._sendMessage('connectTunnel');
- }
-
- disconnectTunnel(): Promise<void> {
- return this._sendMessage('disconnectTunnel');
- }
-
- getLocation(): Promise<Location> {
- return this._sendMessage('getLocation');
- }
-
- getState(): Promise<TunnelStateTransition> {
- return this._sendMessage('getState');
- }
-
- getSettings(): Promise<Settings> {
- return this._sendMessage('getSettings');
- }
-
- subscribeStateListener(listener: SubscriptionListener<TunnelStateTransition>): Promise<void> {
- this._stateListeners.push(listener);
- return Promise.resolve();
- }
-
- subscribeSettingsListener(listener: SubscriptionListener<Settings>): Promise<void> {
- this._settingsListeners.push(listener);
- return Promise.resolve();
- }
-
- addConnectionObserver(observer: ConnectionObserver): void {
- this._connectionObservers.push(observer);
- }
-
- removeConnectionObserver(observer: ConnectionObserver): void {
- const index = this._connectionObservers.indexOf(observer);
- if (index !== -1) {
- this._connectionObservers.splice(index, 1);
- }
- }
-
- getAccountHistory(): Promise<Array<AccountToken>> {
- throw new Error('Do not use this method');
- }
-
- removeAccountFromHistory(_accountToken: AccountToken): Promise<void> {
- throw new Error('Do not use this method');
- }
-
- getCurrentVersion(): Promise<string> {
- return this._sendMessage('getCurrentVersion');
- }
-
- getVersionInfo(): Promise<AppVersionInfo> {
- return this._sendMessage('getVersionInfo');
- }
-
- _sendMessage<T, R>(method: string, payload: ?T): Promise<R> {
- const promise: Promise<R> = new Promise((resolve, reject) => {
- const id = uuid.v4();
-
- ipcRenderer.once(
- `daemon-rpc-reply-${id}`,
- (_event: Event, result: R, errorInfo: ?ErrorInfo) => {
- if (errorInfo) {
- const error = this._deserializeError(errorInfo.className, errorInfo.data);
-
- log.debug(
- `Got daemon-rpc-reply-${id} ${method} with error: ${JSON.stringify(errorInfo)}`,
- );
-
- reject(error);
- } else {
- log.debug(`Got daemon-rpc-reply-${id} ${method} with success`);
- resolve(result);
- }
- },
- );
-
- ipcRenderer.send(`daemon-rpc-call`, id, method, payload);
- });
-
- return promise;
- }
-
- _deserializeError(className: string, data: Object): Error {
- switch (className) {
- case 'RemoteError':
- return new RemoteError(data.code, data.details);
- case 'TimeOutError':
- return new TimeOutError(data._jsonRpcMessage);
- case 'NoCreditError':
- return new NoCreditError();
- case 'NoInternetError':
- return new NoInternetError();
- case 'NoDaemonError':
- return new NoDaemonError();
- case 'InvalidAccountError':
- return new InvalidAccountError();
- case 'CommunicationError':
- return new CommunicationError();
- default:
- return new Error(data.message || '');
- }
- }
-}
diff --git a/gui/packages/desktop/src/renderer/lib/relay-settings-builder.js b/gui/packages/desktop/src/renderer/lib/relay-settings-builder.js
index ba85fe26ed..50175811fa 100644
--- a/gui/packages/desktop/src/renderer/lib/relay-settings-builder.js
+++ b/gui/packages/desktop/src/renderer/lib/relay-settings-builder.js
@@ -6,7 +6,7 @@ import type {
RelaySettingsUpdate,
RelaySettingsNormalUpdate,
RelaySettingsCustom,
-} from './daemon-rpc-proxy';
+} from '../../main/daemon-rpc';
type LocationBuilder<Self> = {
country: (country: string) => Self,
diff --git a/gui/packages/desktop/src/renderer/redux/account/actions.js b/gui/packages/desktop/src/renderer/redux/account/actions.js
index a089cb3705..b69679e5c5 100644
--- a/gui/packages/desktop/src/renderer/redux/account/actions.js
+++ b/gui/packages/desktop/src/renderer/redux/account/actions.js
@@ -1,6 +1,6 @@
// @flow
-import type { AccountToken } from '../../lib/daemon-rpc-proxy';
+import type { AccountToken } from '../../../main/daemon-rpc';
type StartLoginAction = {
type: 'START_LOGIN',
diff --git a/gui/packages/desktop/src/renderer/redux/account/reducers.js b/gui/packages/desktop/src/renderer/redux/account/reducers.js
index cac021128f..c5a16217e2 100644
--- a/gui/packages/desktop/src/renderer/redux/account/reducers.js
+++ b/gui/packages/desktop/src/renderer/redux/account/reducers.js
@@ -1,7 +1,7 @@
// @flow
import type { ReduxAction } from '../store';
-import type { AccountToken } from '../../lib/daemon-rpc-proxy';
+import type { AccountToken } from '../../../main/daemon-rpc';
export type LoginState = 'none' | 'logging in' | 'failed' | 'ok';
export type AccountReduxState = {
diff --git a/gui/packages/desktop/src/renderer/redux/connection/actions.js b/gui/packages/desktop/src/renderer/redux/connection/actions.js
index 54ae56746a..2dbd304014 100644
--- a/gui/packages/desktop/src/renderer/redux/connection/actions.js
+++ b/gui/packages/desktop/src/renderer/redux/connection/actions.js
@@ -1,6 +1,6 @@
// @flow
-import type { AfterDisconnect, BlockReason, TunnelEndpoint } from '../../lib/daemon-rpc-proxy';
+import type { AfterDisconnect, BlockReason, TunnelEndpoint } from '../../../main/daemon-rpc';
type ConnectingAction = {
type: 'CONNECTING',
diff --git a/gui/packages/desktop/src/renderer/redux/connection/reducers.js b/gui/packages/desktop/src/renderer/redux/connection/reducers.js
index dac8d63209..00a33ca0d0 100644
--- a/gui/packages/desktop/src/renderer/redux/connection/reducers.js
+++ b/gui/packages/desktop/src/renderer/redux/connection/reducers.js
@@ -1,7 +1,7 @@
// @flow
import type { ReduxAction } from '../store';
-import type { TunnelStateTransition, Ip } from '../../lib/daemon-rpc-proxy';
+import type { TunnelStateTransition, Ip } from '../../../main/daemon-rpc';
export type ConnectionReduxState = {
status: TunnelStateTransition,
diff --git a/gui/packages/desktop/src/renderer/redux/settings/reducers.js b/gui/packages/desktop/src/renderer/redux/settings/reducers.js
index b92a72d7d0..8de27e9f32 100644
--- a/gui/packages/desktop/src/renderer/redux/settings/reducers.js
+++ b/gui/packages/desktop/src/renderer/redux/settings/reducers.js
@@ -1,7 +1,7 @@
// @flow
import type { ReduxAction } from '../store';
-import type { RelayProtocol, RelayLocation } from '../../lib/daemon-rpc-proxy';
+import type { RelayProtocol, RelayLocation } from '../../../main/daemon-rpc';
import type { GuiSettingsState } from '../../../shared/gui-settings-state';
export type RelaySettingsRedux =
diff --git a/gui/packages/desktop/src/renderer/redux/version/actions.js b/gui/packages/desktop/src/renderer/redux/version/actions.js
index a3e07502d4..8ab4b08757 100644
--- a/gui/packages/desktop/src/renderer/redux/version/actions.js
+++ b/gui/packages/desktop/src/renderer/redux/version/actions.js
@@ -1,6 +1,6 @@
// @flow
-import type { AppVersionInfo } from '../../lib/daemon-rpc-proxy';
+import type { AppVersionInfo } from '../../../main/daemon-rpc';
type UpdateLatestActionPayload = {
upToDate: boolean,
diff --git a/gui/packages/desktop/src/shared/ipc-event-channel.js b/gui/packages/desktop/src/shared/ipc-event-channel.js
index 273a543790..e2484b22b5 100644
--- a/gui/packages/desktop/src/shared/ipc-event-channel.js
+++ b/gui/packages/desktop/src/shared/ipc-event-channel.js
@@ -9,8 +9,10 @@ import type { GuiSettingsState } from './gui-settings-state';
import type { AppUpgradeInfo, CurrentAppVersionInfo } from '../main/index';
import type {
AccountToken,
+ AccountData,
Location,
RelayList,
+ RelaySettingsUpdate,
Settings,
TunnelStateTransition,
} from '../main/daemon-rpc';
@@ -35,26 +37,54 @@ interface Receiver<T> {
listen<T>(fn: (T) => void): void;
}
+interface TunnelMethods {
+ connect(): Promise<void>;
+ disconnect(): Promise<void>;
+}
+
+interface TunnelHandlers {
+ handleConnect(fn: () => Promise<void>): void;
+ handleDisconnect(fn: () => Promise<void>): void;
+}
+
+interface SettingsMethods {
+ setAllowLan(boolean): Promise<void>;
+ setEnableIpv6(boolean): Promise<void>;
+ setBlockWhenDisconnected(boolean): Promise<void>;
+ setOpenVpnMssfix(?number): Promise<void>;
+ updateRelaySettings(update: RelaySettingsUpdate): Promise<void>;
+}
+
+interface SettingsHandlers {
+ handleAllowLan(fn: (boolean) => Promise<void>): void;
+ handleEnableIpv6(fn: (boolean) => Promise<void>): void;
+ handleBlockWhenDisconnected(fn: (boolean) => Promise<void>): void;
+ handleOpenVpnMssfix(fn: (?number) => Promise<void>): void;
+ handleUpdateRelaySettings(fn: (RelaySettingsUpdate) => Promise<void>): void;
+}
+
interface GuiSettingsMethods {
- setAutoConnect: (boolean) => void;
- setStartMinimized: (boolean) => void;
- setMonochromaticIcon: (boolean) => void;
+ setAutoConnect(boolean): void;
+ setStartMinimized(boolean): void;
+ setMonochromaticIcon(boolean): void;
}
interface GuiSettingsHandlers {
- handleAutoConnect: ((boolean) => void) => void;
- handleStartMinimized: ((boolean) => void) => void;
- handleMonochromaticIcon: ((boolean) => void) => void;
+ handleAutoConnect((boolean) => void): void;
+ handleStartMinimized((boolean) => void): void;
+ handleMonochromaticIcon((boolean) => void): void;
}
interface AccountHandlers {
handleSet(fn: (AccountToken) => Promise<void>): void;
handleUnset(fn: () => Promise<void>): void;
+ handleGetData(fn: (AccountToken) => Promise<AccountData>): void;
}
interface AccountMethods {
set(token: AccountToken): Promise<void>;
unset(): Promise<void>;
+ getData(token: AccountToken): Promise<AccountData>;
}
interface AccountHistoryHandlers {
@@ -73,15 +103,25 @@ interface AutoStartMethods {
}
interface AutoStartHandlers {
- handleSet: ((boolean) => Promise<void>) => void;
+ handleSet((boolean) => Promise<void>): void;
}
/// Events names
const DAEMON_CONNECTED = 'daemon-connected';
const DAEMON_DISCONNECTED = 'daemon-disconnected';
+
const TUNNEL_STATE_CHANGED = 'tunnel-state-changed';
+const CONNECT_TUNNEL = 'connect-tunnel';
+const DISCONNECT_TUNNEL = 'disconnect-tunnel';
+
const SETTINGS_CHANGED = 'settings-changed';
+const SET_ALLOW_LAN = 'set-allow-lan';
+const SET_ENABLE_IPV6 = 'set-enable-ipv6';
+const SET_BLOCK_WHEN_DISCONNECTED = 'set-block-when-disconnected';
+const SET_OPENVPN_MSSFIX = 'set-openvpn-mssfix';
+const UPDATE_RELAY_SETTINGS = 'update-relay-settings';
+
const LOCATION_CHANGED = 'location-changed';
const RELAYS_CHANGED = 'relays-changed';
const CURRENT_VERSION_CHANGED = 'current-version-changed';
@@ -99,6 +139,7 @@ const REMOVE_ACCOUNT_HISTORY_ITEM = 'remove-account-history-item';
const SET_ACCOUNT = 'set-account';
const UNSET_ACCOUNT = 'unset-account';
+const GET_ACCOUNT_DATA = 'get-account-data';
const AUTO_START_CHANGED = 'auto-start-changed';
const SET_AUTO_START = 'set-auto-start';
@@ -124,12 +165,19 @@ export class IpcRendererEventChannel {
listen: listen(DAEMON_DISCONNECTED),
};
- static tunnelState: Receiver<TunnelStateTransition> = {
+ static tunnel: Receiver<TunnelStateTransition> & TunnelMethods = {
listen: listen(TUNNEL_STATE_CHANGED),
+ connect: requestSender(CONNECT_TUNNEL),
+ disconnect: requestSender(DISCONNECT_TUNNEL),
};
- static settings: Receiver<Settings> = {
+ static settings: Receiver<Settings> & SettingsMethods = {
listen: listen(SETTINGS_CHANGED),
+ setAllowLan: requestSender(SET_ALLOW_LAN),
+ setEnableIpv6: requestSender(SET_ENABLE_IPV6),
+ setBlockWhenDisconnected: requestSender(SET_BLOCK_WHEN_DISCONNECTED),
+ setOpenVpnMssfix: requestSender(SET_OPENVPN_MSSFIX),
+ updateRelaySettings: requestSender(UPDATE_RELAY_SETTINGS),
};
static location: Receiver<Location> = {
@@ -163,6 +211,7 @@ export class IpcRendererEventChannel {
static account: AccountMethods = {
set: requestSender(SET_ACCOUNT),
unset: requestSender(UNSET_ACCOUNT),
+ getData: requestSender(GET_ACCOUNT_DATA),
};
static accountHistory: AccountHistoryMethods = {
@@ -188,16 +237,23 @@ export class IpcMainEventChannel {
notify: sender(DAEMON_DISCONNECTED),
};
- static tunnelState: Sender<TunnelStateTransition> = {
+ static tunnel: Sender<TunnelStateTransition> & TunnelHandlers = {
notify: sender(TUNNEL_STATE_CHANGED),
+ handleConnect: requestHandler(CONNECT_TUNNEL),
+ handleDisconnect: requestHandler(DISCONNECT_TUNNEL),
};
static location: Sender<Location> = {
notify: sender(LOCATION_CHANGED),
};
- static settings: Sender<Settings> = {
+ static settings: Sender<Settings> & SettingsHandlers = {
notify: sender(SETTINGS_CHANGED),
+ handleAllowLan: requestHandler(SET_ALLOW_LAN),
+ handleEnableIpv6: requestHandler(SET_ENABLE_IPV6),
+ handleBlockWhenDisconnected: requestHandler(SET_BLOCK_WHEN_DISCONNECTED),
+ handleOpenVpnMssfix: requestHandler(SET_OPENVPN_MSSFIX),
+ handleUpdateRelaySettings: requestHandler(UPDATE_RELAY_SETTINGS),
};
static relays: Sender<RelayList> = {
@@ -227,6 +283,7 @@ export class IpcMainEventChannel {
static account: AccountHandlers = {
handleSet: requestHandler(SET_ACCOUNT),
handleUnset: requestHandler(UNSET_ACCOUNT),
+ handleGetData: requestHandler(GET_ACCOUNT_DATA),
};
static accountHistory: AccountHistoryHandlers = {
diff --git a/gui/packages/desktop/test/account-data-cache.spec.js b/gui/packages/desktop/test/account-data-cache.spec.js
index 17770fac77..105466a1a6 100644
--- a/gui/packages/desktop/test/account-data-cache.spec.js
+++ b/gui/packages/desktop/test/account-data-cache.spec.js
@@ -1,7 +1,7 @@
// @flow
import { AccountDataCache } from '../src/renderer/app';
-import type { AccountData } from '../src/renderer/lib/daemon-rpc-proxy';
+import type { AccountData } from '../src/main/daemon-rpc';
describe('AccountData cache', () => {
const dummyAccountToken = '9876543210';