feat: improve IP parsing from X-Forwarded-For header#1940
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1940 +/- ##
==========================================
+ Coverage 90.19% 90.20% +0.01%
==========================================
Files 90 90
Lines 6434 6445 +11
==========================================
+ Hits 5803 5814 +11
Misses 492 492
Partials 139 139 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull Request Overview
This PR enhances the HTTPClientIP function to properly parse comma-separated IP addresses from the X-Forwarded-For header, enabling accurate client IP extraction when the service is behind multiple proxies. The implementation adds robust handling for whitespace, multiple proxy chains, IPv6 addresses, and graceful fallback to RemoteAddr when the header is invalid or missing.
- Improved X-Forwarded-For header parsing to extract the leftmost (original client) IP from comma-separated proxy chains
- Added comprehensive test coverage for multiple edge cases including IPv6, whitespace handling, and invalid inputs
- Introduced a helper function to split and trim comma-separated values
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| util/http.go | Added splitCommaSeparated helper function and enhanced HTTPClientIP to parse comma-separated X-Forwarded-For headers with proper whitespace handling and fallback logic |
| util/http_test.go | Added 6 new test cases covering comma-separated IPs, extra whitespace, IPv6 addresses, invalid inputs, empty strings, and whitespace-only scenarios |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [0xerr0r/blocky](https://github.com/0xerr0r/blocky) | minor | `v0.28.2` → `v0.29.0` | | [ghcr.io/0xerr0r/blocky](https://github.com/0xERR0R/blocky) | minor | `v0.28.2` → `v0.29.0` | --- ### Release Notes <details> <summary>0xerr0r/blocky (0xerr0r/blocky)</summary> ### [`v0.29.0`](https://github.com/0xERR0R/blocky/releases/tag/v0.29.0) [Compare Source](0xERR0R/blocky@v0.28.2...v0.29.0) #### Changelog ##### Features - [`0c35f21`](0xERR0R/blocky@0c35f21): feat: add RFC 7239 Forwarded header support for client IP parsing ([#​1941](0xERR0R/blocky#1941)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`011e3eb`](0xERR0R/blocky@011e3eb): feat: implement DNS64 support ([#​1933](0xERR0R/blocky#1933)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`e199445`](0xERR0R/blocky@e199445): feat: improve IP parsing from X-Forwarded-For header ([#​1940](0xERR0R/blocky#1940)) ([@​0xERR0R](https://github.com/0xERR0R)) ##### Bug fixes - [`257fe07`](0xERR0R/blocky@257fe07): fix: Incorrect rate data shown on Grafana dashboards ([#​1948](0xERR0R/blocky#1948)) ([@​mattdy](https://github.com/mattdy)) - [`1a4d22d`](0xERR0R/blocky@1a4d22d): fix: db automigration with timescaledb ([#​1975](0xERR0R/blocky#1975)) ([@​manofthepeace](https://github.com/manofthepeace)) - [`9874212`](0xERR0R/blocky@9874212): fix: use context based versions of net.Listen and net.Dial ([#​1952](0xERR0R/blocky#1952)) ([@​sonjek](https://github.com/sonjek)) ##### Build and dependencies - [`fe67404`](0xERR0R/blocky@fe67404): build(deps): bump actions/checkout from 5 to 6 ([#​1943](0xERR0R/blocky#1943)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4752061`](0xERR0R/blocky@4752061): build(deps): bump actions/download-artifact from 6 to 7 ([#​1961](0xERR0R/blocky#1961)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`d459311`](0xERR0R/blocky@d459311): build(deps): bump actions/download-artifact from 7 to 8 ([#​2000](0xERR0R/blocky#2000)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`fa1614b`](0xERR0R/blocky@fa1614b): build(deps): bump actions/upload-artifact from 5 to 6 ([#​1960](0xERR0R/blocky#1960)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`11b6f92`](0xERR0R/blocky@11b6f92): build(deps): bump actions/upload-artifact from 6 to 7 ([#​1998](0xERR0R/blocky#1998)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e83805c`](0xERR0R/blocky@e83805c): build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 ([#​1992](0xERR0R/blocky#1992)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4f62ec8`](0xERR0R/blocky@4f62ec8): build(deps): bump github.com/alicebob/miniredis/v2 from 2.35.0 to 2.36.0 ([#​1976](0xERR0R/blocky#1976)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`16644c5`](0xERR0R/blocky@16644c5): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.0 to 2.36.1 ([#​1978](0xERR0R/blocky#1978)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`36ae188`](0xERR0R/blocky@36ae188): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.1 to 2.37.0 ([#​1996](0xERR0R/blocky#1996)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4733c6b`](0xERR0R/blocky@4733c6b): build(deps): bump github.com/breml/rootcerts from 0.3.3 to 0.3.4 ([#​1987](0xERR0R/blocky#1987)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e4f7462`](0xERR0R/blocky@e4f7462): build(deps): bump github.com/go-chi/chi/v5 from 5.2.3 to 5.2.4 ([#​1972](0xERR0R/blocky#1972)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`f9dd4d2`](0xERR0R/blocky@f9dd4d2): build(deps): bump github.com/go-chi/chi/v5 from 5.2.4 to 5.2.5 ([#​1985](0xERR0R/blocky#1985)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e66a29d`](0xERR0R/blocky@e66a29d): build(deps): bump github.com/miekg/dns from 1.1.68 to 1.1.69 ([#​1959](0xERR0R/blocky#1959)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`8e69355`](0xERR0R/blocky@8e69355): build(deps): bump github.com/miekg/dns from 1.1.69 to 1.1.70 ([#​1968](0xERR0R/blocky#1968)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`5e8b555`](0xERR0R/blocky@5e8b555): build(deps): bump github.com/miekg/dns from 1.1.70 to 1.1.72 ([#​1977](0xERR0R/blocky#1977)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ef5dc97`](0xERR0R/blocky@ef5dc97): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.2 to 2.27.3 ([#​1956](0xERR0R/blocky#1956)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`670542b`](0xERR0R/blocky@670542b): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.3 to 2.27.4 ([#​1966](0xERR0R/blocky#1966)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e062742`](0xERR0R/blocky@e062742): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.4 to 2.27.5 ([#​1970](0xERR0R/blocky#1970)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4926d16`](0xERR0R/blocky@4926d16): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.5 to 2.28.1 ([#​1981](0xERR0R/blocky#1981)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ca0da10`](0xERR0R/blocky@ca0da10): build(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 ([#​1955](0xERR0R/blocky#1955)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`567a738`](0xERR0R/blocky@567a738): build(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 ([#​1967](0xERR0R/blocky#1967)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`c3aab87`](0xERR0R/blocky@c3aab87): build(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 ([#​1982](0xERR0R/blocky#1982)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ef79a67`](0xERR0R/blocky@ef79a67): build(deps): bump github.com/sirupsen/logrus from 1.9.3 to 1.9.4 ([#​1974](0xERR0R/blocky#1974)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6775759`](0xERR0R/blocky@6775759): build(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 ([#​1953](0xERR0R/blocky#1953)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`71c39fc`](0xERR0R/blocky@71c39fc): build(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 ([#​1939](0xERR0R/blocky#1939)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`be31648`](0xERR0R/blocky@be31648): build(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 ([#​1957](0xERR0R/blocky#1957)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`a574078`](0xERR0R/blocky@a574078): build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 ([#​1971](0xERR0R/blocky#1971)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6f3f295`](0xERR0R/blocky@6f3f295): build(deps): bump golang.org/x/net from 0.49.0 to 0.50.0 ([#​1988](0xERR0R/blocky#1988)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6a75afb`](0xERR0R/blocky@6a75afb): build(deps): bump golang.org/x/net from 0.50.0 to 0.51.0 ([#​1997](0xERR0R/blocky#1997)) ([@​dependabot](https://github.com/dependabot)\[bot]) ##### Misc - [`439e99b`](0xERR0R/blocky@439e99b): Add Blocky Visor to web UIs section in installation.md ([#​1993](0xERR0R/blocky#1993)) ([@​JCHHeilmann](https://github.com/JCHHeilmann)) - [`ced469f`](0xERR0R/blocky@ced469f): refactor: centralize DNS response creation logic with helper functions ([#​1942](0xERR0R/blocky#1942)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`3075c38`](0xERR0R/blocky@3075c38): refactor: clean up obsolete Go syntax ([#​1951](0xERR0R/blocky#1951)) ([@​sonjek](https://github.com/sonjek)) - [`9fe42a8`](0xERR0R/blocky@9fe42a8): refactor: simplify code for improved readability and maintainability ([#​1945](0xERR0R/blocky#1945)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`6581668`](0xERR0R/blocky@6581668): refactor: use mockery for mocks ([#​1944](0xERR0R/blocky#1944)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`55ab95e`](0xERR0R/blocky@55ab95e): test(metrics): Prometheus metrics ([#​1868](0xERR0R/blocky#1868)) ([@​zeilenschubser](https://github.com/zeilenschubser)) </details> <details> <summary>0xERR0R/blocky (ghcr.io/0xerr0r/blocky)</summary> ### [`v0.29.0`](https://github.com/0xERR0R/blocky/releases/tag/v0.29.0) [Compare Source](0xERR0R/blocky@v0.28.2...v0.29.0) #### Changelog ##### Features - [`0c35f21`](0xERR0R/blocky@0c35f21): feat: add RFC 7239 Forwarded header support for client IP parsing ([#​1941](0xERR0R/blocky#1941)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`011e3eb`](0xERR0R/blocky@011e3eb): feat: implement DNS64 support ([#​1933](0xERR0R/blocky#1933)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`e199445`](0xERR0R/blocky@e199445): feat: improve IP parsing from X-Forwarded-For header ([#​1940](0xERR0R/blocky#1940)) ([@​0xERR0R](https://github.com/0xERR0R)) ##### Bug fixes - [`257fe07`](0xERR0R/blocky@257fe07): fix: Incorrect rate data shown on Grafana dashboards ([#​1948](0xERR0R/blocky#1948)) ([@​mattdy](https://github.com/mattdy)) - [`1a4d22d`](0xERR0R/blocky@1a4d22d): fix: db automigration with timescaledb ([#​1975](0xERR0R/blocky#1975)) ([@​manofthepeace](https://github.com/manofthepeace)) - [`9874212`](0xERR0R/blocky@9874212): fix: use context based versions of net.Listen and net.Dial ([#​1952](0xERR0R/blocky#1952)) ([@​sonjek](https://github.com/sonjek)) ##### Build and dependencies - [`fe67404`](0xERR0R/blocky@fe67404): build(deps): bump actions/checkout from 5 to 6 ([#​1943](0xERR0R/blocky#1943)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4752061`](0xERR0R/blocky@4752061): build(deps): bump actions/download-artifact from 6 to 7 ([#​1961](0xERR0R/blocky#1961)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`d459311`](0xERR0R/blocky@d459311): build(deps): bump actions/download-artifact from 7 to 8 ([#​2000](0xERR0R/blocky#2000)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`fa1614b`](0xERR0R/blocky@fa1614b): build(deps): bump actions/upload-artifact from 5 to 6 ([#​1960](0xERR0R/blocky#1960)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`11b6f92`](0xERR0R/blocky@11b6f92): build(deps): bump actions/upload-artifact from 6 to 7 ([#​1998](0xERR0R/blocky#1998)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e83805c`](0xERR0R/blocky@e83805c): build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 ([#​1992](0xERR0R/blocky#1992)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4f62ec8`](0xERR0R/blocky@4f62ec8): build(deps): bump github.com/alicebob/miniredis/v2 from 2.35.0 to 2.36.0 ([#​1976](0xERR0R/blocky#1976)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`16644c5`](0xERR0R/blocky@16644c5): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.0 to 2.36.1 ([#​1978](0xERR0R/blocky#1978)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`36ae188`](0xERR0R/blocky@36ae188): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.1 to 2.37.0 ([#​1996](0xERR0R/blocky#1996)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4733c6b`](0xERR0R/blocky@4733c6b): build(deps): bump github.com/breml/rootcerts from 0.3.3 to 0.3.4 ([#​1987](0xERR0R/blocky#1987)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e4f7462`](0xERR0R/blocky@e4f7462): build(deps): bump github.com/go-chi/chi/v5 from 5.2.3 to 5.2.4 ([#​1972](0xERR0R/blocky#1972)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`f9dd4d2`](0xERR0R/blocky@f9dd4d2): build(deps): bump github.com/go-chi/chi/v5 from 5.2.4 to 5.2.5 ([#​1985](0xERR0R/blocky#1985)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e66a29d`](0xERR0R/blocky@e66a29d): build(deps): bump github.com/miekg/dns from 1.1.68 to 1.1.69 ([#​1959](0xERR0R/blocky#1959)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`8e69355`](0xERR0R/blocky@8e69355): build(deps): bump github.com/miekg/dns from 1.1.69 to 1.1.70 ([#​1968](0xERR0R/blocky#1968)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`5e8b555`](0xERR0R/blocky@5e8b555): build(deps): bump github.com/miekg/dns from 1.1.70 to 1.1.72 ([#​1977](0xERR0R/blocky#1977)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ef5dc97`](0xERR0R/blocky@ef5dc97): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.2 to 2.27.3 ([#​1956](0xERR0R/blocky#1956)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`670542b`](0xERR0R/blocky@670542b): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.3 to 2.27.4 ([#​1966](0xERR0R/blocky#1966)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e062742`](0xERR0R/blocky@e062742): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.4 to 2.27.5 ([#​1970](0xERR0R/blocky#1970)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4926d16`](0xERR0R/blocky@4926d16): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.5 to 2.28.1 ([#​1981](0xERR0R/blocky#1981)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ca0da10`](0xERR0R/blocky@ca0da10): build(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 ([#​1955](0xERR0R/blocky#1955)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`567a738`](0xERR0R/blocky@567a738): build(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 ([#​1967](0xERR0R/blocky#1967)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`c3aab87`](0xERR0R/blocky@c3aab87): build(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 ([#​1982](0xERR0R/blocky#1982)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ef79a67`](0xERR0R/blocky@ef79a67): build(deps): bump github.com/sirupsen/logrus from 1.9.3 to 1.9.4 ([#​1974](0xERR0R/blocky#1974)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6775759`](0xERR0R/blocky@6775759): build(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 ([#​1953](0xERR0R/blocky#1953)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`71c39fc`](0xERR0R/blocky@71c39fc): build(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 ([#​1939](0xERR0R/blocky#1939)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`be31648`](0xERR0R/blocky@be31648): build(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 ([#​1957](0xERR0R/blocky#1957)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`a574078`](0xERR0R/blocky@a574078): build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 ([#​1971](0xERR0R/blocky#1971)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6f3f295`](0xERR0R/blocky@6f3f295): build(deps): bump golang.org/x/net from 0.49.0 to 0.50.0 ([#​1988](0xERR0R/blocky#1988)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6a75afb`](0xERR0R/blocky@6a75afb): build(deps): bump golang.org/x/net from 0.50.0 to 0.51.0 ([#​1997](0xERR0R/blocky#1997)) ([@​dependabot](https://github.com/dependabot)\[bot]) ##### Misc - [`439e99b`](0xERR0R/blocky@439e99b): Add Blocky Visor to web UIs section in installation.md ([#​1993](0xERR0R/blocky#1993)) ([@​JCHHeilmann](https://github.com/JCHHeilmann)) - [`ced469f`](0xERR0R/blocky@ced469f): refactor: centralize DNS response creation logic with helper functions ([#​1942](0xERR0R/blocky#1942)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`3075c38`](0xERR0R/blocky@3075c38): refactor: clean up obsolete Go syntax ([#​1951](0xERR0R/blocky#1951)) ([@​sonjek](https://github.com/sonjek)) - [`9fe42a8`](0xERR0R/blocky@9fe42a8): refactor: simplify code for improved readability and maintainability ([#​1945](0xERR0R/blocky#1945)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`6581668`](0xERR0R/blocky@6581668): refactor: use mockery for mocks ([#​1944](0xERR0R/blocky#1944)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`55ab95e`](0xERR0R/blocky@55ab95e): test(metrics): Prometheus metrics ([#​1868](0xERR0R/blocky#1868)) ([@​zeilenschubser](https://github.com/zeilenschubser)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS44IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuOCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4282 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/0xerr0r/blocky](https://github.com/0xERR0R/blocky) | minor | `v0.28.2` → `v0.29.0` | --- ### Release Notes <details> <summary>0xERR0R/blocky (ghcr.io/0xerr0r/blocky)</summary> ### [`v0.29.0`](https://github.com/0xERR0R/blocky/releases/tag/v0.29.0) [Compare Source](0xERR0R/blocky@v0.28.2...v0.29.0) #### Changelog ##### Features - [`0c35f21`](0xERR0R/blocky@0c35f21): feat: add RFC 7239 Forwarded header support for client IP parsing ([#​1941](0xERR0R/blocky#1941)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`011e3eb`](0xERR0R/blocky@011e3eb): feat: implement DNS64 support ([#​1933](0xERR0R/blocky#1933)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`e199445`](0xERR0R/blocky@e199445): feat: improve IP parsing from X-Forwarded-For header ([#​1940](0xERR0R/blocky#1940)) ([@​0xERR0R](https://github.com/0xERR0R)) ##### Bug fixes - [`257fe07`](0xERR0R/blocky@257fe07): fix: Incorrect rate data shown on Grafana dashboards ([#​1948](0xERR0R/blocky#1948)) ([@​mattdy](https://github.com/mattdy)) - [`1a4d22d`](0xERR0R/blocky@1a4d22d): fix: db automigration with timescaledb ([#​1975](0xERR0R/blocky#1975)) ([@​manofthepeace](https://github.com/manofthepeace)) - [`9874212`](0xERR0R/blocky@9874212): fix: use context based versions of net.Listen and net.Dial ([#​1952](0xERR0R/blocky#1952)) ([@​sonjek](https://github.com/sonjek)) ##### Build and dependencies - [`fe67404`](0xERR0R/blocky@fe67404): build(deps): bump actions/checkout from 5 to 6 ([#​1943](0xERR0R/blocky#1943)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4752061`](0xERR0R/blocky@4752061): build(deps): bump actions/download-artifact from 6 to 7 ([#​1961](0xERR0R/blocky#1961)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`d459311`](0xERR0R/blocky@d459311): build(deps): bump actions/download-artifact from 7 to 8 ([#​2000](0xERR0R/blocky#2000)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`fa1614b`](0xERR0R/blocky@fa1614b): build(deps): bump actions/upload-artifact from 5 to 6 ([#​1960](0xERR0R/blocky#1960)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`11b6f92`](0xERR0R/blocky@11b6f92): build(deps): bump actions/upload-artifact from 6 to 7 ([#​1998](0xERR0R/blocky#1998)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e83805c`](0xERR0R/blocky@e83805c): build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 ([#​1992](0xERR0R/blocky#1992)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4f62ec8`](0xERR0R/blocky@4f62ec8): build(deps): bump github.com/alicebob/miniredis/v2 from 2.35.0 to 2.36.0 ([#​1976](0xERR0R/blocky#1976)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`16644c5`](0xERR0R/blocky@16644c5): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.0 to 2.36.1 ([#​1978](0xERR0R/blocky#1978)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`36ae188`](0xERR0R/blocky@36ae188): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.1 to 2.37.0 ([#​1996](0xERR0R/blocky#1996)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4733c6b`](0xERR0R/blocky@4733c6b): build(deps): bump github.com/breml/rootcerts from 0.3.3 to 0.3.4 ([#​1987](0xERR0R/blocky#1987)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e4f7462`](0xERR0R/blocky@e4f7462): build(deps): bump github.com/go-chi/chi/v5 from 5.2.3 to 5.2.4 ([#​1972](0xERR0R/blocky#1972)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`f9dd4d2`](0xERR0R/blocky@f9dd4d2): build(deps): bump github.com/go-chi/chi/v5 from 5.2.4 to 5.2.5 ([#​1985](0xERR0R/blocky#1985)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e66a29d`](0xERR0R/blocky@e66a29d): build(deps): bump github.com/miekg/dns from 1.1.68 to 1.1.69 ([#​1959](0xERR0R/blocky#1959)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`8e69355`](0xERR0R/blocky@8e69355): build(deps): bump github.com/miekg/dns from 1.1.69 to 1.1.70 ([#​1968](0xERR0R/blocky#1968)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`5e8b555`](0xERR0R/blocky@5e8b555): build(deps): bump github.com/miekg/dns from 1.1.70 to 1.1.72 ([#​1977](0xERR0R/blocky#1977)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ef5dc97`](0xERR0R/blocky@ef5dc97): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.2 to 2.27.3 ([#​1956](0xERR0R/blocky#1956)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`670542b`](0xERR0R/blocky@670542b): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.3 to 2.27.4 ([#​1966](0xERR0R/blocky#1966)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`e062742`](0xERR0R/blocky@e062742): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.4 to 2.27.5 ([#​1970](0xERR0R/blocky#1970)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`4926d16`](0xERR0R/blocky@4926d16): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.5 to 2.28.1 ([#​1981](0xERR0R/blocky#1981)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ca0da10`](0xERR0R/blocky@ca0da10): build(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 ([#​1955](0xERR0R/blocky#1955)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`567a738`](0xERR0R/blocky@567a738): build(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 ([#​1967](0xERR0R/blocky#1967)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`c3aab87`](0xERR0R/blocky@c3aab87): build(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 ([#​1982](0xERR0R/blocky#1982)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`ef79a67`](0xERR0R/blocky@ef79a67): build(deps): bump github.com/sirupsen/logrus from 1.9.3 to 1.9.4 ([#​1974](0xERR0R/blocky#1974)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6775759`](0xERR0R/blocky@6775759): build(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 ([#​1953](0xERR0R/blocky#1953)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`71c39fc`](0xERR0R/blocky@71c39fc): build(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 ([#​1939](0xERR0R/blocky#1939)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`be31648`](0xERR0R/blocky@be31648): build(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 ([#​1957](0xERR0R/blocky#1957)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`a574078`](0xERR0R/blocky@a574078): build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 ([#​1971](0xERR0R/blocky#1971)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6f3f295`](0xERR0R/blocky@6f3f295): build(deps): bump golang.org/x/net from 0.49.0 to 0.50.0 ([#​1988](0xERR0R/blocky#1988)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`6a75afb`](0xERR0R/blocky@6a75afb): build(deps): bump golang.org/x/net from 0.50.0 to 0.51.0 ([#​1997](0xERR0R/blocky#1997)) ([@​dependabot](https://github.com/dependabot)\[bot]) ##### Misc - [`439e99b`](0xERR0R/blocky@439e99b): Add Blocky Visor to web UIs section in installation.md ([#​1993](0xERR0R/blocky#1993)) ([@​JCHHeilmann](https://github.com/JCHHeilmann)) - [`ced469f`](0xERR0R/blocky@ced469f): refactor: centralize DNS response creation logic with helper functions ([#​1942](0xERR0R/blocky#1942)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`3075c38`](0xERR0R/blocky@3075c38): refactor: clean up obsolete Go syntax ([#​1951](0xERR0R/blocky#1951)) ([@​sonjek](https://github.com/sonjek)) - [`9fe42a8`](0xERR0R/blocky@9fe42a8): refactor: simplify code for improved readability and maintainability ([#​1945](0xERR0R/blocky#1945)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`6581668`](0xERR0R/blocky@6581668): refactor: use mockery for mocks ([#​1944](0xERR0R/blocky#1944)) ([@​0xERR0R](https://github.com/0xERR0R)) - [`55ab95e`](0xERR0R/blocky@55ab95e): test(metrics): Prometheus metrics ([#​1868](0xERR0R/blocky#1868)) ([@​zeilenschubser](https://github.com/zeilenschubser)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS44IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuOCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4283 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
closes #1938