• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

umputun / reproxy / 41184042456
81%

Build:
DEFAULT BRANCH: master
Ran 31 Oct 2026 08:19AM UTC
Jobs 1
Files 20
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

31 Oct 2026 08:18AM UTC coverage: 81.136% (+0.2%) from 80.985%
41184042456

push

github

web-flow
fix: throttle before auth, plugin request fields, bounded metrics label, host parsing (#271)

* fix: throttle before auth, give plugins the matched request, bound metrics server label

rate limits ran after global and per-route basic auth, so requests with
wrong credentials never counted and password guessing was unlimited. The
limiters now run right after the IP allowlist.

plugins got the client's raw path spelling, an empty Host for ordinary
origin-form requests and the X-Real-IP header as the client sent it. A plugin rejecting /fail let
/%66ail through to the upstream as /fail, and could be fed any client
address. Plugins now get the canonical path, the request host, and
X-Real-IP resolved through --trusted-proxy.

with --mgmt.low-cardinality the server label still took the raw Host, so
each new Host value added a series. It now uses the matched route's
server, or [unmatched].

the host port was cut with a split on ":", which turned [::1]:8080 into
"[" in route matching and metrics. It is now parsed with url.URL.

* fix: keep the server name of a Host with a non-numeric port

url.URL.Hostname strips a port only when it is all digits, so a Host like
ADMIN.example.com:x or a.example.com:x kept the suffix and missed its exact
and wildcard servers. The request fell through to a catch-all route and
skipped the narrower rule's auth and allowlist. Route matching, the plugin
Host field and the metrics server label now share discovery.HostName,
which cuts at the first colon as before and only unwraps bracketed IPv6.

the README plugin intro no longer calls the plugin URL the original one.

* fix: take the server name from r.Host for absolute-form targets too

route matching preferred r.URL.Hostname for absolute-form targets. For a
non-http scheme Go splits that host at the last colon, so
GET foo://a.wild.example:1:2/x gave "a.wild.example:1", missed its
wildcard server and reached the catch-all without that rule's auth. Go's
server already copies the targe... (continued)

26 of 26 new or added lines in 5 files covered. (100.0%)

1 existing line in 1 file now uncovered.

2628 of 3239 relevant lines covered (81.14%)

78.29 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
92.09
-0.72% app/discovery/provider/consulcatalog/consulcatalog.go
Jobs
ID Job ID Ran Files Coverage
1 41184042456.1 31 Oct 2026 08:19AM UTC 20
81.14
GitHub Action Run
Source Files on build 41184042456
  • Tree
  • List 20
  • Changed 6
  • Source Changed 0
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • b8bf877f on github
  • Prev Build on master (#41180050222)
  • Next Build on master (#41184903585)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc