summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2018-09-12 12:12:26 +0300
committerAndrej Mihajlov <and@mullvad.net>2018-09-13 12:45:33 +0300
commit2e1ea49208946715b7e04693142ce102e9e36355 (patch)
tree63907eff523a2eedba7ef3a95443f940125c20b8
parent6555f9baacb4df4696699c1d7e0ac19402112436 (diff)
downloadmullvadvpn-2e1ea49208946715b7e04693142ce102e9e36355.tar.xz
mullvadvpn-2e1ea49208946715b7e04693142ce102e9e36355.zip
Add underscore <=> camelCase conversion for RPC schemas
-rw-r--r--gui/packages/desktop/src/renderer/app.js8
-rw-r--r--gui/packages/desktop/src/renderer/containers/AdvancedSettingsPage.js4
-rw-r--r--gui/packages/desktop/src/renderer/containers/ConnectPage.js2
-rw-r--r--gui/packages/desktop/src/renderer/lib/daemon-rpc.js55
-rw-r--r--gui/packages/desktop/src/renderer/lib/relay-settings-builder.js2
-rw-r--r--gui/packages/desktop/src/renderer/redux/settings/reducers.js2
-rw-r--r--gui/packages/desktop/test/relay-settings-builder.spec.js2
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: {