openctf-server
Flask API and sandboxed target-website service for OpenCTF, a self-hosted lab CTF platform. This package is the server half only - the desktop client is published separately on npm as openctf.
Install
pip install openctf-server
Quick start
export SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
export JWT_SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
export FLAG_PEPPER=$(python -c "import secrets; print(secrets.token_hex(32))")
export TARGET_ACCESS_SECRET=$(python -c "import secrets; print(secrets.token_hex(32))")
export ADMIN_PASSWORD=set-a-real-password
openctf-server # main API on :5000
openctf-server-target # sandboxed target-website service on :5001 (separate terminal)
openctf-server-seed # load the starter set of preset challenges (one-off)
Both processes need the same SECRET_KEY, TARGET_ACCESS_SECRET, and DATABASE_URL (if you set one) to talk to each other correctly - they share one database and one signed-URL secret between the two services.
Configuration
All configuration is via environment variables - there's no config file. See the main repository's server/.env.example for the full list (DATABASE_URL, CORS_ORIGINS, TARGET_SERVER_URL, OLLAMA_URL, OLLAMA_MODEL, and the secrets above).
Docker
If you'd rather not manage two processes and env vars by hand, the main repository ships a docker-compose.yml that runs both services correctly out of the box - see the repository README for that path.
Security
Read SECURITY.md in the main repository before exposing this to more than your own laptop - in particular, the target-website service is intentionally vulnerable (that's the point, it hosts the challenges) and should never be reachable from outside your lab's own network.
Metadata
Release files for openctf-server 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| openctf_server-1.3.0.tar.gz | 217.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| openctf_server-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 464.9 kB
Release files / openctf_server-1.3.0.tar.gz
| Download URL | openctf_server-1.3.0.tar.gz |
|---|---|
| Size | 217.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4ff7b6c6596dcb0ebec57bf459cdf553dd204a79e86b03ab8368b4fec3b0af5
|
|
BLAKE2b-256 checksum How to use checksums |
2e0e87777c9fbe037549711c9f5c74295a344469fd38fe6204756ba2f3f14a38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|
Release files / openctf_server-1.3.0-py3-none-any.whl
| Download URL | openctf_server-1.3.0-py3-none-any.whl |
|---|---|
| Size | 247.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
157a19a79c3632d376feb972b9df3df49e7e298463d01cd6052f59cd73d44675
|
|
BLAKE2b-256 checksum How to use checksums |
5065e180169525ba6bdf5d2455b236f711bb4c956ae254dc9f8162e6bf92b857
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|