bb5e9d518c
- OIDC login via Authentik; first login creates a disabled user (admin approval). - Users set/replace their Intervals.icu athlete ID + API key; the key is validated against Intervals.icu and stored AES-256-GCM encrypted (shared key with the MCP server). Same users table (schema owned by the MCP server's migrations). - Admin page (gated on the intervalsicu-mcp-admins group claim): list, approve, disable, delete users. - 29 tests @ 93% (OIDC routes integration-only); Dockerfile asserts templates are packaged; .gitea CI test-gates the image build. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
16 lines
472 B
Docker
16 lines
472 B
Docker
FROM python:3.12-slim
|
|
|
|
WORKDIR /app
|
|
|
|
COPY pyproject.toml pyproject.toml
|
|
COPY src src
|
|
|
|
# All deps ship manylinux wheels — no build toolchain needed.
|
|
RUN pip install --no-cache-dir . \
|
|
&& python -c "import pathlib, intervalsicu_mcp_ui as m; \
|
|
assert (pathlib.Path(m.__file__).parent / 'templates' / 'base.html').exists(), 'templates not packaged'"
|
|
|
|
EXPOSE 8080
|
|
|
|
CMD ["uvicorn", "intervalsicu_mcp_ui.app:create_app", "--factory", "--host", "0.0.0.0", "--port", "8080"]
|