Repository navigation
Website backend: cookie sessions, organizations, listing media (Phase 2 Workstream F) - #6
Merged
Merged
Conversation
…a (Phase 2 Workstream F) The service side of the publisher website and the staff review console. - Web sessions: a `web` guard backed by server-side `flbs_` session tokens, with GET/POST/DELETE /v1/auth/session. Requests that carry the session or XSRF cookie run through Laravel's session and CSRF middleware; Bearer clients, the catalog and the instance API stay cookieless. Account, publisher and admin routes take a Bearer token or the session (auth:token,web). Sessions table migration. - Account: PATCH /v1/account, POST /v1/account/password; AccountResource adds is_staff. - Organizations and members: list, create, show, update; add by email, change role, remove or leave, with owner-only owner changes and a last-owner guard. - Listing media and pricing: icon upload and removal, up to eight ordered screenshots, PUT price (paid needs the organization's Stripe Connect account). The publisher list now includes each listing's releases. promotional_text accepts 20,000 characters. - Staff: archive downloads, unsuspend, GET /v1/admin/review-items (R1 to R6), and the listing preview on release responses. - SPA fallback: non-API GET paths serve public/index.html; the service info moves to GET /v1. - registry:seed-website seeds staff and publisher accounts, published demo extensions, a queued release and a draft for the website's end-to-end tests. Pest: 279 tests pass.
This was referenced Oct 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The service side of the publisher website and the staff review console (Phase 2, Workstream F). The website UI itself is not in this PR; it will be rebuilt in Inertia after a design pass.
What's in it
webguard backed by server-sideflbs_session tokens, withGET/POST/DELETE /v1/auth/session. Requests that carry the session orXSRF-TOKENcookie (and/v1/auth/sessionitself) run through Laravel's session and CSRF middleware; Bearer clients, the catalog and the instance API stay cookieless. Account, publisher and admin routes now take a Bearer token or the session (auth:token,web). Adds thesessionstable.PATCH /v1/account,POST /v1/account/password;AccountResourceaddsis_staff.PUT …/price(paid pricing needs the organization's Stripe Connect account). The publisher list now includes each listing's releases.promotional_textaccepts 20,000 characters, anddescription/promotional_textwiden tomediumText.GET /v1/admin/releases/{id}/files/{engine|api|dist}), unsuspend,GET /v1/admin/review-items(R1 to R6, now enforced on approve and reject), and a listing preview on release responses.public/index.html(503 when the website isn't built); the service info moves from/toGET /v1.registry:seed-website. Staff and publisher accounts, published demo extensions, a queued release and a draft, for the website's end-to-end tests. Refuses to run in production.The README documents the new routes and the session model.
Testing
Decisions to confirm
File::url. On the private local disk they answer 403, and on S3 the objects are private, soicons/andscreenshots/need a public-read policy or a signed or proxied route. This affects imported icons too.XSRF-TOKENcookie, or is/v1/auth/session. Applying sessions to every request without a Bearer token would answer 419 to the CLI's login, register and verify, and to instance registration.SESSION_LIFETIME(120 minutes), extended while in use. SetSESSION_SECURE_COOKIE=truebehind HTTPS.