diff options
author | Stefan Malzner <stefan@adlk.io> | 2018-11-27 18:06:14 +0100 |
---|---|---|
committer | Stefan Malzner <stefan@adlk.io> | 2018-11-27 18:06:14 +0100 |
commit | 62972747866740dae84fc7b519fcedd731572329 (patch) | |
tree | 3a74610caa47350ff6b3cc07482f8472f18c1764 /src/features/serviceProxy | |
parent | Fix listening key (diff) | |
download | ferdium-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.js | 56 |
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 @@ | |||
1 | import { autorun, reaction, observable } from 'mobx'; | ||
2 | import { remote } from 'electron'; | ||
3 | |||
4 | const { session } = remote; | ||
5 | |||
6 | const debug = require('debug')('Franz:feature:serviceProxy'); | ||
7 | |||
8 | const DEFAULT_ENABLED = false; | ||
9 | const DEFAULT_IS_PREMIUM = true; | ||
10 | |||
11 | export const config = observable({ | ||
12 | isEnabled: DEFAULT_ENABLED, | ||
13 | isPremium: DEFAULT_IS_PREMIUM, | ||
14 | }); | ||
15 | |||
16 | export 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 | |||