diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2018-09-12 12:12:26 +0300 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2018-09-13 12:45:33 +0300 |
| commit | 2e1ea49208946715b7e04693142ce102e9e36355 (patch) | |
| tree | 63907eff523a2eedba7ef3a95443f940125c20b8 /gui | |
| parent | 6555f9baacb4df4696699c1d7e0ac19402112436 (diff) | |
| download | mullvadvpn-2e1ea49208946715b7e04693142ce102e9e36355.tar.xz mullvadvpn-2e1ea49208946715b7e04693142ce102e9e36355.zip | |
Add underscore <=> camelCase conversion for RPC schemas
Diffstat (limited to 'gui')
7 files changed, 44 insertions, 31 deletions
diff --git a/gui/packages/desktop/src/renderer/app.js b/gui/packages/desktop/src/renderer/app.js index 66154bcc9d..76262d2cdb 100644 --- a/gui/packages/desktop/src/renderer/app.js +++ b/gui/packages/desktop/src/renderer/app.js @@ -280,17 +280,17 @@ export default class AppRenderer { actions.settings.updateRelay({ normal: payload, }); - } else if (relaySettings.custom_tunnel_endpoint) { - const custom_tunnel_endpoint = relaySettings.custom_tunnel_endpoint; + } else if (relaySettings.customTunnelEndpoint) { + const customTunnelEndpoint = relaySettings.customTunnelEndpoint; const { host, tunnel: { openvpn: { port, protocol }, }, - } = custom_tunnel_endpoint; + } = customTunnelEndpoint; actions.settings.updateRelay({ - custom_tunnel_endpoint: { + customTunnelEndpoint: { host, port, protocol, diff --git a/gui/packages/desktop/src/renderer/containers/AdvancedSettingsPage.js b/gui/packages/desktop/src/renderer/containers/AdvancedSettingsPage.js index a5f0c4aaea..623e985cda 100644 --- a/gui/packages/desktop/src/renderer/containers/AdvancedSettingsPage.js +++ b/gui/packages/desktop/src/renderer/containers/AdvancedSettingsPage.js @@ -24,8 +24,8 @@ const mapRelaySettingsToProtocolAndPort = (relaySettings: RelaySettingsRedux) => protocol: protocol === 'any' ? 'Automatic' : protocol, port: port === 'any' ? 'Automatic' : port, }; - } else if (relaySettings.custom_tunnel_endpoint) { - const { protocol, port } = relaySettings.custom_tunnel_endpoint; + } else if (relaySettings.customTunnelEndpoint) { + const { protocol, port } = relaySettings.customTunnelEndpoint; return { protocol, port }; } else { throw new Error('Unknown type of relay settings.'); diff --git a/gui/packages/desktop/src/renderer/containers/ConnectPage.js b/gui/packages/desktop/src/renderer/containers/ConnectPage.js index 828d92959e..5edb4447cc 100644 --- a/gui/packages/desktop/src/renderer/containers/ConnectPage.js +++ b/gui/packages/desktop/src/renderer/containers/ConnectPage.js @@ -48,7 +48,7 @@ function getRelayName( } return 'Unknown'; - } else if (relaySettings.custom_tunnel_endpoint) { + } else if (relaySettings.customTunnelEndpoint) { return 'Custom'; } else { throw new Error('Unsupported relay settings.'); diff --git a/gui/packages/desktop/src/renderer/lib/daemon-rpc.js b/gui/packages/desktop/src/renderer/lib/daemon-rpc.js index 2a2287ac38..2e976938d2 100644 --- a/gui/packages/desktop/src/renderer/lib/daemon-rpc.js +++ b/gui/packages/desktop/src/renderer/lib/daemon-rpc.js @@ -96,7 +96,7 @@ export type RelaySettings = normal: RelaySettingsNormal<TunnelConstraints<OpenVpnConstraints>>, |} | {| - custom_tunnel_endpoint: RelaySettingsCustom, + customTunnelEndpoint: RelaySettingsCustom, |}; // types describing the partial update of RelaySettings @@ -108,7 +108,7 @@ export type RelaySettingsUpdate = normal: RelaySettingsNormalUpdate, |} | {| - custom_tunnel_endpoint: RelaySettingsCustom, + customTunnelEndpoint: RelaySettingsCustom, |}; const constraint = <T>(constraintValue: SchemaNode<T>) => { @@ -179,9 +179,9 @@ export type RelayListCity = { export type RelayListHostname = { hostname: string, - ipv4_addr_in: string, - ipv4_addr_exit: string, - include_in_country: boolean, + ipv4AddrIn: string, + ipv4AddrExit: string, + includeInCountry: boolean, weight: number, }; @@ -213,6 +213,9 @@ const RelayListSchema = object({ export type TunnelOptions = { enableIpv6: boolean, + openvpn: { + mssfix: ?number, + }, }; const TunnelOptionsSchema = object({ @@ -404,7 +407,7 @@ export class DaemonRpc implements DaemonRpcProtocol { async getRelayLocations(): Promise<RelayList> { const response = await this._transport.send('get_relay_locations'); try { - return validate(RelayListSchema, response); + return camelCaseObjectKeys(validate(RelayListSchema, response)); } catch (error) { throw new ResponseParseError('Invalid response from get_relay_locations', error); } @@ -424,13 +427,13 @@ export class DaemonRpc implements DaemonRpcProtocol { } async updateRelaySettings(relaySettings: RelaySettingsUpdate): Promise<void> { - await this._transport.send('update_relay_settings', [relaySettings]); + await this._transport.send('update_relay_settings', [underscoreObjectKeys(relaySettings)]); } async getRelaySettings(): Promise<RelaySettings> { const response = await this._transport.send('get_relay_settings'); try { - const validatedObject = validate(RelaySettingsSchema, response); + const validatedObject = camelCaseObjectKeys(validate(RelaySettingsSchema, response)); /* $FlowFixMe: There is no way to express constraints with string literals, i.e: @@ -469,11 +472,7 @@ export class DaemonRpc implements DaemonRpcProtocol { async getTunnelOptions(): Promise<TunnelOptions> { const response = await this._transport.send('get_tunnel_options'); try { - const validatedObject = validate(TunnelOptionsSchema, response); - - return { - enableIpv6: validatedObject.enable_ipv6, - }; + return camelCaseObjectKeys(validate(TunnelOptionsSchema, response)); } catch (error) { throw new ResponseParseError('Invalid response from get_tunnel_options', error); } @@ -530,7 +529,7 @@ export class DaemonRpc implements DaemonRpcProtocol { subscribeStateListener(listener: SubscriptionListener<TunnelStateTransition>): Promise<void> { return this._transport.subscribe('new_state', (payload) => { try { - const newState = validate(TunnelStateTransitionSchema, payload); + const newState = camelCaseObjectKeys(validate(TunnelStateTransitionSchema, payload)); listener._onEvent(newState); } catch (error) { listener._onError(new ResponseParseError('Invalid payload from new_state', error)); @@ -592,18 +591,32 @@ function underscoreToCamelCase(str: string): string { return str.replace(/_([a-z])/gi, (matches) => matches[1].toUpperCase()); } +function camelCaseToUnderscore(str: string): string { + return str + .replace(/[a-z0-9][A-Z]/g, (matches) => `${matches[0]}_${matches[1].toLowerCase()}`) + .toLowerCase(); +} + function camelCaseObjectKeys(object: Object) { - for (const underscoreKey of Object.keys(object)) { - const camelCaseKey = underscoreToCamelCase(underscoreKey); - const sourceValue = object[underscoreKey]; + return transformObjectKeys(object, underscoreToCamelCase); +} + +function underscoreObjectKeys(object: Object) { + return transformObjectKeys(object, camelCaseToUnderscore); +} + +function transformObjectKeys(object: Object, keyTransformer: (string) => string) { + for (const sourceKey of Object.keys(object)) { + const targetKey = keyTransformer(sourceKey); + const sourceValue = object[sourceKey]; - object[camelCaseKey] = + object[targetKey] = sourceValue !== null && typeof sourceValue === 'object' - ? camelCaseObjectKeys(sourceValue) + ? transformObjectKeys(sourceValue, keyTransformer) : sourceValue; - if (camelCaseKey !== underscoreKey) { - delete object[underscoreKey]; + if (sourceKey !== targetKey) { + delete object[sourceKey]; } } return object; 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 5065a485f6..dc865472d5 100644 --- a/gui/packages/desktop/src/renderer/lib/relay-settings-builder.js +++ b/gui/packages/desktop/src/renderer/lib/relay-settings-builder.js @@ -161,7 +161,7 @@ class CustomRelaySettingsBuilder { build(): RelaySettingsUpdate { return { - custom_tunnel_endpoint: this._payload, + customTunnelEndpoint: this._payload, }; } diff --git a/gui/packages/desktop/src/renderer/redux/settings/reducers.js b/gui/packages/desktop/src/renderer/redux/settings/reducers.js index 096dede5c2..e9b2ff61b2 100644 --- a/gui/packages/desktop/src/renderer/redux/settings/reducers.js +++ b/gui/packages/desktop/src/renderer/redux/settings/reducers.js @@ -12,7 +12,7 @@ export type RelaySettingsRedux = }, |} | {| - custom_tunnel_endpoint: { + customTunnelEndpoint: { host: string, port: number, protocol: RelayProtocol, diff --git a/gui/packages/desktop/test/relay-settings-builder.spec.js b/gui/packages/desktop/test/relay-settings-builder.spec.js index 3230861e0a..56126adca5 100644 --- a/gui/packages/desktop/test/relay-settings-builder.spec.js +++ b/gui/packages/desktop/test/relay-settings-builder.spec.js @@ -132,7 +132,7 @@ describe('Relay settings builder', () => { }) .build(), ).to.deep.equal({ - custom_tunnel_endpoint: { + customTunnelEndpoint: { host: 'se2.mullvad.net', tunnel: { openvpn: { |
