aboutsummaryrefslogtreecommitdiff
path: root/cmd
AgeCommit message (Collapse)AuthorFilesLines
2025-03-27Apply bits of the cookie settings PR one by one (#140)Xe Iaso1-4/+8
Enables uses to change the cookie domain and partitioned flags. Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-26Revert "lib/anubis: support setting extended cookie flags (#120)" (#134)Xe Iaso1-3/+0
This reverts commit e7cbd349f3ff96788dc7a8540d29808ca72e1c44.
2025-03-26lib/anubis: support setting extended cookie flags (#120)Xe Iaso1-0/+3
* lib/anubis: support setting extended cookie flags Signed-off-by: Xe Iaso <me@xeiaso.net> * lib: use cookie name consistently Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-25cmd/anubis: allow setting key bytes in flag/envvar (#97)Xe Iaso1-12/+45
* cmd/anubis: allow setting key bytes in flag/envvar Docs are updated to generate a random key on load and when people press the recycle button. Signed-off-by: Xe Iaso <me@xeiaso.net> * review feedback fixups Signed-off-by: Xe Iaso <me@xeiaso.net> * Update cmd/anubis/main.go Signed-off-by: Xe Iaso <me@xeiaso.net> * Apply suggestions from code review Co-authored-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com>
2025-03-22Refactor and split out things into cmd and lib (#77)Yulian Kuncheff34-2736/+50
* Refactor anubis to split business logic into a lib, and cmd to just be direct usage. * Post-rebase fixes. * Update changelog, remove unnecessary one. * lib: refactor this This is mostly based on my personal preferences for how Go code should be laid out. I'm not sold on the package name "lib" (I'd call it anubis but that would stutter), but people are probably gonna import it as libanubis so it's likely fine. Packages have been "flattened" to centralize implementation with area of concern. This goes against the Java-esque style that many people like, but I think this helps make things simple. Most notably: the dnsbl client (which is a hack) is an internal package until it's made more generic. Then it can be made external. I also fixed the logic such that `go generate` works and rebased on main. * internal/test: run tests iff npx exists and DONT_USE_NETWORK is not set Signed-off-by: Xe Iaso <me@xeiaso.net> * internal/test: install deps Signed-off-by: Xe Iaso <me@xeiaso.net> * .github/workflows: verbose go tests? Signed-off-by: Xe Iaso <me@xeiaso.net> * internal/test: sleep 2 Signed-off-by: Xe Iaso <me@xeiaso.net> * internal/test: nix this test so CI works Signed-off-by: Xe Iaso <me@xeiaso.net> * internal/test: warmup per browser? Signed-off-by: Xe Iaso <me@xeiaso.net> * internal/test: disable for now :( Signed-off-by: Xe Iaso <me@xeiaso.net> * lib/anubis: do not apply bot rules if address check fails Closes #83 --------- Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Xe Iaso <me@xeiaso.net>
2025-03-22Cleanup regex (#66)Dennis ten Hoove1-5/+5
* Cleanup regex Were were going overkill on the escape characters * Update docs/docs/CHANGELOG.md Co-authored-by: Xe Iaso <me@xeiaso.net> Signed-off-by: Dennis ten Hoove <36002865+dennis1248@users.noreply.github.com> --------- Signed-off-by: Dennis ten Hoove <36002865+dennis1248@users.noreply.github.com> Co-authored-by: Xe Iaso <me@xeiaso.net>
2025-03-22Fix docker image CI for pull requests (#84)Xe Iaso1-18/+1
Closes #65 Pull request images will now be `ttl.sh/techaro/pr-{number}/anubis:24h`.
2025-03-21cmd/anubis: delete example RSS reader rule (#67)v1.14.2Xe Iaso1-5/+0
The example/default bot policy document had a rule to allow RSS readers through based on paths that end with ".rss", ".xml", ".atom", or ".json". Frameworks like Rails will treat these specially, meaning that going to /things/12345-whateverhaha.json could bypass Anubis. I checked the history of this rule and it was present in the original example policy file in Xe/x. This rule is likely a mistake and it has been removed. I think it was for making my blog still work with RSS readers. Thanks to Graham Sutherland for reporting this over email. Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-21Add MojeekBot (#64)Dennis ten Hoove1-1/+9
* Add MojeekBot * Update docs/docs/CHANGELOG.md Co-authored-by: Xe Iaso <me@xeiaso.net> Signed-off-by: Dennis ten Hoove <36002865+dennis1248@users.noreply.github.com> --------- Signed-off-by: Dennis ten Hoove <36002865+dennis1248@users.noreply.github.com> Co-authored-by: Xe Iaso <me@xeiaso.net>
2025-03-21cmd/anubis: set X-Real-Ip based on X-Forwarded-For (#63)v1.14.1Xe Iaso1-0/+1
This triggers a SHAME release[0]. [0]: https://pridever.org/
2025-03-21cmd/anubis: made with love in CanadaXe Iaso2-2/+2
Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-21cmd/anubis: use golang-jwt to check expiry date (#56)Alexander Yastrebov1-20/+10
* cmd/anubis: use golang-jwt to check expiry date Also: * check parse error * require strict base64 decoding * ignore always nil sha256sum error to simplify codeflow Signed-off-by: Alexander Yastrebov <yastrebov.alex@gmail.com> * cmd/anubis: handle unlikely case when token claims aren't the right go type Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Alexander Yastrebov <yastrebov.alex@gmail.com> Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-03-21cmd/anubis: do not return error from sha256 (#57)Alexander Yastrebov2-23/+7
hash.Write never returns error so removing it from the results simplifies usage and eliminates dead error handling. Signed-off-by: Alexander Yastrebov <yastrebov.alex@gmail.com>
2025-03-21Allow filtering by remote addresses (#52)Remilia Da Costa Faro6-24/+478
* Added the possibility to define rules for remote addresses * Added change in changelog * Added check for X-Real-Ip and X-Forwarded-For when checking for remote address filtering * cmd/anubis: refine IP filtering logic * Optimize the configuration so that the IP trie is created once at application start instead of dynamically being created every request. * Document the changes in the changelog and docs site. * Allow pure IP range filtering. * Allow user agent based IP range filtering. * Allow path based IP range filtering. * Create --debug-x-real-ip-default flag for testing Anubis locally without a HTTP load balancer. --------- Co-authored-by: Xe Iaso <me@xeiaso.net>
2025-03-21cmd/anubis: explain why users are seeing Anubis (#55)Xe Iaso2-3/+10
* cmd/anubis: explain why users are seeing Anubis Closes #25 Closes #38 Also includes the beginnings of a "user guides" section in the docs for user-facing documentation. * Update docs/docs/user/known-broken-extensions.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Xe Iaso <me@xeiaso.net> * cmd/anubis: fix indentation in index.templ Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-03-21cmd/anubis: configurable difficulty per-bot rule (#53)Xe Iaso14-46/+259
Closes #30 Introduces the "challenge" field in bot rule definitions: ```json { "name": "generic-bot-catchall", "user_agent_regex": "(?i:bot|crawler)", "action": "CHALLENGE", "challenge": { "difficulty": 16, "report_as": 4, "algorithm": "slow" } } ``` This makes Anubis return a challenge page for every user agent with "bot" or "crawler" in it (case-insensitively) with difficulty 16 using the old "slow" algorithm but reporting in the client as difficulty 4. This is useful when you want to make certain clients in particular suffer. Additional validation and testing logic has been added to make sure that users do not define "impossible" challenge settings. If no algorithm is specified, Anubis defaults to the "fast" algorithm. Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-21Add kagibot (#44)makeworld1-0/+5
* Add kagibot Signed-off-by: makeworld <25111343+makew0rld@users.noreply.github.com> * Update CHANGELOG.md Signed-off-by: makeworld <25111343+makew0rld@users.noreply.github.com> --------- Signed-off-by: makeworld <25111343+makew0rld@users.noreply.github.com> Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Xe Iaso <me@xeiaso.net>
2025-03-21general unix domain sockets support (#45)soopyc1-9/+123
* feat: allow binding to unix domain sockets this is useful when the user does not want to expose more tcp ports than needed. also simplifes configuration in some situation, like with nixos modules as the socket paths can be automatically configured. docs updated with additional configuration flags. Signed-off-by: Cassie Cheung <me@soopy.moe> * feat: graceful shutdown and cleanup on signal this is needed to clean up left-over unix sockets, else on the next boot listener panics with `address already in use`. Co-authored-by: cat <cat@gensokyo.uk> Signed-off-by: Cassie Cheung <me@soopy.moe> * feat: support unix socket upstream targets adds support for proxying unix socket upstreams, essentially allowing anubis to run without listening on tcp sockets at all*. *for metrics, neither prometheus and victoriametrics supports scraping from unix sockets. if metrics are desired, tcp sockets are still needed. Co-authored-by: cat <cat@gensokyo.uk> Signed-off-by: Cassie Cheung <me@soopy.moe> * docs: add changelog entry --------- Signed-off-by: Cassie Cheung <me@soopy.moe> Co-authored-by: cat <cat@gensokyo.uk>
2025-03-21Skip TestLookup test when networking is disabled (#49)Charlotte1-0/+6
2025-03-21cmd/containerbuild: default to ttl.sh for third party contributions (#51)Xe Iaso1-0/+38
* cmd/containerbuild: default to ttl.sh for third party contributions Closes #48 Signed-off-by: Xe Iaso <me@xeiaso.net> * track comment tags Signed-off-by: Xe Iaso <me@xeiaso.net> * empty commit to make sure double-commenting doesn't work Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-21Fix when hardwareConcurrency is undefined (#42)Callum Thomson2-2/+2
2025-03-20Ensure content flows and stays centered on small screens (#27)Dennis ten Hoove3-14/+13
* Ensure content flows and stays centered on small screens Fixes #18 * Do not overflow image, instead resize with page * update CHANGELOG Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Xe Iaso <me@xeiaso.net>
2025-03-20cmd/anubis: lower default difficulty to 4Xe Iaso1-1/+1
Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-20fix: no duplicate work when exceeding hardcoded int (#36)Donatas6-8/+10
* fix: no duplicate work when exceeding that 1xxx number * run go generate and update CHANGELOG Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Xe Iaso <me@xeiaso.net>
2025-03-20Fix: Removed several visible AI artifacts (e.g., 6 fingers) (#37)Federico Gaggero1-0/+0
* Fix: Removed several visible AI artifacts (e.g., 6 fingers) * Add an entry to docs/docs/CHANGELOG.md
2025-03-20cmd/anubis: drastically optimize proof of work (#19)Xe Iaso10-113/+166
* cmd/anubis: drastically optimize proof of work Closes #12 Closes #17 This drastically optimizes the proof of work check by removing the stringify call at every iteration. Additionally, this optimizes the checks by running them in parallel for as many threads as the browser has available (according to navigator.hardwareConcurrency). This also changes the redirect lag to 250 milliseconds instead of 2000 milliseconds in order to be perceptually faster. This is below the reaction time threshold of many people, so this will make the post-check success phase perceptually instant. Testing on an iPhone 7 Plus has shown that this can clear a difficulty 4 check in 3.4 seconds. This actually optimizes the check so much it may be a logistical concern for operators. * cmd/anubis/js: fix happy cachebuster logic Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-19cmd/containerbuild: set container build timestamp to the timestamp of the ↵Xe Iaso1-0/+10
commit (#15) Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-19Try using ko to build imagesXe Iaso2-0/+134
Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-18cmd/anubis: point the links elsewhereXe Iaso2-3/+3
Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-17cmd/anubis: rephrase noscript warningXe Iaso3-155/+196
Closes Xe/x#701 Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-03-17initial import from /x/ monorepoXe Iaso33-0/+2069
Signed-off-by: Xe Iaso <me@xeiaso.net>