Skip to content

Dev into master - #1001

Merged
MathiasStrom merged 5 commits into
masterfrom
dev
Jul 22, 2026
Merged

Dev into master#1001
MathiasStrom merged 5 commits into
masterfrom
dev

Conversation

@MathiasStrom

Copy link
Copy Markdown
Contributor

Proposed changes

Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue. Remove this part with the description.

Issue number: closes # (remove if not an issue)

Pull request checklist

Please check if your PR fulfills the following requirements:

  • Tests for the changes have been added (for bug fixes / features)
  • API docs on Codex have been reviewed and added / updated if needed (for bug fixes / features)
  • The fixtures have been updated if needed (for migrations)

Further comments

If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...

MathiasStrom and others added 5 commits July 22, 2026 16:32
Photon (the new backend) has no access to this database, so the one-time user
migration cannot read MySQL directly. This adds a read-only bulk export it can
consume over HTTP instead.

GET /migration/photon-user-export/ returns every user with the exact fields
Photon's import needs — name, email, gender, allergy, image, the flags, and the
bio (description, gitHub_link, linkedIn_link). Password hashes and auth tokens
are left out on purpose: Photon sets its own placeholder password and users
authenticate via Feide afterwards, so no secret leaves this system.

Gated on is_admin_user (HS/Index) AND is_superuser. It exposes every member's
name, email and bio in one response, so it is meant to be short-lived — remove
it once the migration is done.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chore(content): sync Photon export endpoint to dev
Companion to the user export from #998: Photon's full migration
(registrations, strikes, payments, forms, ...) reads plain SELECT *
from 26 tables, but has no MySQL access in production. This exposes
those tables — and only those — as paged JSON, gated to superusers in
HS/Index like the user export, and like it to be removed once the
migration is done. content_user's password column never leaves.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
CodeQL flagged the f-string SQL as user-controlled: it cannot see set
membership as sanitization. Selecting the allowlist's own element
severs the taint path — the request now only picks which hardcoded
name to use.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(content): superuser table export endpoint for the Photon migration
@MathiasStrom
MathiasStrom merged commit d3df902 into master Jul 22, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant