mirror of
https://github.com/TecharoHQ/anubis.git
synced 2026-04-09 18:18:49 +00:00
Compare commits
22 Commits
Xe/fix-pre
...
Xe/contrib
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e03fb3e241 | ||
|
|
c5ab5adc1a | ||
|
|
d021ebe204 | ||
|
|
34bc31784d | ||
|
|
37d9f24169 | ||
|
|
074b73054c | ||
|
|
c7d780a55f | ||
|
|
a2ba2eb34b | ||
|
|
7a9b2f12a2 | ||
|
|
75a22f6998 | ||
|
|
5e2bff8397 | ||
|
|
7075f74764 | ||
|
|
005750903d | ||
|
|
d2205b11a7 | ||
|
|
09f6f4b153 | ||
|
|
d2bc5cadb9 | ||
|
|
23ec1b82a7 | ||
|
|
d622675edc | ||
|
|
493a957f4b | ||
|
|
57c0b2b22c | ||
|
|
186ffeb744 | ||
|
|
ff87aac4e7 |
@@ -2,9 +2,7 @@
|
|||||||
// README at: https://github.com/devcontainers/templates/tree/main/src/debian
|
// README at: https://github.com/devcontainers/templates/tree/main/src/debian
|
||||||
{
|
{
|
||||||
"name": "Dev",
|
"name": "Dev",
|
||||||
"dockerComposeFile": [
|
"dockerComposeFile": ["./docker-compose.yaml"],
|
||||||
"./docker-compose.yaml"
|
|
||||||
],
|
|
||||||
"service": "workspace",
|
"service": "workspace",
|
||||||
"workspaceFolder": "/workspace/anubis",
|
"workspaceFolder": "/workspace/anubis",
|
||||||
"postStartCommand": "bash ./.devcontainer/poststart.sh",
|
"postStartCommand": "bash ./.devcontainer/poststart.sh",
|
||||||
|
|||||||
1
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
1
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
@@ -58,4 +58,3 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: Additional context
|
label: Additional context
|
||||||
description: Add any other context about the problem here.
|
description: Add any other context about the problem here.
|
||||||
|
|
||||||
|
|||||||
2
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
@@ -1,6 +1,6 @@
|
|||||||
name: Feature request
|
name: Feature request
|
||||||
description: Suggest an idea for this project
|
description: Suggest an idea for this project
|
||||||
title: '[Feature request] '
|
title: "[Feature request] "
|
||||||
|
|
||||||
body:
|
body:
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
|||||||
24
.github/actions/spelling/README.md
vendored
24
.github/actions/spelling/README.md
vendored
@@ -1,17 +1,17 @@
|
|||||||
# check-spelling/check-spelling configuration
|
# check-spelling/check-spelling configuration
|
||||||
|
|
||||||
File | Purpose | Format | Info
|
| File | Purpose | Format | Info |
|
||||||
-|-|-|-
|
| -------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||||
[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
|
| [dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary) |
|
||||||
[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
|
| [allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow) |
|
||||||
[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
|
| [reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) |
|
||||||
[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
|
| [excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes) |
|
||||||
[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
|
| [only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only) |
|
||||||
[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
|
| [patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) |
|
||||||
[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns)
|
| [candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns) |
|
||||||
[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
|
| [line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) |
|
||||||
[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
|
| [expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect) |
|
||||||
[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
|
| [advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice) |
|
||||||
|
|
||||||
Note: you can replace any of these files with a directory by the same name (minus the suffix)
|
Note: you can replace any of these files with a directory by the same name (minus the suffix)
|
||||||
and then include multiple files inside that directory (with that suffix) to merge multiple files together.
|
and then include multiple files inside that directory (with that suffix) to merge multiple files together.
|
||||||
|
|||||||
19
.github/actions/spelling/advice.md
vendored
19
.github/actions/spelling/advice.md
vendored
@@ -2,30 +2,27 @@
|
|||||||
<details><summary>If the flagged items are :exploding_head: false positives</summary>
|
<details><summary>If the flagged items are :exploding_head: false positives</summary>
|
||||||
|
|
||||||
If items relate to a ...
|
If items relate to a ...
|
||||||
* binary file (or some other file you wouldn't want to check at all).
|
|
||||||
|
- binary file (or some other file you wouldn't want to check at all).
|
||||||
|
|
||||||
Please add a file path to the `excludes.txt` file matching the containing file.
|
Please add a file path to the `excludes.txt` file matching the containing file.
|
||||||
|
|
||||||
File paths are Perl 5 Regular Expressions - you can [test](
|
File paths are Perl 5 Regular Expressions - you can [test](https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
|
||||||
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
|
|
||||||
|
|
||||||
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
|
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](../tree/HEAD/README.md) (on whichever branch you're using).
|
||||||
../tree/HEAD/README.md) (on whichever branch you're using).
|
|
||||||
|
|
||||||
* well-formed pattern.
|
- well-formed pattern.
|
||||||
|
|
||||||
If you can write a [pattern](
|
If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
|
||||||
https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
|
|
||||||
) that would match it,
|
|
||||||
try adding it to the `patterns.txt` file.
|
try adding it to the `patterns.txt` file.
|
||||||
|
|
||||||
Patterns are Perl 5 Regular Expressions - you can [test](
|
Patterns are Perl 5 Regular Expressions - you can [test](https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
|
||||||
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
|
|
||||||
|
|
||||||
Note that patterns can't match multiline strings.
|
Note that patterns can't match multiline strings.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<!-- adoption information-->
|
<!-- adoption information-->
|
||||||
|
|
||||||
:steam_locomotive: If you're seeing this message and your PR is from a branch that doesn't have check-spelling,
|
:steam_locomotive: If you're seeing this message and your PR is from a branch that doesn't have check-spelling,
|
||||||
please merge to your PR's base branch to get the version configured for your repository.
|
please merge to your PR's base branch to get the version configured for your repository.
|
||||||
|
|||||||
1
.github/actions/spelling/allow.txt
vendored
1
.github/actions/spelling/allow.txt
vendored
@@ -23,3 +23,4 @@ fout
|
|||||||
iplist
|
iplist
|
||||||
NArg
|
NArg
|
||||||
blocklists
|
blocklists
|
||||||
|
rififi
|
||||||
|
|||||||
6
.github/actions/spelling/expect.txt
vendored
6
.github/actions/spelling/expect.txt
vendored
@@ -64,7 +64,6 @@ ckie
|
|||||||
cloudflare
|
cloudflare
|
||||||
Codespaces
|
Codespaces
|
||||||
confd
|
confd
|
||||||
connnection
|
|
||||||
containerbuild
|
containerbuild
|
||||||
containerregistry
|
containerregistry
|
||||||
coreutils
|
coreutils
|
||||||
@@ -75,6 +74,7 @@ Cscript
|
|||||||
daemonizing
|
daemonizing
|
||||||
databento
|
databento
|
||||||
dayjob
|
dayjob
|
||||||
|
dco
|
||||||
DDOS
|
DDOS
|
||||||
Debian
|
Debian
|
||||||
debrpm
|
debrpm
|
||||||
@@ -135,6 +135,7 @@ gipc
|
|||||||
gitea
|
gitea
|
||||||
GLM
|
GLM
|
||||||
godotenv
|
godotenv
|
||||||
|
goimports
|
||||||
goland
|
goland
|
||||||
gomod
|
gomod
|
||||||
goodbot
|
goodbot
|
||||||
@@ -257,6 +258,7 @@ Pangu
|
|||||||
parseable
|
parseable
|
||||||
passthrough
|
passthrough
|
||||||
Patreon
|
Patreon
|
||||||
|
perplexitybot
|
||||||
pgrep
|
pgrep
|
||||||
phrik
|
phrik
|
||||||
pidfile
|
pidfile
|
||||||
@@ -367,6 +369,7 @@ VKE
|
|||||||
vnd
|
vnd
|
||||||
VPS
|
VPS
|
||||||
Vultr
|
Vultr
|
||||||
|
WAIFU
|
||||||
weblate
|
weblate
|
||||||
webmaster
|
webmaster
|
||||||
webpage
|
webpage
|
||||||
@@ -404,3 +407,4 @@ Zenos
|
|||||||
zizmor
|
zizmor
|
||||||
zombocom
|
zombocom
|
||||||
zos
|
zos
|
||||||
|
zst
|
||||||
|
|||||||
10
.github/workflows/asset-verification.yml
vendored
10
.github/workflows/asset-verification.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
asset_verification:
|
asset_verification:
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@@ -22,12 +22,12 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential
|
sudo apt-get install -y build-essential
|
||||||
|
|
||||||
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version: '24.11.0'
|
node-version: "24.11.0"
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- name: install node deps
|
- name: install node deps
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
9
.github/workflows/dco-check.yaml
vendored
Normal file
9
.github/workflows/dco-check.yaml
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
name: DCO Check
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
dco_check:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: tisonkun/actions-dco@f1024cd563550b5632e754df11b7d30b73be54a5 # v1.1
|
||||||
10
.github/workflows/docker-pr.yml
vendored
10
.github/workflows/docker-pr.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -26,12 +26,12 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential
|
sudo apt-get install -y build-essential
|
||||||
|
|
||||||
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version: '24.11.0'
|
node-version: "24.11.0"
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- uses: ko-build/setup-ko@d006021bd0c28d1ce33a07e7943d48b079944c8d # v0.9
|
- uses: ko-build/setup-ko@d006021bd0c28d1ce33a07e7943d48b079944c8d # v0.9
|
||||||
|
|
||||||
|
|||||||
10
.github/workflows/docker.yml
vendored
10
.github/workflows/docker.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -36,12 +36,12 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV
|
echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version: '24.11.0'
|
node-version: "24.11.0"
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- uses: ko-build/setup-ko@d006021bd0c28d1ce33a07e7943d48b079944c8d # v0.9
|
- uses: ko-build/setup-ko@d006021bd0c28d1ce33a07e7943d48b079944c8d # v0.9
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/docs-deploy.yml
vendored
2
.github/workflows/docs-deploy.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/docs-test.yml
vendored
2
.github/workflows/docs-test.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
6
.github/workflows/go-mod-tidy-check.yml
vendored
6
.github/workflows/go-mod-tidy-check.yml
vendored
@@ -13,13 +13,13 @@ jobs:
|
|||||||
go_mod_tidy_check:
|
go_mod_tidy_check:
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- name: Check go.mod and go.sum in main directory
|
- name: Check go.mod and go.sum in main directory
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
12
.github/workflows/go.yml
vendored
12
.github/workflows/go.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
#runs-on: alrest-techarohq
|
#runs-on: alrest-techarohq
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@@ -24,15 +24,15 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential
|
sudo apt-get install -y build-essential
|
||||||
|
|
||||||
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version: '24.11.0'
|
node-version: "24.11.0"
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- name: Cache playwright binaries
|
- name: Cache playwright binaries
|
||||||
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
|
||||||
id: playwright-cache
|
id: playwright-cache
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
19
.github/workflows/lint-pr-title.yaml
vendored
Normal file
19
.github/workflows/lint-pr-title.yaml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: "Lint PR"
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- edited
|
||||||
|
- synchronize
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint_pr_title:
|
||||||
|
name: Validate PR title
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: read
|
||||||
|
steps:
|
||||||
|
- uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 # v5.5.3
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
10
.github/workflows/package-builds-stable.yml
vendored
10
.github/workflows/package-builds-stable.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
|||||||
#runs-on: alrest-techarohq
|
#runs-on: alrest-techarohq
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
@@ -25,12 +25,12 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential
|
sudo apt-get install -y build-essential
|
||||||
|
|
||||||
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version: '24.11.0'
|
node-version: "24.11.0"
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- name: install node deps
|
- name: install node deps
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
10
.github/workflows/package-builds-unstable.yml
vendored
10
.github/workflows/package-builds-unstable.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
#runs-on: alrest-techarohq
|
#runs-on: alrest-techarohq
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
@@ -26,12 +26,12 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential
|
sudo apt-get install -y build-essential
|
||||||
|
|
||||||
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version: '24.11.0'
|
node-version: "24.11.0"
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- name: install node deps
|
- name: install node deps
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
6
.github/workflows/smoke-tests.yml
vendored
6
.github/workflows/smoke-tests.yml
vendored
@@ -30,14 +30,14 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version: "24.11.0"
|
node-version: "24.11.0"
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: "1.25.4"
|
go-version: "1.25.4"
|
||||||
|
|
||||||
|
|||||||
12
.github/workflows/spelling.yml
vendored
12
.github/workflows/spelling.yml
vendored
@@ -59,16 +59,16 @@ name: Check Spelling
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- '**'
|
- "**"
|
||||||
tags-ignore:
|
tags-ignore:
|
||||||
- '**'
|
- "**"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- '**'
|
- "**"
|
||||||
types:
|
types:
|
||||||
- 'opened'
|
- "opened"
|
||||||
- 'reopened'
|
- "reopened"
|
||||||
- 'synchronize'
|
- "synchronize"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
spelling:
|
spelling:
|
||||||
|
|||||||
2
.github/workflows/ssh-ci-runner-cron.yml
vendored
2
.github/workflows/ssh-ci-runner-cron.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|||||||
6
.github/workflows/ssh-ci.yml
vendored
6
.github/workflows/ssh-ci.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
- aarch64-16k
|
- aarch64-16k
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -35,9 +35,9 @@ jobs:
|
|||||||
name: id_rsa
|
name: id_rsa
|
||||||
known_hosts: ${{ secrets.CI_SSH_KNOWN_HOSTS }}
|
known_hosts: ${{ secrets.CI_SSH_KNOWN_HOSTS }}
|
||||||
|
|
||||||
- uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
|
- uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25.4'
|
go-version: "1.25.4"
|
||||||
|
|
||||||
- name: Run CI
|
- name: Run CI
|
||||||
run: go run ./utils/cmd/backoff-retry bash test/ssh-ci/rigging.sh ${{ matrix.host }}
|
run: go run ./utils/cmd/backoff-retry bash test/ssh-ci/rigging.sh ${{ matrix.host }}
|
||||||
|
|||||||
16
.github/workflows/zizmor.yml
vendored
16
.github/workflows/zizmor.yml
vendored
@@ -1,12 +1,12 @@
|
|||||||
name: zizmor
|
name: zizmor
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/*.ya?ml'
|
- ".github/workflows/*.ya?ml"
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/*.ya?ml'
|
- ".github/workflows/*.ya?ml"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
zizmor:
|
zizmor:
|
||||||
@@ -16,12 +16,12 @@ jobs:
|
|||||||
security-events: write
|
security-events: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Install the latest version of uv
|
- name: Install the latest version of uv
|
||||||
uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6
|
uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
|
||||||
|
|
||||||
- name: Run zizmor 🌈
|
- name: Run zizmor 🌈
|
||||||
run: uvx zizmor --format sarif . > results.sarif
|
run: uvx zizmor --format sarif . > results.sarif
|
||||||
|
|||||||
8
.husky/commit-msg
Normal file
8
.husky/commit-msg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
npx --no-install commitlint --edit "$1"
|
||||||
|
|
||||||
|
# Check if commit message contains Signed-off-by line
|
||||||
|
if ! grep -q "^Signed-off-by:" "$1"; then
|
||||||
|
echo "Commit message must contain a 'Signed-off-by:' line."
|
||||||
|
echo "Please use 'git commit --signoff' or add a Signed-off-by line to your commit message."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
2
.husky/pre-commit
Normal file
2
.husky/pre-commit
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
npm run lint
|
||||||
|
npm run test
|
||||||
18
.ko.yaml
18
.ko.yaml
@@ -1,13 +1,13 @@
|
|||||||
defaultBaseImage: cgr.dev/chainguard/static
|
defaultBaseImage: cgr.dev/chainguard/static
|
||||||
defaultPlatforms:
|
defaultPlatforms:
|
||||||
- linux/arm64
|
- linux/arm64
|
||||||
- linux/amd64
|
- linux/amd64
|
||||||
- linux/arm/v7
|
- linux/arm/v7
|
||||||
|
|
||||||
builds:
|
builds:
|
||||||
- id: anubis
|
- id: anubis
|
||||||
main: ./cmd/anubis
|
main: ./cmd/anubis
|
||||||
ldflags:
|
ldflags:
|
||||||
- -s -w
|
- -s -w
|
||||||
- -extldflags "-static"
|
- -extldflags "-static"
|
||||||
- -X github.com/TecharoHQ/anubis.Version={{.Env.VERSION}}
|
- -X github.com/TecharoHQ/anubis.Version={{.Env.VERSION}}
|
||||||
|
|||||||
2
.prettierignore
Normal file
2
.prettierignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
lib/config/testdata/bad/*
|
||||||
|
*.inc
|
||||||
144
CONTRIBUTING.md
Normal file
144
CONTRIBUTING.md
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
# Contributing to Anubis
|
||||||
|
|
||||||
|
Anubis is a Web AI Firewall Utility (WAIFU) written in Go. It uses sha256 proof-of-work challenges to protect upstream HTTP resources from scraper bots. This is security software -- correctness matters.
|
||||||
|
|
||||||
|
## Build & Run
|
||||||
|
|
||||||
|
Prerequisites: Go 1.24+, Node.js (any supported version), esbuild, gzip, zstd, brotli. Install all with `brew bundle` if you are using Homebrew.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npm ci # install node dependencies
|
||||||
|
npm run assets # build JS/CSS (required before any Go build/test)
|
||||||
|
npm run build # assets + go build -> ./var/anubis
|
||||||
|
npm run dev # assets + run locally with --use-remote-address
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Run all unit tests (assets must be built first)
|
||||||
|
npm run test # or: make test
|
||||||
|
|
||||||
|
# Run a single test by name
|
||||||
|
go test -run TestClampIP ./internal/
|
||||||
|
|
||||||
|
# Run a single test file's package
|
||||||
|
go test ./lib/config/
|
||||||
|
|
||||||
|
# Run tests with verbose output
|
||||||
|
go test -v -run TestBotValid ./lib/config/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Smoke tests
|
||||||
|
|
||||||
|
The `tests` folder contains "smoke tests" that are intended to set up Anubis in production-adjacent settings and testing it against real infrastructure tools. A smoke test is a folder with `test.sh` that sets up infrastructure, validates the behaviour, and then tears it down. Smoke tests are run in GitHub actions with `.github/workflows/smoke-tests.yaml`.
|
||||||
|
|
||||||
|
## Linting
|
||||||
|
|
||||||
|
```shell
|
||||||
|
go vet ./...
|
||||||
|
go tool staticcheck ./...
|
||||||
|
go tool govulncheck ./...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code Generation
|
||||||
|
|
||||||
|
The project uses `go generate` for templ templates and stringer. Always run `npm run generate` (or `make assets`) before building or testing. Generated files include:
|
||||||
|
|
||||||
|
- `web/*.templ` -> templ-generated Go code
|
||||||
|
- `web/static/` -> bundled/minified JS and CSS (with .gz, .zst, .br variants)
|
||||||
|
|
||||||
|
## Project Layout
|
||||||
|
|
||||||
|
Important folders:
|
||||||
|
|
||||||
|
- `cmd/anubis`: Main entrypoint for the project. This is the program that runs on servers.
|
||||||
|
- `lib/*`: The core library for Anubis and all of its features. This is internal code that is made public for ease of downstream consumption. No API stability is guaranteed. Use at your own risk.
|
||||||
|
- `internal/*`: Actual internal code that is private to the implementation of Anubis. If you need to use a package in this, please copy it out and manually vendor it in your own project.
|
||||||
|
- `test/*` Smoke tests (see dedicated section for details).
|
||||||
|
- `web`: Frontend HTML templates.
|
||||||
|
- `xess`: Frontend CSS framework and build logic.
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
### Go
|
||||||
|
|
||||||
|
This project follows the idioms of the Go standard library. Generally follow the patterns that upstream Go uses, including:
|
||||||
|
|
||||||
|
- Prefer packages from the standard library unless there is no other option.
|
||||||
|
- Use package import aliases only when package names collide.
|
||||||
|
- Use `goimports` to format code. Run with `npm run format`.
|
||||||
|
- Use sentinel errors as package-level variables prefixed with `Err` (such as `ErrBotMustHaveName`). Wrap with `fmt.Errorf("package: small message giving context: %w", err)`.
|
||||||
|
- Use `log/slog` for structured logging. Pass loggers as arguments to functions. Use `lg.With` to preload with context. Prefer using `slog.Debug` unless you absolutely need to report messages to users, some users have magical thinking about log verbosity.
|
||||||
|
- Name PublicFunctionsAndTypes in PascalCase. Name privateFunctionsAndTypes in camelCase.
|
||||||
|
- Acronyms stay uppercase (`URL`, `HTTP`, `IP`, `DNS`, etc.)
|
||||||
|
- Enumerations should use strong types with validation logic for parsing remote input.
|
||||||
|
- Be conservative in what you send but liberal in what you accept.
|
||||||
|
- Anything reading configuration values should use both `json` and `yaml` struct tags. Use pointer values for optional configuration values.
|
||||||
|
- Use [table-driven tests](https://go.dev/wiki/TableDrivenTests) when writing test code.
|
||||||
|
- Use [`t.Helper()`](https://pkg.go.dev/testing#T.Helper) in helper code (setup/teardown scaffolding).
|
||||||
|
- Use [`t.Cleanup()`](https://pkg.go.dev/testing#T.Cleanup) to tear down per-test or per-suite scaffolding.
|
||||||
|
- Use [`errors.Is`](https://pkg.go.dev/errors#Is) for validating function results against sentinel errors.
|
||||||
|
- Prefer same-package tests over black-box tests (`_test` packages).
|
||||||
|
|
||||||
|
### JavaScript / TypeScript
|
||||||
|
|
||||||
|
- Source lives in `web/js/`. Built with esbuild, bundled and minified.
|
||||||
|
- Uses Preact (not React).
|
||||||
|
- No linter config. Keep functions small. Use `const` by default.
|
||||||
|
|
||||||
|
### Templ Templates
|
||||||
|
|
||||||
|
Anubis uses [Templ](https://templ.guide) for generating HTML on the server.
|
||||||
|
|
||||||
|
- `.templ` files in `web/` generate Go code. Run `go generate ./...` (or `npm run assets`) after modifying them.
|
||||||
|
- Templates receive typed Go parameters. Keep logic in Go, not templates.
|
||||||
|
|
||||||
|
## Commit Messages
|
||||||
|
|
||||||
|
Commit messages follow the [**Conventional Commits**](https://www.conventionalcommits.org/en/v1.0.0/) format:
|
||||||
|
|
||||||
|
```text
|
||||||
|
<type>[optional scope]: <description>
|
||||||
|
|
||||||
|
[optional body]
|
||||||
|
|
||||||
|
[optional footer(s)]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Types**: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
|
||||||
|
|
||||||
|
- Add `!` after type/scope for breaking changes or include `BREAKING CHANGE:` in the footer.
|
||||||
|
- Keep descriptions concise, imperative, lowercase, and without a trailing period.
|
||||||
|
- Reference issues/PRs in the footer when applicable.
|
||||||
|
- **ALL git commits MUST be made with `--signoff`.** This is mandatory.
|
||||||
|
|
||||||
|
### Attribution Requirements
|
||||||
|
|
||||||
|
AI agents must disclose what tool and model they are using in the "Assisted-by" commit footer:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Assisted-by: [Model Name] via [Tool Name]
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Assisted-by: GLM 4.6 via Claude Code
|
||||||
|
```
|
||||||
|
|
||||||
|
## PR Checklist
|
||||||
|
|
||||||
|
- Add description of changes to `[Unreleased]` in `docs/docs/CHANGELOG.md`.
|
||||||
|
- Add test cases for bug fixes and behavior changes.
|
||||||
|
- Run integration tests: `npm run test:integration`.
|
||||||
|
- All commits must have verified (signed) signatures.
|
||||||
|
|
||||||
|
## Key Conventions
|
||||||
|
|
||||||
|
- **Security-first**: This is security software. Code reviews are strict. Always add tests for bug fixes. Consider adversarial inputs.
|
||||||
|
- **Configuration**: YAML-based policy files. Config structs validate via `Valid() error` methods returning sentinel errors.
|
||||||
|
- **Store interface**: `lib/store.Interface` abstracts key-value storage.
|
||||||
|
- **Environment variables**: Parsed from flags via `flagenv`. Use `.env` files locally (loaded by `godotenv/autoload`). Never commit `.env` files.
|
||||||
|
- **Assets must be built first**: JS/CSS assets are embedded into the Go binary. Always run `npm run assets` before `go test` or `go build`.
|
||||||
|
- **CEL expressions**: Policy rules support CEL (Common Expression Language) expressions for advanced matching. See `lib/policy/expressions/`.
|
||||||
4
cmd/robots2policy/testdata/blacklist.yaml
vendored
4
cmd/robots2policy/testdata/blacklist.yaml
vendored
@@ -25,6 +25,6 @@
|
|||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("Googlebot")
|
- userAgent.contains("Googlebot")
|
||||||
- path.startsWith("/search")
|
- path.startsWith("/search")
|
||||||
name: robots-txt-policy-disallow-7
|
name: robots-txt-policy-disallow-7
|
||||||
|
|||||||
24
cmd/robots2policy/testdata/complex.yaml
vendored
24
cmd/robots2policy/testdata/complex.yaml
vendored
@@ -20,8 +20,8 @@
|
|||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("Googlebot")
|
- userAgent.contains("Googlebot")
|
||||||
- path.startsWith("/search/")
|
- path.startsWith("/search/")
|
||||||
name: robots-txt-policy-disallow-6
|
name: robots-txt-policy-disallow-6
|
||||||
- action: WEIGH
|
- action: WEIGH
|
||||||
expression: userAgent.contains("Bingbot")
|
expression: userAgent.contains("Bingbot")
|
||||||
@@ -31,14 +31,14 @@
|
|||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("Bingbot")
|
- userAgent.contains("Bingbot")
|
||||||
- path.startsWith("/search/")
|
- path.startsWith("/search/")
|
||||||
name: robots-txt-policy-disallow-8
|
name: robots-txt-policy-disallow-8
|
||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("Bingbot")
|
- userAgent.contains("Bingbot")
|
||||||
- path.startsWith("/admin/")
|
- path.startsWith("/admin/")
|
||||||
name: robots-txt-policy-disallow-9
|
name: robots-txt-policy-disallow-9
|
||||||
- action: DENY
|
- action: DENY
|
||||||
expression: userAgent.contains("BadBot")
|
expression: userAgent.contains("BadBot")
|
||||||
@@ -54,18 +54,18 @@
|
|||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("TestBot")
|
- userAgent.contains("TestBot")
|
||||||
- path.matches("^/.*/admin")
|
- path.matches("^/.*/admin")
|
||||||
name: robots-txt-policy-disallow-13
|
name: robots-txt-policy-disallow-13
|
||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("TestBot")
|
- userAgent.contains("TestBot")
|
||||||
- path.matches("^/temp.*\\.html")
|
- path.matches("^/temp.*\\.html")
|
||||||
name: robots-txt-policy-disallow-14
|
name: robots-txt-policy-disallow-14
|
||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("TestBot")
|
- userAgent.contains("TestBot")
|
||||||
- path.matches("^/file.\\.log")
|
- path.matches("^/file.\\.log")
|
||||||
name: robots-txt-policy-disallow-15
|
name: robots-txt-policy-disallow-15
|
||||||
|
|||||||
26
cmd/robots2policy/testdata/consecutive.yaml
vendored
26
cmd/robots2policy/testdata/consecutive.yaml
vendored
@@ -9,39 +9,39 @@
|
|||||||
- action: DENY
|
- action: DENY
|
||||||
expression:
|
expression:
|
||||||
any:
|
any:
|
||||||
- userAgent.contains("BadBot")
|
- userAgent.contains("BadBot")
|
||||||
- userAgent.contains("SpamBot")
|
- userAgent.contains("SpamBot")
|
||||||
- userAgent.contains("EvilBot")
|
- userAgent.contains("EvilBot")
|
||||||
name: robots-txt-policy-blacklist-3
|
name: robots-txt-policy-blacklist-3
|
||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("GoodBot")
|
- userAgent.contains("GoodBot")
|
||||||
- path.startsWith("/private")
|
- path.startsWith("/private")
|
||||||
name: robots-txt-policy-disallow-4
|
name: robots-txt-policy-disallow-4
|
||||||
- action: WEIGH
|
- action: WEIGH
|
||||||
expression:
|
expression:
|
||||||
any:
|
any:
|
||||||
- userAgent.contains("SlowBot1")
|
- userAgent.contains("SlowBot1")
|
||||||
- userAgent.contains("SlowBot2")
|
- userAgent.contains("SlowBot2")
|
||||||
name: robots-txt-policy-crawl-delay-5
|
name: robots-txt-policy-crawl-delay-5
|
||||||
weight:
|
weight:
|
||||||
adjust: 3
|
adjust: 3
|
||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("SearchBot1")
|
- userAgent.contains("SearchBot1")
|
||||||
- path.startsWith("/search")
|
- path.startsWith("/search")
|
||||||
name: robots-txt-policy-disallow-7
|
name: robots-txt-policy-disallow-7
|
||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("SearchBot2")
|
- userAgent.contains("SearchBot2")
|
||||||
- path.startsWith("/search")
|
- path.startsWith("/search")
|
||||||
name: robots-txt-policy-disallow-8
|
name: robots-txt-policy-disallow-8
|
||||||
- action: CHALLENGE
|
- action: CHALLENGE
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.contains("SearchBot3")
|
- userAgent.contains("SearchBot3")
|
||||||
- path.startsWith("/search")
|
- path.startsWith("/search")
|
||||||
name: robots-txt-policy-disallow-9
|
name: robots-txt-policy-disallow-9
|
||||||
|
|||||||
@@ -2,5 +2,5 @@
|
|||||||
action: ALLOW
|
action: ALLOW
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- '!(method == "HEAD" || method == "GET")'
|
- '!(method == "HEAD" || method == "GET")'
|
||||||
- path.startsWith("/api/")
|
- path.startsWith("/api/")
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
- name: qualys-ssl-labs
|
- name: qualys-ssl-labs
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
remote_addresses:
|
remote_addresses:
|
||||||
- 69.67.183.0/24
|
- 69.67.183.0/24
|
||||||
- 2600:C02:1020:4202::/64
|
- 2600:C02:1020:4202::/64
|
||||||
- 2602:fdaa:c6:2::/64
|
- 2602:fdaa:c6:2::/64
|
||||||
|
|||||||
@@ -5,5 +5,5 @@
|
|||||||
- name: searx-checker
|
- name: searx-checker
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
remote_addresses:
|
remote_addresses:
|
||||||
- 167.235.158.251/32
|
- 167.235.158.251/32
|
||||||
- 2a01:4f8:1c1c:8fc2::1/128
|
- 2a01:4f8:1c1c:8fc2::1/128
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
action: ALLOW
|
action: ALLOW
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- remoteAddress == "159.69.213.214" || remoteAddress == "2a01:4f8:c2c:7bf4::1"
|
- remoteAddress == "159.69.213.214" || remoteAddress == "2a01:4f8:c2c:7bf4::1"
|
||||||
- userAgent == "Mozilla/5.0 (compatible; utils.web Limnoria module)"
|
- userAgent == "Mozilla/5.0 (compatible; utils.web Limnoria module)"
|
||||||
- '"X-Http-Version" in headers'
|
- '"X-Http-Version" in headers'
|
||||||
- headers["X-Http-Version"] == "HTTP/1.1"
|
- headers["X-Http-Version"] == "HTTP/1.1"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
action: ALLOW
|
action: ALLOW
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- remoteAddress == "45.76.166.57"
|
- remoteAddress == "45.76.166.57"
|
||||||
- userAgent == "Mozilla/5.0 (Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0"
|
- userAgent == "Mozilla/5.0 (Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0"
|
||||||
- '"X-Http-Version" in headers'
|
- '"X-Http-Version" in headers'
|
||||||
- headers["X-Http-Version"] == "HTTP/1.1"
|
- headers["X-Http-Version"] == "HTTP/1.1"
|
||||||
|
|||||||
@@ -4,5 +4,5 @@
|
|||||||
# - Claude-User: No published IP allowlist
|
# - Claude-User: No published IP allowlist
|
||||||
- name: "ai-clients"
|
- name: "ai-clients"
|
||||||
user_agent_regex: >-
|
user_agent_regex: >-
|
||||||
ChatGPT-User|Claude-User|MistralAI-User
|
ChatGPT-User|Claude-User|MistralAI-User|Perplexity-User
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
action: ALLOW
|
action: ALLOW
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.startsWith("Go-http-client/")
|
- userAgent.startsWith("Go-http-client/")
|
||||||
- '"go-get" in query'
|
- '"go-get" in query'
|
||||||
- query["go-get"] == "1"
|
- query["go-get"] == "1"
|
||||||
|
|||||||
@@ -4,7 +4,4 @@
|
|||||||
user_agent_regex: MistralAI-User/.+; \+https\://docs\.mistral\.ai/robots
|
user_agent_regex: MistralAI-User/.+; \+https\://docs\.mistral\.ai/robots
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://mistral.ai/mistralai-user-ips.json
|
# https://mistral.ai/mistralai-user-ips.json
|
||||||
remote_addresses: [
|
remote_addresses: ["20.240.160.161/32", "20.240.160.1/32"]
|
||||||
"20.240.160.161/32",
|
|
||||||
"20.240.160.1/32",
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -5,89 +5,90 @@
|
|||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://openai.com/chatgpt-user.json
|
# https://openai.com/chatgpt-user.json
|
||||||
# curl 'https://openai.com/chatgpt-user.json' | jq '.prefixes.[].ipv4Prefix' | sed 's/$/,/'
|
# curl 'https://openai.com/chatgpt-user.json' | jq '.prefixes.[].ipv4Prefix' | sed 's/$/,/'
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"13.65.138.112/28",
|
[
|
||||||
"23.98.179.16/28",
|
"13.65.138.112/28",
|
||||||
"13.65.138.96/28",
|
"23.98.179.16/28",
|
||||||
"172.183.222.128/28",
|
"13.65.138.96/28",
|
||||||
"20.102.212.144/28",
|
"172.183.222.128/28",
|
||||||
"40.116.73.208/28",
|
"20.102.212.144/28",
|
||||||
"172.183.143.224/28",
|
"40.116.73.208/28",
|
||||||
"52.190.190.16/28",
|
"172.183.143.224/28",
|
||||||
"13.83.237.176/28",
|
"52.190.190.16/28",
|
||||||
"51.8.155.64/28",
|
"13.83.237.176/28",
|
||||||
"74.249.86.176/28",
|
"51.8.155.64/28",
|
||||||
"51.8.155.48/28",
|
"74.249.86.176/28",
|
||||||
"20.55.229.144/28",
|
"51.8.155.48/28",
|
||||||
"135.237.131.208/28",
|
"20.55.229.144/28",
|
||||||
"135.237.133.48/28",
|
"135.237.131.208/28",
|
||||||
"51.8.155.112/28",
|
"135.237.133.48/28",
|
||||||
"135.237.133.112/28",
|
"51.8.155.112/28",
|
||||||
"52.159.249.96/28",
|
"135.237.133.112/28",
|
||||||
"52.190.137.16/28",
|
"52.159.249.96/28",
|
||||||
"52.255.111.112/28",
|
"52.190.137.16/28",
|
||||||
"40.84.181.32/28",
|
"52.255.111.112/28",
|
||||||
"172.178.141.112/28",
|
"40.84.181.32/28",
|
||||||
"52.190.142.64/28",
|
"172.178.141.112/28",
|
||||||
"172.178.140.144/28",
|
"52.190.142.64/28",
|
||||||
"52.190.137.144/28",
|
"172.178.140.144/28",
|
||||||
"172.178.141.128/28",
|
"52.190.137.144/28",
|
||||||
"57.154.187.32/28",
|
"172.178.141.128/28",
|
||||||
"4.196.118.112/28",
|
"57.154.187.32/28",
|
||||||
"20.193.50.32/28",
|
"4.196.118.112/28",
|
||||||
"20.215.188.192/28",
|
"20.193.50.32/28",
|
||||||
"20.215.214.16/28",
|
"20.215.188.192/28",
|
||||||
"4.197.22.112/28",
|
"20.215.214.16/28",
|
||||||
"4.197.115.112/28",
|
"4.197.22.112/28",
|
||||||
"172.213.21.16/28",
|
"4.197.115.112/28",
|
||||||
"172.213.11.144/28",
|
"172.213.21.16/28",
|
||||||
"172.213.12.112/28",
|
"172.213.11.144/28",
|
||||||
"172.213.21.144/28",
|
"172.213.12.112/28",
|
||||||
"20.90.7.144/28",
|
"172.213.21.144/28",
|
||||||
"57.154.175.0/28",
|
"20.90.7.144/28",
|
||||||
"57.154.174.112/28",
|
"57.154.175.0/28",
|
||||||
"52.236.94.144/28",
|
"57.154.174.112/28",
|
||||||
"137.135.191.176/28",
|
"52.236.94.144/28",
|
||||||
"23.98.186.192/28",
|
"137.135.191.176/28",
|
||||||
"23.98.186.96/28",
|
"23.98.186.192/28",
|
||||||
"23.98.186.176/28",
|
"23.98.186.96/28",
|
||||||
"23.98.186.64/28",
|
"23.98.186.176/28",
|
||||||
"68.221.67.192/28",
|
"23.98.186.64/28",
|
||||||
"68.221.67.160/28",
|
"68.221.67.192/28",
|
||||||
"13.83.167.128/28",
|
"68.221.67.160/28",
|
||||||
"20.228.106.176/28",
|
"13.83.167.128/28",
|
||||||
"52.159.227.32/28",
|
"20.228.106.176/28",
|
||||||
"68.220.57.64/28",
|
"52.159.227.32/28",
|
||||||
"172.213.21.112/28",
|
"68.220.57.64/28",
|
||||||
"68.221.67.224/28",
|
"172.213.21.112/28",
|
||||||
"68.221.75.16/28",
|
"68.221.67.224/28",
|
||||||
"20.97.189.96/28",
|
"68.221.75.16/28",
|
||||||
"52.252.113.240/28",
|
"20.97.189.96/28",
|
||||||
"52.230.163.32/28",
|
"52.252.113.240/28",
|
||||||
"172.212.159.64/28",
|
"52.230.163.32/28",
|
||||||
"52.255.111.80/28",
|
"172.212.159.64/28",
|
||||||
"52.255.111.0/28",
|
"52.255.111.80/28",
|
||||||
"4.151.241.240/28",
|
"52.255.111.0/28",
|
||||||
"52.255.111.32/28",
|
"4.151.241.240/28",
|
||||||
"52.255.111.48/28",
|
"52.255.111.32/28",
|
||||||
"52.255.111.16/28",
|
"52.255.111.48/28",
|
||||||
"52.230.164.176/28",
|
"52.255.111.16/28",
|
||||||
"52.176.139.176/28",
|
"52.230.164.176/28",
|
||||||
"52.173.234.16/28",
|
"52.176.139.176/28",
|
||||||
"4.151.71.176/28",
|
"52.173.234.16/28",
|
||||||
"4.151.119.48/28",
|
"4.151.71.176/28",
|
||||||
"52.255.109.112/28",
|
"4.151.119.48/28",
|
||||||
"52.255.109.80/28",
|
"52.255.109.112/28",
|
||||||
"20.161.75.208/28",
|
"52.255.109.80/28",
|
||||||
"68.154.28.96/28",
|
"20.161.75.208/28",
|
||||||
"52.255.109.128/28",
|
"68.154.28.96/28",
|
||||||
"52.225.75.208/28",
|
"52.255.109.128/28",
|
||||||
"52.190.139.48/28",
|
"52.225.75.208/28",
|
||||||
"68.221.67.240/28",
|
"52.190.139.48/28",
|
||||||
"52.156.77.144/28",
|
"68.221.67.240/28",
|
||||||
"52.148.129.32/28",
|
"52.156.77.144/28",
|
||||||
"40.84.221.208/28",
|
"52.148.129.32/28",
|
||||||
"104.210.139.224/28",
|
"40.84.221.208/28",
|
||||||
"40.84.221.224/28",
|
"104.210.139.224/28",
|
||||||
"104.210.139.192/28",
|
"40.84.221.224/28",
|
||||||
]
|
"104.210.139.192/28",
|
||||||
|
]
|
||||||
|
|||||||
8
data/clients/perplexity-user.yaml
Normal file
8
data/clients/perplexity-user.yaml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Acts on behalf of user requests
|
||||||
|
# https://docs.perplexity.ai/guides/bots
|
||||||
|
- name: perplexity-user
|
||||||
|
user_agent_regex: Perplexity-User/.+; \+https\://perplexity\.ai/perplexity-user
|
||||||
|
action: ALLOW
|
||||||
|
# https://www.perplexity.com/perplexity-user.json
|
||||||
|
remote_addresses:
|
||||||
|
["44.208.221.197/32", "34.193.163.52/32", "18.97.21.0/30", "18.97.43.80/29"]
|
||||||
@@ -2,5 +2,5 @@
|
|||||||
action: ALLOW
|
action: ALLOW
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- '!(method == "HEAD" || method == "GET")'
|
- '!(method == "HEAD" || method == "GET")'
|
||||||
- path.startsWith("/api/")
|
- path.startsWith("/api/")
|
||||||
|
|||||||
@@ -4,5 +4,5 @@
|
|||||||
# - Claude-SearchBot: No published IP allowlist
|
# - Claude-SearchBot: No published IP allowlist
|
||||||
- name: "ai-crawlers-search"
|
- name: "ai-crawlers-search"
|
||||||
user_agent_regex: >-
|
user_agent_regex: >-
|
||||||
OAI-SearchBot|Claude-SearchBot
|
OAI-SearchBot|Claude-SearchBot|PerplexityBot
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|||||||
@@ -4,17 +4,18 @@
|
|||||||
user_agent_regex: Applebot
|
user_agent_regex: Applebot
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://search.developer.apple.com/applebot.json
|
# https://search.developer.apple.com/applebot.json
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"17.241.208.160/27",
|
[
|
||||||
"17.241.193.160/27",
|
"17.241.208.160/27",
|
||||||
"17.241.200.160/27",
|
"17.241.193.160/27",
|
||||||
"17.22.237.0/24",
|
"17.241.200.160/27",
|
||||||
"17.22.245.0/24",
|
"17.22.237.0/24",
|
||||||
"17.22.253.0/24",
|
"17.22.245.0/24",
|
||||||
"17.241.75.0/24",
|
"17.22.253.0/24",
|
||||||
"17.241.219.0/24",
|
"17.241.75.0/24",
|
||||||
"17.241.227.0/24",
|
"17.241.219.0/24",
|
||||||
"17.246.15.0/24",
|
"17.241.227.0/24",
|
||||||
"17.246.19.0/24",
|
"17.246.15.0/24",
|
||||||
"17.246.23.0/24",
|
"17.246.19.0/24",
|
||||||
]
|
"17.246.23.0/24",
|
||||||
|
]
|
||||||
|
|||||||
@@ -2,33 +2,34 @@
|
|||||||
user_agent_regex: \+http\://www\.bing\.com/bingbot\.htm
|
user_agent_regex: \+http\://www\.bing\.com/bingbot\.htm
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://www.bing.com/toolbox/bingbot.json
|
# https://www.bing.com/toolbox/bingbot.json
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"157.55.39.0/24",
|
[
|
||||||
"207.46.13.0/24",
|
"157.55.39.0/24",
|
||||||
"40.77.167.0/24",
|
"207.46.13.0/24",
|
||||||
"13.66.139.0/24",
|
"40.77.167.0/24",
|
||||||
"13.66.144.0/24",
|
"13.66.139.0/24",
|
||||||
"52.167.144.0/24",
|
"13.66.144.0/24",
|
||||||
"13.67.10.16/28",
|
"52.167.144.0/24",
|
||||||
"13.69.66.240/28",
|
"13.67.10.16/28",
|
||||||
"13.71.172.224/28",
|
"13.69.66.240/28",
|
||||||
"139.217.52.0/28",
|
"13.71.172.224/28",
|
||||||
"191.233.204.224/28",
|
"139.217.52.0/28",
|
||||||
"20.36.108.32/28",
|
"191.233.204.224/28",
|
||||||
"20.43.120.16/28",
|
"20.36.108.32/28",
|
||||||
"40.79.131.208/28",
|
"20.43.120.16/28",
|
||||||
"40.79.186.176/28",
|
"40.79.131.208/28",
|
||||||
"52.231.148.0/28",
|
"40.79.186.176/28",
|
||||||
"20.79.107.240/28",
|
"52.231.148.0/28",
|
||||||
"51.105.67.0/28",
|
"20.79.107.240/28",
|
||||||
"20.125.163.80/28",
|
"51.105.67.0/28",
|
||||||
"40.77.188.0/22",
|
"20.125.163.80/28",
|
||||||
"65.55.210.0/24",
|
"40.77.188.0/22",
|
||||||
"199.30.24.0/23",
|
"65.55.210.0/24",
|
||||||
"40.77.202.0/24",
|
"199.30.24.0/23",
|
||||||
"40.77.139.0/25",
|
"40.77.202.0/24",
|
||||||
"20.74.197.0/28",
|
"40.77.139.0/25",
|
||||||
"20.15.133.160/27",
|
"20.74.197.0/28",
|
||||||
"40.77.177.0/24",
|
"20.15.133.160/27",
|
||||||
"40.77.178.0/23"
|
"40.77.177.0/24",
|
||||||
]
|
"40.77.178.0/23",
|
||||||
|
]
|
||||||
|
|||||||
@@ -2,274 +2,275 @@
|
|||||||
user_agent_regex: DuckDuckBot/1\.1; \(\+http\://duckduckgo\.com/duckduckbot\.html\)
|
user_agent_regex: DuckDuckBot/1\.1; \(\+http\://duckduckgo\.com/duckduckbot\.html\)
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://duckduckgo.com/duckduckgo-help-pages/results/duckduckbot
|
# https://duckduckgo.com/duckduckgo-help-pages/results/duckduckbot
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"57.152.72.128/32",
|
[
|
||||||
"51.8.253.152/32",
|
"57.152.72.128/32",
|
||||||
"40.80.242.63/32",
|
"51.8.253.152/32",
|
||||||
"20.12.141.99/32",
|
"40.80.242.63/32",
|
||||||
"20.49.136.28/32",
|
"20.12.141.99/32",
|
||||||
"51.116.131.221/32",
|
"20.49.136.28/32",
|
||||||
"51.107.40.209/32",
|
"51.116.131.221/32",
|
||||||
"20.40.133.240/32",
|
"51.107.40.209/32",
|
||||||
"20.50.168.91/32",
|
"20.40.133.240/32",
|
||||||
"51.120.48.122/32",
|
"20.50.168.91/32",
|
||||||
"20.193.45.113/32",
|
"51.120.48.122/32",
|
||||||
"40.76.173.151/32",
|
"20.193.45.113/32",
|
||||||
"40.76.163.7/32",
|
"40.76.173.151/32",
|
||||||
"20.185.79.47/32",
|
"40.76.163.7/32",
|
||||||
"52.142.26.175/32",
|
"20.185.79.47/32",
|
||||||
"20.185.79.15/32",
|
"52.142.26.175/32",
|
||||||
"52.142.24.149/32",
|
"20.185.79.15/32",
|
||||||
"40.76.162.208/32",
|
"52.142.24.149/32",
|
||||||
"40.76.163.23/32",
|
"40.76.162.208/32",
|
||||||
"40.76.162.191/32",
|
"40.76.163.23/32",
|
||||||
"40.76.162.247/32",
|
"40.76.162.191/32",
|
||||||
"40.88.21.235/32",
|
"40.76.162.247/32",
|
||||||
"20.191.45.212/32",
|
"40.88.21.235/32",
|
||||||
"52.146.59.12/32",
|
"20.191.45.212/32",
|
||||||
"52.146.59.156/32",
|
"52.146.59.12/32",
|
||||||
"52.146.59.154/32",
|
"52.146.59.156/32",
|
||||||
"52.146.58.236/32",
|
"52.146.59.154/32",
|
||||||
"20.62.224.44/32",
|
"52.146.58.236/32",
|
||||||
"51.104.180.53/32",
|
"20.62.224.44/32",
|
||||||
"51.104.180.47/32",
|
"51.104.180.53/32",
|
||||||
"51.104.180.26/32",
|
"51.104.180.47/32",
|
||||||
"51.104.146.225/32",
|
"51.104.180.26/32",
|
||||||
"51.104.146.235/32",
|
"51.104.146.225/32",
|
||||||
"20.73.202.147/32",
|
"51.104.146.235/32",
|
||||||
"20.73.132.240/32",
|
"20.73.202.147/32",
|
||||||
"20.71.12.143/32",
|
"20.73.132.240/32",
|
||||||
"20.56.197.58/32",
|
"20.71.12.143/32",
|
||||||
"20.56.197.63/32",
|
"20.56.197.58/32",
|
||||||
"20.43.150.93/32",
|
"20.56.197.63/32",
|
||||||
"20.43.150.85/32",
|
"20.43.150.93/32",
|
||||||
"20.44.222.1/32",
|
"20.43.150.85/32",
|
||||||
"40.89.243.175/32",
|
"20.44.222.1/32",
|
||||||
"13.89.106.77/32",
|
"40.89.243.175/32",
|
||||||
"52.143.242.6/32",
|
"13.89.106.77/32",
|
||||||
"52.143.241.111/32",
|
"52.143.242.6/32",
|
||||||
"52.154.60.82/32",
|
"52.143.241.111/32",
|
||||||
"20.197.209.11/32",
|
"52.154.60.82/32",
|
||||||
"20.197.209.27/32",
|
"20.197.209.11/32",
|
||||||
"20.226.133.105/32",
|
"20.197.209.27/32",
|
||||||
"191.234.216.4/32",
|
"20.226.133.105/32",
|
||||||
"191.234.216.178/32",
|
"191.234.216.4/32",
|
||||||
"20.53.92.211/32",
|
"191.234.216.178/32",
|
||||||
"20.53.91.2/32",
|
"20.53.92.211/32",
|
||||||
"20.207.99.197/32",
|
"20.53.91.2/32",
|
||||||
"20.207.97.190/32",
|
"20.207.99.197/32",
|
||||||
"40.81.250.205/32",
|
"20.207.97.190/32",
|
||||||
"40.64.106.11/32",
|
"40.81.250.205/32",
|
||||||
"40.64.105.247/32",
|
"40.64.106.11/32",
|
||||||
"20.72.242.93/32",
|
"40.64.105.247/32",
|
||||||
"20.99.255.235/32",
|
"20.72.242.93/32",
|
||||||
"20.113.3.121/32",
|
"20.99.255.235/32",
|
||||||
"52.224.16.221/32",
|
"20.113.3.121/32",
|
||||||
"52.224.21.53/32",
|
"52.224.16.221/32",
|
||||||
"52.224.20.204/32",
|
"52.224.21.53/32",
|
||||||
"52.224.21.19/32",
|
"52.224.20.204/32",
|
||||||
"52.224.20.249/32",
|
"52.224.21.19/32",
|
||||||
"52.224.20.203/32",
|
"52.224.20.249/32",
|
||||||
"52.224.20.190/32",
|
"52.224.20.203/32",
|
||||||
"52.224.16.229/32",
|
"52.224.20.190/32",
|
||||||
"52.224.21.20/32",
|
"52.224.16.229/32",
|
||||||
"52.146.63.80/32",
|
"52.224.21.20/32",
|
||||||
"52.224.20.227/32",
|
"52.146.63.80/32",
|
||||||
"52.224.20.193/32",
|
"52.224.20.227/32",
|
||||||
"52.190.37.160/32",
|
"52.224.20.193/32",
|
||||||
"52.224.21.23/32",
|
"52.190.37.160/32",
|
||||||
"52.224.20.223/32",
|
"52.224.21.23/32",
|
||||||
"52.224.20.181/32",
|
"52.224.20.223/32",
|
||||||
"52.224.21.49/32",
|
"52.224.20.181/32",
|
||||||
"52.224.21.55/32",
|
"52.224.21.49/32",
|
||||||
"52.224.21.61/32",
|
"52.224.21.55/32",
|
||||||
"52.224.19.152/32",
|
"52.224.21.61/32",
|
||||||
"52.224.20.186/32",
|
"52.224.19.152/32",
|
||||||
"52.224.21.27/32",
|
"52.224.20.186/32",
|
||||||
"52.224.21.51/32",
|
"52.224.21.27/32",
|
||||||
"52.224.20.174/32",
|
"52.224.21.51/32",
|
||||||
"52.224.21.4/32",
|
"52.224.20.174/32",
|
||||||
"51.104.164.109/32",
|
"52.224.21.4/32",
|
||||||
"51.104.167.71/32",
|
"51.104.164.109/32",
|
||||||
"51.104.160.177/32",
|
"51.104.167.71/32",
|
||||||
"51.104.162.149/32",
|
"51.104.160.177/32",
|
||||||
"51.104.167.95/32",
|
"51.104.162.149/32",
|
||||||
"51.104.167.54/32",
|
"51.104.167.95/32",
|
||||||
"51.104.166.111/32",
|
"51.104.167.54/32",
|
||||||
"51.104.167.88/32",
|
"51.104.166.111/32",
|
||||||
"51.104.161.32/32",
|
"51.104.167.88/32",
|
||||||
"51.104.163.250/32",
|
"51.104.161.32/32",
|
||||||
"51.104.164.189/32",
|
"51.104.163.250/32",
|
||||||
"51.104.167.19/32",
|
"51.104.164.189/32",
|
||||||
"51.104.160.167/32",
|
"51.104.167.19/32",
|
||||||
"51.104.167.110/32",
|
"51.104.160.167/32",
|
||||||
"20.191.44.119/32",
|
"51.104.167.110/32",
|
||||||
"51.104.167.104/32",
|
"20.191.44.119/32",
|
||||||
"20.191.44.234/32",
|
"51.104.167.104/32",
|
||||||
"51.104.164.215/32",
|
"20.191.44.234/32",
|
||||||
"51.104.167.52/32",
|
"51.104.164.215/32",
|
||||||
"20.191.44.22/32",
|
"51.104.167.52/32",
|
||||||
"51.104.167.87/32",
|
"20.191.44.22/32",
|
||||||
"51.104.167.96/32",
|
"51.104.167.87/32",
|
||||||
"20.191.44.16/32",
|
"51.104.167.96/32",
|
||||||
"51.104.167.61/32",
|
"20.191.44.16/32",
|
||||||
"51.104.164.147/32",
|
"51.104.167.61/32",
|
||||||
"20.50.48.159/32",
|
"51.104.164.147/32",
|
||||||
"40.114.182.172/32",
|
"20.50.48.159/32",
|
||||||
"20.50.50.130/32",
|
"40.114.182.172/32",
|
||||||
"20.50.50.163/32",
|
"20.50.50.130/32",
|
||||||
"20.50.50.46/32",
|
"20.50.50.163/32",
|
||||||
"40.114.182.153/32",
|
"20.50.50.46/32",
|
||||||
"20.50.50.118/32",
|
"40.114.182.153/32",
|
||||||
"20.50.49.55/32",
|
"20.50.50.118/32",
|
||||||
"20.50.49.25/32",
|
"20.50.49.55/32",
|
||||||
"40.114.183.251/32",
|
"20.50.49.25/32",
|
||||||
"20.50.50.123/32",
|
"40.114.183.251/32",
|
||||||
"20.50.49.237/32",
|
"20.50.50.123/32",
|
||||||
"20.50.48.192/32",
|
"20.50.49.237/32",
|
||||||
"20.50.50.134/32",
|
"20.50.48.192/32",
|
||||||
"51.138.90.233/32",
|
"20.50.50.134/32",
|
||||||
"40.114.183.196/32",
|
"51.138.90.233/32",
|
||||||
"20.50.50.146/32",
|
"40.114.183.196/32",
|
||||||
"40.114.183.88/32",
|
"20.50.50.146/32",
|
||||||
"20.50.50.145/32",
|
"40.114.183.88/32",
|
||||||
"20.50.50.121/32",
|
"20.50.50.145/32",
|
||||||
"20.50.49.40/32",
|
"20.50.50.121/32",
|
||||||
"51.138.90.206/32",
|
"20.50.49.40/32",
|
||||||
"40.114.182.45/32",
|
"51.138.90.206/32",
|
||||||
"51.138.90.161/32",
|
"40.114.182.45/32",
|
||||||
"20.50.49.0/32",
|
"51.138.90.161/32",
|
||||||
"40.119.232.215/32",
|
"20.50.49.0/32",
|
||||||
"104.43.55.167/32",
|
"40.119.232.215/32",
|
||||||
"40.119.232.251/32",
|
"104.43.55.167/32",
|
||||||
"40.119.232.50/32",
|
"40.119.232.251/32",
|
||||||
"40.119.232.146/32",
|
"40.119.232.50/32",
|
||||||
"40.119.232.218/32",
|
"40.119.232.146/32",
|
||||||
"104.43.54.127/32",
|
"40.119.232.218/32",
|
||||||
"104.43.55.117/32",
|
"104.43.54.127/32",
|
||||||
"104.43.55.116/32",
|
"104.43.55.117/32",
|
||||||
"104.43.55.166/32",
|
"104.43.55.116/32",
|
||||||
"52.154.169.50/32",
|
"104.43.55.166/32",
|
||||||
"52.154.171.70/32",
|
"52.154.169.50/32",
|
||||||
"52.154.170.229/32",
|
"52.154.171.70/32",
|
||||||
"52.154.170.113/32",
|
"52.154.170.229/32",
|
||||||
"52.154.171.44/32",
|
"52.154.170.113/32",
|
||||||
"52.154.172.2/32",
|
"52.154.171.44/32",
|
||||||
"52.143.244.81/32",
|
"52.154.172.2/32",
|
||||||
"52.154.171.87/32",
|
"52.143.244.81/32",
|
||||||
"52.154.171.250/32",
|
"52.154.171.87/32",
|
||||||
"52.154.170.28/32",
|
"52.154.171.250/32",
|
||||||
"52.154.170.122/32",
|
"52.154.170.28/32",
|
||||||
"52.143.243.117/32",
|
"52.154.170.122/32",
|
||||||
"52.143.247.235/32",
|
"52.143.243.117/32",
|
||||||
"52.154.171.235/32",
|
"52.143.247.235/32",
|
||||||
"52.154.171.196/32",
|
"52.154.171.235/32",
|
||||||
"52.154.171.0/32",
|
"52.154.171.196/32",
|
||||||
"52.154.170.243/32",
|
"52.154.171.0/32",
|
||||||
"52.154.170.26/32",
|
"52.154.170.243/32",
|
||||||
"52.154.169.200/32",
|
"52.154.170.26/32",
|
||||||
"52.154.170.96/32",
|
"52.154.169.200/32",
|
||||||
"52.154.170.88/32",
|
"52.154.170.96/32",
|
||||||
"52.154.171.150/32",
|
"52.154.170.88/32",
|
||||||
"52.154.171.205/32",
|
"52.154.171.150/32",
|
||||||
"52.154.170.117/32",
|
"52.154.171.205/32",
|
||||||
"52.154.170.209/32",
|
"52.154.170.117/32",
|
||||||
"191.235.202.48/32",
|
"52.154.170.209/32",
|
||||||
"191.233.3.202/32",
|
"191.235.202.48/32",
|
||||||
"191.235.201.214/32",
|
"191.233.3.202/32",
|
||||||
"191.233.3.197/32",
|
"191.235.201.214/32",
|
||||||
"191.235.202.38/32",
|
"191.233.3.197/32",
|
||||||
"20.53.78.144/32",
|
"191.235.202.38/32",
|
||||||
"20.193.24.10/32",
|
"20.53.78.144/32",
|
||||||
"20.53.78.236/32",
|
"20.193.24.10/32",
|
||||||
"20.53.78.138/32",
|
"20.53.78.236/32",
|
||||||
"20.53.78.123/32",
|
"20.53.78.138/32",
|
||||||
"20.53.78.106/32",
|
"20.53.78.123/32",
|
||||||
"20.193.27.215/32",
|
"20.53.78.106/32",
|
||||||
"20.193.25.197/32",
|
"20.193.27.215/32",
|
||||||
"20.193.12.126/32",
|
"20.193.25.197/32",
|
||||||
"20.193.24.251/32",
|
"20.193.12.126/32",
|
||||||
"20.204.242.101/32",
|
"20.193.24.251/32",
|
||||||
"20.207.72.113/32",
|
"20.204.242.101/32",
|
||||||
"20.204.242.19/32",
|
"20.207.72.113/32",
|
||||||
"20.219.45.67/32",
|
"20.204.242.19/32",
|
||||||
"20.207.72.11/32",
|
"20.219.45.67/32",
|
||||||
"20.219.45.190/32",
|
"20.207.72.11/32",
|
||||||
"20.204.243.55/32",
|
"20.219.45.190/32",
|
||||||
"20.204.241.148/32",
|
"20.204.243.55/32",
|
||||||
"20.207.72.110/32",
|
"20.204.241.148/32",
|
||||||
"20.204.240.172/32",
|
"20.207.72.110/32",
|
||||||
"20.207.72.21/32",
|
"20.204.240.172/32",
|
||||||
"20.204.246.81/32",
|
"20.207.72.21/32",
|
||||||
"20.207.107.181/32",
|
"20.204.246.81/32",
|
||||||
"20.204.246.254/32",
|
"20.207.107.181/32",
|
||||||
"20.219.43.246/32",
|
"20.204.246.254/32",
|
||||||
"52.149.25.43/32",
|
"20.219.43.246/32",
|
||||||
"52.149.61.51/32",
|
"52.149.25.43/32",
|
||||||
"52.149.58.139/32",
|
"52.149.61.51/32",
|
||||||
"52.149.60.38/32",
|
"52.149.58.139/32",
|
||||||
"52.148.165.38/32",
|
"52.149.60.38/32",
|
||||||
"52.143.95.162/32",
|
"52.148.165.38/32",
|
||||||
"52.149.56.151/32",
|
"52.143.95.162/32",
|
||||||
"52.149.30.45/32",
|
"52.149.56.151/32",
|
||||||
"52.149.58.173/32",
|
"52.149.30.45/32",
|
||||||
"52.143.95.204/32",
|
"52.149.58.173/32",
|
||||||
"52.149.28.83/32",
|
"52.143.95.204/32",
|
||||||
"52.149.58.69/32",
|
"52.149.28.83/32",
|
||||||
"52.148.161.87/32",
|
"52.149.58.69/32",
|
||||||
"52.149.58.27/32",
|
"52.148.161.87/32",
|
||||||
"52.149.28.18/32",
|
"52.149.58.27/32",
|
||||||
"20.79.226.26/32",
|
"52.149.28.18/32",
|
||||||
"20.79.239.66/32",
|
"20.79.226.26/32",
|
||||||
"20.79.238.198/32",
|
"20.79.239.66/32",
|
||||||
"20.113.14.159/32",
|
"20.79.238.198/32",
|
||||||
"20.75.144.152/32",
|
"20.113.14.159/32",
|
||||||
"20.43.172.120/32",
|
"20.75.144.152/32",
|
||||||
"20.53.134.160/32",
|
"20.43.172.120/32",
|
||||||
"20.201.15.208/32",
|
"20.53.134.160/32",
|
||||||
"20.93.28.24/32",
|
"20.201.15.208/32",
|
||||||
"20.61.34.40/32",
|
"20.93.28.24/32",
|
||||||
"52.242.224.168/32",
|
"20.61.34.40/32",
|
||||||
"20.80.129.80/32",
|
"52.242.224.168/32",
|
||||||
"20.195.108.47/32",
|
"20.80.129.80/32",
|
||||||
"4.195.133.120/32",
|
"20.195.108.47/32",
|
||||||
"4.228.76.163/32",
|
"4.195.133.120/32",
|
||||||
"4.182.131.108/32",
|
"4.228.76.163/32",
|
||||||
"4.209.224.56/32",
|
"4.182.131.108/32",
|
||||||
"108.141.83.74/32",
|
"4.209.224.56/32",
|
||||||
"4.213.46.14/32",
|
"108.141.83.74/32",
|
||||||
"172.169.17.165/32",
|
"4.213.46.14/32",
|
||||||
"51.8.71.117/32",
|
"172.169.17.165/32",
|
||||||
"20.3.1.178/32",
|
"51.8.71.117/32",
|
||||||
"52.149.56.151/32",
|
"20.3.1.178/32",
|
||||||
"52.149.30.45/32",
|
"52.149.56.151/32",
|
||||||
"52.149.58.173/32",
|
"52.149.30.45/32",
|
||||||
"52.143.95.204/32",
|
"52.149.58.173/32",
|
||||||
"52.149.28.83/32",
|
"52.143.95.204/32",
|
||||||
"52.149.58.69/32",
|
"52.149.28.83/32",
|
||||||
"52.148.161.87/32",
|
"52.149.58.69/32",
|
||||||
"52.149.58.27/32",
|
"52.148.161.87/32",
|
||||||
"52.149.28.18/32",
|
"52.149.58.27/32",
|
||||||
"20.79.226.26/32",
|
"52.149.28.18/32",
|
||||||
"20.79.239.66/32",
|
"20.79.226.26/32",
|
||||||
"20.79.238.198/32",
|
"20.79.239.66/32",
|
||||||
"20.113.14.159/32",
|
"20.79.238.198/32",
|
||||||
"20.75.144.152/32",
|
"20.113.14.159/32",
|
||||||
"20.43.172.120/32",
|
"20.75.144.152/32",
|
||||||
"20.53.134.160/32",
|
"20.43.172.120/32",
|
||||||
"20.201.15.208/32",
|
"20.53.134.160/32",
|
||||||
"20.93.28.24/32",
|
"20.201.15.208/32",
|
||||||
"20.61.34.40/32",
|
"20.93.28.24/32",
|
||||||
"52.242.224.168/32",
|
"20.61.34.40/32",
|
||||||
"20.80.129.80/32",
|
"52.242.224.168/32",
|
||||||
"20.195.108.47/32",
|
"20.80.129.80/32",
|
||||||
"4.195.133.120/32",
|
"20.195.108.47/32",
|
||||||
"4.228.76.163/32",
|
"4.195.133.120/32",
|
||||||
"4.182.131.108/32",
|
"4.228.76.163/32",
|
||||||
"4.209.224.56/32",
|
"4.182.131.108/32",
|
||||||
"108.141.83.74/32",
|
"4.209.224.56/32",
|
||||||
"4.213.46.14/32",
|
"108.141.83.74/32",
|
||||||
"172.169.17.165/32",
|
"4.213.46.14/32",
|
||||||
"51.8.71.117/32",
|
"172.169.17.165/32",
|
||||||
"20.3.1.178/32"
|
"51.8.71.117/32",
|
||||||
]
|
"20.3.1.178/32",
|
||||||
|
]
|
||||||
|
|||||||
@@ -2,262 +2,263 @@
|
|||||||
user_agent_regex: \+http\://www\.google\.com/bot\.html
|
user_agent_regex: \+http\://www\.google\.com/bot\.html
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://developers.google.com/static/search/apis/ipranges/googlebot.json
|
# https://developers.google.com/static/search/apis/ipranges/googlebot.json
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"2001:4860:4801:10::/64",
|
[
|
||||||
"2001:4860:4801:11::/64",
|
"2001:4860:4801:10::/64",
|
||||||
"2001:4860:4801:12::/64",
|
"2001:4860:4801:11::/64",
|
||||||
"2001:4860:4801:13::/64",
|
"2001:4860:4801:12::/64",
|
||||||
"2001:4860:4801:14::/64",
|
"2001:4860:4801:13::/64",
|
||||||
"2001:4860:4801:15::/64",
|
"2001:4860:4801:14::/64",
|
||||||
"2001:4860:4801:16::/64",
|
"2001:4860:4801:15::/64",
|
||||||
"2001:4860:4801:17::/64",
|
"2001:4860:4801:16::/64",
|
||||||
"2001:4860:4801:18::/64",
|
"2001:4860:4801:17::/64",
|
||||||
"2001:4860:4801:19::/64",
|
"2001:4860:4801:18::/64",
|
||||||
"2001:4860:4801:1a::/64",
|
"2001:4860:4801:19::/64",
|
||||||
"2001:4860:4801:1b::/64",
|
"2001:4860:4801:1a::/64",
|
||||||
"2001:4860:4801:1c::/64",
|
"2001:4860:4801:1b::/64",
|
||||||
"2001:4860:4801:1d::/64",
|
"2001:4860:4801:1c::/64",
|
||||||
"2001:4860:4801:1e::/64",
|
"2001:4860:4801:1d::/64",
|
||||||
"2001:4860:4801:1f::/64",
|
"2001:4860:4801:1e::/64",
|
||||||
"2001:4860:4801:20::/64",
|
"2001:4860:4801:1f::/64",
|
||||||
"2001:4860:4801:21::/64",
|
"2001:4860:4801:20::/64",
|
||||||
"2001:4860:4801:22::/64",
|
"2001:4860:4801:21::/64",
|
||||||
"2001:4860:4801:23::/64",
|
"2001:4860:4801:22::/64",
|
||||||
"2001:4860:4801:24::/64",
|
"2001:4860:4801:23::/64",
|
||||||
"2001:4860:4801:25::/64",
|
"2001:4860:4801:24::/64",
|
||||||
"2001:4860:4801:26::/64",
|
"2001:4860:4801:25::/64",
|
||||||
"2001:4860:4801:27::/64",
|
"2001:4860:4801:26::/64",
|
||||||
"2001:4860:4801:28::/64",
|
"2001:4860:4801:27::/64",
|
||||||
"2001:4860:4801:29::/64",
|
"2001:4860:4801:28::/64",
|
||||||
"2001:4860:4801:2::/64",
|
"2001:4860:4801:29::/64",
|
||||||
"2001:4860:4801:2a::/64",
|
"2001:4860:4801:2::/64",
|
||||||
"2001:4860:4801:2b::/64",
|
"2001:4860:4801:2a::/64",
|
||||||
"2001:4860:4801:2c::/64",
|
"2001:4860:4801:2b::/64",
|
||||||
"2001:4860:4801:2d::/64",
|
"2001:4860:4801:2c::/64",
|
||||||
"2001:4860:4801:2e::/64",
|
"2001:4860:4801:2d::/64",
|
||||||
"2001:4860:4801:2f::/64",
|
"2001:4860:4801:2e::/64",
|
||||||
"2001:4860:4801:31::/64",
|
"2001:4860:4801:2f::/64",
|
||||||
"2001:4860:4801:32::/64",
|
"2001:4860:4801:31::/64",
|
||||||
"2001:4860:4801:33::/64",
|
"2001:4860:4801:32::/64",
|
||||||
"2001:4860:4801:34::/64",
|
"2001:4860:4801:33::/64",
|
||||||
"2001:4860:4801:35::/64",
|
"2001:4860:4801:34::/64",
|
||||||
"2001:4860:4801:36::/64",
|
"2001:4860:4801:35::/64",
|
||||||
"2001:4860:4801:37::/64",
|
"2001:4860:4801:36::/64",
|
||||||
"2001:4860:4801:38::/64",
|
"2001:4860:4801:37::/64",
|
||||||
"2001:4860:4801:39::/64",
|
"2001:4860:4801:38::/64",
|
||||||
"2001:4860:4801:3a::/64",
|
"2001:4860:4801:39::/64",
|
||||||
"2001:4860:4801:3b::/64",
|
"2001:4860:4801:3a::/64",
|
||||||
"2001:4860:4801:3c::/64",
|
"2001:4860:4801:3b::/64",
|
||||||
"2001:4860:4801:3d::/64",
|
"2001:4860:4801:3c::/64",
|
||||||
"2001:4860:4801:3e::/64",
|
"2001:4860:4801:3d::/64",
|
||||||
"2001:4860:4801:40::/64",
|
"2001:4860:4801:3e::/64",
|
||||||
"2001:4860:4801:41::/64",
|
"2001:4860:4801:40::/64",
|
||||||
"2001:4860:4801:42::/64",
|
"2001:4860:4801:41::/64",
|
||||||
"2001:4860:4801:43::/64",
|
"2001:4860:4801:42::/64",
|
||||||
"2001:4860:4801:44::/64",
|
"2001:4860:4801:43::/64",
|
||||||
"2001:4860:4801:45::/64",
|
"2001:4860:4801:44::/64",
|
||||||
"2001:4860:4801:46::/64",
|
"2001:4860:4801:45::/64",
|
||||||
"2001:4860:4801:47::/64",
|
"2001:4860:4801:46::/64",
|
||||||
"2001:4860:4801:48::/64",
|
"2001:4860:4801:47::/64",
|
||||||
"2001:4860:4801:49::/64",
|
"2001:4860:4801:48::/64",
|
||||||
"2001:4860:4801:4a::/64",
|
"2001:4860:4801:49::/64",
|
||||||
"2001:4860:4801:4b::/64",
|
"2001:4860:4801:4a::/64",
|
||||||
"2001:4860:4801:4c::/64",
|
"2001:4860:4801:4b::/64",
|
||||||
"2001:4860:4801:50::/64",
|
"2001:4860:4801:4c::/64",
|
||||||
"2001:4860:4801:51::/64",
|
"2001:4860:4801:50::/64",
|
||||||
"2001:4860:4801:52::/64",
|
"2001:4860:4801:51::/64",
|
||||||
"2001:4860:4801:53::/64",
|
"2001:4860:4801:52::/64",
|
||||||
"2001:4860:4801:54::/64",
|
"2001:4860:4801:53::/64",
|
||||||
"2001:4860:4801:55::/64",
|
"2001:4860:4801:54::/64",
|
||||||
"2001:4860:4801:56::/64",
|
"2001:4860:4801:55::/64",
|
||||||
"2001:4860:4801:60::/64",
|
"2001:4860:4801:56::/64",
|
||||||
"2001:4860:4801:61::/64",
|
"2001:4860:4801:60::/64",
|
||||||
"2001:4860:4801:62::/64",
|
"2001:4860:4801:61::/64",
|
||||||
"2001:4860:4801:63::/64",
|
"2001:4860:4801:62::/64",
|
||||||
"2001:4860:4801:64::/64",
|
"2001:4860:4801:63::/64",
|
||||||
"2001:4860:4801:65::/64",
|
"2001:4860:4801:64::/64",
|
||||||
"2001:4860:4801:66::/64",
|
"2001:4860:4801:65::/64",
|
||||||
"2001:4860:4801:67::/64",
|
"2001:4860:4801:66::/64",
|
||||||
"2001:4860:4801:68::/64",
|
"2001:4860:4801:67::/64",
|
||||||
"2001:4860:4801:69::/64",
|
"2001:4860:4801:68::/64",
|
||||||
"2001:4860:4801:6a::/64",
|
"2001:4860:4801:69::/64",
|
||||||
"2001:4860:4801:6b::/64",
|
"2001:4860:4801:6a::/64",
|
||||||
"2001:4860:4801:6c::/64",
|
"2001:4860:4801:6b::/64",
|
||||||
"2001:4860:4801:6d::/64",
|
"2001:4860:4801:6c::/64",
|
||||||
"2001:4860:4801:6e::/64",
|
"2001:4860:4801:6d::/64",
|
||||||
"2001:4860:4801:6f::/64",
|
"2001:4860:4801:6e::/64",
|
||||||
"2001:4860:4801:70::/64",
|
"2001:4860:4801:6f::/64",
|
||||||
"2001:4860:4801:71::/64",
|
"2001:4860:4801:70::/64",
|
||||||
"2001:4860:4801:72::/64",
|
"2001:4860:4801:71::/64",
|
||||||
"2001:4860:4801:73::/64",
|
"2001:4860:4801:72::/64",
|
||||||
"2001:4860:4801:74::/64",
|
"2001:4860:4801:73::/64",
|
||||||
"2001:4860:4801:75::/64",
|
"2001:4860:4801:74::/64",
|
||||||
"2001:4860:4801:76::/64",
|
"2001:4860:4801:75::/64",
|
||||||
"2001:4860:4801:77::/64",
|
"2001:4860:4801:76::/64",
|
||||||
"2001:4860:4801:78::/64",
|
"2001:4860:4801:77::/64",
|
||||||
"2001:4860:4801:79::/64",
|
"2001:4860:4801:78::/64",
|
||||||
"2001:4860:4801:80::/64",
|
"2001:4860:4801:79::/64",
|
||||||
"2001:4860:4801:81::/64",
|
"2001:4860:4801:80::/64",
|
||||||
"2001:4860:4801:82::/64",
|
"2001:4860:4801:81::/64",
|
||||||
"2001:4860:4801:83::/64",
|
"2001:4860:4801:82::/64",
|
||||||
"2001:4860:4801:84::/64",
|
"2001:4860:4801:83::/64",
|
||||||
"2001:4860:4801:85::/64",
|
"2001:4860:4801:84::/64",
|
||||||
"2001:4860:4801:86::/64",
|
"2001:4860:4801:85::/64",
|
||||||
"2001:4860:4801:87::/64",
|
"2001:4860:4801:86::/64",
|
||||||
"2001:4860:4801:88::/64",
|
"2001:4860:4801:87::/64",
|
||||||
"2001:4860:4801:90::/64",
|
"2001:4860:4801:88::/64",
|
||||||
"2001:4860:4801:91::/64",
|
"2001:4860:4801:90::/64",
|
||||||
"2001:4860:4801:92::/64",
|
"2001:4860:4801:91::/64",
|
||||||
"2001:4860:4801:93::/64",
|
"2001:4860:4801:92::/64",
|
||||||
"2001:4860:4801:94::/64",
|
"2001:4860:4801:93::/64",
|
||||||
"2001:4860:4801:95::/64",
|
"2001:4860:4801:94::/64",
|
||||||
"2001:4860:4801:96::/64",
|
"2001:4860:4801:95::/64",
|
||||||
"2001:4860:4801:a0::/64",
|
"2001:4860:4801:96::/64",
|
||||||
"2001:4860:4801:a1::/64",
|
"2001:4860:4801:a0::/64",
|
||||||
"2001:4860:4801:a2::/64",
|
"2001:4860:4801:a1::/64",
|
||||||
"2001:4860:4801:a3::/64",
|
"2001:4860:4801:a2::/64",
|
||||||
"2001:4860:4801:a4::/64",
|
"2001:4860:4801:a3::/64",
|
||||||
"2001:4860:4801:a5::/64",
|
"2001:4860:4801:a4::/64",
|
||||||
"2001:4860:4801:c::/64",
|
"2001:4860:4801:a5::/64",
|
||||||
"2001:4860:4801:f::/64",
|
"2001:4860:4801:c::/64",
|
||||||
"192.178.5.0/27",
|
"2001:4860:4801:f::/64",
|
||||||
"192.178.6.0/27",
|
"192.178.5.0/27",
|
||||||
"192.178.6.128/27",
|
"192.178.6.0/27",
|
||||||
"192.178.6.160/27",
|
"192.178.6.128/27",
|
||||||
"192.178.6.192/27",
|
"192.178.6.160/27",
|
||||||
"192.178.6.32/27",
|
"192.178.6.192/27",
|
||||||
"192.178.6.64/27",
|
"192.178.6.32/27",
|
||||||
"192.178.6.96/27",
|
"192.178.6.64/27",
|
||||||
"34.100.182.96/28",
|
"192.178.6.96/27",
|
||||||
"34.101.50.144/28",
|
"34.100.182.96/28",
|
||||||
"34.118.254.0/28",
|
"34.101.50.144/28",
|
||||||
"34.118.66.0/28",
|
"34.118.254.0/28",
|
||||||
"34.126.178.96/28",
|
"34.118.66.0/28",
|
||||||
"34.146.150.144/28",
|
"34.126.178.96/28",
|
||||||
"34.147.110.144/28",
|
"34.146.150.144/28",
|
||||||
"34.151.74.144/28",
|
"34.147.110.144/28",
|
||||||
"34.152.50.64/28",
|
"34.151.74.144/28",
|
||||||
"34.154.114.144/28",
|
"34.152.50.64/28",
|
||||||
"34.155.98.32/28",
|
"34.154.114.144/28",
|
||||||
"34.165.18.176/28",
|
"34.155.98.32/28",
|
||||||
"34.175.160.64/28",
|
"34.165.18.176/28",
|
||||||
"34.176.130.16/28",
|
"34.175.160.64/28",
|
||||||
"34.22.85.0/27",
|
"34.176.130.16/28",
|
||||||
"34.64.82.64/28",
|
"34.22.85.0/27",
|
||||||
"34.65.242.112/28",
|
"34.64.82.64/28",
|
||||||
"34.80.50.80/28",
|
"34.65.242.112/28",
|
||||||
"34.88.194.0/28",
|
"34.80.50.80/28",
|
||||||
"34.89.10.80/28",
|
"34.88.194.0/28",
|
||||||
"34.89.198.80/28",
|
"34.89.10.80/28",
|
||||||
"34.96.162.48/28",
|
"34.89.198.80/28",
|
||||||
"35.247.243.240/28",
|
"34.96.162.48/28",
|
||||||
"66.249.64.0/27",
|
"35.247.243.240/28",
|
||||||
"66.249.64.128/27",
|
"66.249.64.0/27",
|
||||||
"66.249.64.160/27",
|
"66.249.64.128/27",
|
||||||
"66.249.64.224/27",
|
"66.249.64.160/27",
|
||||||
"66.249.64.32/27",
|
"66.249.64.224/27",
|
||||||
"66.249.64.64/27",
|
"66.249.64.32/27",
|
||||||
"66.249.64.96/27",
|
"66.249.64.64/27",
|
||||||
"66.249.65.0/27",
|
"66.249.64.96/27",
|
||||||
"66.249.65.128/27",
|
"66.249.65.0/27",
|
||||||
"66.249.65.160/27",
|
"66.249.65.128/27",
|
||||||
"66.249.65.192/27",
|
"66.249.65.160/27",
|
||||||
"66.249.65.224/27",
|
"66.249.65.192/27",
|
||||||
"66.249.65.32/27",
|
"66.249.65.224/27",
|
||||||
"66.249.65.64/27",
|
"66.249.65.32/27",
|
||||||
"66.249.65.96/27",
|
"66.249.65.64/27",
|
||||||
"66.249.66.0/27",
|
"66.249.65.96/27",
|
||||||
"66.249.66.128/27",
|
"66.249.66.0/27",
|
||||||
"66.249.66.160/27",
|
"66.249.66.128/27",
|
||||||
"66.249.66.192/27",
|
"66.249.66.160/27",
|
||||||
"66.249.66.224/27",
|
"66.249.66.192/27",
|
||||||
"66.249.66.32/27",
|
"66.249.66.224/27",
|
||||||
"66.249.66.64/27",
|
"66.249.66.32/27",
|
||||||
"66.249.66.96/27",
|
"66.249.66.64/27",
|
||||||
"66.249.68.0/27",
|
"66.249.66.96/27",
|
||||||
"66.249.68.128/27",
|
"66.249.68.0/27",
|
||||||
"66.249.68.32/27",
|
"66.249.68.128/27",
|
||||||
"66.249.68.64/27",
|
"66.249.68.32/27",
|
||||||
"66.249.68.96/27",
|
"66.249.68.64/27",
|
||||||
"66.249.69.0/27",
|
"66.249.68.96/27",
|
||||||
"66.249.69.128/27",
|
"66.249.69.0/27",
|
||||||
"66.249.69.160/27",
|
"66.249.69.128/27",
|
||||||
"66.249.69.192/27",
|
"66.249.69.160/27",
|
||||||
"66.249.69.224/27",
|
"66.249.69.192/27",
|
||||||
"66.249.69.32/27",
|
"66.249.69.224/27",
|
||||||
"66.249.69.64/27",
|
"66.249.69.32/27",
|
||||||
"66.249.69.96/27",
|
"66.249.69.64/27",
|
||||||
"66.249.70.0/27",
|
"66.249.69.96/27",
|
||||||
"66.249.70.128/27",
|
"66.249.70.0/27",
|
||||||
"66.249.70.160/27",
|
"66.249.70.128/27",
|
||||||
"66.249.70.192/27",
|
"66.249.70.160/27",
|
||||||
"66.249.70.224/27",
|
"66.249.70.192/27",
|
||||||
"66.249.70.32/27",
|
"66.249.70.224/27",
|
||||||
"66.249.70.64/27",
|
"66.249.70.32/27",
|
||||||
"66.249.70.96/27",
|
"66.249.70.64/27",
|
||||||
"66.249.71.0/27",
|
"66.249.70.96/27",
|
||||||
"66.249.71.128/27",
|
"66.249.71.0/27",
|
||||||
"66.249.71.160/27",
|
"66.249.71.128/27",
|
||||||
"66.249.71.192/27",
|
"66.249.71.160/27",
|
||||||
"66.249.71.224/27",
|
"66.249.71.192/27",
|
||||||
"66.249.71.32/27",
|
"66.249.71.224/27",
|
||||||
"66.249.71.64/27",
|
"66.249.71.32/27",
|
||||||
"66.249.71.96/27",
|
"66.249.71.64/27",
|
||||||
"66.249.72.0/27",
|
"66.249.71.96/27",
|
||||||
"66.249.72.128/27",
|
"66.249.72.0/27",
|
||||||
"66.249.72.160/27",
|
"66.249.72.128/27",
|
||||||
"66.249.72.192/27",
|
"66.249.72.160/27",
|
||||||
"66.249.72.224/27",
|
"66.249.72.192/27",
|
||||||
"66.249.72.32/27",
|
"66.249.72.224/27",
|
||||||
"66.249.72.64/27",
|
"66.249.72.32/27",
|
||||||
"66.249.72.96/27",
|
"66.249.72.64/27",
|
||||||
"66.249.73.0/27",
|
"66.249.72.96/27",
|
||||||
"66.249.73.128/27",
|
"66.249.73.0/27",
|
||||||
"66.249.73.160/27",
|
"66.249.73.128/27",
|
||||||
"66.249.73.192/27",
|
"66.249.73.160/27",
|
||||||
"66.249.73.224/27",
|
"66.249.73.192/27",
|
||||||
"66.249.73.32/27",
|
"66.249.73.224/27",
|
||||||
"66.249.73.64/27",
|
"66.249.73.32/27",
|
||||||
"66.249.73.96/27",
|
"66.249.73.64/27",
|
||||||
"66.249.74.0/27",
|
"66.249.73.96/27",
|
||||||
"66.249.74.128/27",
|
"66.249.74.0/27",
|
||||||
"66.249.74.160/27",
|
"66.249.74.128/27",
|
||||||
"66.249.74.192/27",
|
"66.249.74.160/27",
|
||||||
"66.249.74.32/27",
|
"66.249.74.192/27",
|
||||||
"66.249.74.64/27",
|
"66.249.74.32/27",
|
||||||
"66.249.74.96/27",
|
"66.249.74.64/27",
|
||||||
"66.249.75.0/27",
|
"66.249.74.96/27",
|
||||||
"66.249.75.128/27",
|
"66.249.75.0/27",
|
||||||
"66.249.75.160/27",
|
"66.249.75.128/27",
|
||||||
"66.249.75.192/27",
|
"66.249.75.160/27",
|
||||||
"66.249.75.224/27",
|
"66.249.75.192/27",
|
||||||
"66.249.75.32/27",
|
"66.249.75.224/27",
|
||||||
"66.249.75.64/27",
|
"66.249.75.32/27",
|
||||||
"66.249.75.96/27",
|
"66.249.75.64/27",
|
||||||
"66.249.76.0/27",
|
"66.249.75.96/27",
|
||||||
"66.249.76.128/27",
|
"66.249.76.0/27",
|
||||||
"66.249.76.160/27",
|
"66.249.76.128/27",
|
||||||
"66.249.76.192/27",
|
"66.249.76.160/27",
|
||||||
"66.249.76.224/27",
|
"66.249.76.192/27",
|
||||||
"66.249.76.32/27",
|
"66.249.76.224/27",
|
||||||
"66.249.76.64/27",
|
"66.249.76.32/27",
|
||||||
"66.249.76.96/27",
|
"66.249.76.64/27",
|
||||||
"66.249.77.0/27",
|
"66.249.76.96/27",
|
||||||
"66.249.77.128/27",
|
"66.249.77.0/27",
|
||||||
"66.249.77.160/27",
|
"66.249.77.128/27",
|
||||||
"66.249.77.192/27",
|
"66.249.77.160/27",
|
||||||
"66.249.77.224/27",
|
"66.249.77.192/27",
|
||||||
"66.249.77.32/27",
|
"66.249.77.224/27",
|
||||||
"66.249.77.64/27",
|
"66.249.77.32/27",
|
||||||
"66.249.77.96/27",
|
"66.249.77.64/27",
|
||||||
"66.249.78.0/27",
|
"66.249.77.96/27",
|
||||||
"66.249.78.32/27",
|
"66.249.78.0/27",
|
||||||
"66.249.79.0/27",
|
"66.249.78.32/27",
|
||||||
"66.249.79.128/27",
|
"66.249.79.0/27",
|
||||||
"66.249.79.160/27",
|
"66.249.79.128/27",
|
||||||
"66.249.79.192/27",
|
"66.249.79.160/27",
|
||||||
"66.249.79.224/27",
|
"66.249.79.192/27",
|
||||||
"66.249.79.32/27",
|
"66.249.79.224/27",
|
||||||
"66.249.79.64/27",
|
"66.249.79.32/27",
|
||||||
"66.249.79.96/27"
|
"66.249.79.64/27",
|
||||||
]
|
"66.249.79.96/27",
|
||||||
|
]
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
- name: internet-archive
|
- name: internet-archive
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://ipinfo.io/AS7941
|
# https://ipinfo.io/AS7941
|
||||||
remote_addresses: [
|
remote_addresses: ["207.241.224.0/20", "208.70.24.0/21", "2620:0:9c0::/48"]
|
||||||
"207.241.224.0/20",
|
|
||||||
"208.70.24.0/21",
|
|
||||||
"2620:0:9c0::/48"
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
user_agent_regex: \+https\://kagi\.com/bot
|
user_agent_regex: \+https\://kagi\.com/bot
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://kagi.com/bot
|
# https://kagi.com/bot
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"216.18.205.234/32",
|
[
|
||||||
"35.212.27.76/32",
|
"216.18.205.234/32",
|
||||||
"104.254.65.50/32",
|
"35.212.27.76/32",
|
||||||
"209.151.156.194/32"
|
"104.254.65.50/32",
|
||||||
]
|
"209.151.156.194/32",
|
||||||
|
]
|
||||||
|
|||||||
@@ -2,10 +2,11 @@
|
|||||||
user_agent_regex: search\.marginalia\.nu
|
user_agent_regex: search\.marginalia\.nu
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# Received directly over email
|
# Received directly over email
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"193.183.0.162/31",
|
[
|
||||||
"193.183.0.164/30",
|
"193.183.0.162/31",
|
||||||
"193.183.0.168/30",
|
"193.183.0.164/30",
|
||||||
"193.183.0.172/31",
|
"193.183.0.168/30",
|
||||||
"193.183.0.174/32"
|
"193.183.0.172/31",
|
||||||
]
|
"193.183.0.174/32",
|
||||||
|
]
|
||||||
|
|||||||
@@ -2,4 +2,4 @@
|
|||||||
user_agent_regex: \+https\://www\.mojeek\.com/bot\.html
|
user_agent_regex: \+https\://www\.mojeek\.com/bot\.html
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://www.mojeek.com/bot.html
|
# https://www.mojeek.com/bot.html
|
||||||
remote_addresses: [ "5.102.173.71/32" ]
|
remote_addresses: ["5.102.173.71/32"]
|
||||||
|
|||||||
@@ -4,13 +4,14 @@
|
|||||||
user_agent_regex: GPTBot/1\.1; \+https\://openai\.com/gptbot
|
user_agent_regex: GPTBot/1\.1; \+https\://openai\.com/gptbot
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://openai.com/gptbot.json
|
# https://openai.com/gptbot.json
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"52.230.152.0/24",
|
[
|
||||||
"20.171.206.0/24",
|
"52.230.152.0/24",
|
||||||
"20.171.207.0/24",
|
"20.171.206.0/24",
|
||||||
"4.227.36.0/25",
|
"20.171.207.0/24",
|
||||||
"20.125.66.80/28",
|
"4.227.36.0/25",
|
||||||
"172.182.204.0/24",
|
"20.125.66.80/28",
|
||||||
"172.182.214.0/24",
|
"172.182.204.0/24",
|
||||||
"172.182.215.0/24",
|
"172.182.214.0/24",
|
||||||
]
|
"172.182.215.0/24",
|
||||||
|
]
|
||||||
|
|||||||
@@ -4,10 +4,11 @@
|
|||||||
user_agent_regex: OAI-SearchBot/1\.0; \+https\://openai\.com/searchbot
|
user_agent_regex: OAI-SearchBot/1\.0; \+https\://openai\.com/searchbot
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://openai.com/searchbot.json
|
# https://openai.com/searchbot.json
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"20.42.10.176/28",
|
[
|
||||||
"172.203.190.128/28",
|
"20.42.10.176/28",
|
||||||
"104.210.140.128/28",
|
"172.203.190.128/28",
|
||||||
"51.8.102.0/24",
|
"104.210.140.128/28",
|
||||||
"135.234.64.0/24"
|
"51.8.102.0/24",
|
||||||
]
|
"135.234.64.0/24",
|
||||||
|
]
|
||||||
|
|||||||
17
data/crawlers/perplexitybot.yaml
Normal file
17
data/crawlers/perplexitybot.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Indexing for search, does not collect training data
|
||||||
|
# https://docs.perplexity.ai/guides/bots
|
||||||
|
- name: perplexitybot
|
||||||
|
user_agent_regex: PerplexityBot/.+; \+https\://perplexity\.ai/perplexitybot
|
||||||
|
action: ALLOW
|
||||||
|
# https://www.perplexity.com/perplexitybot.json
|
||||||
|
remote_addresses:
|
||||||
|
[
|
||||||
|
"107.20.236.150/32",
|
||||||
|
"3.224.62.45/32",
|
||||||
|
"18.210.92.235/32",
|
||||||
|
"3.222.232.239/32",
|
||||||
|
"3.211.124.183/32",
|
||||||
|
"3.231.139.107/32",
|
||||||
|
"18.97.1.228/30",
|
||||||
|
"18.97.9.96/29",
|
||||||
|
]
|
||||||
@@ -2,4 +2,4 @@
|
|||||||
user_agent_regex: \+https\://help\.qwant\.com/bot/
|
user_agent_regex: \+https\://help\.qwant\.com/bot/
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://help.qwant.com/wp-content/uploads/sites/2/2025/01/qwantbot.json
|
# https://help.qwant.com/wp-content/uploads/sites/2/2025/01/qwantbot.json
|
||||||
remote_addresses: [ "91.242.162.0/24" ]
|
remote_addresses: ["91.242.162.0/24"]
|
||||||
|
|||||||
@@ -3,5 +3,7 @@
|
|||||||
- import: (data)/bots/ai-catchall.yaml
|
- import: (data)/bots/ai-catchall.yaml
|
||||||
- import: (data)/crawlers/ai-training.yaml
|
- import: (data)/crawlers/ai-training.yaml
|
||||||
- import: (data)/crawlers/openai-searchbot.yaml
|
- import: (data)/crawlers/openai-searchbot.yaml
|
||||||
|
- import: (data)/crawlers/perplexitybot.yaml
|
||||||
- import: (data)/clients/openai-chatgpt-user.yaml
|
- import: (data)/clients/openai-chatgpt-user.yaml
|
||||||
- import: (data)/clients/mistral-mistralai-user.yaml
|
- import: (data)/clients/mistral-mistralai-user.yaml
|
||||||
|
- import: (data)/clients/perplexity-user.yaml
|
||||||
|
|||||||
@@ -2,5 +2,7 @@
|
|||||||
- import: (data)/bots/ai-catchall.yaml
|
- import: (data)/bots/ai-catchall.yaml
|
||||||
- import: (data)/crawlers/openai-searchbot.yaml
|
- import: (data)/crawlers/openai-searchbot.yaml
|
||||||
- import: (data)/crawlers/openai-gptbot.yaml
|
- import: (data)/crawlers/openai-gptbot.yaml
|
||||||
|
- import: (data)/crawlers/perplexitybot.yaml
|
||||||
- import: (data)/clients/openai-chatgpt-user.yaml
|
- import: (data)/clients/openai-chatgpt-user.yaml
|
||||||
- import: (data)/clients/mistral-mistralai-user.yaml
|
- import: (data)/clients/mistral-mistralai-user.yaml
|
||||||
|
- import: (data)/clients/perplexity-user.yaml
|
||||||
|
|||||||
@@ -2,222 +2,223 @@
|
|||||||
user_agent_regex: UptimeRobot
|
user_agent_regex: UptimeRobot
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
# https://api.uptimerobot.com/meta/ips
|
# https://api.uptimerobot.com/meta/ips
|
||||||
remote_addresses: [
|
remote_addresses:
|
||||||
"3.12.251.153/32",
|
[
|
||||||
"3.20.63.178/32",
|
"3.12.251.153/32",
|
||||||
"3.77.67.4/32",
|
"3.20.63.178/32",
|
||||||
"3.79.134.69/32",
|
"3.77.67.4/32",
|
||||||
"3.105.133.239/32",
|
"3.79.134.69/32",
|
||||||
"3.105.190.221/32",
|
"3.105.133.239/32",
|
||||||
"3.133.226.214/32",
|
"3.105.190.221/32",
|
||||||
"3.149.57.90/32",
|
"3.133.226.214/32",
|
||||||
"3.212.128.62/32",
|
"3.149.57.90/32",
|
||||||
"5.161.61.238/32",
|
"3.212.128.62/32",
|
||||||
"5.161.73.160/32",
|
"5.161.61.238/32",
|
||||||
"5.161.75.7/32",
|
"5.161.73.160/32",
|
||||||
"5.161.113.195/32",
|
"5.161.75.7/32",
|
||||||
"5.161.117.52/32",
|
"5.161.113.195/32",
|
||||||
"5.161.177.47/32",
|
"5.161.117.52/32",
|
||||||
"5.161.194.92/32",
|
"5.161.177.47/32",
|
||||||
"5.161.215.244/32",
|
"5.161.194.92/32",
|
||||||
"5.223.43.32/32",
|
"5.161.215.244/32",
|
||||||
"5.223.53.147/32",
|
"5.223.43.32/32",
|
||||||
"5.223.57.22/32",
|
"5.223.53.147/32",
|
||||||
"18.116.205.62/32",
|
"5.223.57.22/32",
|
||||||
"18.180.208.214/32",
|
"18.116.205.62/32",
|
||||||
"18.192.166.72/32",
|
"18.180.208.214/32",
|
||||||
"18.193.252.127/32",
|
"18.192.166.72/32",
|
||||||
"24.144.78.39/32",
|
"18.193.252.127/32",
|
||||||
"24.144.78.185/32",
|
"24.144.78.39/32",
|
||||||
"34.198.201.66/32",
|
"24.144.78.185/32",
|
||||||
"45.55.123.175/32",
|
"34.198.201.66/32",
|
||||||
"45.55.127.146/32",
|
"45.55.123.175/32",
|
||||||
"49.13.24.81/32",
|
"45.55.127.146/32",
|
||||||
"49.13.130.29/32",
|
"49.13.24.81/32",
|
||||||
"49.13.134.145/32",
|
"49.13.130.29/32",
|
||||||
"49.13.164.148/32",
|
"49.13.134.145/32",
|
||||||
"49.13.167.123/32",
|
"49.13.164.148/32",
|
||||||
"52.15.147.27/32",
|
"49.13.167.123/32",
|
||||||
"52.22.236.30/32",
|
"52.15.147.27/32",
|
||||||
"52.28.162.93/32",
|
"52.22.236.30/32",
|
||||||
"52.59.43.236/32",
|
"52.28.162.93/32",
|
||||||
"52.87.72.16/32",
|
"52.59.43.236/32",
|
||||||
"54.64.67.106/32",
|
"52.87.72.16/32",
|
||||||
"54.79.28.129/32",
|
"54.64.67.106/32",
|
||||||
"54.87.112.51/32",
|
"54.79.28.129/32",
|
||||||
"54.167.223.174/32",
|
"54.87.112.51/32",
|
||||||
"54.249.170.27/32",
|
"54.167.223.174/32",
|
||||||
"63.178.84.147/32",
|
"54.249.170.27/32",
|
||||||
"64.225.81.248/32",
|
"63.178.84.147/32",
|
||||||
"64.225.82.147/32",
|
"64.225.81.248/32",
|
||||||
"69.162.124.227/32",
|
"64.225.82.147/32",
|
||||||
"69.162.124.235/32",
|
"69.162.124.227/32",
|
||||||
"69.162.124.238/32",
|
"69.162.124.235/32",
|
||||||
"78.46.190.63/32",
|
"69.162.124.238/32",
|
||||||
"78.46.215.1/32",
|
"78.46.190.63/32",
|
||||||
"78.47.98.55/32",
|
"78.46.215.1/32",
|
||||||
"78.47.173.76/32",
|
"78.47.98.55/32",
|
||||||
"88.99.80.227/32",
|
"78.47.173.76/32",
|
||||||
"91.99.101.207/32",
|
"88.99.80.227/32",
|
||||||
"128.140.41.193/32",
|
"91.99.101.207/32",
|
||||||
"128.140.106.114/32",
|
"128.140.41.193/32",
|
||||||
"129.212.132.140/32",
|
"128.140.106.114/32",
|
||||||
"134.199.240.137/32",
|
"129.212.132.140/32",
|
||||||
"138.197.53.117/32",
|
"134.199.240.137/32",
|
||||||
"138.197.53.138/32",
|
"138.197.53.117/32",
|
||||||
"138.197.54.143/32",
|
"138.197.53.138/32",
|
||||||
"138.197.54.247/32",
|
"138.197.54.143/32",
|
||||||
"138.197.63.92/32",
|
"138.197.54.247/32",
|
||||||
"139.59.50.44/32",
|
"138.197.63.92/32",
|
||||||
"142.132.180.39/32",
|
"139.59.50.44/32",
|
||||||
"143.198.249.237/32",
|
"142.132.180.39/32",
|
||||||
"143.198.250.89/32",
|
"143.198.249.237/32",
|
||||||
"143.244.196.21/32",
|
"143.198.250.89/32",
|
||||||
"143.244.196.211/32",
|
"143.244.196.21/32",
|
||||||
"143.244.221.177/32",
|
"143.244.196.211/32",
|
||||||
"144.126.251.21/32",
|
"143.244.221.177/32",
|
||||||
"146.190.9.187/32",
|
"144.126.251.21/32",
|
||||||
"152.42.149.135/32",
|
"146.190.9.187/32",
|
||||||
"157.90.155.240/32",
|
"152.42.149.135/32",
|
||||||
"157.90.156.63/32",
|
"157.90.155.240/32",
|
||||||
"159.69.158.189/32",
|
"157.90.156.63/32",
|
||||||
"159.223.243.219/32",
|
"159.69.158.189/32",
|
||||||
"161.35.247.201/32",
|
"159.223.243.219/32",
|
||||||
"167.99.18.52/32",
|
"161.35.247.201/32",
|
||||||
"167.235.143.113/32",
|
"167.99.18.52/32",
|
||||||
"168.119.53.160/32",
|
"167.235.143.113/32",
|
||||||
"168.119.96.239/32",
|
"168.119.53.160/32",
|
||||||
"168.119.123.75/32",
|
"168.119.96.239/32",
|
||||||
"170.64.250.64/32",
|
"168.119.123.75/32",
|
||||||
"170.64.250.132/32",
|
"170.64.250.64/32",
|
||||||
"170.64.250.235/32",
|
"170.64.250.132/32",
|
||||||
"178.156.181.172/32",
|
"170.64.250.235/32",
|
||||||
"178.156.184.20/32",
|
"178.156.181.172/32",
|
||||||
"178.156.185.127/32",
|
"178.156.184.20/32",
|
||||||
"178.156.185.231/32",
|
"178.156.185.127/32",
|
||||||
"178.156.187.238/32",
|
"178.156.185.231/32",
|
||||||
"178.156.189.113/32",
|
"178.156.187.238/32",
|
||||||
"178.156.189.249/32",
|
"178.156.189.113/32",
|
||||||
"188.166.201.79/32",
|
"178.156.189.249/32",
|
||||||
"206.189.241.133/32",
|
"188.166.201.79/32",
|
||||||
"209.38.49.1/32",
|
"206.189.241.133/32",
|
||||||
"209.38.49.206/32",
|
"209.38.49.1/32",
|
||||||
"209.38.49.226/32",
|
"209.38.49.206/32",
|
||||||
"209.38.51.43/32",
|
"209.38.49.226/32",
|
||||||
"209.38.53.7/32",
|
"209.38.51.43/32",
|
||||||
"209.38.124.252/32",
|
"209.38.53.7/32",
|
||||||
"216.144.248.18/31",
|
"209.38.124.252/32",
|
||||||
"216.144.248.21/32",
|
"216.144.248.18/31",
|
||||||
"216.144.248.22/31",
|
"216.144.248.21/32",
|
||||||
"216.144.248.24/30",
|
"216.144.248.22/31",
|
||||||
"216.144.248.28/31",
|
"216.144.248.24/30",
|
||||||
"216.144.248.30/32",
|
"216.144.248.28/31",
|
||||||
"216.245.221.83/32",
|
"216.144.248.30/32",
|
||||||
"2400:6180:10:200::56a0:b000/128",
|
"216.245.221.83/32",
|
||||||
"2400:6180:10:200::56a0:c000/128",
|
"2400:6180:10:200::56a0:b000/128",
|
||||||
"2400:6180:10:200::56a0:e000/128",
|
"2400:6180:10:200::56a0:c000/128",
|
||||||
"2400:6180:100:d0::94b6:4001/128",
|
"2400:6180:10:200::56a0:e000/128",
|
||||||
"2400:6180:100:d0::94b6:5001/128",
|
"2400:6180:100:d0::94b6:4001/128",
|
||||||
"2400:6180:100:d0::94b6:7001/128",
|
"2400:6180:100:d0::94b6:5001/128",
|
||||||
"2406:da14:94d:8601:9d0d:7754:bedf:e4f5/128",
|
"2400:6180:100:d0::94b6:7001/128",
|
||||||
"2406:da14:94d:8601:b325:ff58:2bba:7934/128",
|
"2406:da14:94d:8601:9d0d:7754:bedf:e4f5/128",
|
||||||
"2406:da14:94d:8601:db4b:c5ac:2cbe:9a79/128",
|
"2406:da14:94d:8601:b325:ff58:2bba:7934/128",
|
||||||
"2406:da1c:9c8:dc02:7ae1:f2ea:ab91:2fde/128",
|
"2406:da14:94d:8601:db4b:c5ac:2cbe:9a79/128",
|
||||||
"2406:da1c:9c8:dc02:7db9:f38b:7b9f:402e/128",
|
"2406:da1c:9c8:dc02:7ae1:f2ea:ab91:2fde/128",
|
||||||
"2406:da1c:9c8:dc02:82b2:f0fd:ee96:579/128",
|
"2406:da1c:9c8:dc02:7db9:f38b:7b9f:402e/128",
|
||||||
"2600:1f16:775:3a00:ac3:c5eb:7081:942e/128",
|
"2406:da1c:9c8:dc02:82b2:f0fd:ee96:579/128",
|
||||||
"2600:1f16:775:3a00:37bf:6026:e54a:f03a/128",
|
"2600:1f16:775:3a00:ac3:c5eb:7081:942e/128",
|
||||||
"2600:1f16:775:3a00:3f24:5bb0:95d7:5a6b/128",
|
"2600:1f16:775:3a00:37bf:6026:e54a:f03a/128",
|
||||||
"2600:1f16:775:3a00:8c2c:2ba6:778f:5be5/128",
|
"2600:1f16:775:3a00:3f24:5bb0:95d7:5a6b/128",
|
||||||
"2600:1f16:775:3a00:91ac:3120:ff38:92b5/128",
|
"2600:1f16:775:3a00:8c2c:2ba6:778f:5be5/128",
|
||||||
"2600:1f16:775:3a00:dbbe:36b0:3c45:da32/128",
|
"2600:1f16:775:3a00:91ac:3120:ff38:92b5/128",
|
||||||
"2600:1f18:179:f900:71:af9a:ade7:d772/128",
|
"2600:1f16:775:3a00:dbbe:36b0:3c45:da32/128",
|
||||||
"2600:1f18:179:f900:2406:9399:4ae6:c5d3/128",
|
"2600:1f18:179:f900:71:af9a:ade7:d772/128",
|
||||||
"2600:1f18:179:f900:4696:7729:7bb3:f52f/128",
|
"2600:1f18:179:f900:2406:9399:4ae6:c5d3/128",
|
||||||
"2600:1f18:179:f900:4b7d:d1cc:2d10:211/128",
|
"2600:1f18:179:f900:4696:7729:7bb3:f52f/128",
|
||||||
"2600:1f18:179:f900:5c68:91b6:5d75:5d7/128",
|
"2600:1f18:179:f900:4b7d:d1cc:2d10:211/128",
|
||||||
"2600:1f18:179:f900:e8dd:eed1:a6c:183b/128",
|
"2600:1f18:179:f900:5c68:91b6:5d75:5d7/128",
|
||||||
"2604:a880:800:14:0:1:68ba:d000/128",
|
"2600:1f18:179:f900:e8dd:eed1:a6c:183b/128",
|
||||||
"2604:a880:800:14:0:1:68ba:e000/128",
|
"2604:a880:800:14:0:1:68ba:d000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:0/128",
|
"2604:a880:800:14:0:1:68ba:e000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:1000/128",
|
"2604:a880:800:14:0:1:68bb:0/128",
|
||||||
"2604:a880:800:14:0:1:68bb:3000/128",
|
"2604:a880:800:14:0:1:68bb:1000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:4000/128",
|
"2604:a880:800:14:0:1:68bb:3000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:5000/128",
|
"2604:a880:800:14:0:1:68bb:4000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:6000/128",
|
"2604:a880:800:14:0:1:68bb:5000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:7000/128",
|
"2604:a880:800:14:0:1:68bb:6000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:a000/128",
|
"2604:a880:800:14:0:1:68bb:7000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:b000/128",
|
"2604:a880:800:14:0:1:68bb:a000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:c000/128",
|
"2604:a880:800:14:0:1:68bb:b000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:d000/128",
|
"2604:a880:800:14:0:1:68bb:c000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:e000/128",
|
"2604:a880:800:14:0:1:68bb:d000/128",
|
||||||
"2604:a880:800:14:0:1:68bb:f000/128",
|
"2604:a880:800:14:0:1:68bb:e000/128",
|
||||||
"2607:ff68:107::4/128",
|
"2604:a880:800:14:0:1:68bb:f000/128",
|
||||||
"2607:ff68:107::14/128",
|
"2607:ff68:107::4/128",
|
||||||
"2607:ff68:107::33/128",
|
"2607:ff68:107::14/128",
|
||||||
"2607:ff68:107::48/127",
|
"2607:ff68:107::33/128",
|
||||||
"2607:ff68:107::50/125",
|
"2607:ff68:107::48/127",
|
||||||
"2607:ff68:107::58/127",
|
"2607:ff68:107::50/125",
|
||||||
"2607:ff68:107::60/128",
|
"2607:ff68:107::58/127",
|
||||||
"2a01:4f8:c0c:83fa::1/128",
|
"2607:ff68:107::60/128",
|
||||||
"2a01:4f8:c17:42e4::1/128",
|
"2a01:4f8:c0c:83fa::1/128",
|
||||||
"2a01:4f8:c2c:9fc6::1/128",
|
"2a01:4f8:c17:42e4::1/128",
|
||||||
"2a01:4f8:c2c:beae::1/128",
|
"2a01:4f8:c2c:9fc6::1/128",
|
||||||
"2a01:4f8:1c1a:3d53::1/128",
|
"2a01:4f8:c2c:beae::1/128",
|
||||||
"2a01:4f8:1c1b:4ef4::1/128",
|
"2a01:4f8:1c1a:3d53::1/128",
|
||||||
"2a01:4f8:1c1b:5b5a::1/128",
|
"2a01:4f8:1c1b:4ef4::1/128",
|
||||||
"2a01:4f8:1c1b:7ecc::1/128",
|
"2a01:4f8:1c1b:5b5a::1/128",
|
||||||
"2a01:4f8:1c1c:11aa::1/128",
|
"2a01:4f8:1c1b:7ecc::1/128",
|
||||||
"2a01:4f8:1c1c:5353::1/128",
|
"2a01:4f8:1c1c:11aa::1/128",
|
||||||
"2a01:4f8:1c1c:7240::1/128",
|
"2a01:4f8:1c1c:5353::1/128",
|
||||||
"2a01:4f8:1c1c:a98a::1/128",
|
"2a01:4f8:1c1c:7240::1/128",
|
||||||
"2a01:4f8:c012:c60e::1/128",
|
"2a01:4f8:1c1c:a98a::1/128",
|
||||||
"2a01:4f8:c013:c18::1/128",
|
"2a01:4f8:c012:c60e::1/128",
|
||||||
"2a01:4f8:c013:34c0::1/128",
|
"2a01:4f8:c013:c18::1/128",
|
||||||
"2a01:4f8:c013:3b0f::1/128",
|
"2a01:4f8:c013:34c0::1/128",
|
||||||
"2a01:4f8:c013:3c52::1/128",
|
"2a01:4f8:c013:3b0f::1/128",
|
||||||
"2a01:4f8:c013:3c53::1/128",
|
"2a01:4f8:c013:3c52::1/128",
|
||||||
"2a01:4f8:c013:3c54::1/128",
|
"2a01:4f8:c013:3c53::1/128",
|
||||||
"2a01:4f8:c013:3c55::1/128",
|
"2a01:4f8:c013:3c54::1/128",
|
||||||
"2a01:4f8:c013:3c56::1/128",
|
"2a01:4f8:c013:3c55::1/128",
|
||||||
"2a01:4ff:f0:bfd::1/128",
|
"2a01:4f8:c013:3c56::1/128",
|
||||||
"2a01:4ff:f0:2219::1/128",
|
"2a01:4ff:f0:bfd::1/128",
|
||||||
"2a01:4ff:f0:3e03::1/128",
|
"2a01:4ff:f0:2219::1/128",
|
||||||
"2a01:4ff:f0:5f80::1/128",
|
"2a01:4ff:f0:3e03::1/128",
|
||||||
"2a01:4ff:f0:7fad::1/128",
|
"2a01:4ff:f0:5f80::1/128",
|
||||||
"2a01:4ff:f0:9c5f::1/128",
|
"2a01:4ff:f0:7fad::1/128",
|
||||||
"2a01:4ff:f0:b2f2::1/128",
|
"2a01:4ff:f0:9c5f::1/128",
|
||||||
"2a01:4ff:f0:b6f1::1/128",
|
"2a01:4ff:f0:b2f2::1/128",
|
||||||
"2a01:4ff:f0:d283::1/128",
|
"2a01:4ff:f0:b6f1::1/128",
|
||||||
"2a01:4ff:f0:d3cd::1/128",
|
"2a01:4ff:f0:d283::1/128",
|
||||||
"2a01:4ff:f0:e516::1/128",
|
"2a01:4ff:f0:d3cd::1/128",
|
||||||
"2a01:4ff:f0:e9cf::1/128",
|
"2a01:4ff:f0:e516::1/128",
|
||||||
"2a01:4ff:f0:eccb::1/128",
|
"2a01:4ff:f0:e9cf::1/128",
|
||||||
"2a01:4ff:f0:efd1::1/128",
|
"2a01:4ff:f0:eccb::1/128",
|
||||||
"2a01:4ff:f0:fdc7::1/128",
|
"2a01:4ff:f0:efd1::1/128",
|
||||||
"2a01:4ff:2f0:193c::1/128",
|
"2a01:4ff:f0:fdc7::1/128",
|
||||||
"2a01:4ff:2f0:27de::1/128",
|
"2a01:4ff:2f0:193c::1/128",
|
||||||
"2a01:4ff:2f0:3b3a::1/128",
|
"2a01:4ff:2f0:27de::1/128",
|
||||||
"2a03:b0c0:2:f0::bd91:f001/128",
|
"2a01:4ff:2f0:3b3a::1/128",
|
||||||
"2a03:b0c0:2:f0::bd92:1/128",
|
"2a03:b0c0:2:f0::bd91:f001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:1001/128",
|
"2a03:b0c0:2:f0::bd92:1/128",
|
||||||
"2a03:b0c0:2:f0::bd92:2001/128",
|
"2a03:b0c0:2:f0::bd92:1001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:4001/128",
|
"2a03:b0c0:2:f0::bd92:2001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:5001/128",
|
"2a03:b0c0:2:f0::bd92:4001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:6001/128",
|
"2a03:b0c0:2:f0::bd92:5001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:7001/128",
|
"2a03:b0c0:2:f0::bd92:6001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:8001/128",
|
"2a03:b0c0:2:f0::bd92:7001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:9001/128",
|
"2a03:b0c0:2:f0::bd92:8001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:a001/128",
|
"2a03:b0c0:2:f0::bd92:9001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:b001/128",
|
"2a03:b0c0:2:f0::bd92:a001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:c001/128",
|
"2a03:b0c0:2:f0::bd92:b001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:e001/128",
|
"2a03:b0c0:2:f0::bd92:c001/128",
|
||||||
"2a03:b0c0:2:f0::bd92:f001/128",
|
"2a03:b0c0:2:f0::bd92:e001/128",
|
||||||
"2a05:d014:1815:3400:6d:9235:c1c0:96ad/128",
|
"2a03:b0c0:2:f0::bd92:f001/128",
|
||||||
"2a05:d014:1815:3400:654f:bd37:724c:212b/128",
|
"2a05:d014:1815:3400:6d:9235:c1c0:96ad/128",
|
||||||
"2a05:d014:1815:3400:90b4:4ef9:5631:b170/128",
|
"2a05:d014:1815:3400:654f:bd37:724c:212b/128",
|
||||||
"2a05:d014:1815:3400:9779:d8e9:100a:9642/128",
|
"2a05:d014:1815:3400:90b4:4ef9:5631:b170/128",
|
||||||
"2a05:d014:1815:3400:af29:e95e:64ff:df81/128",
|
"2a05:d014:1815:3400:9779:d8e9:100a:9642/128",
|
||||||
"2a05:d014:1815:3400:c7d6:f7f3:6cc1:30d1/128",
|
"2a05:d014:1815:3400:af29:e95e:64ff:df81/128",
|
||||||
"2a05:d014:1815:3400:d784:e5dd:8e0:67cb/128",
|
"2a05:d014:1815:3400:c7d6:f7f3:6cc1:30d1/128",
|
||||||
]
|
"2a05:d014:1815:3400:d784:e5dd:8e0:67cb/128",
|
||||||
|
]
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ func (m *Impl[K, V]) Close() {
|
|||||||
func (m *Impl[K, V]) cleanupWorker() {
|
func (m *Impl[K, V]) cleanupWorker() {
|
||||||
defer m.wg.Done()
|
defer m.wg.Done()
|
||||||
batch := make([]deleteReq[K], 0, 64)
|
batch := make([]deleteReq[K], 0, 64)
|
||||||
ticker := time.NewTicker(10 * time.Millisecond)
|
ticker := time.NewTicker(500 * time.Millisecond)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
|
|
||||||
flush := func() {
|
flush := func() {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func TestImpl(t *testing.T) {
|
|||||||
|
|
||||||
// Deletion of expired entries after Get is deferred to a background worker.
|
// Deletion of expired entries after Get is deferred to a background worker.
|
||||||
// Assert it eventually disappears from the map.
|
// Assert it eventually disappears from the map.
|
||||||
deadline := time.Now().Add(200 * time.Millisecond)
|
deadline := time.Now().Add(700 * time.Millisecond)
|
||||||
for time.Now().Before(deadline) {
|
for time.Now().Before(deadline) {
|
||||||
if dm.Len() == 0 {
|
if dm.Len() == 0 {
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
import React, { useState, useEffect, useMemo } from 'react';
|
import React, { useState, useEffect, useMemo } from "react";
|
||||||
import styles from './styles.module.css';
|
import styles from "./styles.module.css";
|
||||||
|
|
||||||
// A helper function to perform SHA-256 hashing.
|
// A helper function to perform SHA-256 hashing.
|
||||||
// It takes a string, encodes it, hashes it, and returns a hex string.
|
// It takes a string, encodes it, hashes it, and returns a hex string.
|
||||||
async function sha256(message) {
|
async function sha256(message) {
|
||||||
try {
|
try {
|
||||||
const msgBuffer = new TextEncoder().encode(message);
|
const msgBuffer = new TextEncoder().encode(message);
|
||||||
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
|
const hashBuffer = await crypto.subtle.digest("SHA-256", msgBuffer);
|
||||||
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
||||||
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
const hashHex = hashArray
|
||||||
|
.map((b) => b.toString(16).padStart(2, "0"))
|
||||||
|
.join("");
|
||||||
return hashHex;
|
return hashHex;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Hashing failed:", error);
|
console.error("Hashing failed:", error);
|
||||||
@@ -21,21 +23,42 @@ const generateRandomHex = (bytes = 16) => {
|
|||||||
const buffer = new Uint8Array(bytes);
|
const buffer = new Uint8Array(bytes);
|
||||||
crypto.getRandomValues(buffer);
|
crypto.getRandomValues(buffer);
|
||||||
return Array.from(buffer)
|
return Array.from(buffer)
|
||||||
.map(byte => byte.toString(16).padStart(2, '0'))
|
.map((byte) => byte.toString(16).padStart(2, "0"))
|
||||||
.join('');
|
.join("");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Icon components for better visual feedback
|
// Icon components for better visual feedback
|
||||||
const CheckIcon = () => (
|
const CheckIcon = () => (
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" className={styles.iconGreen} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
<svg
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
className={styles.iconGreen}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={2}
|
||||||
|
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
|
|
||||||
const XCircleIcon = () => (
|
const XCircleIcon = () => (
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" className={styles.iconRed} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
<svg
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
className={styles.iconRed}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={2}
|
||||||
|
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -46,7 +69,7 @@ export default function App() {
|
|||||||
// State for the nonce, which is the variable we can change
|
// State for the nonce, which is the variable we can change
|
||||||
const [nonce, setNonce] = useState(0);
|
const [nonce, setNonce] = useState(0);
|
||||||
// State to store the resulting hash
|
// State to store the resulting hash
|
||||||
const [hash, setHash] = useState('');
|
const [hash, setHash] = useState("");
|
||||||
// A flag to indicate if the current hash is the "winning" one
|
// A flag to indicate if the current hash is the "winning" one
|
||||||
const [isMining, setIsMining] = useState(false);
|
const [isMining, setIsMining] = useState(false);
|
||||||
const [isFound, setIsFound] = useState(false);
|
const [isFound, setIsFound] = useState(false);
|
||||||
@@ -55,7 +78,10 @@ export default function App() {
|
|||||||
const difficulty = "00";
|
const difficulty = "00";
|
||||||
|
|
||||||
// Memoize the combined data to avoid recalculating on every render
|
// Memoize the combined data to avoid recalculating on every render
|
||||||
const combinedData = useMemo(() => `${challenge}${nonce}`, [challenge, nonce]);
|
const combinedData = useMemo(
|
||||||
|
() => `${challenge}${nonce}`,
|
||||||
|
[challenge, nonce],
|
||||||
|
);
|
||||||
|
|
||||||
// This effect hook recalculates the hash whenever the combinedData changes.
|
// This effect hook recalculates the hash whenever the combinedData changes.
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -68,7 +94,9 @@ export default function App() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
calculateHash();
|
calculateHash();
|
||||||
return () => { isMounted = false; };
|
return () => {
|
||||||
|
isMounted = false;
|
||||||
|
};
|
||||||
}, [combinedData, difficulty]);
|
}, [combinedData, difficulty]);
|
||||||
|
|
||||||
// This effect handles the automatic mining process
|
// This effect handles the automatic mining process
|
||||||
@@ -93,7 +121,7 @@ export default function App() {
|
|||||||
// Update the UI periodically to avoid freezing the browser
|
// Update the UI periodically to avoid freezing the browser
|
||||||
if (miningNonce % 100 === 0) {
|
if (miningNonce % 100 === 0) {
|
||||||
setNonce(miningNonce);
|
setNonce(miningNonce);
|
||||||
await new Promise(resolve => setTimeout(resolve, 0)); // Yield to the browser
|
await new Promise((resolve) => setTimeout(resolve, 0)); // Yield to the browser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -102,28 +130,27 @@ export default function App() {
|
|||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
continueMining = false;
|
continueMining = false;
|
||||||
}
|
};
|
||||||
}, [isMining, challenge, nonce, difficulty]);
|
}, [isMining, challenge, nonce, difficulty]);
|
||||||
|
|
||||||
|
|
||||||
const handleMineClick = () => {
|
const handleMineClick = () => {
|
||||||
setIsMining(true);
|
setIsMining(true);
|
||||||
}
|
};
|
||||||
|
|
||||||
const handleStopClick = () => {
|
const handleStopClick = () => {
|
||||||
setIsMining(false);
|
setIsMining(false);
|
||||||
}
|
};
|
||||||
|
|
||||||
const handleResetClick = () => {
|
const handleResetClick = () => {
|
||||||
setIsMining(false);
|
setIsMining(false);
|
||||||
setNonce(0);
|
setNonce(0);
|
||||||
}
|
};
|
||||||
|
|
||||||
const handleNewChallengeClick = () => {
|
const handleNewChallengeClick = () => {
|
||||||
setIsMining(false);
|
setIsMining(false);
|
||||||
setChallenge(generateRandomHex(16));
|
setChallenge(generateRandomHex(16));
|
||||||
setNonce(0);
|
setNonce(0);
|
||||||
}
|
};
|
||||||
|
|
||||||
// Helper to render the hash with colored leading characters
|
// Helper to render the hash with colored leading characters
|
||||||
const renderHash = () => {
|
const renderHash = () => {
|
||||||
@@ -153,12 +180,46 @@ export default function App() {
|
|||||||
<div className={styles.block}>
|
<div className={styles.block}>
|
||||||
<h2 className={styles.blockTitle}>2. Nonce</h2>
|
<h2 className={styles.blockTitle}>2. Nonce</h2>
|
||||||
<div className={styles.nonceControls}>
|
<div className={styles.nonceControls}>
|
||||||
<button onClick={() => setNonce(n => n - 1)} disabled={isMining} className={styles.nonceButton}>
|
<button
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" className={styles.iconSmall} fill="none" viewBox="0 0 24 24" stroke="currentColor"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M20 12H4" /></svg>
|
onClick={() => setNonce((n) => n - 1)}
|
||||||
|
disabled={isMining}
|
||||||
|
className={styles.nonceButton}
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
className={styles.iconSmall}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={2}
|
||||||
|
d="M20 12H4"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
<span className={styles.nonceValue}>{nonce}</span>
|
<span className={styles.nonceValue}>{nonce}</span>
|
||||||
<button onClick={() => setNonce(n => n + 1)} disabled={isMining} className={styles.nonceButton}>
|
<button
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" className={styles.iconSmall} fill="none" viewBox="0 0 24 24" stroke="currentColor"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 4v16m8-8H4" /></svg>
|
onClick={() => setNonce((n) => n + 1)}
|
||||||
|
disabled={isMining}
|
||||||
|
className={styles.nonceButton}
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
className={styles.iconSmall}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={2}
|
||||||
|
d="M12 4v16m8-8H4"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -172,13 +233,26 @@ export default function App() {
|
|||||||
|
|
||||||
{/* Arrow pointing down */}
|
{/* Arrow pointing down */}
|
||||||
<div className={styles.arrowContainer}>
|
<div className={styles.arrowContainer}>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" className={styles.iconGray} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
<svg
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 14l-7 7m0 0l-7-7m7 7V3" />
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
className={styles.iconGray}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke="currentColor"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={2}
|
||||||
|
d="M19 14l-7 7m0 0l-7-7m7 7V3"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Hash Output Block */}
|
{/* Hash Output Block */}
|
||||||
<div className={`${styles.hashContainer} ${isFound ? styles.hashContainerSuccess : styles.hashContainerError}`}>
|
<div
|
||||||
|
className={`${styles.hashContainer} ${isFound ? styles.hashContainerSuccess : styles.hashContainerError}`}
|
||||||
|
>
|
||||||
<div className={styles.hashContent}>
|
<div className={styles.hashContent}>
|
||||||
<div className={styles.hashText}>
|
<div className={styles.hashText}>
|
||||||
<h2 className={styles.blockTitle}>4. Resulting Hash (SHA-256)</h2>
|
<h2 className={styles.blockTitle}>4. Resulting Hash (SHA-256)</h2>
|
||||||
@@ -193,18 +267,30 @@ export default function App() {
|
|||||||
{/* Mining Controls */}
|
{/* Mining Controls */}
|
||||||
<div className={styles.buttonContainer}>
|
<div className={styles.buttonContainer}>
|
||||||
{!isMining ? (
|
{!isMining ? (
|
||||||
<button onClick={handleMineClick} className={`${styles.button} ${styles.buttonCyan}`}>
|
<button
|
||||||
|
onClick={handleMineClick}
|
||||||
|
className={`${styles.button} ${styles.buttonCyan}`}
|
||||||
|
>
|
||||||
Auto-Mine
|
Auto-Mine
|
||||||
</button>
|
</button>
|
||||||
) : (
|
) : (
|
||||||
<button onClick={handleStopClick} className={`${styles.button} ${styles.buttonYellow}`}>
|
<button
|
||||||
|
onClick={handleStopClick}
|
||||||
|
className={`${styles.button} ${styles.buttonYellow}`}
|
||||||
|
>
|
||||||
Stop Mining
|
Stop Mining
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
<button onClick={handleNewChallengeClick} className={`${styles.button} ${styles.buttonIndigo}`}>
|
<button
|
||||||
|
onClick={handleNewChallengeClick}
|
||||||
|
className={`${styles.button} ${styles.buttonIndigo}`}
|
||||||
|
>
|
||||||
New Challenge
|
New Challenge
|
||||||
</button>
|
</button>
|
||||||
<button onClick={handleResetClick} className={`${styles.button} ${styles.buttonGray}`}>
|
<button
|
||||||
|
onClick={handleResetClick}
|
||||||
|
className={`${styles.button} ${styles.buttonGray}`}
|
||||||
|
>
|
||||||
Reset Nonce
|
Reset Nonce
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -48,7 +48,9 @@
|
|||||||
background-color: rgb(31 41 55);
|
background-color: rgb(31 41 55);
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
box-shadow:
|
||||||
|
0 10px 15px -3px rgb(0 0 0 / 0.1),
|
||||||
|
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -158,7 +160,9 @@
|
|||||||
.hashContainer {
|
.hashContainer {
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
box-shadow:
|
||||||
|
0 10px 15px -3px rgb(0 0 0 / 0.1),
|
||||||
|
0 4px 6px -4px rgb(0 0 0 / 0.1);
|
||||||
transition: all 300ms;
|
transition: all 300ms;
|
||||||
border: 2px solid;
|
border: 2px solid;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
- Add iplist2rule tool that lets admins turn an IP address blocklist into an Anubis ruleset.
|
- Add iplist2rule tool that lets admins turn an IP address blocklist into an Anubis ruleset.
|
||||||
- Add Polish locale ([#1292](https://github.com/TecharoHQ/anubis/pull/1309))
|
- Add Polish locale ([#1292](https://github.com/TecharoHQ/anubis/pull/1309))
|
||||||
|
- Fix honeypot and imprint links missing `BASE_PREFIX` when deployed behind a path prefix ([#1402](https://github.com/TecharoHQ/anubis/issues/1402))
|
||||||
|
- Improve idle performance in memory storage
|
||||||
|
|
||||||
<!-- This changes the project to: -->
|
<!-- This changes the project to: -->
|
||||||
|
|
||||||
|
|||||||
@@ -51,9 +51,8 @@ If you are using Kubernetes, you will need to create an image pull secret:
|
|||||||
kubectl create secret docker-registry \
|
kubectl create secret docker-registry \
|
||||||
techarohq-botstopper \
|
techarohq-botstopper \
|
||||||
--docker-server ghcr.io \
|
--docker-server ghcr.io \
|
||||||
--docker-username your-username \
|
--docker-username any-username \
|
||||||
--docker-password your-access-token \
|
--docker-password <your-access-token> \
|
||||||
--docker-email your@email.address
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Then attach it to your Deployment:
|
Then attach it to your Deployment:
|
||||||
|
|||||||
@@ -243,16 +243,16 @@ function regexSafe(input: string): string;
|
|||||||
|
|
||||||
`regexSafe` takes a string and escapes it for safe use inside of a regular expression. This is useful when you are creating regular expressions from headers or variables such as `remoteAddress`.
|
`regexSafe` takes a string and escapes it for safe use inside of a regular expression. This is useful when you are creating regular expressions from headers or variables such as `remoteAddress`.
|
||||||
|
|
||||||
| Input | Output |
|
| Input | Output |
|
||||||
| :------------------------ | :------------------------------ |
|
| :------------------------- | :-------------- |
|
||||||
| `regexSafe("1.2.3.4")` | `1\\.2\\.3\\.4` |
|
| `regexSafe("1.2.3.4")` | `1\\.2\\.3\\.4` |
|
||||||
| `regexSafe("techaro.lol")` | `techaro\\.lol` |
|
| `regexSafe("techaro.lol")` | `techaro\\.lol` |
|
||||||
| `regexSafe("star*")` | `star\\*` |
|
| `regexSafe("star*")` | `star\\*` |
|
||||||
| `regexSafe("plus+")` | `plus\\+` |
|
| `regexSafe("plus+")` | `plus\\+` |
|
||||||
| `regexSafe("{braces}")` | `\\{braces\\}` |
|
| `regexSafe("{braces}")` | `\\{braces\\}` |
|
||||||
| `regexSafe("start^")` | `start\\^` |
|
| `regexSafe("start^")` | `start\\^` |
|
||||||
| `regexSafe("back\\slash")` | `back\\\\slash` |
|
| `regexSafe("back\\slash")` | `back\\\\slash` |
|
||||||
| `regexSafe("dash-dash")` | `dash\\-dash` |
|
| `regexSafe("dash-dash")` | `dash\\-dash` |
|
||||||
|
|
||||||
### `segments`
|
### `segments`
|
||||||
|
|
||||||
@@ -301,9 +301,9 @@ function arpaReverseIP(ip: string): string;
|
|||||||
|
|
||||||
`arpaReverseIP` takes an IP address and returns its value in [ARPA notation](https://www.ietf.org/rfc/rfc2317.html). This can be useful when matching PTR record patterns.
|
`arpaReverseIP` takes an IP address and returns its value in [ARPA notation](https://www.ietf.org/rfc/rfc2317.html). This can be useful when matching PTR record patterns.
|
||||||
|
|
||||||
| Input | Output |
|
| Input | Output |
|
||||||
| :----------------------------- | :------------------------------------------------------------------- |
|
| :----------------------------- | :---------------------------------------------------------------- |
|
||||||
| `arpaReverseIP("1.2.3.4")` | `4.3.2.1` |
|
| `arpaReverseIP("1.2.3.4")` | `4.3.2.1` |
|
||||||
| `arpaReverseIP("2001:db8::1")` | `1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2` |
|
| `arpaReverseIP("2001:db8::1")` | `1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2` |
|
||||||
|
|
||||||
#### `lookupHost`
|
#### `lookupHost`
|
||||||
|
|||||||
@@ -94,10 +94,8 @@ containers:
|
|||||||
- ALL
|
- ALL
|
||||||
seccompProfile:
|
seccompProfile:
|
||||||
type: RuntimeDefault
|
type: RuntimeDefault
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Then add a Service entry for Anubis:
|
Then add a Service entry for Anubis:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|||||||
@@ -1,8 +1,2 @@
|
|||||||
# /etc/nginx/conf-anubis.inc
|
# /etc/nginx/conf-anubis.inc # Forward to anubis location / { proxy_set_header
|
||||||
|
Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://anubis; }
|
||||||
# Forward to anubis
|
|
||||||
location / {
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_pass http://anubis;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ services:
|
|||||||
# Telling Anubis, where to listen for Traefik
|
# Telling Anubis, where to listen for Traefik
|
||||||
- BIND=:8080
|
- BIND=:8080
|
||||||
# Telling Anubis to do redirect — ensure there is a space after '='
|
# Telling Anubis to do redirect — ensure there is a space after '='
|
||||||
- 'TARGET= '
|
- "TARGET= "
|
||||||
# Specifies which domains Anubis is allowed to redirect to.
|
# Specifies which domains Anubis is allowed to redirect to.
|
||||||
- REDIRECT_DOMAINS=example.com
|
- REDIRECT_DOMAINS=example.com
|
||||||
# Should be the full external URL for Anubis (including scheme)
|
# Should be the full external URL for Anubis (including scheme)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ Currently the following settings are configurable via the policy file:
|
|||||||
Anubis uses these environment variables for configuration:
|
Anubis uses these environment variables for configuration:
|
||||||
|
|
||||||
| Environment Variable | Default value | Explanation |
|
| Environment Variable | Default value | Explanation |
|
||||||
|:-------------------------------|:------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
| :----------------------------- | :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `ASSET_LOOKUP_HEADER` | unset | <EO /> If set, use the contents of this header in requests when looking up custom assets in `OVERLAY_FOLDER`. See [Header-based overlay dispatch](./botstopper.mdx#header-based-overlay-dispatch) for more details. |
|
| `ASSET_LOOKUP_HEADER` | unset | <EO /> If set, use the contents of this header in requests when looking up custom assets in `OVERLAY_FOLDER`. See [Header-based overlay dispatch](./botstopper.mdx#header-based-overlay-dispatch) for more details. |
|
||||||
| `BASE_PREFIX` | unset | If set, adds a global prefix to all Anubis endpoints (everything starting with `/.within.website/x/anubis/`). For example, setting this to `/myapp` would make Anubis accessible at `/myapp/` instead of `/`. This is useful when running Anubis behind a reverse proxy that routes based on path prefixes. |
|
| `BASE_PREFIX` | unset | If set, adds a global prefix to all Anubis endpoints (everything starting with `/.within.website/x/anubis/`). For example, setting this to `/myapp` would make Anubis accessible at `/myapp/` instead of `/`. This is useful when running Anubis behind a reverse proxy that routes based on path prefixes. |
|
||||||
| `BIND` | `:8923` | The network address that Anubis listens on. For `unix`, set this to a path: `/run/anubis/instance.sock` |
|
| `BIND` | `:8923` | The network address that Anubis listens on. For `unix`, set this to a path: `/run/anubis/instance.sock` |
|
||||||
@@ -123,7 +123,7 @@ If you don't know or understand what these settings mean, ignore them. These are
|
|||||||
| `TARGET_DISABLE_KEEPALIVE` | `false` | If `true`, disables HTTP keep-alive for connections to the target backend. Useful for backends that don't handle keep-alive properly. |
|
| `TARGET_DISABLE_KEEPALIVE` | `false` | If `true`, disables HTTP keep-alive for connections to the target backend. Useful for backends that don't handle keep-alive properly. |
|
||||||
| `TARGET_HOST` | unset | If set, overrides the Host header in requests forwarded to `TARGET`. |
|
| `TARGET_HOST` | unset | If set, overrides the Host header in requests forwarded to `TARGET`. |
|
||||||
| `TARGET_INSECURE_SKIP_VERIFY` | `false` | If `true`, skip TLS certificate validation for targets that listen over `https`. If your backend does not listen over `https`, ignore this setting. |
|
| `TARGET_INSECURE_SKIP_VERIFY` | `false` | If `true`, skip TLS certificate validation for targets that listen over `https`. If your backend does not listen over `https`, ignore this setting. |
|
||||||
| `TARGET_SNI` | unset | If set, TLS handshake hostname when forwarding requests to the `TARGET`. If set to auto, use Host header. |
|
| `TARGET_SNI` | unset | If set, TLS handshake hostname when forwarding requests to the `TARGET`. If set to auto, use Host header. |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
@@ -1,62 +1,62 @@
|
|||||||
import { themes as prismThemes } from 'prism-react-renderer';
|
import { themes as prismThemes } from "prism-react-renderer";
|
||||||
import type { Config } from '@docusaurus/types';
|
import type { Config } from "@docusaurus/types";
|
||||||
import type * as Preset from '@docusaurus/preset-classic';
|
import type * as Preset from "@docusaurus/preset-classic";
|
||||||
|
|
||||||
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
||||||
|
|
||||||
const config: Config = {
|
const config: Config = {
|
||||||
title: 'Anubis',
|
title: "Anubis",
|
||||||
tagline: 'Weigh the soul of incoming HTTP requests to protect your website!',
|
tagline: "Weigh the soul of incoming HTTP requests to protect your website!",
|
||||||
favicon: 'img/favicon.ico',
|
favicon: "img/favicon.ico",
|
||||||
|
|
||||||
// Set the production url of your site here
|
// Set the production url of your site here
|
||||||
url: 'https://anubis.techaro.lol',
|
url: "https://anubis.techaro.lol",
|
||||||
// Set the /<baseUrl>/ pathname under which your site is served
|
// Set the /<baseUrl>/ pathname under which your site is served
|
||||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||||
baseUrl: '/',
|
baseUrl: "/",
|
||||||
|
|
||||||
// GitHub pages deployment config.
|
// GitHub pages deployment config.
|
||||||
// If you aren't using GitHub pages, you don't need these.
|
// If you aren't using GitHub pages, you don't need these.
|
||||||
organizationName: 'TecharoHQ', // Usually your GitHub org/user name.
|
organizationName: "TecharoHQ", // Usually your GitHub org/user name.
|
||||||
projectName: 'anubis', // Usually your repo name.
|
projectName: "anubis", // Usually your repo name.
|
||||||
|
|
||||||
onBrokenLinks: 'throw',
|
onBrokenLinks: "throw",
|
||||||
onBrokenMarkdownLinks: 'warn',
|
onBrokenMarkdownLinks: "warn",
|
||||||
|
|
||||||
// Even if you don't use internationalization, you can use this field to set
|
// Even if you don't use internationalization, you can use this field to set
|
||||||
// useful metadata like html lang. For example, if your site is Chinese, you
|
// useful metadata like html lang. For example, if your site is Chinese, you
|
||||||
// may want to replace "en" with "zh-Hans".
|
// may want to replace "en" with "zh-Hans".
|
||||||
i18n: {
|
i18n: {
|
||||||
defaultLocale: 'en',
|
defaultLocale: "en",
|
||||||
locales: ['en'],
|
locales: ["en"],
|
||||||
},
|
},
|
||||||
|
|
||||||
markdown: {
|
markdown: {
|
||||||
mermaid: true,
|
mermaid: true,
|
||||||
},
|
},
|
||||||
themes: ['@docusaurus/theme-mermaid'],
|
themes: ["@docusaurus/theme-mermaid"],
|
||||||
|
|
||||||
presets: [
|
presets: [
|
||||||
[
|
[
|
||||||
'classic',
|
"classic",
|
||||||
{
|
{
|
||||||
blog: {
|
blog: {
|
||||||
showReadingTime: true,
|
showReadingTime: true,
|
||||||
feedOptions: {
|
feedOptions: {
|
||||||
type: ['rss', 'atom', "json"],
|
type: ["rss", "atom", "json"],
|
||||||
xslt: true,
|
xslt: true,
|
||||||
},
|
},
|
||||||
editUrl: 'https://github.com/TecharoHQ/anubis/tree/main/docs/',
|
editUrl: "https://github.com/TecharoHQ/anubis/tree/main/docs/",
|
||||||
onInlineTags: 'warn',
|
onInlineTags: "warn",
|
||||||
onInlineAuthors: 'warn',
|
onInlineAuthors: "warn",
|
||||||
onUntruncatedBlogPosts: 'throw',
|
onUntruncatedBlogPosts: "throw",
|
||||||
},
|
},
|
||||||
docs: {
|
docs: {
|
||||||
sidebarPath: './sidebars.ts',
|
sidebarPath: "./sidebars.ts",
|
||||||
editUrl: 'https://github.com/TecharoHQ/anubis/tree/main/docs/',
|
editUrl: "https://github.com/TecharoHQ/anubis/tree/main/docs/",
|
||||||
},
|
},
|
||||||
theme: {
|
theme: {
|
||||||
customCss: './src/css/custom.css',
|
customCss: "./src/css/custom.css",
|
||||||
},
|
},
|
||||||
} satisfies Preset.Options,
|
} satisfies Preset.Options,
|
||||||
],
|
],
|
||||||
@@ -67,47 +67,47 @@ const config: Config = {
|
|||||||
respectPrefersColorScheme: true,
|
respectPrefersColorScheme: true,
|
||||||
},
|
},
|
||||||
// Replace with your project's social card
|
// Replace with your project's social card
|
||||||
image: 'img/social-card.jpg',
|
image: "img/social-card.jpg",
|
||||||
navbar: {
|
navbar: {
|
||||||
title: 'Anubis',
|
title: "Anubis",
|
||||||
logo: {
|
logo: {
|
||||||
alt: 'A happy jackal woman with brown hair and red eyes',
|
alt: "A happy jackal woman with brown hair and red eyes",
|
||||||
src: 'img/favicon.webp',
|
src: "img/favicon.webp",
|
||||||
},
|
},
|
||||||
items: [
|
items: [
|
||||||
{ to: '/blog', label: 'Blog', position: 'left' },
|
{ to: "/blog", label: "Blog", position: "left" },
|
||||||
{
|
{
|
||||||
type: 'docSidebar',
|
type: "docSidebar",
|
||||||
sidebarId: 'tutorialSidebar',
|
sidebarId: "tutorialSidebar",
|
||||||
position: 'left',
|
position: "left",
|
||||||
label: 'Docs',
|
label: "Docs",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: '/docs/admin/botstopper',
|
to: "/docs/admin/botstopper",
|
||||||
label: "Unbranded Version",
|
label: "Unbranded Version",
|
||||||
position: "left"
|
position: "left",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: 'https://github.com/TecharoHQ/anubis',
|
href: "https://github.com/TecharoHQ/anubis",
|
||||||
label: 'GitHub',
|
label: "GitHub",
|
||||||
position: 'right',
|
position: "right",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: 'https://github.com/sponsors/Xe',
|
href: "https://github.com/sponsors/Xe",
|
||||||
label: "Sponsor the Project",
|
label: "Sponsor the Project",
|
||||||
position: 'right'
|
position: "right",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
style: 'dark',
|
style: "dark",
|
||||||
links: [
|
links: [
|
||||||
{
|
{
|
||||||
title: 'Docs',
|
title: "Docs",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
label: 'Intro',
|
label: "Intro",
|
||||||
to: '/docs/',
|
to: "/docs/",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Installation",
|
label: "Installation",
|
||||||
@@ -116,32 +116,32 @@ const config: Config = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Community',
|
title: "Community",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
label: 'GitHub Discussions',
|
label: "GitHub Discussions",
|
||||||
href: 'https://github.com/TecharoHQ/anubis/discussions',
|
href: "https://github.com/TecharoHQ/anubis/discussions",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Bluesky',
|
label: "Bluesky",
|
||||||
href: 'https://bsky.app/profile/techaro.lol',
|
href: "https://bsky.app/profile/techaro.lol",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'More',
|
title: "More",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
label: 'Blog',
|
label: "Blog",
|
||||||
to: '/blog',
|
to: "/blog",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'GitHub',
|
label: "GitHub",
|
||||||
href: 'https://github.com/TecharoHQ/anubis',
|
href: "https://github.com/TecharoHQ/anubis",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Status',
|
label: "Status",
|
||||||
href: 'https://techarohq.github.io/status/'
|
href: "https://techarohq.github.io/status/",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -153,13 +153,13 @@ const config: Config = {
|
|||||||
darkTheme: prismThemes.dracula,
|
darkTheme: prismThemes.dracula,
|
||||||
magicComments: [
|
magicComments: [
|
||||||
{
|
{
|
||||||
className: 'code-block-diff-add-line',
|
className: "code-block-diff-add-line",
|
||||||
line: 'diff-add'
|
line: "diff-add",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
className: 'code-block-diff-remove-line',
|
className: "code-block-diff-remove-line",
|
||||||
line: 'diff-remove'
|
line: "diff-remove",
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
} satisfies Preset.ThemeConfig,
|
} satisfies Preset.ThemeConfig,
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
version: 3
|
version: 3
|
||||||
rules:
|
rules:
|
||||||
- port:
|
- port:
|
||||||
number: 80
|
number: 80
|
||||||
backend:
|
backend:
|
||||||
service:
|
service:
|
||||||
name: anubis-docs
|
name: anubis-docs
|
||||||
port:
|
port:
|
||||||
number: 80
|
number: 80
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
app: anubis-docs
|
app: anubis-docs
|
||||||
ports:
|
ports:
|
||||||
- port: 80
|
- port: 80
|
||||||
targetPort: 80
|
targetPort: 80
|
||||||
name: http
|
name: http
|
||||||
- port: 8081
|
- port: 8081
|
||||||
targetPort: 8081
|
targetPort: 8081
|
||||||
name: anubis
|
name: anubis
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
|
||||||
|
|
||||||
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
|||||||
*/
|
*/
|
||||||
const sidebars: SidebarsConfig = {
|
const sidebars: SidebarsConfig = {
|
||||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||||
tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
|
tutorialSidebar: [{ type: "autogenerated", dirName: "." }],
|
||||||
|
|
||||||
// But you can create a sidebar manually
|
// But you can create a sidebar manually
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import styles from './styles.module.css';
|
import styles from "./styles.module.css";
|
||||||
|
|
||||||
export default function EnterpriseOnly({ link }) {
|
export default function EnterpriseOnly({ link }) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -8,7 +8,9 @@
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
padding: 0.5rem 1rem; /* py-2 px-4 */
|
padding: 0.5rem 1rem; /* py-2 px-4 */
|
||||||
border-radius: 9999px; /* rounded-full */
|
border-radius: 9999px; /* rounded-full */
|
||||||
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* shadow-lg approximation */
|
box-shadow:
|
||||||
|
0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
||||||
|
0 4px 6px -2px rgba(0, 0, 0, 0.05); /* shadow-lg approximation */
|
||||||
display: inline-flex; /* flex */
|
display: inline-flex; /* flex */
|
||||||
align-items: center; /* items-center */
|
align-items: center; /* items-center */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ import "time"
|
|||||||
|
|
||||||
// Challenge is the metadata about a single challenge issuance.
|
// Challenge is the metadata about a single challenge issuance.
|
||||||
type Challenge struct {
|
type Challenge struct {
|
||||||
IssuedAt time.Time `json:"issuedAt"`
|
IssuedAt time.Time `json:"issuedAt"` // When the challenge was issued
|
||||||
Metadata map[string]string `json:"metadata"`
|
Metadata map[string]string `json:"metadata"` // Challenge metadata such as IP address and user agent
|
||||||
ID string `json:"id"`
|
ID string `json:"id"` // UUID identifying the challenge
|
||||||
Method string `json:"method"`
|
Method string `json:"method"` // Challenge method
|
||||||
RandomData string `json:"randomData"`
|
RandomData string `json:"randomData"` // The random data the client processes
|
||||||
PolicyRuleHash string `json:"policyRuleHash,omitempty"`
|
PolicyRuleHash string `json:"policyRuleHash,omitempty"` // Hash of the policy rule that issued this challenge
|
||||||
Difficulty int `json:"difficulty,omitempty"`
|
Difficulty int `json:"difficulty,omitempty"` // Difficulty that was in effect when issued
|
||||||
Spent bool `json:"spent"`
|
Spent bool `json:"spent"` // Has the challenge already been solved?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,9 @@
|
|||||||
*/
|
*/
|
||||||
const h = (name, data = {}, children = []) => {
|
const h = (name, data = {}, children = []) => {
|
||||||
const result =
|
const result =
|
||||||
typeof name == "function" ? name(data) : Object.assign(document.createElement(name), data);
|
typeof name == "function"
|
||||||
|
? name(data)
|
||||||
|
: Object.assign(document.createElement(name), data);
|
||||||
if (!Array.isArray(children)) {
|
if (!Array.isArray(children)) {
|
||||||
children = [children];
|
children = [children];
|
||||||
}
|
}
|
||||||
|
|||||||
12
lib/config/testdata/bad/badregexes.yaml
vendored
12
lib/config/testdata/bad/badregexes.yaml
vendored
@@ -1,7 +1,7 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: path-bad
|
- name: path-bad
|
||||||
path_regex: "a(b"
|
path_regex: "a(b"
|
||||||
action: DENY
|
action: DENY
|
||||||
- name: user-agent-bad
|
- name: user-agent-bad
|
||||||
user_agent_regex: "a(b"
|
user_agent_regex: "a(b"
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|||||||
10
lib/config/testdata/bad/import_and_bot.yaml
vendored
10
lib/config/testdata/bad/import_and_bot.yaml
vendored
@@ -1,6 +1,6 @@
|
|||||||
bots:
|
bots:
|
||||||
- import: (data)/bots/ai-catchall.yaml
|
- import: (data)/bots/ai-catchall.yaml
|
||||||
name: generic-browser
|
name: generic-browser
|
||||||
user_agent_regex: >
|
user_agent_regex: >
|
||||||
Mozilla|Opera
|
Mozilla|Opera
|
||||||
action: CHALLENGE
|
action: CHALLENGE
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
bots:
|
bots:
|
||||||
- import: (data)/does-not-exist-fake-file.yaml
|
- import: (data)/does-not-exist-fake-file.yaml
|
||||||
|
|||||||
4
lib/config/testdata/bad/invalid.json
vendored
4
lib/config/testdata/bad/invalid.json
vendored
@@ -1,5 +1,3 @@
|
|||||||
{
|
{
|
||||||
"bots": [
|
"bots": [{}]
|
||||||
{}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@@ -8,9 +8,7 @@
|
|||||||
"userAgent.startsWith(\"git/\") || userAgent.contains(\"libgit\")",
|
"userAgent.startsWith(\"git/\") || userAgent.contains(\"libgit\")",
|
||||||
"\"Git-Protocol\" in headers && headers[\"Git-Protocol\"] == \"version=2\"\n"
|
"\"Git-Protocol\" in headers && headers[\"Git-Protocol\"] == \"version=2\"\n"
|
||||||
],
|
],
|
||||||
"any": [
|
"any": ["userAgent.startsWith(\"evilbot/\")"]
|
||||||
"userAgent.startsWith(\"evilbot/\")"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: multiple-expression-types
|
- name: multiple-expression-types
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.startsWith("git/") || userAgent.contains("libgit")
|
- userAgent.startsWith("git/") || userAgent.contains("libgit")
|
||||||
- >
|
- >
|
||||||
"Git-Protocol" in headers && headers["Git-Protocol"] == "version=2"
|
"Git-Protocol" in headers && headers["Git-Protocol"] == "version=2"
|
||||||
any:
|
any:
|
||||||
- userAgent.startsWith("evilbot/")
|
- userAgent.startsWith("evilbot/")
|
||||||
|
|||||||
32
lib/config/testdata/bad/regex_ends_newline.yaml
vendored
32
lib/config/testdata/bad/regex_ends_newline.yaml
vendored
@@ -1,17 +1,17 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: user-agent-ends-newline
|
- name: user-agent-ends-newline
|
||||||
# Subtle bug: this ends with a newline
|
# Subtle bug: this ends with a newline
|
||||||
user_agent_regex: >
|
user_agent_regex: >
|
||||||
Mozilla
|
Mozilla
|
||||||
action: CHALLENGE
|
action: CHALLENGE
|
||||||
- name: path-ends-newline
|
- name: path-ends-newline
|
||||||
# Subtle bug: this ends with a newline
|
# Subtle bug: this ends with a newline
|
||||||
path_regex: >
|
path_regex: >
|
||||||
^/evil/.*$
|
^/evil/.*$
|
||||||
action: CHALLENGE
|
action: CHALLENGE
|
||||||
- name: headers-ends-newline
|
- name: headers-ends-newline
|
||||||
# Subtle bug: this ends with a newline
|
# Subtle bug: this ends with a newline
|
||||||
headers_regex:
|
headers_regex:
|
||||||
CF-Worker: >
|
CF-Worker: >
|
||||||
.*
|
.*
|
||||||
action: CHALLENGE
|
action: CHALLENGE
|
||||||
|
|||||||
6
lib/config/testdata/bad/status-codes-0.yaml
vendored
6
lib/config/testdata/bad/status-codes-0.yaml
vendored
@@ -1,7 +1,7 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: everything
|
- name: everything
|
||||||
user_agent_regex: .*
|
user_agent_regex: .*
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|
||||||
status_codes:
|
status_codes:
|
||||||
CHALLENGE: 0
|
CHALLENGE: 0
|
||||||
|
|||||||
5
lib/config/testdata/good/allow_everyone.json
vendored
5
lib/config/testdata/good/allow_everyone.json
vendored
@@ -2,10 +2,7 @@
|
|||||||
"bots": [
|
"bots": [
|
||||||
{
|
{
|
||||||
"name": "everyones-invited",
|
"name": "everyones-invited",
|
||||||
"remote_addresses": [
|
"remote_addresses": ["0.0.0.0/0", "::/0"],
|
||||||
"0.0.0.0/0",
|
|
||||||
"::/0"
|
|
||||||
],
|
|
||||||
"action": "ALLOW"
|
"action": "ALLOW"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
10
lib/config/testdata/good/allow_everyone.yaml
vendored
10
lib/config/testdata/good/allow_everyone.yaml
vendored
@@ -1,6 +1,6 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: everyones-invited
|
- name: everyones-invited
|
||||||
remote_addresses:
|
remote_addresses:
|
||||||
- "0.0.0.0/0"
|
- "0.0.0.0/0"
|
||||||
- "::/0"
|
- "::/0"
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: generic-browser
|
- name: generic-browser
|
||||||
user_agent_regex: Mozilla
|
user_agent_regex: Mozilla
|
||||||
action: CHALLENGE
|
action: CHALLENGE
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: everything
|
- name: everything
|
||||||
user_agent_regex: .*
|
user_agent_regex: .*
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|||||||
14
lib/config/testdata/good/git_client.yaml
vendored
14
lib/config/testdata/good/git_client.yaml
vendored
@@ -1,8 +1,8 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: allow-git-clients
|
- name: allow-git-clients
|
||||||
action: ALLOW
|
action: ALLOW
|
||||||
expression:
|
expression:
|
||||||
all:
|
all:
|
||||||
- userAgent.startsWith("git/") || userAgent.contains("libgit")
|
- userAgent.startsWith("git/") || userAgent.contains("libgit")
|
||||||
- >
|
- >
|
||||||
"Git-Protocol" in headers && headers["Git-Protocol"] == "version=2"
|
"Git-Protocol" in headers && headers["Git-Protocol"] == "version=2"
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
bots:
|
bots:
|
||||||
- import: ./testdata/hack-test.yaml
|
- import: ./testdata/hack-test.yaml
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
bots:
|
bots:
|
||||||
- import: (data)/common/keep-internet-working.yaml
|
- import: (data)/common/keep-internet-working.yaml
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: everything
|
- name: everything
|
||||||
user_agent_regex: .*
|
user_agent_regex: .*
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|
||||||
status_codes:
|
status_codes:
|
||||||
CHALLENGE: 200
|
CHALLENGE: 200
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: everything
|
- name: everything
|
||||||
user_agent_regex: .*
|
user_agent_regex: .*
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|
||||||
status_codes:
|
status_codes:
|
||||||
CHALLENGE: 403
|
CHALLENGE: 403
|
||||||
|
|||||||
4
lib/config/testdata/hack-test.json
vendored
4
lib/config/testdata/hack-test.json
vendored
@@ -2,8 +2,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ipv6-ula",
|
"name": "ipv6-ula",
|
||||||
"action": "ALLOW",
|
"action": "ALLOW",
|
||||||
"remote_addresses": [
|
"remote_addresses": ["fc00::/7"]
|
||||||
"fc00::/7"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -4,18 +4,18 @@
|
|||||||
"protected_by": "Beschermd door",
|
"protected_by": "Beschermd door",
|
||||||
"protected_from": "Van",
|
"protected_from": "Van",
|
||||||
"made_with": "Gemaakt met ❤️ in 🇨🇦",
|
"made_with": "Gemaakt met ❤️ in 🇨🇦",
|
||||||
"mascot_design": "Mascotte ontwerp door",
|
"mascot_design": "Mascotte-ontwerp door",
|
||||||
"ai_companies_explanation": "Je ziet dit omdat de beheerder van deze website Anubis heeft ingesteld om de server te beschermen tegen de plaag van AI-bedrijven die agressief websites scrapen. Dit kan downtime veroorzaken voor de websites, waardoor hun bronnen voor iedereen ontoegankelijk worden.",
|
"ai_companies_explanation": "Je ziet dit omdat de beheerder van deze website Anubis heeft ingesteld om de server te beschermen tegen de plaag van AI-bedrijven die agressief websites scrapen. Dit kan downtime veroorzaken voor de websites, waardoor de website voor iedereen ontoegankelijk wordt.",
|
||||||
"anubis_compromise": "Anubis is een compromis. Anubis gebruikt een Proef-van-Taak schema in de geest van Hashcash, een voorgesteld proef-van-taak schema voor het verminderen van e-mailspam. Het idee is dat op individuele schalen de extra belasting niet waarneembaar is, maar op het niveau van massascrapers telt het op en maakt het scrapen veel duurder.",
|
"anubis_compromise": "Anubis is een compromis. Anubis gebruikt een proof-of-work-algoritme in de geest van Hashcash, een proof-of-work-algoritme voor het verminderen van e-mailspam. Het idee is dat voor individuen minimaal is, maar het voor scrapers veel duurder wordt.",
|
||||||
"hack_purpose": "Uiteindelijk is dit een tijdelijke oplossing, zodat er meer tijd kan worden besteed aan het identificeren en herkennen van headless browsers (bijv. via de manier waarop ze lettertypen renderen), zodat de proof-of-work-pagina niet hoeft te worden gepresenteerd aan gebruikers die veel waarschijnlijker legitiem zijn.",
|
"hack_purpose": "Uiteindelijk is dit een tijdelijke oplossing, zodat er meer tijd kan worden besteed aan het identificeren en herkennen van headless browsers (bijv. via de manier waarop ze lettertypen renderen), zodat de proof-of-work-pagina niet hoeft te worden gepresenteerd aan gebruikers die veel waarschijnlijker legitiem zijn.",
|
||||||
"jshelter_note": "Anubis vereist het gebruik van moderne JavaScript-functies die worden uitgeschakeld door plugins zoals JShelter. Schakel JShelter of andere dergelijke plugins uit voor dit domein.",
|
"jshelter_note": "Anubis vereist het gebruik van moderne JavaScript-functies die worden uitgeschakeld door plugins zoals JShelter. Schakel JShelter of soortgelijke plugins uit voor dit domein.",
|
||||||
"version_info": "Deze website draait op de Anubis-versie",
|
"version_info": "Deze website draait op de Anubis-versie",
|
||||||
"try_again": "Probeer opnieuw",
|
"try_again": "Probeer opnieuw",
|
||||||
"go_home": "Naar de thuispagina",
|
"go_home": "Naar de hoofdpagine",
|
||||||
"contact_webmaster": "of als u denkt dat u niet geblokkeerd zou moeten worden, neem dan contact op met de webmaster op",
|
"contact_webmaster": "of als je denkt dat je niet geblokkeerd had moeten worden, neem contact op met de webmaster op",
|
||||||
"connection_security": "Wacht even terwijl we de veiligheid van uw verbinding waarborgen.",
|
"connection_security": "Wacht even terwijl we de veiligheid van je verbinding waarborgen.",
|
||||||
"javascript_required": "Helaas moet je JavaScript inschakelen om voorbij deze uitdaging te komen. Dit is nodig omdat AI-bedrijven het sociale contract rond de werking van websitehosting hebben veranderd. Een oplossing zonder JavaScript is nog in ontwikkeling.",
|
"javascript_required": "Helaas moet je JavaScript inschakelen om voorbij deze uitdaging te komen. Dit is nodig omdat AI-bedrijven het sociale contract rond de werking van websitehosting hebben veranderd. Een oplossing zonder JavaScript is nog in ontwikkeling.",
|
||||||
"benchmark_requires_js": "Voor het uitvoeren van de vergelijkingsinstrument moet JavaScript zijn ingeschakeld.",
|
"benchmark_requires_js": "Voor het uitvoeren van de check moet JavaScript zijn ingeschakeld.",
|
||||||
"difficulty": "Moeilijkheidsgraad:",
|
"difficulty": "Moeilijkheidsgraad:",
|
||||||
"algorithm": "Algoritme:",
|
"algorithm": "Algoritme:",
|
||||||
"compare": "Vergelijken:",
|
"compare": "Vergelijken:",
|
||||||
@@ -25,36 +25,36 @@
|
|||||||
"iters_a": "Iters A",
|
"iters_a": "Iters A",
|
||||||
"time_b": "Tijd B",
|
"time_b": "Tijd B",
|
||||||
"iters_b": "Iters B",
|
"iters_b": "Iters B",
|
||||||
"static_check_endpoint": "Dit is gewoon een controle-eindpunt voor uw reverse proxy om te gebruiken.",
|
"static_check_endpoint": "Dit is gewoon een controle-eindpunt voor je reverse proxy om te gebruiken.",
|
||||||
"authorization_required": "Autorisatie vereist",
|
"authorization_required": "Autorisatie vereist",
|
||||||
"cookies_disabled": "Uw browser is geconfigureerd om cookies uit te schakelen. Anubis heeft cookies nodig om er zeker van te zijn dat u een geldige klant bent. Schakel cookies in voor dit domein",
|
"cookies_disabled": "Cookies zijn uitgeschakeld in je browser. Anubis heeft cookies nodig om er zeker van te zijn dat je een echt persoon bent. Schakel cookies in voor dit domein",
|
||||||
"access_denied": "Toegang geweigerd: foutcode",
|
"access_denied": "Toegang geweigerd: foutcode",
|
||||||
"dronebl_entry": "DroneBL meldde een item",
|
"dronebl_entry": "DroneBL meldde een item",
|
||||||
"see_dronebl_lookup": "zie",
|
"see_dronebl_lookup": "zie",
|
||||||
"internal_server_error": "Interne Serverfout: beheerder heeft Anubis verkeerd geconfigureerd. Neem contact op met de beheerder en vraag of hij/zij de logs rond kan kijken",
|
"internal_server_error": "Interne Serverfout: beheerder heeft Anubis verkeerd geconfigureerd. Vraag de beheerder om de logs te bekijken.",
|
||||||
"invalid_redirect": "Ongeldige omleiding",
|
"invalid_redirect": "Ongeldige omleiding",
|
||||||
"redirect_not_parseable": "Redirect URL niet parseerbaar",
|
"redirect_not_parseable": "Redirect-URL kan niet verwerkt worden",
|
||||||
"redirect_domain_not_allowed": "Redirect-domein niet toegestaan",
|
"redirect_domain_not_allowed": "Redirect-domein niet toegestaan",
|
||||||
"failed_to_sign_jwt": "jWT niet ondertekend",
|
"failed_to_sign_jwt": "JWT niet ondertekend",
|
||||||
"invalid_invocation": "Ongeldige aanroep van MakeChallenge",
|
"invalid_invocation": "Ongeldige aanroep van MakeChallenge",
|
||||||
"client_error_browser": "Fout bij klant: Controleer of uw browser bijgewerkt is en probeer het later opnieuw.",
|
"client_error_browser": "Fout bij client: Controleer of je browser bijgewerkt is en probeer het later opnieuw.",
|
||||||
"oh_noes": "Oh nee-tjes!",
|
"oh_noes": "Oh nee-tjes!",
|
||||||
"benchmarking_anubis": "Anubis benchmarken!",
|
"benchmarking_anubis": "Anubis benchmarken!",
|
||||||
"you_are_not_a_bot": "Je bent geen bot!",
|
"you_are_not_a_bot": "Je bent geen bot!",
|
||||||
"making_sure_not_bot": "Ervoor zorgen dat je geen bot bent!",
|
"making_sure_not_bot": "Even checken of je een bot bent!",
|
||||||
"celphase": "CELPHASE",
|
"celphase": "CELPHASE",
|
||||||
"js_web_crypto_error": "Uw browser heeft geen werkend web.crypto-element. Bekijkt u dit via een beveiligde context?",
|
"js_web_crypto_error": "Je browser heeft geen werkend web.crypto-element. Bekijkt u dit via een beveiligde context?",
|
||||||
"js_web_workers_error": "Je browser ondersteunt geen web-takers (Anubis gebruikt dit om te voorkomen dat je browser bevriest). Heb je een plugin zoals JShelter geïnstalleerd?",
|
"js_web_workers_error": "Je browser ondersteunt geen web-takers (Anubis gebruikt dit om te voorkomen dat je browser bevriest). Heb je een plugin zoals JShelter geïnstalleerd?",
|
||||||
"js_cookies_error": "Uw browser slaat geen cookies op. Anubis gebruikt cookies om te bepalen welke klanten geslaagd zijn voor uitdagingen door een ondertekend token in een cookie op te slaan. Schakel het opslaan van cookies voor dit domein in. De namen van de cookies die Anubis opslaat, kunnen zonder voorafgaande kennisgeving variëren. cookiesnamen en -waarden maken geen deel uit van de openbare API.",
|
"js_cookies_error": "Je browser slaat geen cookies op. Anubis gebruikt cookies om te bepalen welke bezoekers echte personen zijn. Schakel het opslaan van cookies voor dit domein in. De namen van de cookies die Anubis opslaat, kunnen in de toekomst veranderen. De namen en waarden van cookies maken geen deel uit van de openbare API.",
|
||||||
"js_context_not_secure": "Je context is niet veilig!",
|
"js_context_not_secure": "Je context is niet veilig!",
|
||||||
"js_context_not_secure_msg": "Probeer verbinding te maken via HTTPS of laat de beheerder weten dat HTTPS moet worden ingesteld. Zie <a href=\"https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure\">MDN</a> voor meer informatie.",
|
"js_context_not_secure_msg": "Probeer verbinding te maken via HTTPS of laat de beheerder weten dat HTTPS moet worden ingesteld. Zie <a href=\"https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure\">MDN</a> voor meer informatie.",
|
||||||
"js_calculating": "Berekenen...",
|
"js_calculating": "Berekenen...",
|
||||||
"js_missing_feature": "Ontbrekende functie",
|
"js_missing_feature": "Ontbrekende functie",
|
||||||
"js_challenge_error": "Uitdagingsfout!",
|
"js_challenge_error": "Uitdagingsfout!",
|
||||||
"js_challenge_error_msg": "Mislukt bij het oplossen van het controlealgoritme. Misschien wilt u de pagina opnieuw laden.",
|
"js_challenge_error_msg": "De check is gefaald. Misschien wil je de pagina opnieuw laden.",
|
||||||
"js_calculating_difficulty": "Rekenen...<br/>Moeilijkheidsgraad:",
|
"js_calculating_difficulty": "Rekenen...<br/>Moeilijkheidsgraad:",
|
||||||
"js_speed": "Snelheid:",
|
"js_speed": "Snelheid:",
|
||||||
"js_verification_longer": "Verificatie duurt langer dan verwacht. Vernieuw de pagina niet a.u.b.",
|
"js_verification_longer": "Verificatie duurt langer dan verwacht. Ververs de pagina niet.",
|
||||||
"js_success": "Gelukt!",
|
"js_success": "Gelukt!",
|
||||||
"js_done_took": "Klaar! Nam",
|
"js_done_took": "Klaar! Nam",
|
||||||
"js_iterations": "iteraties",
|
"js_iterations": "iteraties",
|
||||||
@@ -62,5 +62,5 @@
|
|||||||
"js_calculation_error": "Rekenfout!",
|
"js_calculation_error": "Rekenfout!",
|
||||||
"js_calculation_error_msg": "Uitdaging niet berekend:",
|
"js_calculation_error_msg": "Uitdaging niet berekend:",
|
||||||
"missing_required_forwarded_headers": "Ontbrekende vereiste X-Forwarded-* headers",
|
"missing_required_forwarded_headers": "Ontbrekende vereiste X-Forwarded-* headers",
|
||||||
"simplified_explanation": "Dit is een maatregel tegen bots en kwaadwillende verzoeken, vergelijkbaar met een CAPTCHA. In plaats van dat u zelf werk moet verrichten, krijgt uw browser een rekentaak die hij moet oplossen om ervoor te zorgen dat het een geldige client is. Dit concept wordt <a href=\"https://en.wikipedia.org/wiki/Proof_of_work\">Proof of Work</a> genoemd. De taak wordt in een paar seconden berekend en u krijgt toegang tot de website. Bedankt voor uw begrip en geduld."
|
"simplified_explanation": "Dit is een maatregel tegen bots en kwaadwillende verzoeken, vergelijkbaar met een CAPTCHA. In plaats van dat je zelf werk moet verrichten, krijgt je browser een rekentaak die moet worden opgelost om ervoor te zorgen dat het een geldige client is. Dit concept wordt <a href=\"https://en.wikipedia.org/wiki/Proof_of_work\">Proof of Work</a> genoemd. De taak wordt in een paar seconden berekend en u krijgt toegang tot de website. Bedankt voor je begrip en geduld."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
{
|
{
|
||||||
"loading": "Ładowanie...",
|
"loading": "Ładowanie...",
|
||||||
"why_am_i_seeing": "Dlaczego to widzę?",
|
"why_am_i_seeing": "Dlaczego to widzę?",
|
||||||
"protected_by": "Chronione przez",
|
"protected_by": "Chronione przez",
|
||||||
"protected_from": "Przed",
|
"protected_from": "Przed",
|
||||||
"made_with": "Stworzone z ❤️ w 🇨🇦",
|
"made_with": "Stworzone z ❤️ w 🇨🇦",
|
||||||
"mascot_design": "Projekt maskotki:",
|
"mascot_design": "Projekt maskotki:",
|
||||||
"ai_companies_explanation": "Widzisz to, ponieważ administrator tej strony skonfigurował Anubisa, aby chronić serwer przed masowym skanowaniem treści przez firmy tworzące AI. Powoduje to obciążenie i przestoje, przez co zasoby strony stają się niedostępne dla wszystkich.",
|
"ai_companies_explanation": "Widzisz to, ponieważ administrator tej strony skonfigurował Anubisa, aby chronić serwer przed masowym skanowaniem treści przez firmy tworzące AI. Powoduje to obciążenie i przestoje, przez co zasoby strony stają się niedostępne dla wszystkich.",
|
||||||
"anubis_compromise": "Anubis jest kompromisem. Używa mechanizmu Proof-of-Work w stylu Hashcash — proponowanego systemu ograniczania spamu e-mail. Pomysł polega na tym, że dla indywidualnych użytkowników dodatkowe obciążenie jest niezauważalne, ale w skali masowego skanowania koszt szybko rośnie.",
|
"anubis_compromise": "Anubis jest kompromisem. Używa mechanizmu Proof-of-Work w stylu Hashcash — proponowanego systemu ograniczania spamu e-mail. Pomysł polega na tym, że dla indywidualnych użytkowników dodatkowe obciążenie jest niezauważalne, ale w skali masowego skanowania koszt szybko rośnie.",
|
||||||
"hack_purpose": "Docelowo jest to rozwiązanie tymczasowe, aby zyskać czas na ulepszenie metod identyfikacji przeglądarek bez interfejsu graficznego (np. poprzez analizę renderowania czcionek), by w przyszłości nie musieć wyświetlać strony z zadaniem Proof-of-Work użytkownikom, którzy najprawdopodobniej są prawidłowi.",
|
"hack_purpose": "Docelowo jest to rozwiązanie tymczasowe, aby zyskać czas na ulepszenie metod identyfikacji przeglądarek bez interfejsu graficznego (np. poprzez analizę renderowania czcionek), by w przyszłości nie musieć wyświetlać strony z zadaniem Proof-of-Work użytkownikom, którzy najprawdopodobniej są prawidłowi.",
|
||||||
"simplified_explanation": "To zabezpieczenie przed botami i złośliwymi żądaniami, podobne do CAPTCHA. Jednak zamiast wykonywać zadanie samodzielnie, przeglądarka otrzymuje obliczenie do wykonania, aby potwierdzić, że jest prawidłowym klientem. Ten mechanizm to <a href=\"https://en.wikipedia.org/wiki/Proof_of_work\">Proof of Work</a>. Zadanie trwa kilka sekund i uzyskujesz dostęp do strony. Dziękujemy za cierpliwość.",
|
"simplified_explanation": "To zabezpieczenie przed botami i złośliwymi żądaniami, podobne do CAPTCHA. Jednak zamiast wykonywać zadanie samodzielnie, przeglądarka otrzymuje obliczenie do wykonania, aby potwierdzić, że jest prawidłowym klientem. Ten mechanizm to <a href=\"https://en.wikipedia.org/wiki/Proof_of_work\">Proof of Work</a>. Zadanie trwa kilka sekund i uzyskujesz dostęp do strony. Dziękujemy za cierpliwość.",
|
||||||
"jshelter_note": "Uwaga: Anubis wymaga nowoczesnych funkcji JavaScript, które wtyczki typu JShelter mogą blokować. Wyłącz JShelter lub podobne dodatki dla tej domeny.",
|
"jshelter_note": "Uwaga: Anubis wymaga nowoczesnych funkcji JavaScript, które wtyczki typu JShelter mogą blokować. Wyłącz JShelter lub podobne dodatki dla tej domeny.",
|
||||||
"version_info": "Ta strona działa na Anubis w wersji",
|
"version_info": "Ta strona działa na Anubis w wersji",
|
||||||
"try_again": "Spróbuj ponownie",
|
"try_again": "Spróbuj ponownie",
|
||||||
"go_home": "Wróć na stronę główną",
|
"go_home": "Wróć na stronę główną",
|
||||||
"contact_webmaster": "lub jeśli uważasz, że nie powinieneś być blokowany, skontaktuj się z administratorem pod adresem",
|
"contact_webmaster": "lub jeśli uważasz, że nie powinieneś być blokowany, skontaktuj się z administratorem pod adresem",
|
||||||
"connection_security": "Poczekaj chwilę, sprawdzamy bezpieczeństwo Twojego połączenia.",
|
"connection_security": "Poczekaj chwilę, sprawdzamy bezpieczeństwo Twojego połączenia.",
|
||||||
"javascript_required": "Niestety, aby przejść tę próbę, musisz włączyć obsługę JavaScript. Jest to konieczne, ponieważ firmy zajmujące się sztuczną inteligencją zmieniły umowę społeczną dotyczącą funkcjonowania hostingu stron internetowych. Rozwiązanie bez obsługi JavaScript jest w trakcie opracowywania.",
|
"javascript_required": "Niestety, aby przejść tę próbę, musisz włączyć obsługę JavaScript. Jest to konieczne, ponieważ firmy zajmujące się sztuczną inteligencją zmieniły umowę społeczną dotyczącą funkcjonowania hostingu stron internetowych. Rozwiązanie bez obsługi JavaScript jest w trakcie opracowywania.",
|
||||||
"benchmark_requires_js": "Uruchomienie narzędzia testowego wymaga włączonego JavaScript.",
|
"benchmark_requires_js": "Uruchomienie narzędzia testowego wymaga włączonego JavaScript.",
|
||||||
"difficulty": "Trudność:",
|
"difficulty": "Trudność:",
|
||||||
"algorithm": "Algorytm:",
|
"algorithm": "Algorytm:",
|
||||||
"compare": "Porównaj:",
|
"compare": "Porównaj:",
|
||||||
"time": "Czas",
|
"time": "Czas",
|
||||||
"iters": "Iteracje",
|
"iters": "Iteracje",
|
||||||
"time_a": "Czas A",
|
"time_a": "Czas A",
|
||||||
"iters_a": "Iteracje A",
|
"iters_a": "Iteracje A",
|
||||||
"time_b": "Czas B",
|
"time_b": "Czas B",
|
||||||
"iters_b": "Iteracje B",
|
"iters_b": "Iteracje B",
|
||||||
"static_check_endpoint": "To jedynie punkt kontrolny do użytku przez Twój reverse proxy.",
|
"static_check_endpoint": "To jedynie punkt kontrolny do użytku przez Twój reverse proxy.",
|
||||||
"authorization_required": "Wymagane uwierzytelnienie",
|
"authorization_required": "Wymagane uwierzytelnienie",
|
||||||
"cookies_disabled": "Twoja przeglądarka blokuje ciasteczka. Anubis wymaga ich, aby potwierdzić, że jesteś prawidłowym klientem. Włącz ciasteczka dla tej domeny.",
|
"cookies_disabled": "Twoja przeglądarka blokuje ciasteczka. Anubis wymaga ich, aby potwierdzić, że jesteś prawidłowym klientem. Włącz ciasteczka dla tej domeny.",
|
||||||
"access_denied": "Brak dostępu: kod błędu",
|
"access_denied": "Brak dostępu: kod błędu",
|
||||||
"dronebl_entry": "DroneBL zgłosił wpis",
|
"dronebl_entry": "DroneBL zgłosił wpis",
|
||||||
"see_dronebl_lookup": "zobacz",
|
"see_dronebl_lookup": "zobacz",
|
||||||
"internal_server_error": "Błąd wewnętrzny serwera: administrator błędnie skonfigurował Anubis. Skontaktuj się z administratorem i poproś o sprawdzenie logów",
|
"internal_server_error": "Błąd wewnętrzny serwera: administrator błędnie skonfigurował Anubis. Skontaktuj się z administratorem i poproś o sprawdzenie logów",
|
||||||
"invalid_redirect": "Nieprawidłowe przekierowanie",
|
"invalid_redirect": "Nieprawidłowe przekierowanie",
|
||||||
"redirect_not_parseable": "Nie można odczytać adresu przekierowania",
|
"redirect_not_parseable": "Nie można odczytać adresu przekierowania",
|
||||||
"redirect_domain_not_allowed": "Domena przekierowania niedozwolona",
|
"redirect_domain_not_allowed": "Domena przekierowania niedozwolona",
|
||||||
"missing_required_forwarded_headers": "Brak wymaganych nagłówków X-Forwarded-*",
|
"missing_required_forwarded_headers": "Brak wymaganych nagłówków X-Forwarded-*",
|
||||||
"failed_to_sign_jwt": "Nie udało się podpisać JWT",
|
"failed_to_sign_jwt": "Nie udało się podpisać JWT",
|
||||||
"invalid_invocation": "Nieprawidłowe wywołanie MakeChallenge",
|
"invalid_invocation": "Nieprawidłowe wywołanie MakeChallenge",
|
||||||
"client_error_browser": "Błąd klienta: upewnij się, że Twoja przeglądarka jest aktualna i spróbuj ponownie później.",
|
"client_error_browser": "Błąd klienta: upewnij się, że Twoja przeglądarka jest aktualna i spróbuj ponownie później.",
|
||||||
"oh_noes": "O nie!",
|
"oh_noes": "O nie!",
|
||||||
"benchmarking_anubis": "Testowanie wydajności Anubis!",
|
"benchmarking_anubis": "Testowanie wydajności Anubis!",
|
||||||
"you_are_not_a_bot": "Nie jesteś botem!",
|
"you_are_not_a_bot": "Nie jesteś botem!",
|
||||||
"making_sure_not_bot": "Sprawdzamy, czy nie jesteś botem!",
|
"making_sure_not_bot": "Sprawdzamy, czy nie jesteś botem!",
|
||||||
"celphase": "CELPHASE",
|
"celphase": "CELPHASE",
|
||||||
"js_web_crypto_error": "Twoja przeglądarka nie obsługuje web.crypto. Czy korzystasz z bezpiecznego połączenia?",
|
"js_web_crypto_error": "Twoja przeglądarka nie obsługuje web.crypto. Czy korzystasz z bezpiecznego połączenia?",
|
||||||
"js_web_workers_error": "Twoja przeglądarka nie obsługuje web workers (Anubis ich używa, by nie zawieszać przeglądarki). Czy masz zainstalowaną wtyczkę typu JShelter?",
|
"js_web_workers_error": "Twoja przeglądarka nie obsługuje web workers (Anubis ich używa, by nie zawieszać przeglądarki). Czy masz zainstalowaną wtyczkę typu JShelter?",
|
||||||
"js_cookies_error": "Twoja przeglądarka nie zapisuje ciasteczek. Anubis używa ich do przechowywania podpisanego tokenu potwierdzającego przejście zabezpieczenia. Włącz zapis ciasteczek dla tej domeny. Nazwy ciasteczek mogą zmieniać się bez zapowiedzi. Nazwy oraz zawartość ciasteczek nie są cześcią publicznego API.",
|
"js_cookies_error": "Twoja przeglądarka nie zapisuje ciasteczek. Anubis używa ich do przechowywania podpisanego tokenu potwierdzającego przejście zabezpieczenia. Włącz zapis ciasteczek dla tej domeny. Nazwy ciasteczek mogą zmieniać się bez zapowiedzi. Nazwy oraz zawartość ciasteczek nie są cześcią publicznego API.",
|
||||||
"js_context_not_secure": "Kontekst nie jest bezpieczny!",
|
"js_context_not_secure": "Kontekst nie jest bezpieczny!",
|
||||||
"js_context_not_secure_msg": "Spróbuj połączyć się przez HTTPS lub poinformuj administratora, by skonfigurował HTTPS. Więcej informacji na <a href=\"https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure\">MDN</a>.",
|
"js_context_not_secure_msg": "Spróbuj połączyć się przez HTTPS lub poinformuj administratora, by skonfigurował HTTPS. Więcej informacji na <a href=\"https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure\">MDN</a>.",
|
||||||
"js_calculating": "Obliczanie...",
|
"js_calculating": "Obliczanie...",
|
||||||
"js_missing_feature": "Brakująca funkcja",
|
"js_missing_feature": "Brakująca funkcja",
|
||||||
"js_challenge_error": "Błąd wyzwania!",
|
"js_challenge_error": "Błąd wyzwania!",
|
||||||
"js_challenge_error_msg": "Nie udało się ustalić algorytmu sprawdzającego. Możesz spróbować odświeżyć stronę.",
|
"js_challenge_error_msg": "Nie udało się ustalić algorytmu sprawdzającego. Możesz spróbować odświeżyć stronę.",
|
||||||
"js_calculating_difficulty": "Obliczanie...<br/>Trudność:",
|
"js_calculating_difficulty": "Obliczanie...<br/>Trudność:",
|
||||||
"js_speed": "Prędkość:",
|
"js_speed": "Prędkość:",
|
||||||
"js_verification_longer": "Weryfikacja trwa dłużej niż zwykle. Proszę nie odświeżać strony.",
|
"js_verification_longer": "Weryfikacja trwa dłużej niż zwykle. Proszę nie odświeżać strony.",
|
||||||
"js_success": "Sukces!",
|
"js_success": "Sukces!",
|
||||||
"js_done_took": "Gotowe! Zajęło to",
|
"js_done_took": "Gotowe! Zajęło to",
|
||||||
"js_iterations": "iteracji",
|
"js_iterations": "iteracji",
|
||||||
"js_finished_reading": "Skończyłem czytać, kontynuuj →",
|
"js_finished_reading": "Skończyłem czytać, kontynuuj →",
|
||||||
"js_calculation_error": "Błąd obliczeń!",
|
"js_calculation_error": "Błąd obliczeń!",
|
||||||
"js_calculation_error_msg": "Nie udało się obliczyć zadania:"
|
"js_calculation_error_msg": "Nie udało się obliczyć zadania:"
|
||||||
}
|
}
|
||||||
4
lib/policy/testdata/hack-test.json
vendored
4
lib/policy/testdata/hack-test.json
vendored
@@ -2,8 +2,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ipv6-ula",
|
"name": "ipv6-ula",
|
||||||
"action": "ALLOW",
|
"action": "ALLOW",
|
||||||
"remote_addresses": [
|
"remote_addresses": ["fc00::/7"]
|
||||||
"fc00::/7"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
6
lib/testdata/cloudflare-workers-cel.yaml
vendored
6
lib/testdata/cloudflare-workers-cel.yaml
vendored
@@ -1,7 +1,7 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: cloudflare-workers
|
- name: cloudflare-workers
|
||||||
expression: '"Cf-Worker" in headers'
|
expression: '"Cf-Worker" in headers'
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|
||||||
status_codes:
|
status_codes:
|
||||||
CHALLENGE: 401
|
CHALLENGE: 401
|
||||||
|
|||||||
8
lib/testdata/cloudflare-workers-header.yaml
vendored
8
lib/testdata/cloudflare-workers-header.yaml
vendored
@@ -1,8 +1,8 @@
|
|||||||
bots:
|
bots:
|
||||||
- name: cloudflare-workers
|
- name: cloudflare-workers
|
||||||
headers_regex:
|
headers_regex:
|
||||||
CF-Worker: .*
|
CF-Worker: .*
|
||||||
action: DENY
|
action: DENY
|
||||||
|
|
||||||
status_codes:
|
status_codes:
|
||||||
CHALLENGE: 401
|
CHALLENGE: 401
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user