Commit Graph
2868 Commits
Author SHA1 Message Date
Juan Denis 475add2674 Validate Postgres helper SQL and report user errors
pg_create_database/user and pg_grant/revoke built superuser SQL from
raw names and passwords, unlike the MySQL helpers beside them. A quote
in a password broke CREATE USER, and the create routes ignored that
and returned credentials for a user that did not exist. Validate
identifiers and privilege lists, escape the password, and surface a
failed user as user_error instead of fake credentials.
2026-10-26 00:43:13 -04:00
Juan Denis 84d6cdef4c Block file ops on parents of protected roots
PROTECTED_ROOTS only matched the path the user typed, so copying /opt
copied /opt/serverkit/.env (JWT key, DB creds) somewhere readable,
and deleting or moving /opt took the running panel with it. Refuse
copy, move, rename and delete when a protected root lies inside the
source, and keep symlinks as links when copying a tree.
2026-10-26 00:39:26 -04:00
Juan Denis e1835149a7 Require a verified email before SSO account linking
find_or_create_user attached a new SSO identity to any user with the
same email, but Google and generic OIDC profiles never carried
email_verified. An IdP account showing an unverified copy of the
admin's address signed in as the admin. Carry the claim through and
refuse to link without it; GitHub and SAML already vouch.
2026-10-26 00:37:57 -04:00
Juan Denis 8ab5ab1bfc Stop SSO from auto-creating developer accounts
Auto-provision defaulted on with role developer and no domain filter,
so enabling GitHub login for yourself let any GitHub user sign up and
open remote terminals, while password registration stayed closed.
Default to off and viewer; turning it on stays an explicit choice.
2026-10-26 00:36:57 -04:00
Juan Denis 9b85952b5f Enforce workspace access on every server route
Only three routes checked can_access_server; the rest loaded the server
by id, so a developer outside a workspace could run cron, write files,
install packages or widen agent permissions on its servers, and the
list/overview/docker picker showed every server. Every <server_id>
route now resolves through the workspace check, lists filter in SQL,
and PUT /servers/<id> validates allowed_ips like PUT /allowed-ips.
A sweep test walks the URL map so a new unguarded route fails CI.
2026-10-26 00:35:55 -04:00
Juan Denis 26e2d8c44c Merge main into dev to rejoin the histories [skip version]
main received dev's work through squash merges, so the two branches had
diverged and VERSION conflicted on the promotion PR. The tree is dev's
unchanged; this only records main as an ancestor.
2026-10-26 00:02:23 -04:00
github-actions[bot] 2862becc4f chore: bump version to 1.11.27 [skip ci] 2026-10-26 03:35:00 +00:00
Juan Denis b1260f7ea5 Catch plan citations at commit time
The guard only ran inside a backend pytest shard, so a citation in
SCSS or JSX surfaced minutes after the push. The pre-commit hook now
runs the same test file in --staged mode on every staged app file,
reusing its patterns and PENDING allowlist so the two cannot drift.
2026-10-25 23:27:21 -04:00
Juan Denis 7249d2247b Drop plan citations from the controls styles 2026-10-25 23:27:17 -04:00
Juan Denis d4b8497630 Keep the PR title out of the create-pr body file
Agents opened PRs with --body-file on a file that began with the
title heading, so every PR description repeated its title. The title
now goes to its own .title.txt and the body file starts at the summary.
2026-10-25 23:18:24 -04:00
Juan Denis f2f9ec7267 Polish stepper rail and radio card selection
The vertical stepper rail floated between steps instead of joining the
markers, and the current step borrowed the focus ring. Radio cards
showed a radio dot beside the icon; the card already marks selection,
so the radio becomes a check badge in the corner.
2026-10-25 23:18:24 -04:00
Juan Denis 7c8519772f Add accessible form controls and field wiring
FormField now hands its control the id, aria-describedby, aria-invalid
and aria-required through context, so every settings form announces
its hint and validation without per-call wiring. IconButton gets a real
tooltip instead of title=, ProgressBar is a labelled progressbar with
tones and an indeterminate state, and Button takes `loading` without
changing width.

New controls the panel lacked: NumberField, Combobox (single, multiple,
creatable), TagInput, Calendar with DatePicker and DateRangePicker,
PinInput, Slider, RadioGroup, Stepper, TreeView, and FileDropzone with
FileUploadList. Rounding, date and file-type rules live in lib/ with
unit tests. All of them render on /style-guide/controls.
2026-10-25 23:18:24 -04:00
darren 228cfbf92f fix: show remote images by name, size and date on the server Docker tab (#186) 2026-10-25 23:18:07 -04:00
6e096fa286 Add real preview deployments and strengthen core boundaries (#184)
* fix(security): honour the failed-login time window (#180)

check_failed_logins computed a cutoff from since_hours and never used
it, so the Security -> Events "Failed login attempts (24h)" card and
its alert counted every failure still in /var/log/auth.log or
/var/log/secure: up to a week of SSH attempts under the usual weekly
log rotation.

Each matching line is now dated from its stamp, either RFC 3339
(rsyslog's high-precision format) or the traditional BSD syslog stamp
(no year, so a December line read in January is placed in the previous
year), and lines older than the cutoff are skipped. A line whose stamp
is not recognised is still counted rather than hidden. The log paths
move to SecurityService.AUTH_LOGS so the tests can point at a temp
file.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* refactor: separate backend startup phases and guard ordering

* refactor: route file operations through capability-checked adapters

* chore: bump version to 1.11.25 [skip ci]

* refactor: split File Manager state and views with regression guards

* test: enforce core boundaries and document extension rules

* test: cover File Manager tree races and listing failures

* fix: preserve File Manager deep links on initial mount

* refactor: keep File Manager download operations in the action hook

* fix: start agent maintenance only in the guarded runtime phase

* test: capture nginx rendering contract before extraction

* refactor: separate nginx configuration rendering from host operations

* test: enforce pure nginx configuration boundaries

* fix: require provisioned runtime before advertising previews

* feat: expose value-free effective environment provenance through app access boundary

* feat: add effective environment inspector with browser regression checks

* feat: provision isolated generic previews with retryable resource cleanup

* feat: queue preview automation and preserve cleanup ownership through app deletion

* feat: add pinned preview deployment controls and queued lifecycle feedback

* fix: preserve container port semantics for previews of slot deployments

* fix: preserve search focus and ignore stale list responses

* feat: run approved assistant deployments through persistent recipe operations

* test: run search and assistant deployment regressions in CI

* fix: refresh preview API and controller boundary inventories

* docs: refresh controller migration count after preview extraction

* fix: bind file editor previews to their storage target

* chore: bump version to 1.11.26 [skip ci]

---------

Co-authored-by: Max Freedom Pollard <272618364+MaxFreedomPollard@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-24 15:31:39 -04:00
github-actions[bot] a3b890af00 chore: bump version to 1.11.26 [skip ci] 2026-10-24 19:08:49 +00:00
Juan Denis d00c4a72ea fix: bind file editor previews to their storage target 2026-10-24 15:00:57 -04:00
Juan Denis 83c871c32b docs: refresh controller migration count after preview extraction 2026-10-24 14:57:27 -04:00
Juan Denis e30fe7c081 fix: refresh preview API and controller boundary inventories 2026-10-24 14:50:57 -04:00
Juan Denis fc718d6765 test: run search and assistant deployment regressions in CI 2026-10-24 14:45:07 -04:00
Juan Denis caab657806 Merge remote-tracking branch 'origin/dev' into dev 2026-10-24 14:44:37 -04:00
Juan Denis e955134e41 feat: run approved assistant deployments through persistent recipe operations 2026-10-24 06:30:26 -04:00
Juan Denis fd4795a376 fix: preserve search focus and ignore stale list responses 2026-10-24 06:29:24 -04:00
Juan Denis a3d64e5a52 fix: preserve container port semantics for previews of slot deployments 2026-10-24 06:24:18 -04:00
Juan Denis ada1276d39 feat: add pinned preview deployment controls and queued lifecycle feedback 2026-10-24 06:23:06 -04:00
Juan Denis c0dbb921e1 feat: queue preview automation and preserve cleanup ownership through app deletion 2026-10-24 06:21:26 -04:00
Juan Denis 5a13a0dfb1 feat: provision isolated generic previews with retryable resource cleanup 2026-10-24 06:11:46 -04:00
Juan Denis 355157856f feat: add effective environment inspector with browser regression checks 2026-10-24 06:02:51 -04:00
Juan Denis d4f6b2af55 feat: expose value-free effective environment provenance through app access boundary 2026-10-24 05:58:02 -04:00
Juan Denis 0894b8ff5b fix: require provisioned runtime before advertising previews 2026-10-24 05:56:04 -04:00
Juan Denis 9c934cb7a6 test: enforce pure nginx configuration boundaries 2026-10-24 05:36:59 -04:00
Juan Denis 69a9ad345a refactor: separate nginx configuration rendering from host operations 2026-10-24 05:36:03 -04:00
Juan Denis 2a030b31ef test: capture nginx rendering contract before extraction 2026-10-24 05:33:01 -04:00
Juan Denis ac0871c016 fix: start agent maintenance only in the guarded runtime phase 2026-10-24 05:14:36 -04:00
Juan Denis dd93f01fd6 refactor: keep File Manager download operations in the action hook 2026-10-24 05:02:47 -04:00
Juan Denis a853c91d61 fix: preserve File Manager deep links on initial mount 2026-10-24 04:54:38 -04:00
Juan Denis 8bf9f4681c test: cover File Manager tree races and listing failures 2026-10-24 04:51:50 -04:00
Juan Denis 3c5b948f2e test: enforce core boundaries and document extension rules 2026-10-24 04:48:54 -04:00
Juan Denis b534ee2baf refactor: split File Manager state and views with regression guards 2026-10-24 04:44:18 -04:00
github-actions[bot] 17280646b0 chore: bump version to 1.11.25 [skip ci] 2026-10-24 08:34:38 +00:00
Juan Denis e7ba1c2a89 refactor: route file operations through capability-checked adapters 2026-10-24 04:31:28 -04:00
Juan Denis 4898fccae1 refactor: separate backend startup phases and guard ordering 2026-10-24 04:30:14 -04:00
Max Freedom PollardandClaude Opus 5.5 3de85c2a17 fix(security): honour the failed-login time window (#180)
check_failed_logins computed a cutoff from since_hours and never used
it, so the Security -> Events "Failed login attempts (24h)" card and
its alert counted every failure still in /var/log/auth.log or
/var/log/secure: up to a week of SSH attempts under the usual weekly
log rotation.

Each matching line is now dated from its stamp, either RFC 3339
(rsyslog's high-precision format) or the traditional BSD syslog stamp
(no year, so a December line read in January is placed in the previous
year), and lines older than the cutoff are skipped. A line whose stamp
is not recognised is still counted rather than hidden. The log paths
move to SecurityService.AUTH_LOGS so the tests can point at a temp
file.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 04:27:36 -04:00
Juan Denis 10b5383ae3 Merge pull request #183 from jhd3197/dev
fix: unblock PHP release with synced WordPress registry
v1.11.24
2026-10-23 18:58:05 -04:00
github-actions[bot] 76fdc53144 chore: bump version to 1.11.24 [skip ci] 2026-10-23 22:57:43 +00:00
Juan Denis 771fca6ef0 fix(registry): sync bundled WordPress 1.0.4 release metadata 2026-10-23 18:50:18 -04:00
Juan Denis 1b3f03c180 Merge pull request #182 from jhd3197/dev
Promote dev: patched PHP templates and persistent agent IP history
2026-10-23 18:30:33 -04:00
github-actions[bot] 251461a5d0 chore: bump version to 1.11.23 [skip ci] 2026-10-23 22:29:51 +00:00
Juan Denis 2b5d2ff0f2 Merge branch 'dev' of https://github.com/jhd3197/ServerKit into dev 2026-10-23 18:12:48 -04:00
Juan Denis 1a6335e7cf fix: remember agent IP alerts across panel restarts 2026-10-23 18:05:15 -04:00
Juan Denis b85cc18220 fix: require patched PHP runtimes in WordPress templates 2026-10-23 18:05:08 -04:00