mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-29 14:45:24 +00:00
fix(sync): let a linked desktop enable mirrored plugins it does not trust on its own (#1632)
* fix(sync): let a linked desktop enable mirrored plugins it does not trust on its own * fix(sync): switch off an untrusted mirrored plugin when the server updates it * fix: require local consent for mirrored plugin activation * docs: describe consent fields on the plugin state endpoint
This commit is contained in:
1 parent
9b0af07607
commit
b3b08b4ff2
17 files changed
+515
-36
No files matched your search
@@ -715,6 +715,28 @@ export async function planStateChange(
|
||||
};
|
||||
}
|
||||
|
||||
/** A local admin consents to the exact mirrored version before granting it access. */
|
||||
export function enablePluginWithConsent(
|
||||
pluginId: string,
|
||||
options: { version?: string; capabilities?: string[]; userId: string },
|
||||
): Promise<StateChangePlan & { state: string }> {
|
||||
return serialized(async () => {
|
||||
const plugin = getPluginRuntime().loader.get(pluginId);
|
||||
if (!plugin)
|
||||
throw new PluginManageError("Plugin not found", 404, "NOT_FOUND");
|
||||
if (options.version !== plugin.manifest.version) {
|
||||
throw new PluginManageError(
|
||||
"The plugin version changed; review it again",
|
||||
409,
|
||||
"CONSENT_MISMATCH",
|
||||
);
|
||||
}
|
||||
assertConsent(options.capabilities, plugin.manifest.capabilities);
|
||||
await grantDeclared(plugin, options.userId);
|
||||
return setPluginStateUnlocked(pluginId, true);
|
||||
});
|
||||
}
|
||||
|
||||
export function setPluginState(
|
||||
pluginId: string,
|
||||
enabled: boolean,
|
||||
|
||||
Reference in new issue
Block a user