super-productivity/electron/shared-with-frontend
Johannes Millan eb80bfc707 fix(plugins): harden uploaded nodeExecution consent gate (review follow-ups)
Addresses multi-agent review findings on the uploaded-plugin nodeExecution
consent gate:

- id validation: use an allowlist (/^[A-Za-z0-9][A-Za-z0-9._-]*$/) instead of a
  Unicode denylist, closing bidi/zero-width/homoglyph dialog-anchor spoofing the
  range list missed (U+061C, U+2060, U+3164, fullwidth chars); strip all Unicode
  control+format chars from the self-declared display name/version.
- never upgrade trust: describeVerifiedBuiltInDialog returns null on any imperfect
  on-disk verification (id mismatch, missing permission, unreadable manifest) and
  the grant handler falls back to the unverified dialog, so a colliding uploaded id
  can never borrow a built-in's verified dialog.
- reserve the gitea/linear/trello/azure-devops issue-provider bundled ids (they had
  drifted out of BUNDLED_PLUGIN_IDS, leaving an impersonation gap) and guard the
  BUNDLED_PLUGIN_PATHS subset-of BUNDLED_PLUGIN_IDS invariant with a node test.
- key the revoke and exec IPC handlers through the same assertSafePluginId as the
  grant handler so the "revoke by id on teardown/re-upload" guarantee can't drift.
- clear the session nodeExecution denial when a plugin is uninstalled, so a fresh
  re-upload of the same id is prompted again rather than silently failing closed.
- de-duplicate the PluginNodeExecutionElectronApi interface into a single
  electron/shared-with-frontend model (was copied byte-identically in two files).
2026-06-25 15:50:41 +02:00
..
backup-file-cleanup.util.ts feat(backup): configure automatic backup file limit #6690 (#8094) 2026-06-08 12:09:49 +02:00
get-backup-timestamp.ts fix(backup): move shared timestamp util into electron/ for snap packaging 2026-04-22 16:14:56 +02:00
get-dist-channel.ts feat(electron): suffix version string per distribution target 2026-05-19 16:42:45 +02:00
ipc-events.const.ts refactor(electron): close IMAGE_CACHE_IMPORT trigger gap + review nits 2026-06-09 23:57:45 +02:00
is-external-url-allowed.ts Auto-link raw webexteams URIs (#8560) 2026-06-24 11:07:56 +02:00
keyboard-config.model.ts fix(keyboard): resolve macOS global shortcut layout mismatch (#8378) (#8381) 2026-06-17 12:57:47 +02:00
lazy-set-interval.ts refactor: improve typing 2 2025-08-12 15:27:48 +02:00
local-rest-api.model.ts fix(security): harden Local REST API against DNS rebinding and field injection (#6996) 2026-03-29 11:59:27 +02:00
mime-type-mapping.const.ts fix(security): restrict renderer-supplied filesystem IPC paths (#8223) 2026-06-09 18:16:22 +02:00
plugin-node-execution.model.ts fix(plugins): harden uploaded nodeExecution consent gate (review follow-ups) 2026-06-25 15:50:41 +02:00
simple-store.const.ts refactor(electron): pick-time userData rejection + shared store key 2026-06-10 17:04:07 +02:00