Library for building EnoEngine-compatible async checkers
Project description
enochecker3
A FastAPI based checker library for writing async checkers in python. It is called enochecker3 even though enochecker2 never existed, because it is intended to be the reference implementation for version 3 of the enochecker API specification which is yet to come.
Quick Start
Install enochecker3 using
pip3 install enochecker3
Create an example.py file with the following content:
import secrets
from typing import Optional
from httpx import AsyncClient
from enochecker3 import (
ChainDB,
Enochecker,
GetflagCheckerTaskMessage,
MumbleException,
PutflagCheckerTaskMessage,
)
from enochecker3.utils import FlagSearcher, assert_equals, assert_in
checker = Enochecker("ExampleService", 1337)
@checker.putflag(0)
async def putflag_test(
task: PutflagCheckerTaskMessage,
client: AsyncClient,
db: ChainDB,
) -> None:
token = secrets.token_hex(32)
r = await client.post("/note", json={"token": token, "flag": task.flag})
assert_equals(r.status_code, 200, "storing note with flag failed")
await db.set("token", token)
@checker.getflag(0)
async def getflag_test(
task: GetflagCheckerTaskMessage, client: AsyncClient, db: ChainDB
) -> None:
try:
token = await db.get("token")
except KeyError:
raise MumbleException("Missing database entry from putflag")
r = await client.get(f"/note/{token}")
assert_equals(r.status_code, 200, "getting note with flag failed")
assert_in(task.flag, r.text, "flag missing from note")
@checker.exploit(0)
async def exploit_test(searcher: FlagSearcher, client: AsyncClient) -> Optional[str]:
r = await client.get(
"/note/*",
)
assert not r.is_error
if flag := searcher.search_flag(r.text):
return flag
Start the checker using
uvicorn --reload example:checker.app
And browse to (http://localhost:8000/docs) to explore the web interface, which allows you to send requests to the checker.
Telemetry
The checker supports OpenTelemetry, with this configuration:
- Set the environment variable
OTEL_EXPORTER_OTLP_ENDPOINTto the URL of your OpenTelemetry collector. - Set the environment variable
OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATIONto your authentication token.
Built-In Dependencies
See docs/builtin_dependencies.md
Adding Custom Dependencies
See docs/adding_custom_dependencies.md
Good to Know / FAQ
See docs/faq.md
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file enochecker3-0.14.0.tar.gz.
File metadata
- Download URL: enochecker3-0.14.0.tar.gz
- Upload date:
- Size: 21.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1d8473a03da19509f29c980256f3b2e9acd9a522fcfe3f7e95121aa9b991c29
|
|
| MD5 |
46663c8dfdea4a8978779dc8bcd7447c
|
|
| BLAKE2b-256 |
35e6b28f997901409707e37740178b4956bb18da6dc186b119612063e5a6f445
|
File details
Details for the file enochecker3-0.14.0-py3-none-any.whl.
File metadata
- Download URL: enochecker3-0.14.0-py3-none-any.whl
- Upload date:
- Size: 19.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9b4fc8641c02fad5332b32cd82874ae63f1a796b1a2bce58e4d636456726432
|
|
| MD5 |
867c0b8c3325cf3d4e4392f7f9f38ad1
|
|
| BLAKE2b-256 |
813240dc701afdd02d0d748adf41fc3a1cc5066996f6c02149c6c98194ca82d7
|