From b5ee8880ff339bba203d962c2d67a10a20ac8b1f Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sun, 13 Apr 2025 16:53:17 +0100 Subject: [PATCH] html: add noto sans subset --- README.md | 2 +- html/NotoSans.woff | Bin 0 -> 34092 bytes html/index.html | 7 ++++++- html/index.min.html | 2 +- src/core/Handler.cpp | 10 ++++++++++ src/core/Handler.hpp | 2 ++ 6 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 html/NotoSans.woff diff --git a/README.md b/README.md index ef6ffbe..fa84578 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ AI scrapers are everywhere. This will stop them. `robots.txt` won't. - Protect your endpoint from AI bots with a cryptographic challenge - Easy configuration in jsonc - Support for cloudflare -- Minimal. The waiting page is a single file with no links that weighs 4kB +- Minimal. The waiting page is tiny and light on network usage. ### Planned features - Dynamic challenge amount (aka difficulty) diff --git a/html/NotoSans.woff b/html/NotoSans.woff new file mode 100644 index 0000000000000000000000000000000000000000..4d87b9b6d821cd107fedd6df341f1eff81b0e393 GIT binary patch literal 34092 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 USTBMLj8)_}#{L2qUyq6a0AW0rUH||9 literal 0 HcmV?d00001 diff --git a/html/index.html b/html/index.html index d1b8296..a821fd3 100644 --- a/html/index.html +++ b/html/index.html @@ -7,8 +7,13 @@ +STOP! - Checkpoint

🛑

STOP!


Verifying that you are not a bot. This might take a short moment.

You do not need to do anything.

Why am I seeing this?


This website protects itself from AI bots and scrapers by asking you to complete a cryptographic challenge before allowing you entry.

Difficulty {{ tl:text challengeDifficulty }}, elapsed 0ms, 0h, 0h/s

Powered by checkpoint v{{ tl:text checkpointVersion }}
\ No newline at end of file diff --git a/src/core/Handler.cpp b/src/core/Handler.cpp index 7f6f0b0..b5128c9 100644 --- a/src/core/Handler.cpp +++ b/src/core/Handler.cpp @@ -145,6 +145,10 @@ std::string CServerHandler::fingerprintForRequest(const Pistache::Http::Request& return sha256(input); } +bool CServerHandler::isResourceCheckpoint(const std::string_view& res) { + return res == "/checkpoint/NotoSans.woff"; +} + void CServerHandler::onRequest(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter response) { const auto HEADERS = req.headers(); std::shared_ptr hostHeader; @@ -218,6 +222,12 @@ void CServerHandler::onRequest(const Pistache::Http::Request& req, Pistache::Htt return; } + if (isResourceCheckpoint(req.resource())) { + response.send(Pistache::Http::Code::Ok, + readFileAsText(g_pGlobalState->cwd + "/" + g_pConfig->m_config.html_dir + "/" + req.resource().substr(req.resource().find("checkpoint/") + 11))); + return; + } + if (g_pConfig->m_config.git_host) { // TODO: ratelimit this, probably. diff --git a/src/core/Handler.hpp b/src/core/Handler.hpp index a7c36b1..c5512f5 100644 --- a/src/core/Handler.hpp +++ b/src/core/Handler.hpp @@ -24,6 +24,8 @@ class CServerHandler : public Pistache::Http::Handler { void challengeSubmitted(const Pistache::Http::Request& req, Pistache::Http::ResponseWriter& response); std::string fingerprintForRequest(const Pistache::Http::Request& req); + bool isResourceCheckpoint(const std::string_view& res); + struct SChallengeResponse { std::string challenge; unsigned long int solution = 0;