mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-26 13:43:47 +03:00
caddyhttp: Add RemoteAddr placeholders (#2801)
* Ignore build artifacts * Add RemoteAddr placeholders
This commit is contained in:
parent
b38365ff3b
commit
fe36d26b63
3 changed files with 90 additions and 4 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -6,6 +6,10 @@ Caddyfile
|
||||||
*.prof
|
*.prof
|
||||||
*.test
|
*.test
|
||||||
|
|
||||||
|
# build artifacts
|
||||||
|
cmd/caddy/caddy
|
||||||
|
cmd/caddy/caddy.exe
|
||||||
|
|
||||||
# mac specific
|
# mac specific
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
|
|
@ -65,13 +65,24 @@ func addHTTPVarsToReplacer(repl caddy.Replacer, req *http.Request, w http.Respon
|
||||||
return req.Host, true // OK; there probably was no port
|
return req.Host, true // OK; there probably was no port
|
||||||
}
|
}
|
||||||
return host, true
|
return host, true
|
||||||
case "http.request.hostport":
|
|
||||||
return req.Host, true
|
|
||||||
case "http.request.method":
|
|
||||||
return req.Method, true
|
|
||||||
case "http.request.port":
|
case "http.request.port":
|
||||||
_, port, _ := net.SplitHostPort(req.Host)
|
_, port, _ := net.SplitHostPort(req.Host)
|
||||||
return port, true
|
return port, true
|
||||||
|
case "http.request.hostport":
|
||||||
|
return req.Host, true
|
||||||
|
case "http.request.remote":
|
||||||
|
return req.RemoteAddr, true
|
||||||
|
case "http.request.remote.host":
|
||||||
|
host, _, err := net.SplitHostPort(req.RemoteAddr)
|
||||||
|
if err != nil {
|
||||||
|
return req.RemoteAddr, true
|
||||||
|
}
|
||||||
|
return host, true
|
||||||
|
case "http.request.remote.port":
|
||||||
|
_, port, _ := net.SplitHostPort(req.RemoteAddr)
|
||||||
|
return port, true
|
||||||
|
case "http.request.method":
|
||||||
|
return req.Method, true
|
||||||
case "http.request.scheme":
|
case "http.request.scheme":
|
||||||
if req.TLS != nil {
|
if req.TLS != nil {
|
||||||
return "https", true
|
return "https", true
|
||||||
|
|
71
modules/caddyhttp/replacer_test.go
Normal file
71
modules/caddyhttp/replacer_test.go
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
// Copyright 2015 Matthew Holt and The Caddy Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package caddyhttp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/caddyserver/caddy/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestHTTPVarReplacement(t *testing.T) {
|
||||||
|
req, _ := http.NewRequest("GET", "/", nil)
|
||||||
|
repl := caddy.NewReplacer()
|
||||||
|
ctx := context.WithValue(req.Context(), caddy.ReplacerCtxKey, repl)
|
||||||
|
req = req.WithContext(ctx)
|
||||||
|
req.Host = "example.com:80"
|
||||||
|
req.RemoteAddr = "localhost:1234"
|
||||||
|
res := httptest.NewRecorder()
|
||||||
|
addHTTPVarsToReplacer(repl, req, res)
|
||||||
|
|
||||||
|
for i, tc := range []struct {
|
||||||
|
input string
|
||||||
|
expect string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
input: "{http.request.scheme}",
|
||||||
|
expect: "http",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "{http.request.host}",
|
||||||
|
expect: "example.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "{http.request.port}",
|
||||||
|
expect: "80",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "{http.request.hostport}",
|
||||||
|
expect: "example.com:80",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "{http.request.remote.host}",
|
||||||
|
expect: "localhost",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "{http.request.remote.port}",
|
||||||
|
expect: "1234",
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
actual := repl.ReplaceAll(tc.input, "<empty>")
|
||||||
|
if actual != tc.expect {
|
||||||
|
t.Errorf("Test %d: Expected placeholder %s to be '%s' but got '%s'",
|
||||||
|
i, tc.input, tc.expect, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue