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.2.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.2.0.tar.gz | 137.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| openctf_server-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 303.2 kB
Release files / openctf_server-1.2.0.tar.gz
| Download URL | openctf_server-1.2.0.tar.gz |
|---|---|
| Size | 137.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
20e234488c8ba4d2cb0721cad64e2bb67d535971a63d083d32434167753f5846
|
|
BLAKE2b-256 checksum How to use checksums |
78d810ee03b895ecbbe0d9c771e12de087fa0bd01a3770f11e87e54c0a94f6d1
|
| 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.2.0-py3-none-any.whl
| Download URL | openctf_server-1.2.0-py3-none-any.whl |
|---|---|
| Size | 165.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c9f6b416119a013b2a05fc625a9e666f492fc7e79c48d9567e665ee6075cb4df
|
|
BLAKE2b-256 checksum How to use checksums |
8455ff164b5173862903d7d0efc2edd272aa6c9f253fe891277697aabb419e8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|