Document sessions, limits and GitHub App setup
This commit is contained in:
@@ -12,13 +12,38 @@ go test -run x -bench Index # indexes $CODENAV_BENCH_DIR (default: Go's stdlib
|
|||||||
docker run --rm -p 4177:4177 codenavigator:latest
|
docker run --rm -p 4177:4177 codenavigator:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
Configuration: `PORT` (default `4177`, or `--port`), `CORS_ORIGIN` (default `*`).
|
Configuration:
|
||||||
|
|
||||||
|
- `PORT` (default `4177`, or `--port`), `CORS_ORIGIN` (default `*`)
|
||||||
|
- `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET`: a GitHub App's credentials; enables sign-in for private repositories
|
||||||
|
- `GITHUB_APP_SLUG`: the app's URL name, for the "grant repository access" link
|
||||||
|
|
||||||
`git` must be on `PATH` to load GitHub repositories (the image includes it).
|
`git` must be on `PATH` to load GitHub repositories (the image includes it).
|
||||||
|
|
||||||
|
## Multiple users
|
||||||
|
|
||||||
|
Every browser gets an HttpOnly session cookie. Jobs, snapshots and GitHub sign-ins belong to
|
||||||
|
that session and are invisible (404) to others. Each session keeps its latest snapshot; snapshots
|
||||||
|
idle for an hour are deleted, at most 8 are held (least recently used evicted), and two indexes
|
||||||
|
run at once while the rest queue. State is in memory, so a restart signs everyone out.
|
||||||
|
|
||||||
|
## Private GitHub repositories
|
||||||
|
|
||||||
|
Uses a GitHub App's user authorisation. When an anonymous clone fails, the frontend offers
|
||||||
|
**Sign in with GitHub**; the callback (`/api/github/callback`) stores an 8-hour user token in
|
||||||
|
memory for the session. Clones send it as an HTTP header via environment git config, never in
|
||||||
|
the URL or arguments, and host git config and credential helpers are ignored. A signed-in user
|
||||||
|
can only open repositories where the app is installed and they have access, otherwise the
|
||||||
|
frontend links to the app's installation page.
|
||||||
|
|
||||||
|
GitHub App settings: callback URL `https://<host>/api/github/callback`, setup URL `https://<host>/`
|
||||||
|
with "Redirect on update", token expiry on, no webhook, repository permission Contents: read-only.
|
||||||
|
|
||||||
The browser frontend in `web/` is plain JavaScript (it has to run in the browser) and
|
The browser frontend in `web/` is plain JavaScript (it has to run in the browser) and
|
||||||
is embedded into the binary; `web/config.js` points it at the same origin.
|
is embedded into the binary; `web/config.js` points it at the same origin.
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
- `GET /` serves the frontend instead of a JSON service description.
|
- `GET /` serves the frontend instead of a JSON service description.
|
||||||
|
- Jobs and snapshots are private to the browser session that created them (see above).
|
||||||
- Search queries are percent-decoded properly.
|
- Search queries are percent-decoded properly.
|
||||||
- `.gitignore` support covers standard globs but not global excludes or `.git/info/exclude`.
|
- `.gitignore` support covers standard globs but not global excludes or `.git/info/exclude`.
|
||||||
|
|||||||
Reference in New Issue
Block a user