Skip to content

feat: per-OAuth-account proxy assignment for IP diversity#1

Open
pizzav-xyz wants to merge 5 commits into
mainfrom
feature/oauth-proxy-assignment
Open

feat: per-OAuth-account proxy assignment for IP diversity#1
pizzav-xyz wants to merge 5 commits into
mainfrom
feature/oauth-proxy-assignment

Conversation

@pizzav-xyz
Copy link
Copy Markdown
Owner

Summary

  • Add per-OAuth-account proxy assignment via oauth-proxy config block
  • Round-robin assignment across multiple SOCKS5 proxies for IP diversity
  • Validate auth count matches proxies × accounts_per_proxy at startup

Changes

  • Add OAuthProxy struct (Proxies + AccountsPerProxy) to internal/config/config.go
  • Add validateOAuthProxyConfig() to check count match at startup
  • Add applyOAuthProxyAssignment() to assign proxies round-robin style (sorted alphabetically)

Test

  • 4 Mullvad SOCKS5 proxies, 2 accounts_per_proxy = 8 auth files assigned correctly

- Add OAuthProxy config struct (proxies + accounts-per-proxy)
- Validate count match at startup: len(auths) == accounts_per_proxy * len(proxies)
- Assign proxies to auths sorted alphabetically by filename
- Log assignment table at INFO level

This enables multi-account users to distribute requests across
different proxies for IP diversity without manual configuration.
validation was running before Load() populated the auth list,
causing false mismatch errors
- validate before mutation (fail-fast)
- redact proxy URLs in logs
- pass context to Update
- remove redundant bounds check
Blocking:
- oauth-proxy now runtime-only via proxyMapping (no Update/persistence)
- fail-fast on partial config (one of proxies/accounts-per-proxy set)

Non-blocking:
- error text aligned with accounts-per-proxy
- sort by FileName not auth.ID
- oauth-proxy snippet added to config.example.yaml
recompute proxyMapping when:
- config is reloaded (reloadCallback)
- auth files change (handleAuthUpdate on add/modify/delete)

fixes Codex P1: stale proxy mapping after runtime config changes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant