mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-29 20:24:11 +08:00
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
const caseSensitivePathEnv = "CASE_SENSITIVE_PATH"
|
|
|
|
func init() {
|
|
initCaseSettings()
|
|
}
|
|
|
|
// CaseSensitivePath determines if paths should be case sensitive.
|
|
// This is configurable via CASE_SENSITIVE_PATH environment variable.
|
|
// It defaults to false.
|
|
var CaseSensitivePath = true
|
|
|
|
// initCaseSettings loads case sensitivity config from environment variable.
|
|
//
|
|
// This could have been in init, but init cannot be called from tests.
|
|
func initCaseSettings() {
|
|
switch os.Getenv(caseSensitivePathEnv) {
|
|
case "0", "false":
|
|
CaseSensitivePath = false
|
|
default:
|
|
CaseSensitivePath = true
|
|
}
|
|
}
|
|
|
|
// Path represents a URI path, maybe with pattern characters.
|
|
type Path string
|
|
|
|
// Matches checks to see if other matches p.
|
|
//
|
|
// Path matching will probably not always be a direct
|
|
// comparison; this method assures that paths can be
|
|
// easily and consistently matched.
|
|
func (p Path) Matches(other string) bool {
|
|
if CaseSensitivePath {
|
|
return strings.HasPrefix(string(p), other)
|
|
}
|
|
return strings.HasPrefix(strings.ToLower(string(p)), strings.ToLower(other))
|
|
}
|