mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-08 11:58:49 +03:00
minor condition keyword check refactor
This commit is contained in:
parent
cf3ce49104
commit
3c8b2b5954
4 changed files with 24 additions and 16 deletions
|
@ -6,12 +6,13 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/mholt/caddy/caddyfile"
|
"github.com/mholt/caddy"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetupIfMatcher parses `if` or `if_op` in the current dispenser block.
|
// SetupIfMatcher parses `if` or `if_op` in the current dispenser block.
|
||||||
// It returns a RequestMatcher and an error if any.
|
// It returns a RequestMatcher and an error if any.
|
||||||
func SetupIfMatcher(c caddyfile.Dispenser) (RequestMatcher, error) {
|
func SetupIfMatcher(controller *caddy.Controller) (RequestMatcher, error) {
|
||||||
|
var c = controller.Dispenser // copy the dispenser
|
||||||
var matcher IfMatcher
|
var matcher IfMatcher
|
||||||
for c.NextBlock() {
|
for c.NextBlock() {
|
||||||
switch c.Val() {
|
switch c.Val() {
|
||||||
|
@ -193,7 +194,13 @@ func (m IfMatcher) Or(r *http.Request) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// IfMatcherKeyword returns if k is a keyword for 'if' config block.
|
// IfMatcherKeyword checks if the next value in the dispenser is a keyword for 'if' config block.
|
||||||
func IfMatcherKeyword(k string) bool {
|
// If true, remaining arguments in the dispinser are cleard to keep the dispenser valid for use.
|
||||||
return k == "if" || k == "if_op"
|
func IfMatcherKeyword(c *caddy.Controller) bool {
|
||||||
|
if c.Val() == "if" || c.Val() == "if_op" {
|
||||||
|
// clear remainig args
|
||||||
|
c.RemainingArgs()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,7 +243,7 @@ func TestSetupIfMatcher(t *testing.T) {
|
||||||
for i, test := range tests {
|
for i, test := range tests {
|
||||||
c := caddy.NewTestController("http", test.input)
|
c := caddy.NewTestController("http", test.input)
|
||||||
c.Next()
|
c.Next()
|
||||||
matcher, err := SetupIfMatcher(c.Dispenser)
|
matcher, err := SetupIfMatcher(c)
|
||||||
if err == nil && test.shouldErr {
|
if err == nil && test.shouldErr {
|
||||||
t.Errorf("Test %d didn't error, but it should have", i)
|
t.Errorf("Test %d didn't error, but it should have", i)
|
||||||
} else if err != nil && !test.shouldErr {
|
} else if err != nil && !test.shouldErr {
|
||||||
|
@ -277,8 +277,11 @@ func TestIfMatcherKeyword(t *testing.T) {
|
||||||
{"if_type", false},
|
{"if_type", false},
|
||||||
{"if_cond", false},
|
{"if_cond", false},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, test := range tests {
|
for i, test := range tests {
|
||||||
valid := IfMatcherKeyword(test.keyword)
|
c := caddy.NewTestController("http", test.keyword)
|
||||||
|
c.Next()
|
||||||
|
valid := IfMatcherKeyword(c)
|
||||||
if valid != test.expected {
|
if valid != test.expected {
|
||||||
t.Errorf("Test %d: expected %v found %v", i, test.expected, valid)
|
t.Errorf("Test %d: expected %v found %v", i, test.expected, valid)
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ func redirParse(c *caddy.Controller) ([]Rule, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for c.Next() {
|
for c.Next() {
|
||||||
matcher, err := httpserver.SetupIfMatcher(c.Dispenser)
|
matcher, err := httpserver.SetupIfMatcher(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -71,8 +71,7 @@ func redirParse(c *caddy.Controller) ([]Rule, error) {
|
||||||
|
|
||||||
var hadOptionalBlock bool
|
var hadOptionalBlock bool
|
||||||
for c.NextBlock() {
|
for c.NextBlock() {
|
||||||
if httpserver.IfMatcherKeyword(c.Val()) {
|
if httpserver.IfMatcherKeyword(c) {
|
||||||
c.RemainingArgs()
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,12 +57,15 @@ func rewriteParse(c *caddy.Controller) ([]httpserver.HandlerConfig, error) {
|
||||||
fallthrough
|
fallthrough
|
||||||
case 0:
|
case 0:
|
||||||
// Integrate request matcher for 'if' conditions.
|
// Integrate request matcher for 'if' conditions.
|
||||||
matcher, err = httpserver.SetupIfMatcher(c.Dispenser)
|
matcher, err = httpserver.SetupIfMatcher(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
block:
|
|
||||||
for c.NextBlock() {
|
for c.NextBlock() {
|
||||||
|
if httpserver.IfMatcherKeyword(c) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
switch c.Val() {
|
switch c.Val() {
|
||||||
case "r", "regexp":
|
case "r", "regexp":
|
||||||
if !c.NextArg() {
|
if !c.NextArg() {
|
||||||
|
@ -90,10 +93,6 @@ func rewriteParse(c *caddy.Controller) ([]httpserver.HandlerConfig, error) {
|
||||||
return nil, c.Err("status must be 2xx or 4xx")
|
return nil, c.Err("status must be 2xx or 4xx")
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if httpserver.IfMatcherKeyword(c.Val()) {
|
|
||||||
c.RemainingArgs()
|
|
||||||
continue block
|
|
||||||
}
|
|
||||||
return nil, c.ArgErr()
|
return nil, c.ArgErr()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue