aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/serviceProxy
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2018-11-27 18:06:14 +0100
committerLibravatar Stefan Malzner <stefan@adlk.io>2018-11-27 18:06:14 +0100
commit62972747866740dae84fc7b519fcedd731572329 (patch)
tree3a74610caa47350ff6b3cc07482f8472f18c1764 /src/features/serviceProxy
parentFix listening key (diff)
downloadferdium-app-62972747866740dae84fc7b519fcedd731572329.tar.gz
ferdium-app-62972747866740dae84fc7b519fcedd731572329.tar.zst
ferdium-app-62972747866740dae84fc7b519fcedd731572329.zip
feat(App): Add proxy support for services
Diffstat (limited to 'src/features/serviceProxy')
-rw-r--r--src/features/serviceProxy/index.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/features/serviceProxy/index.js b/src/features/serviceProxy/index.js
new file mode 100644
index 000000000..edb1c9367
--- /dev/null
+++ b/src/features/serviceProxy/index.js
@@ -0,0 +1,56 @@
1import { autorun, reaction, observable } from 'mobx';
2import { remote } from 'electron';
3
4const { session } = remote;
5
6const debug = require('debug')('Franz:feature:serviceProxy');
7
8const DEFAULT_ENABLED = false;
9const DEFAULT_IS_PREMIUM = true;
10
11export const config = observable({
12 isEnabled: DEFAULT_ENABLED,
13 isPremium: DEFAULT_IS_PREMIUM,
14});
15
16export default function init(stores) {
17 reaction(
18 () => stores.features.features.isServiceProxyEnabled,
19 (enabled, r) => {
20 if (enabled) {
21 debug('Initializing `serviceProxy` feature');
22
23 // Dispose the reaction to run this only once
24 r.dispose();
25
26 const { isServiceProxyEnabled, isServiceProxyPremiumFeature } = stores.features.features;
27
28 config.isEnabled = isServiceProxyEnabled !== undefined ? isServiceProxyEnabled : DEFAULT_ENABLED;
29 config.isPremium = isServiceProxyPremiumFeature !== undefined ? isServiceProxyPremiumFeature : DEFAULT_IS_PREMIUM;
30
31 autorun(() => {
32 const services = stores.services.all;
33 const isPremiumUser = stores.user.isPremium;
34
35 if (config.isPremium && !isPremiumUser) return;
36
37 services.forEach((service) => {
38 const s = session.fromPartition(`persist:service-${service.id}`);
39 let proxyHost = 'direct://';
40
41 const serviceProxyConfig = stores.settings.proxy[service.id];
42
43 if (serviceProxyConfig && serviceProxyConfig.isEnabled && serviceProxyConfig.host) {
44 proxyHost = serviceProxyConfig.host;
45 }
46
47 s.setProxy({ proxyRules: proxyHost }, (e) => {
48 debug(`Using proxy "${proxyHost}" for "${service.name}" (${service.id})`, e);
49 });
50 });
51 });
52 }
53 },
54 );
55}
56