Skip to content

feat(content): superuser export endpoint for the Photon migration - #998

Merged
MathiasStrom merged 1 commit into
masterfrom
feat/photon-user-export
Jul 22, 2026
Merged

feat(content): superuser export endpoint for the Photon migration#998
MathiasStrom merged 1 commit into
masterfrom
feat/photon-user-export

Conversation

@MathiasStrom

Copy link
Copy Markdown
Contributor

Hvorfor

Photon (den nye backenden) skal migrere over alle brukere, men har ingen tilgang til denne databasen — verken MySQL-tilkobling eller SSH. I stedet for å åpne databasen utad, gir dette et read-only endepunkt Photon kan lese over HTTP.

Hva

GET /migration/photon-user-export/ returnerer alle brukere med nøyaktig de feltene Photon-importen trenger:

  • user_id, first_name, last_name, email, gender, allergy, image
  • is_superuser, is_active, allows_photo_by_default, accepts_event_rules, created_at, updated_at
  • bio: description, gitHub_link, linkedIn_link

Ingen hemmeligheter forlater systemet. Passordhasher og auth-tokens er bevisst utelatt — Photon setter sitt eget plassholderpassord, og brukere logger inn via Feide etterpå.

Sikkerhet

Låst bak is_admin_user (HS/Index) og is_superuser. Endepunktet eksponerer navn, e-post og bio for alle medlemmer i én respons, så det er ment å være kortlevd — det bør fjernes så snart migreringen er ferdig. Egen PR følger for det.

Verifisert

  • black --check grønt
  • flake8 grønt (F401 på barrel-__init__.py er allerede unntatt i setup.cfg)
  • Feltnavn sjekket mot User- og UserBio-modellene; created_at/updated_at fra BaseModel
  • bio-relasjonen (related_name="bio") brukt via select_related — én spørring, ingen N+1

Kunne ikke kjøre full Django-test lokalt (krever Docker Compose-stacken); CI kjører den.

🤖 Generated with Claude Code

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>
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