The Scalingo build script pins Caddy a second time, so both pins move
together. The checksums come from the official release checksum files.
DJANGO_ADMIN_IP_ALLOWLIST limits the Django admin URL to a CIDR
list; unset keeps the current open behavior. The client_ip matcher
reads X-Forwarded-For only from MESSAGES_FRONTEND_TRUSTED_PROXIES,
and trusted_proxies_strict takes the rightmost untrusted address, so
a spoofed or appended header never passes the filter. On Scalingo,
set the trusted proxies to private_ranges; the router IP ranges are
not published.
make test-front-distroless builds the production image and smoke-tests
it: heartbeat, lprobe healthcheck, allow/deny cases, spoofed headers,
and the trusted-proxy path. The CI runs it; the published image had no
test before. The script picks bridge or host network mode from the
daemon, so it also runs on Docker Desktop.
A moving major tag can change after a compromise of the action
repository. Each pin keeps the version as a comment. The pins also
upgrade every action to its latest major: the new majors only move the
runtime to node24 and remove inputs these workflows do not use.
crowdin v3 changes only custom CLI args, which we do not pass.
Set persist-credentials: false on every checkout step, so the job
token does not stay in .git/config for later steps. Remove the unused
GITHUB_TOKEN from the crowdin upload workflow: the action reads it
only in the push and pull-request paths, and this workflow disables
both. Restrict the crowdin workflow permissions to contents: read.
Local parts are ASCII-folded — never str.lower(), which maps U+212A onto "k"
and would resolve a look-alike to someone else's mailbox — for everything we
own or resolve: mailbox lookup, login identity, inbound recipients. Domains
are IDNA-canonicalized. Addresses we merely carry, in contacts and MIME
headers, keep the case they were typed or received in. core.mda.addresses is
the single policy, held in place by a pylint checker and an eslint rule that
ban hand-rolled '@' splits and Unicode case folding.
Migration 0035 folds existing rows and reports the collisions it will not
merge on its own. Also drops mta-out, and adds dual RSA+ECDSA certificates,
per-refusal logging and an mta_session correlation claim to mta-in.
Removed the direct access grant on the rest-api client in the dev
realm.json
Repair make test-keycloak, which could not run against a freshly
imported realm. The fixtures need more rights than the rest-api service
account holds, so they now use the bootstrap admin service account. The
bootstrap admin user cannot serve here, because it has an empty profile
and Keycloak refuses the password grant.
Grant view-realm to the service account. set_realm_role reads a realm
role by id, which fails with 403 without that role.
Add a setup guide for the authentication provider and one for the
identity provider. Document the required client shape in env.md.
A staging and a production build must be installable side by side on one
device, and two apps claiming the same OIDC deep-link scheme would make
Android ask the user which one receives the login callback, mid-flow. The
app id, the displayed name and the callback scheme therefore become
per-environment (MOBILE_APP_ID / MOBILE_APP_NAME / MOBILE_AUTH_SCHEME).
Use the new preview_text method of jmap_email to generate
clean snippet for thread (denormalized at update_stats)
and message (at serialization). Now when a mesage is folded, we
display this snippet. In the thread list we also display this snippet above
the subject.
In some case, a user can be authenticated on the identity provider
but do not have account on Messages. In this precise case, we know
display a toast to explicit what's wrong.
When a user tries to access to a message route when it is not
authenticated, it is redirect on the homepage and have to authenticate.
Now in this case, we redirect on homepage and persist the previous route
within a next query param, in this way, we are able to automatically
redirect the user on the right view once it is authenticated.
Notably, we try to reduce disk usage by standardizind on common
base Docker images. We also improve node_modules by reducing
duplicate dependencies and install speed.