Complete Forgejo discussion MVP
This commit is contained in:
parent
d84a885fdb
commit
51706d2d11
17 changed files with 1708 additions and 127 deletions
13
AGENTS.md
13
AGENTS.md
|
|
@ -21,6 +21,8 @@ It is a thin application layer over Forgejo:
|
|||
|
||||
- `app.py`: FastAPI app and SPA/static serving
|
||||
- `live_prototype.py`: live payload assembly for courses, lessons, discussions, and events
|
||||
- `prototype_cache.py`: server-side cache for the public Forgejo content payload
|
||||
- `update_events.py`: in-process SSE broker for content update notifications
|
||||
- `forgejo_client.py`: Forgejo API client
|
||||
- `calendar_feeds.py`: ICS/webcal feed loading and parsing
|
||||
- `settings.py`: env-driven runtime settings
|
||||
|
|
@ -69,6 +71,9 @@ Useful variables:
|
|||
- `FORGEJO_OAUTH_CLIENT_SECRET=...`
|
||||
- `FORGEJO_OAUTH_SCOPES=openid profile`
|
||||
- `FORGEJO_TOKEN=...`
|
||||
- `FORGEJO_GENERAL_DISCUSSION_REPO=Robot-U/general_forum`
|
||||
- `FORGEJO_WEBHOOK_SECRET=...`
|
||||
- `FORGEJO_CACHE_TTL_SECONDS=60.0`
|
||||
- `CALENDAR_FEED_URLS=webcal://...`
|
||||
- `HOST=0.0.0.0`
|
||||
- `PORT=8800`
|
||||
|
|
@ -76,8 +81,11 @@ Useful variables:
|
|||
Notes:
|
||||
|
||||
- Browser sign-in uses Forgejo OAuth/OIDC. `APP_BASE_URL` must match the URL opened in the browser, and the Forgejo OAuth app must include `/api/auth/forgejo/callback` under that base URL.
|
||||
- Browser OAuth requests only identity scopes. The backend stores the resulting Forgejo token in an encrypted `HttpOnly` cookie and may use it only after enforcing public-repository checks.
|
||||
- `FORGEJO_TOKEN` is optional and should be treated as a read-only local fallback. Browser sessions and API token calls may write comments only after verifying the target repo is public.
|
||||
- Browser OAuth requests only identity scopes. The backend stores the resulting Forgejo token in an encrypted `HttpOnly` cookie and may use it only after enforcing public-repository checks for writes.
|
||||
- `FORGEJO_TOKEN` is optional and should be treated as a read-only local fallback for the public content cache. Browser sessions and API token calls may write issues/comments only after verifying the target repo is public.
|
||||
- `/api/prototype` uses a server-side cache for public Forgejo content. `FORGEJO_CACHE_TTL_SECONDS=0` disables it; successful discussion replies invalidate it.
|
||||
- General discussion creation requires `FORGEJO_GENERAL_DISCUSSION_REPO`. Linked discussions are created in the content repo and include canonical app URLs in the Forgejo issue body.
|
||||
- Forgejo webhooks should POST to `/api/forgejo/webhook`; when `FORGEJO_WEBHOOK_SECRET` is set, the backend validates Forgejo/Gitea-style HMAC headers.
|
||||
- API clients can query with `Authorization: token ...` or `Authorization: Bearer ...`.
|
||||
- `CALENDAR_FEED_URLS` is optional and accepts comma-separated `webcal://` or `https://` ICS feeds.
|
||||
- Do not commit `.env` or `.env.local`.
|
||||
|
|
@ -142,6 +150,7 @@ Run both before pushing:
|
|||
- Each lesson folder is expected to contain one markdown file plus optional assets.
|
||||
- Frontmatter is used when present for `title` and `summary`.
|
||||
- Discussions are loaded from Forgejo issues and comments.
|
||||
- Issue bodies are scanned for canonical post/lesson URLs and Forgejo file URLs to connect discussions back to content.
|
||||
- Calendar events are loaded from ICS feeds, not managed in-app.
|
||||
|
||||
## UI Expectations
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue