Skip to content

Phase 1 PR4: cut Electron client onto unified auth-service - #18

Merged
man4ish merged 1 commit into
mainfrom
feature/pr4-license-server-decommission
Aug 1, 2026
Merged

Phase 1 PR4: cut Electron client onto unified auth-service#18
man4ish merged 1 commit into
mainfrom
feature/pr4-license-server-decommission

Conversation

@man4ish

@man4ish man4ish commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • electron/main.js: LICENSE_SERVER repointed at the unified omnibioai-auth service (dev http://localhost:8001, prod https://webstudio.omnibioai.org -- the existing router domain that already proxies /license/ to auth-service). Fetch paths changed from /api/license/* to /license/* (auth-service's router has no /api prefix).
  • Fixed a real security issue this cutover would otherwise introduce: /license/validate's response now carries access_token/refresh_token JWTs (it doubles as an auth-service login on the unified endpoint). license.json on disk is an offline-grace license cache, not a credential store, so those fields are now stripped before saveLicense() persists it.
  • docker/nginx-router.conf: added location ^~ /api/license/ (strip /api and forward, same rewrite pattern as the existing /_svc/auth block) so already-installed pre-cutover Electron builds -- which hardcode /api/license/* and can't be updated without a new release -- keep working once license.omnibioai.org's DNS/routing points at this router. Meant to be dropped once the soak period confirms no more /api/license/* traffic.

Companion PR

omnibioai-auth #7 adds the server-side half: optional email + machine_id on /license/validate, the new /license/pull-token endpoint, and the legacy-license import script.

Scope

This is app-code only. Deliberately NOT included, since this is the one step in the decommission with an external DNS/routing change and no clean rollback:

  • Deleting backend/license_server.py / backend/Dockerfile.license
  • Removing the license-server service block from docker-compose.yml
  • Rotating/deleting LICENSE_SECRET / ADMIN_KEY
  • Building/shipping a new Electron release
  • The actual license.omnibioai.org DNS/routing cutover and soak-period monitoring

Tests

node --check electron/main.js passes. The one test from the original plan that can't be automated in CI -- a real old packaged Electron build hitting the new endpoint at the production hostname before DNS cutover -- has not been run; it's a manual/scripted step for the actual cutover, not this PR.

🤖 Generated with Claude Code

…ervice

electron/main.js: LICENSE_SERVER repointed at auth-service (dev
localhost:8001, prod webstudio.omnibioai.org) with /license/* paths
(no /api prefix, unlike the old license_server.py). Strips
access_token/refresh_token from the now-doubles-as-login /validate
response before it's cached to license.json on disk -- that file is
an offline-grace license cache, not a credential store.

docker/nginx-router.conf: adds a /api/license/ strip-and-forward alias
so already-installed pre-cutover builds keep working once
license.omnibioai.org's DNS/routing points here, until they auto-update.

Decommissioning license_server.py itself, the DNS cutover, and secret
rotation are separate, deliberately-gated deployment steps -- not part
of this commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@man4ish
man4ish merged commit 3ae69cd into main Aug 1, 2026
3 checks passed
@man4ish
man4ish deleted the feature/pr4-license-server-decommission branch August 1, 2026 13:28
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