mirror of
https://github.com/niels-emmer/myace.git
synced 2026-09-13 23:53:30 +02:00
[PR #8] [MERGED] Browser-only download, CLI onboarding, and VPS deployment hardening #6
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
github-mirrors/myace#6
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/niels-emmer/myace/pull/8
Author: @niels-emmer
Created: 8/9/2026
Status: ✅ Merged
Merged: 8/9/2026
Merged by: @niels-emmer
Base:
main← Head:feat/browser-download-cli-onboarding-vps-hardening📝 Commits (3)
8f83f1ffeat(phase-2): browser-only zip download for compiled profiles11dd537feat(phase-3): CLI onboarding + local companion server for remote scanning7c86c91feat(phase-4): harden defaults for public VPS deployment📊 Changes
31 files changed (+1807 additions, -100 deletions)
View changed files
➕
.claude/launch.json(+11 -0)📝
.env.example(+18 -2)📝
CLAUDE.md(+20 -4)📝
README.md(+60 -4)📝
backend/Dockerfile(+8 -2)📝
backend/app/api/auth.py(+4 -1)📝
backend/app/api/profiles.py(+45 -1)📝
backend/app/core/config.py(+13 -1)📝
backend/app/core/deps.py(+7 -2)📝
backend/app/main.py(+19 -0)📝
backend/pyproject.toml(+1 -0)📝
backend/tests/conftest.py(+38 -6)➕
backend/tests/test_admin_bootstrap.py(+57 -0)➕
backend/tests/test_profiles.py(+135 -0)➕
backend/tests/test_startup_warnings.py(+82 -0)➕
cli/myace_cli/local_server.py(+115 -0)📝
cli/myace_cli/main.py(+30 -0)📝
cli/pyproject.toml(+6 -0)➕
cli/tests/test_local_server.py(+111 -0)📝
docker-compose.dev.yml(+4 -2)...and 11 more files
📄 Description
Summary
Follow-up to hosting MyACE on a public multi-user VPS: the
myaceCLI turned out to be mandatory for both getting compiled files onto a user's disk and scanning a remote user's own machine (the browser has no filesystem API of its own, and the backend's old local-scan path only ever sees the server's own disk). This PR closes both gaps and hardens the deployment defaults for public exposure.POST /api/v1/profiles/compile/zip+ a working Download button on/compile, so a user without the CLI can still get their compiled profile. Fixes a header-injection vector in the zip filename and a pre-existing gap where the backend test suite never actually exercised a real database.myace serve— Settings' CLI setup block now shows a real, working install/login command (it previously referenced an unpublished PyPI package and a placeholder token). Newmyace servecompanion server lets the Import page scan a remote user's own machine directly, gated on existingmyace logincredentials, loopback-only, origin-locked CORS, and Chrome Private Network Access support.DEBUG/ADMIN_BOOTSTRAP_ENABLEDdefaults left on in production, a flag to close the "first registrant becomes admin" window, opt-inTrustedHostMiddleware,--proxy-headersso OIDC redirects resolve tohttps://behind a reverse proxy, and concrete nginx-proxy-manager setup docs.Full context and design tradeoffs are in the commit messages (one per phase) and the updated
CLAUDE.md/README.md/docs/.Test plan
pytest(37 passed),ruff check .clean, mypy unchanged from baseline (advisory only)pytest(15 passed),ruff check .cleantsc -b,eslint .,vitest run(4 passed),vite buildall cleanmyace serve's CORS/origin/header gating and Private Network Access preflight via curl/healthand/docsstill work🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.