aboutsummaryrefslogtreecommitdiffstats
path: root/packages/main
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-05-26 15:23:11 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-05-27 21:07:44 +0200
commitf712970fa91ab990c9ce959bf0889f68bfad8658 (patch)
tree0358e1e2ab232a6369ba93352fa6c301311a313f /packages/main
parentbuild: fix test rootDir configuration (diff)
downloadsophie-f712970fa91ab990c9ce959bf0889f68bfad8658.tar.gz
sophie-f712970fa91ab990c9ce959bf0889f68bfad8658.tar.zst
sophie-f712970fa91ab990c9ce959bf0889f68bfad8658.zip
refactor: move certificate trust to main process
There is no need to synchronize the list of trusted certificates to the renderer process, so we can get away with storing them in the transient state of the Profile store. Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'packages/main')
-rw-r--r--packages/main/src/stores/Profile.ts43
-rw-r--r--packages/main/src/stores/Service.ts5
2 files changed, 36 insertions, 12 deletions
diff --git a/packages/main/src/stores/Profile.ts b/packages/main/src/stores/Profile.ts
index b4343a0..73f4f0b 100644
--- a/packages/main/src/stores/Profile.ts
+++ b/packages/main/src/stores/Profile.ts
@@ -18,21 +18,40 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import { Certificate, Profile as ProfileBase } from '@sophie/shared'; 21import {
22import { clone, getSnapshot, Instance } from 'mobx-state-tree'; 22 type Certificate,
23 type CertificateSnapshotIn,
24 Profile as ProfileBase,
25} from '@sophie/shared';
26import { getSnapshot, type Instance } from 'mobx-state-tree';
23 27
24import type ProfileConfig from './config/ProfileConfig.js'; 28import type ProfileConfig from './config/ProfileConfig.js';
25 29
26const Profile = ProfileBase.views((self) => ({ 30const Profile = ProfileBase.volatile(
27 get config(): ProfileConfig { 31 (): {
28 const { id, settings } = self; 32 temporarilyTrustedCertificates: string[];
29 return { ...getSnapshot(settings), id }; 33 } => ({
30 }, 34 temporarilyTrustedCertificates: [],
31})).actions((self) => ({ 35 }),
32 temporarilyTrustCertificate(certificate: Certificate): void { 36)
33 self.temporarilyTrustedCertificates.push(clone(certificate)); 37 .views((self) => ({
34 }, 38 get config(): ProfileConfig {
35})); 39 const { id, settings } = self;
40 return { ...getSnapshot(settings), id };
41 },
42 isCertificateTemporarilyTrusted(
43 certificate: CertificateSnapshotIn,
44 ): boolean {
45 return self.temporarilyTrustedCertificates.includes(
46 certificate.fingerprint,
47 );
48 },
49 }))
50 .actions((self) => ({
51 temporarilyTrustCertificate(certificate: Certificate): void {
52 self.temporarilyTrustedCertificates.push(certificate.fingerprint);
53 },
54 }));
36 55
37/* 56/*
38 eslint-disable-next-line @typescript-eslint/no-redeclare -- 57 eslint-disable-next-line @typescript-eslint/no-redeclare --
diff --git a/packages/main/src/stores/Service.ts b/packages/main/src/stores/Service.ts
index 3b7d0b2..d062fe1 100644
--- a/packages/main/src/stores/Service.ts
+++ b/packages/main/src/stores/Service.ts
@@ -67,6 +67,11 @@ const Service = defineServiceModel(ServiceSettings)
67 get shouldBeLoaded(): boolean { 67 get shouldBeLoaded(): boolean {
68 return !self.crashed; 68 return !self.crashed;
69 }, 69 },
70 isCertificateTemporarilyTrusted(
71 certificate: CertificateSnapshotIn,
72 ): boolean {
73 return self.settings.profile.isCertificateTemporarilyTrusted(certificate);
74 },
70 })) 75 }))
71 .views((self) => ({ 76 .views((self) => ({
72 get shouldBeVisible(): boolean { 77 get shouldBeVisible(): boolean {