mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-12 13:33:19 +00:00
Plug-ins: only an approval records a grant, and installs need one
registry::grant takes a GrantToken, which the engine makes after a person's approval and when it loads grants.json. registry::install, install_bytes and folder loads refuse a module that lists permissions no recorded grant gives this very module (Error::NeedsApproval), and leave the plug-in under its id and the revision as they were. A folder load's approve callback only narrows what installs. A module without permissions, or with an empty list, installs as before. A folder load in a session with a plug-in store records the store's grant for each module it approves, so those modules still load. docs/plugins.md says what the approval does not protect against: native code linked into the app, and another program running as the same user, which can edit the Plug-ins folder and its unsigned grants.json.
This commit is contained in:
@@ -226,6 +226,13 @@ capability model proposed for PhotoCraft plug-ins
|
||||
`VECTORCRAFT_NO_PREFS` set there is no store, and a `grant` accepted under the flag lasts for that session only.
|
||||
With `--allow-plugin-grants`, pass `hash` set to the `plugin.inspect` entry's `hash` so that the module installed is
|
||||
the one the user saw.
|
||||
- The approval protects against plug-ins and automation clients (MCP, scripts and CLI requests): none of them can
|
||||
approve a module's permissions. VectorCraft's own code records a grant only after that approval and when it loads
|
||||
`grants.json`, and installs a module that lists permissions only under a grant recorded for this very module,
|
||||
also when it loads the Additional Plug-ins Folder. The approval does not protect against native code linked into
|
||||
VectorCraft or against another program running as the same user, which can change the files in the `Plug-ins`
|
||||
folder. `grants.json` is not signed, so such a program can add a grant to it. `--allow-plugin-grants` is a choice
|
||||
the person starting a headless session makes.
|
||||
- **Replacing asks first.** When the file is another module than the plug-in installed with its id, or, with none
|
||||
installed, its id has settings and a cache in the `Plug-ins` folder, Install Plug-in… and File › Open show its id
|
||||
and SHA-256 and ask whether to install it in place of that plug-in, which gives it the settings and cache kept for
|
||||
|
||||
Reference in New Issue
Block a user