rcourtman
295edef4d5
Bind SAML logins to the browser that started them ( #2729 )
...
## Why
With `allowIdpInitiated` off, the default, every SAML login failed.
`SAMLService.ProcessResponse` passed crewjam/saml an empty list of
request IDs, and crewjam refuses any Response whose `InResponseTo` is
not in that list, so both SP-initiated and unsolicited Responses ended
in "Authentication failed". Only providers with IdP-initiated logins
enabled, which skips the check, could sign in.
## What changes
- `/api/saml/{id}/login` records each AuthnRequest ID, on the provider's
service, with the login's `returnTo` and the hash of a random token it
sets as the `HttpOnly`, `SameSite=Lax` cookie `pulse_saml_login`
(`__Host-pulse_saml_login` over HTTPS). A browser that already holds a
token keeps it, so logins started one after another in several tabs all
stay valid. Records last ten minutes, 1,024 per provider, oldest
evicted.
- The IdP posts its Response cross-site, and browsers withhold
`SameSite=Lax` cookies from cross-site POSTs. The ACS answers a
cookieless POST with a small page that re-posts the same fields once
from Pulse's own origin (no form action, so path prefixes survive; CSP
nonce on the script; a no-JS Continue button; a marker field stops a
second repost).
- `ProcessResponse` reads the answered request ID from the canonical
content goxmldsig verified for the signature covering the assertion
crewjam returns: the signed Response (or the Response in a signed
ArtifactResponse), otherwise that assertion's own
`SubjectConfirmationData`. It spends the record only when it is bound to
the presenting browser, and the login returns to the recorded `returnTo`
rather than the posted `RelayState`. A Response for another browser
leaves that browser's record intact.
- The signature verifier refuses signed content carrying a prefixed
attribute or namespace declaration named like an un-namespaced attribute
crewjam reads. encoding/xml fills such a field from any attribute with
that local name, and exclusive canonicalization leaves an unused
declaration out of the signed form. On the base commit, appending
`xmlns:IssueInstant` and `xmlns:NotOnOrAfter` to a two-hour-old signed
Response got it accepted, so with `allowIdpInitiated` on a captured
login could be replayed indefinitely.
- RelayState is now URL-escaped into the redirect, so a `returnTo` with
its own query string reaches the IdP whole.
- With `allowIdpInitiated` on, behaviour is otherwise unchanged: no
cookie or repost needed, posted `RelayState` honoured.
- The SLO LogoutRequest store from #2713 is generalised into a shared
record store; its `consume` semantics are unchanged.
Stacked on #2714 (on #2713 , on #2707 ). Those three conflict with main in
`storage-recovery.md`, where their boundary notes and main's land at the
same anchor, so none can merge on its own. This branch carries a merge
of main that keeps both sets of notes; landing it lands the stack.
## Verification
- New tests in `internal/api/saml_handlers_more_test.go`,
`saml_service_test.go` and `audit_handlers_test.go`: default-settings
login through the repost, multiple tabs, refusal of another browser's,
unknown, unsolicited and replayed Responses (the refused browser's own
login still completes afterwards), the `xmlns:InResponseTo` spoof with
the Response signed and with only the Assertion signed, a
confirmation-less signed assertion spliced ahead of another browser's
assertion, assertion-only signed success, stale IdP-initiated Responses
with spoofed ages, repost escaping and CSP nonce, and the audit event
for a binding refusal.
`TestContract_SAMLManualIDPCertificateVerifiesIdPSignatures` now runs at
default settings instead of enabling IdP-initiated logins.
- Negative controls by `-overlay`: with the attribute refusal disabled
the stale-Response replay is accepted again; with the refusal disabled
and the binding read from crewjam's parsed fields the
`xmlns:InResponseTo` spoof logs in; the round-one binding code accepted
the spliced-assertion case as the other user.
- A real Chromium run against a test IdP on `127.0.0.1` and the SP
handlers on `localhost`, behind `SecurityHeadersWithConfig` in
production CSP mode: the IdP's POST arrived `Sec-Fetch-Site: cross-site`
without the login cookie, the repost arrived `same-origin` with it, and
the login landed signed in at
`/alerts?range=7d&saml=success&tab=history`.
## Known limits
- Records live in memory: a restart, a provider re-initialization, or a
login started on a host that does not share cookies with the configured
public URL leaves the Response unmatched, and the user signs in again.
- Two logins started at the same moment in a browser that holds no token
yet each mint one; the last cookie wins and the other login fails.
- As with OIDC login state, a sustained flood of unauthenticated login
starts can evict pending records.
- On plain HTTP, or HTTPS that Pulse does not recognise behind a proxy,
the cookie has no `__Host-` prefix, so a sibling subdomain could plant
one, the same exposure the session cookie has there.
2026-10-08 02:45:20 +01:00
..
2026-10-05 23:38:18 +01:00
2026-08-31 23:52:25 +01:00
2026-10-07 16:31:52 +01:00
2026-08-21 14:56:04 +01:00
2026-08-21 14:56:04 +01:00
2026-08-30 12:55:50 +01:00
2026-10-01 10:04:11 +01:00
2026-10-08 00:07:49 +01:00
2026-07-12 22:13:04 +01:00
2026-03-18 16:06:30 +00:00
2026-07-23 22:11:48 +01:00
2026-08-09 13:36:07 +01:00
2026-03-18 16:06:30 +00:00
2026-08-05 14:34:50 +01:00
2026-08-31 00:43:42 +01:00
2026-08-30 08:36:31 +01:00
2026-07-11 16:08:44 +01:00
2026-08-23 09:18:44 +01:00
2026-09-07 17:24:25 +01:00
2026-07-12 23:15:54 +01:00
2026-08-31 23:52:25 +01:00
2026-08-31 23:52:25 +01:00
2026-07-13 17:00:36 +01:00
2026-07-19 14:48:24 +01:00
2026-09-07 17:24:25 +01:00
2026-09-07 17:24:25 +01:00
2026-07-24 10:33:57 +01:00
2026-04-22 00:05:57 +01:00
2026-04-22 00:05:57 +01:00
2026-04-22 00:05:57 +01:00
2026-09-08 21:29:36 +01:00
2026-10-01 08:55:56 +01:00
2026-07-11 19:49:17 +01:00
2026-07-10 00:14:01 +01:00
2026-07-11 19:49:17 +01:00
2026-06-23 17:26:15 +01:00
2026-07-11 11:54:56 +01:00
2026-07-11 11:54:56 +01:00
2026-05-12 12:06:27 +01:00
2026-10-02 21:18:55 +01:00
2026-10-02 21:18:55 +01:00
2026-06-23 17:26:15 +01:00
2026-07-11 21:27:00 +01:00
2026-10-05 23:38:18 +01:00
2026-08-30 18:00:33 +01:00
2026-08-30 18:00:33 +01:00
2026-07-02 23:27:49 +01:00
2026-10-06 00:36:41 +01:00
2026-10-01 09:22:15 +01:00
2026-10-01 09:22:15 +01:00
2026-09-08 21:29:36 +01:00
2026-06-23 17:26:15 +01:00
2026-06-23 17:26:15 +01:00
2026-06-23 17:26:15 +01:00
2026-09-01 13:59:36 +01:00
2026-09-01 13:59:36 +01:00
2026-07-11 19:49:17 +01:00
2026-08-27 18:20:03 +01:00
2026-09-08 21:29:36 +01:00
2026-09-10 17:06:27 +01:00
2026-07-18 20:23:41 +01:00
2026-07-18 20:23:41 +01:00
2026-03-24 23:59:52 +00:00
2026-03-27 08:39:59 +00:00
2026-09-06 17:42:24 +01:00
2026-06-04 11:23:05 +01:00
2026-09-06 17:42:24 +01:00
2026-03-18 16:06:30 +00:00
2026-10-07 14:19:53 +01:00
2026-10-07 11:54:53 +01:00
2026-01-25 21:08:44 +00:00
2026-08-14 03:11:10 +01:00
2026-07-18 12:14:12 +01:00
2026-06-23 17:26:15 +01:00
2026-03-19 04:04:14 +00:00
2026-09-07 09:45:31 +01:00
2026-07-11 12:43:55 +01:00
2026-10-08 00:14:01 +01:00
2026-06-23 17:26:15 +01:00
2026-09-05 21:43:02 +01:00
2026-03-18 16:06:30 +00:00
2026-05-15 22:45:48 +01:00
2026-09-06 17:42:24 +01:00
2026-06-07 00:06:34 +01:00
2026-09-07 17:24:25 +01:00
2026-10-07 21:00:34 +01:00
2026-04-28 15:49:18 +01:00
2026-06-03 12:29:37 +01:00
2026-03-26 17:12:27 +00:00
2026-04-11 16:47:37 +01:00
2026-03-18 16:06:30 +00:00
2026-06-27 14:43:09 +01:00
2026-09-08 02:08:15 +01:00
2026-03-18 16:06:30 +00:00
2026-05-28 15:10:39 +01:00
2026-09-08 02:08:15 +01:00
2026-01-25 21:08:44 +00:00
2026-09-10 18:21:29 +01:00
2026-05-08 02:21:31 +01:00
2026-09-02 07:55:42 +01:00
2026-09-02 07:55:42 +01:00
2026-09-02 08:53:50 +01:00
2026-09-02 11:15:22 +01:00
2026-06-30 10:37:54 +01:00
2026-07-22 16:29:44 +01:00
2026-06-23 17:26:15 +01:00
2026-08-27 19:13:32 +01:00
2026-08-27 17:20:32 +01:00
2026-03-28 21:14:54 +00:00
2026-03-18 16:06:30 +00:00
2026-08-29 14:54:04 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-30 12:06:19 +01:00
2026-07-12 23:15:54 +01:00
2026-07-12 23:15:54 +01:00
2026-07-11 19:49:17 +01:00
2026-07-19 15:11:02 +01:00
2026-07-19 15:11:02 +01:00
2026-07-19 15:11:02 +01:00
2026-08-15 10:25:04 +01:00
2026-08-15 08:48:49 +01:00
2026-07-22 12:31:44 +01:00
2026-08-15 10:25:04 +01:00
2026-07-22 12:31:44 +01:00
2026-10-07 23:02:13 +01:00
2026-07-07 20:37:18 +01:00
2026-07-16 15:25:47 +01:00
2026-07-16 16:34:26 +01:00
2026-10-03 18:16:20 +01:00
2026-08-31 19:47:01 +01:00
2026-08-07 21:38:47 +01:00
2026-08-29 06:16:52 +01:00
2026-01-24 22:42:23 +00:00
2026-07-09 20:10:08 +01:00
2026-05-28 14:49:20 +01:00
2026-08-09 13:36:07 +01:00
2026-08-09 13:36:07 +01:00
2026-02-04 09:52:32 +00:00
2026-03-24 23:59:52 +00:00
2026-09-07 12:00:48 +01:00
2026-03-18 16:06:30 +00:00
2026-06-10 11:37:39 +01:00
2026-06-10 11:37:39 +01:00
2026-08-30 17:38:59 +01:00
2026-08-30 21:44:32 +01:00
2026-08-30 15:38:34 +01:00
2026-08-30 15:38:34 +01:00
2026-08-30 21:44:32 +01:00
2026-03-18 16:06:30 +00:00
2026-05-05 12:59:59 +01:00
2026-05-03 12:25:56 +01:00
2026-09-28 15:29:15 +01:00
2026-09-08 21:53:18 +01:00
2026-08-21 18:36:21 +01:00
2026-02-02 18:59:44 +00:00
2026-09-06 20:09:54 +01:00
2026-10-03 09:31:34 +01:00
2026-08-29 22:12:41 +01:00
2026-06-02 17:34:10 +01:00
2026-07-09 20:10:08 +01:00
2026-03-26 20:51:29 +00:00
2026-05-04 09:47:54 +01:00
2026-07-09 20:10:08 +01:00
2026-08-31 00:43:42 +01:00
2026-03-18 16:06:30 +00:00
2026-06-10 17:48:11 +01:00
2026-08-31 00:06:24 +01:00
2026-08-31 00:06:24 +01:00
2026-08-21 14:56:07 +01:00
2026-08-21 14:56:07 +01:00
2026-01-25 21:08:44 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-09-08 21:42:28 +01:00
2026-08-12 07:32:50 +01:00
2026-08-11 14:05:06 +01:00
2026-07-26 12:42:22 +01:00
2026-08-24 22:45:59 +01:00
2026-08-30 21:44:32 +01:00
2026-08-24 22:45:59 +01:00
2026-08-24 22:45:59 +01:00
2026-07-18 13:09:18 +01:00
2026-08-30 00:02:15 +01:00
2026-10-05 22:27:03 +01:00
2026-10-03 23:58:11 +01:00
2026-08-06 11:09:52 +01:00
2026-07-24 13:00:03 +01:00
2026-07-09 19:46:40 +01:00
2026-07-09 19:46:40 +01:00
2026-08-24 22:45:59 +01:00
2026-10-08 00:14:01 +01:00
2026-03-18 16:06:30 +00:00
2026-04-26 15:27:10 +01:00
2026-08-09 13:36:07 +01:00
2026-10-07 13:46:17 +01:00
2026-10-07 13:46:17 +01:00
2026-05-05 12:59:59 +01:00
2026-06-03 12:29:37 +01:00
2026-10-07 20:04:07 +01:00
2026-10-07 20:04:07 +01:00
2026-10-05 22:23:09 +01:00
2026-10-05 22:23:09 +01:00
2026-03-18 16:06:30 +00:00
2026-10-03 20:24:47 +01:00
2026-06-23 17:26:15 +01:00
2026-07-24 00:19:40 +01:00
2026-08-29 22:23:54 +01:00
2026-07-24 09:45:05 +01:00
2026-08-29 22:23:54 +01:00
2026-03-18 16:06:30 +00:00
2026-10-07 19:31:50 +01:00
2026-10-07 19:31:50 +01:00
2026-03-24 16:05:19 +00:00
2026-07-11 15:19:41 +01:00
2026-03-18 16:06:30 +00:00
2026-07-23 23:57:42 +01:00
2026-07-11 15:19:41 +01:00
2026-07-23 23:57:42 +01:00
2026-09-05 22:25:48 +01:00
2026-08-27 20:43:54 +01:00
2026-09-07 12:00:48 +01:00
2026-09-07 12:00:48 +01:00
2026-07-24 12:42:16 +01:00
2026-07-24 12:42:16 +01:00
2026-08-27 20:43:54 +01:00
2026-03-28 20:35:10 +00:00
2026-08-31 00:43:42 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-25 23:40:22 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-04-22 04:23:23 +01:00
2026-08-21 18:36:21 +01:00
2026-05-13 00:28:24 +01:00
2026-05-13 00:28:24 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 09:54:14 +01:00
2026-07-08 14:36:55 +01:00
2026-07-23 22:33:07 +01:00
2026-07-24 12:42:16 +01:00
2026-07-22 16:29:44 +01:00
2026-08-23 23:39:20 +01:00
2026-10-06 00:36:41 +01:00
2026-09-07 12:00:48 +01:00
2026-09-07 12:00:48 +01:00
2026-08-13 23:26:08 +01:00
2026-07-24 12:42:16 +01:00
2026-07-12 05:23:02 +01:00
2026-08-14 01:12:49 +01:00
2026-08-14 01:12:49 +01:00
2026-08-14 01:12:49 +01:00
2026-10-01 05:51:09 +01:00
2026-04-05 13:18:30 +01:00
2026-04-28 15:49:18 +01:00
2026-04-28 15:49:18 +01:00
2026-04-28 16:36:09 +01:00
2026-03-18 16:06:30 +00:00
2026-05-04 09:33:19 +01:00
2026-10-03 21:53:22 +01:00
2026-09-24 17:33:21 +01:00
2026-10-04 00:15:28 +01:00
2026-09-06 08:31:26 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-10 12:54:12 +01:00
2026-08-21 14:56:11 +01:00
2026-08-12 07:32:50 +01:00
2026-03-18 16:06:30 +00:00
2026-07-28 13:57:48 +01:00
2026-09-10 02:01:25 +01:00
2026-08-21 14:56:07 +01:00
2026-09-24 10:24:29 +01:00
2026-09-01 14:36:49 +01:00
2026-09-01 15:26:48 +01:00
2026-05-05 12:59:59 +01:00
2026-03-18 16:06:30 +00:00
2026-09-01 13:59:36 +01:00
2026-07-22 16:29:44 +01:00
2026-04-28 19:12:21 +01:00
2026-04-11 16:47:37 +01:00
2026-07-04 22:44:43 +01:00
2026-08-02 00:04:40 +01:00
2026-05-05 12:59:59 +01:00
2026-04-28 19:12:21 +01:00
2026-08-04 14:19:47 +01:00
2026-08-04 14:19:47 +01:00
2026-04-16 10:17:37 +01:00
2026-08-08 16:48:19 +01:00
2026-07-14 16:18:21 +01:00
2026-07-14 16:18:21 +01:00
2026-07-14 16:18:21 +01:00
2026-09-19 17:26:25 +01:00
2026-06-11 13:10:16 +01:00
2026-03-18 16:06:30 +00:00
2026-02-02 22:02:22 +00:00
2025-12-12 11:05:24 +00:00
2026-04-22 00:39:53 +01:00
2026-07-23 06:59:05 +01:00
2026-05-04 22:43:35 +01:00
2026-08-08 12:07:40 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-08-31 19:47:01 +01:00
2026-05-12 21:10:58 +01:00
2026-07-22 15:53:34 +01:00
2026-05-12 21:10:58 +01:00
2026-06-09 21:42:21 +01:00
2026-07-24 12:42:16 +01:00
2026-07-24 12:42:16 +01:00
2026-03-18 16:06:30 +00:00
2026-01-19 19:26:18 +00:00
2025-12-10 00:29:07 +00:00
2026-10-07 19:31:50 +01:00
2026-08-26 13:54:55 +01:00
2026-10-07 21:00:34 +01:00
2026-05-10 22:59:23 +01:00
2026-06-03 12:29:37 +01:00
2026-06-23 17:26:15 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-03-18 16:06:30 +00:00
2026-08-21 14:56:04 +01:00
2026-04-22 05:42:45 +01:00
2026-08-07 21:38:47 +01:00
2026-03-18 16:06:30 +00:00
2026-04-11 16:47:37 +01:00
2026-04-11 16:47:37 +01:00
2026-06-09 21:42:21 +01:00
2026-06-03 12:29:37 +01:00
2026-06-03 12:29:37 +01:00
2026-06-03 12:29:37 +01:00
2026-08-21 14:56:07 +01:00
2026-09-08 21:14:29 +01:00
2026-03-18 16:06:30 +00:00
2026-09-08 11:37:20 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 09:54:14 +01:00
2026-04-29 16:25:09 +01:00
2026-08-09 13:36:07 +01:00
2026-07-10 09:53:09 +01:00
2026-07-09 09:52:59 +01:00
2026-08-31 00:43:42 +01:00
2026-09-10 00:39:00 +01:00
2026-09-04 11:40:20 +01:00
2026-07-10 09:53:09 +01:00
2026-03-18 16:06:30 +00:00
2026-07-07 15:12:59 +01:00
2026-09-29 13:19:54 +01:00
2026-05-25 09:25:03 +01:00
2026-10-05 09:21:40 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-10-05 09:21:40 +01:00
2026-03-18 16:06:30 +00:00
2026-09-07 17:24:25 +01:00
2026-09-07 17:24:25 +01:00
2026-09-07 09:45:31 +01:00
2026-07-12 23:15:54 +01:00
2026-10-05 17:25:52 +01:00
2026-09-02 11:15:22 +01:00
2026-09-02 11:15:22 +01:00
2026-07-18 11:59:05 +01:00
2026-07-18 11:59:05 +01:00
2026-08-14 12:52:51 +01:00
2026-08-14 03:11:10 +01:00
2026-10-05 17:24:27 +01:00
2026-08-08 12:07:40 +01:00
2026-05-25 21:47:12 +01:00
2026-05-25 21:47:12 +01:00
2026-04-22 00:39:53 +01:00
2026-08-31 00:43:42 +01:00
2026-06-10 10:52:05 +01:00
2026-08-30 21:44:32 +01:00
2026-05-21 15:15:23 +01:00
2026-05-21 15:15:23 +01:00
2026-06-23 17:26:15 +01:00
2026-01-19 19:26:18 +00:00
2026-06-23 17:26:15 +01:00
2026-09-07 12:00:48 +01:00
2026-09-07 12:00:48 +01:00
2026-07-13 11:04:09 +01:00
2026-09-07 12:00:48 +01:00
2026-09-07 12:00:48 +01:00
2026-03-18 16:06:30 +00:00
2026-02-04 14:35:08 +00:00
2026-05-04 09:33:19 +01:00
2026-04-08 20:42:36 +01:00
2026-06-10 10:52:05 +01:00
2026-08-21 18:36:21 +01:00
2026-05-16 13:57:53 +01:00
2026-03-18 16:06:30 +00:00
2026-09-09 11:00:59 +01:00
2026-10-05 13:20:08 +01:00
2026-09-09 11:00:59 +01:00
2026-09-10 17:51:49 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-03 23:14:25 +01:00
2026-10-05 13:20:08 +01:00
2026-04-22 00:39:53 +01:00
2026-07-23 22:11:48 +01:00
2026-02-02 18:59:44 +00:00
2026-02-02 23:01:29 +00:00
2026-08-09 13:36:07 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-07 20:37:18 +01:00
2026-03-18 16:06:30 +00:00
2026-08-05 14:34:50 +01:00
2026-04-26 17:26:16 +01:00
2026-01-22 00:30:15 +00:00
2026-07-22 15:53:34 +01:00
2026-08-24 10:21:10 +01:00
2026-08-24 10:21:10 +01:00
2026-02-04 15:01:09 +00:00
2026-04-22 00:39:53 +01:00
2026-05-01 21:36:28 +01:00
2026-08-27 19:13:32 +01:00
2026-07-01 10:38:57 +01:00
2026-08-27 19:13:32 +01:00
2026-07-29 20:09:23 +01:00
2026-07-22 13:41:09 +01:00
2026-04-30 12:53:29 +01:00
2026-04-11 16:47:37 +01:00
2026-04-11 16:47:37 +01:00
2026-05-16 13:57:53 +01:00
2026-07-22 15:53:34 +01:00
2026-09-02 11:15:22 +01:00
2026-09-02 11:15:22 +01:00
2026-06-10 17:48:11 +01:00
2026-06-10 17:48:11 +01:00
2026-03-25 22:27:35 +00:00
2026-10-07 21:00:34 +01:00
2026-03-26 09:15:15 +00:00
2026-03-26 22:58:27 +00:00
2026-03-18 16:06:30 +00:00
2026-10-06 23:09:52 +01:00
2026-02-04 10:28:41 +00:00
2026-08-21 18:36:21 +01:00
2026-08-21 18:36:21 +01:00
2026-08-27 18:20:03 +01:00
2026-08-27 18:20:03 +01:00
2026-08-21 18:36:21 +01:00
2026-09-02 08:53:50 +01:00
2026-07-23 11:19:50 +01:00
2026-03-18 16:06:30 +00:00
2026-04-26 17:26:16 +01:00
2026-10-05 22:45:56 +01:00
2026-04-26 15:27:10 +01:00
2026-04-28 16:36:09 +01:00
2026-03-26 17:12:27 +00:00
2026-08-21 14:56:07 +01:00
2026-08-29 23:48:28 +01:00
2026-09-08 21:29:36 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-22 01:18:33 +01:00
2026-04-18 00:06:50 +01:00
2026-08-21 14:56:07 +01:00
2026-09-08 11:37:20 +01:00
2026-10-05 13:20:08 +01:00
2026-10-05 13:20:08 +01:00
2026-05-03 12:25:56 +01:00
2026-10-01 09:22:15 +01:00
2026-08-21 18:36:21 +01:00
2026-06-09 21:42:21 +01:00
2026-02-04 10:28:41 +00:00
2026-02-04 10:28:41 +00:00
2026-08-29 23:48:28 +01:00
2026-02-04 10:28:41 +00:00
2026-04-22 00:39:53 +01:00
2026-08-16 11:15:16 +01:00
2026-03-26 21:43:30 +00:00
2026-04-26 17:26:16 +01:00
2026-03-26 21:43:30 +00:00
2026-03-26 21:43:30 +00:00
2026-09-07 17:24:25 +01:00
2026-07-10 12:45:27 +01:00
2026-05-07 21:58:06 +01:00
2026-07-22 16:18:00 +01:00
2026-03-18 16:06:30 +00:00
2026-09-05 16:04:12 +01:00
2026-03-18 16:06:30 +00:00
2026-04-28 16:36:09 +01:00
2026-04-26 17:26:16 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-08-05 17:33:57 +01:00
2026-08-30 18:40:06 +01:00
2026-08-31 00:06:24 +01:00
2026-07-23 22:33:07 +01:00
2026-09-06 12:45:40 +01:00
2026-08-08 09:42:21 +01:00
2026-06-03 14:42:43 +01:00
2026-08-31 19:47:01 +01:00
2026-09-06 17:42:24 +01:00
2026-10-07 21:00:34 +01:00
2026-07-30 16:25:36 +01:00
2026-07-30 16:25:36 +01:00
2026-08-12 09:20:01 +01:00
2026-08-12 09:20:01 +01:00
2026-08-14 00:18:23 +01:00
2026-08-14 00:18:23 +01:00
2026-07-07 16:35:07 +01:00
2026-10-07 23:02:13 +01:00
2026-05-03 13:19:51 +01:00
2026-10-07 23:02:13 +01:00
2026-10-07 19:31:50 +01:00
2026-10-07 23:02:13 +01:00
2026-10-07 23:02:13 +01:00
2026-10-07 23:02:13 +01:00
2026-07-09 19:46:40 +01:00
2026-09-10 06:52:38 +01:00
2026-09-10 06:52:38 +01:00
2026-10-06 00:36:41 +01:00
2026-08-31 01:43:55 +01:00
2026-08-31 01:43:55 +01:00
2026-09-10 06:52:38 +01:00
2026-08-29 05:19:19 +01:00
2026-08-11 16:38:21 +01:00
2026-09-23 22:11:03 +01:00
2026-09-15 02:22:04 +01:00
2026-07-10 01:28:33 +01:00
2026-09-23 22:11:03 +01:00
2026-08-31 00:43:42 +01:00
2026-09-17 12:35:20 +01:00
2026-08-11 16:38:21 +01:00
2026-08-30 18:00:33 +01:00
2026-05-04 00:50:14 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-07-30 12:06:19 +01:00
2026-08-28 07:08:08 +01:00
2026-08-09 13:36:07 +01:00
2026-07-07 16:35:07 +01:00
2026-08-09 13:36:07 +01:00
2026-08-09 13:36:07 +01:00
2026-07-23 06:34:03 +01:00
2026-09-19 17:26:25 +01:00
2026-04-11 14:51:10 +01:00
2026-05-03 12:48:01 +01:00
2026-07-07 22:04:46 +01:00
2026-04-01 16:36:44 +01:00
2026-07-09 19:46:40 +01:00
2026-07-09 19:46:40 +01:00
2026-07-23 07:15:13 +01:00
2026-03-18 16:06:30 +00:00
2026-09-01 01:02:17 +01:00
2026-05-05 12:59:59 +01:00
2026-08-08 12:07:40 +01:00
2026-07-23 22:33:07 +01:00
2026-04-07 10:24:53 +01:00
2026-03-18 16:06:30 +00:00
2026-06-03 12:29:37 +01:00
2026-08-20 14:27:12 +01:00
2026-07-28 13:28:55 +01:00
2026-03-18 16:06:30 +00:00
2026-10-01 13:28:21 +01:00
2026-04-26 17:26:16 +01:00
2026-03-18 16:06:30 +00:00
2026-07-28 11:13:37 +01:00
2026-10-01 13:28:21 +01:00
2026-08-05 17:33:57 +01:00
2026-08-05 17:33:57 +01:00
2026-08-05 17:33:57 +01:00
2026-08-05 17:33:57 +01:00
2026-09-02 11:09:25 +01:00
2026-08-27 19:44:02 +01:00
2026-09-27 23:50:23 +01:00
2026-08-30 13:49:58 +01:00
2026-08-30 13:49:58 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-02-04 14:48:03 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-04 23:16:15 +01:00
2026-03-18 16:06:30 +00:00
2026-08-31 19:47:01 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-04-28 16:36:09 +01:00
2026-03-29 19:50:31 +01:00
2026-03-29 20:36:43 +01:00
2026-07-22 16:18:00 +01:00
2026-03-29 20:13:39 +01:00
2026-10-04 09:45:21 +01:00
2026-10-03 23:58:11 +01:00
2026-10-03 23:58:11 +01:00
2026-03-18 16:06:30 +00:00
2026-08-21 18:36:21 +01:00
2026-06-04 11:49:17 +01:00
2026-03-18 16:06:30 +00:00
2026-06-04 14:07:14 +01:00
2026-07-23 22:05:09 +01:00
2026-09-24 10:42:33 +01:00
2026-06-04 08:39:31 +01:00
2026-08-29 23:48:28 +01:00
2026-09-22 18:42:51 +01:00
2026-09-01 16:16:56 +01:00
2026-03-18 16:06:30 +00:00
2026-07-23 07:15:13 +01:00
2026-09-01 16:16:56 +01:00
2026-03-18 16:06:30 +00:00
2026-06-02 23:54:48 +01:00
2026-08-21 14:56:07 +01:00
2026-07-21 21:24:15 +01:00
2026-09-30 23:39:35 +01:00
2026-09-30 23:39:35 +01:00
2026-03-18 16:06:30 +00:00
2026-04-22 03:06:22 +01:00
2026-09-13 10:59:02 +01:00
2026-07-23 22:06:57 +01:00
2026-06-03 12:29:37 +01:00
2026-04-22 04:46:13 +01:00