The bug report — this is genuinely thorough and will let a maintainer pinpoint it fast:
Title: InvalidUrl on save_user_settings for any URL field (avatar/banner) — valid same-host URL, 0.19.19
Fresh 0.19.19 docker install. Saving any URL field (avatar, banner) fails HTTP 400 invalid_url at crates/api/src/local_user/save_settings.rs:33. Text fields (bio, display_name) save fine — so it’s isolated to URL validation, not auth or the transaction.
The avatar URL is https://lemmy.rmict.nl/pictrs/image/<id>.png — correct host, no port, valid syntax. The image uploads to pictrs successfully and is reachable.
Ruled out:
curl from inside the lemmy container reaches the URL (405 on HEAD, allow: GET)
local_site_url_blocklist empty; slur_filter_regex empty
instance domain (id=1) = lemmy.rmict.nl (matches)
pictrs url = http://pictrs:8080/ (no trailing slash)
image_mode tested: default and None — no change
Reverse proxy Host forced to lemmy.rmict.nl, X-Forwarded-Proto https — no change
Text-only settings save successfully
Setup: NPM (separate host) terminates TLS → http://<host>:10633 → bundled nginx → lemmy:8536. tls_enabled: true.
Debug log shows only the wrapped InvalidUrl: InvalidUrl with no underlying cause. What at save_settings.rs:33 rejects a syntactically valid, reachable, same-host URL?
The bug report — this is genuinely thorough and will let a maintainer pinpoint it fast:
Title: InvalidUrl on save_user_settings for any URL field (avatar/banner) — valid same-host URL, 0.19.19 Fresh 0.19.19 docker install. Saving any URL field (avatar, banner) fails HTTP 400 invalid_url at crates/api/src/local_user/save_settings.rs:33. Text fields (bio, display_name) save fine — so it’s isolated to URL validation, not auth or the transaction. The avatar URL is https://lemmy.rmict.nl/pictrs/image/<id>.png — correct host, no port, valid syntax. The image uploads to pictrs successfully and is reachable. Ruled out:
curl from inside the lemmy container reaches the URL (405 on HEAD, allow: GET) local_site_url_blocklist empty; slur_filter_regex empty instance domain (id=1) = lemmy.rmict.nl (matches) pictrs url = http://pictrs:8080/ (no trailing slash) image_mode tested: default and None — no change Reverse proxy Host forced to lemmy.rmict.nl, X-Forwarded-Proto https — no change Text-only settings save successfully
Setup: NPM (separate host) terminates TLS → http://<host>:10633 → bundled nginx → lemmy:8536. tls_enabled: true. Debug log shows only the wrapped InvalidUrl: InvalidUrl with no underlying cause. What at save_settings.rs:33 rejects a syntactically valid, reachable, same-host URL?