Skip to content

Commit 37aded5

Browse files
committed
feat: handle sandboxed plugins
1 parent 7cacfab commit 37aded5

File tree

1 file changed

+47
-12
lines changed

1 file changed

+47
-12
lines changed

src/components/general/extensions/ExtensionLoader.vue

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
<script setup lang="ts">
2-
import { onMounted, ref } from "vue";
2+
import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow";
3+
import { inject, onMounted, ref } from "vue";
34
45
import PermissionsHandler from "@/components/general/extensions/PermissionsHandler.vue";
56
import PageTeleports from "@/components/general/layout/PageTeleports.vue";
7+
import { GlobalStatesContextKey } from "@/constants/application.ts";
68
import ExtensionsManager from "@/lib/extensions-manager";
79
import { log } from "@/lib/logging/scopes/log.ts";
10+
import type { ContextGlobalStatesType } from "@/types/application/global-states.type.ts";
811
import type { ExtensionInfoType } from "@/types/extensions/extension-info.type.ts";
912
import type { ExtensionMetadataType } from "@/types/extensions/extension-metadata.type.ts";
1013
14+
const globalStates = inject<ContextGlobalStatesType>(GlobalStatesContextKey);
15+
1116
const knownExtensions = ref<Array<ExtensionMetadataType>>([]);
1217
const unknownExtensions = ref<Array<ExtensionInfoType>>([]);
1318
@@ -24,13 +29,19 @@ onMounted(async () => {
2429
knownExtensions.value = metadataList;
2530
2631
log.debug("Mapping valid and known extensions metadata");
27-
const metadataMap = new Map<string, boolean | undefined>;
32+
const metadataMap = new Map<string, {
33+
"type" : ExtensionMetadataType["type"];
34+
"enabled": ExtensionMetadataType["enabled"];
35+
} | undefined>;
2836
29-
for (const { id, enabled } of metadataList) {
30-
metadataMap.set(id, enabled);
37+
for (const { id, type, enabled } of metadataList) {
38+
metadataMap.set(id, { type, enabled });
3139
}
3240
33-
const toExecute: Array<ExtensionInfoType> = [];
41+
const toExecute: Record<
42+
ExtensionMetadataType["type"],
43+
Array<ExtensionInfoType>
44+
> = { "sandbox": [], "unrestricted": [] };
3445
3546
log.debug("Validating stored extensions against known extensions map");
3647
for (const extension of extensions) {
@@ -42,29 +53,53 @@ onMounted(async () => {
4253
continue;
4354
}
4455
45-
if (mappedMetadata === true) {
46-
toExecute.push(extension);
56+
if (mappedMetadata.enabled === true) {
57+
toExecute[mappedMetadata.type].push(extension);
4758
}
4859
}
4960
50-
log.debug("Initializing all enabled extensions");
51-
for (const { id, code } of toExecute) {
61+
log.debug("Initializing all enabled unrestricted extensions");
62+
for (const { id, code } of toExecute.unrestricted) {
5263
ExtensionsManager.runInUnrestricted(id, code);
5364
}
5465
55-
const hasSandboxedPlugins = metadataList.find(({ type, enabled }) => (
56-
type === "sandbox" && enabled === true
57-
));
66+
const hasSandboxedPlugins = toExecute.sandbox.length > 0;
5867
5968
if (!hasSandboxedPlugins) {
6069
log.debug("User does not have sandboxed plugins. Environment lockdown is not needed");
6170
71+
if (globalStates?.misc?.showAfterExtensionsInitialization) {
72+
log.debug(
73+
"User has enabled 'show-after-extensions-initialization';",
74+
"Showing the webview now",
75+
);
76+
await getCurrentWebviewWindow().show();
77+
}
78+
6279
return;
6380
}
6481
6582
log.debug("Locking down the JavaScript environment");
6683
ExtensionsManager.lockdownEnvironment();
6784
log.info("The JavaScript environment was locked down");
85+
86+
log.debug("Initializing all enabled sandboxed extensions");
87+
for (const { id, code } of toExecute.sandbox) {
88+
ExtensionsManager.runInSandbox({
89+
id,
90+
code,
91+
// TODO handle permissions
92+
"globals": {},
93+
});
94+
}
95+
96+
if (globalStates?.misc?.showAfterExtensionsInitialization) {
97+
log.debug(
98+
"User has enabled 'show-after-extensions-initialization';",
99+
"Showing the webview now",
100+
);
101+
await getCurrentWebviewWindow().show();
102+
}
68103
});
69104
70105
/*

0 commit comments

Comments
 (0)