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.0.1
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.0.1.tar.gz | 31.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| openctf_server-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 63.9 kB
Release files / openctf_server-1.0.1.tar.gz
| Download URL | openctf_server-1.0.1.tar.gz |
|---|---|
| Size | 31.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ca5c35e56a4c212b51db8265400367e5c4006ee35b9dedb3b7dd6b36fce8d496
|
|
BLAKE2b-256 checksum How to use checksums |
fc20082329b7538613796f6125eafcd786f782271364f2482b1ef4595b2f4b36
|
| 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.0.1-py3-none-any.whl
| Download URL | openctf_server-1.0.1-py3-none-any.whl |
|---|---|
| Size | 32.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
653c449531df700902415b97e4db3a27129d2c6cbe602ad7e3877c8bf0f5626c
|
|
BLAKE2b-256 checksum How to use checksums |
e0f626639593c19ca259b51fd12603108374c20d6b6a5b99e1b6b63a15abe4ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|