feat!: remove proxypassword in favor of credentials in proxyurl by tink-bot · Pull Request #4059 · go-vikunja/vikunja · GitHub
Skip to content

feat!: remove proxypassword in favor of credentials in proxyurl - #4059

Draft
tink-bot wants to merge 12 commits into
mainfrom
feat/remove-proxy-password
Draft

tink-bot wants to merge 12 commits into
mainfrom
feat/remove-proxy-password

Conversation

@tink-bot

@tink-bot tink-bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Two ways to pass proxy credentials (proxyurl userinfo vs proxypassword with implicit vikunja username) = extra rules, extra tests, surprising precedence. Keep one: URL.

Follow-up to #4016, based on its branch because credentials in proxyurl only exist there. Not part of the stack; GitHub retargets to main once #4016 merges.

Removed keys listed in removedConfigKeys; #4063 adds webhook keys to same table, merge conflict = union of entries.

Review guide: decision to review = fail startup vs. ignore. Ignoring would make proxy answer 407 to every outgoing request, silently.

Breaking changes

outgoingrequests.proxypassword and the deprecated webhooks.proxypassword have been removed. Vikunja now refuses to start when either one is set, and the error message explains how to move the credentials into outgoingrequests.proxyurl, for example http://vikunja:<url-encoded password>@mole:8080. Special characters in the password must be URL-encoded.

How to verify

  1. Set outgoingrequests.proxypassword: secret in the config (or VIKUNJA_OUTGOINGREQUESTS_PROXYPASSWORD=secret) and start Vikunja.
  2. Expected: Startup fails with config key "outgoingrequests.proxypassword" was removed, put the proxy credentials into "outgoingrequests.proxyurl" instead, ....
  3. Remove the password key, set outgoingrequests.proxyurl: http://vikunja:secret@<proxy>:8080 against a proxy that requires basic auth, and trigger a webhook.
  4. Expected: The proxy receives the webhook request authenticated as vikunja.

NewHTTPClient carries the proxy and timeout settings without the SSRF
guard, for admin-configured endpoints like OIDC providers that often
live on a private network. NewSSRFSafeHTTPClient builds on it.
@github-actions github-actions Bot added area/config config.yml, env vars, runtime flags, deployment config area/webhooks Webhook delivery, payloads, event types labels Sep 30, 2026
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

outgoingrequests.proxyurl was silently ignored unless proxypassword was
set too, and the username was hardcoded to vikunja. Credentials in the
proxy url are used now, with proxypassword as the mole-compatible
fallback. Plain http requests through the proxy now authenticate too,
not only CONNECT tunnels. An unparseable proxy url fails requests
instead of connecting directly.
…the SSRF guard

The proxy dial exemption was keyed on addresses learned lazily from earlier
proxied requests, so a direct request (loopback, NO_PROXY or an unproxied
scheme) or a redirect to the proxy's host:port was dialed unguarded. Derive
the exempt addresses once from the configured or environment proxy URLs and
reject direct requests to them with ssrf.ErrProhibitedIP.

Address pr-swarm finding: SSRF guard bypass via the proxy address
Address review comment: make the missing SSRF guard obvious at the call site
BREAKING CHANGE: outgoingrequests.proxypassword is no longer used. Put
the credentials into outgoingrequests.proxyurl instead, for example
http://vikunja:password@mole:8080.
Ignoring the removed keys would leave the proxy rejecting every request
with a 407, so startup fails with a hint to move the credentials into
outgoingrequests.proxyurl.

BREAKING CHANGE: outgoingrequests.proxypassword and
webhooks.proxypassword were removed. Vikunja refuses to start when
either is set.
@tink-bot
tink-bot force-pushed the refactor/outgoing-requests-http-client branch from f7ed27f to 645bf2d Compare September 30, 2026 14:08
@tink-bot
tink-bot force-pushed the feat/remove-proxy-password branch from 96b5742 to aa6bafc Compare September 30, 2026 14:08
@kolaente
kolaente force-pushed the refactor/outgoing-requests-http-client branch from 645bf2d to 057de82 Compare September 30, 2026 14:08
Base automatically changed from refactor/outgoing-requests-http-client to main September 30, 2026 16:26

This branch was successfully deployed

1 active deployment
preview-trusted — aa6bafce Deployed Sep 30, 2026 by tink-bot via docker #5127
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/config config.yml, env vars, runtime flags, deployment config area/webhooks Webhook delivery, payloads, event types

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants