Skip to main content

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_ENDPOINT to the URL of your OpenTelemetry collector.
  • Set the environment variable OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION to 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

enochecker3-0.14.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

enochecker3-0.14.0-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

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

Hashes for enochecker3-0.14.0.tar.gz
Algorithm Hash digest
SHA256 d1d8473a03da19509f29c980256f3b2e9acd9a522fcfe3f7e95121aa9b991c29
MD5 46663c8dfdea4a8978779dc8bcd7447c
BLAKE2b-256 35e6b28f997901409707e37740178b4956bb18da6dc186b119612063e5a6f445

See more details on using hashes here.

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

Hashes for enochecker3-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e9b4fc8641c02fad5332b32cd82874ae63f1a796b1a2bce58e4d636456726432
MD5 867c0b8c3325cf3d4e4392f7f9f38ad1
BLAKE2b-256 813240dc701afdd02d0d748adf41fc3a1cc5066996f6c02149c6c98194ca82d7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page