mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-29 18:36:30 +02:00
* config: add support for wildcards * update policy matching, header generation * remove deprecated field * fix test
47 lines
999 B
Go
47 lines
999 B
Go
package config
|
|
|
|
import (
|
|
"net/url"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/pomerium/pomerium/internal/urlutil"
|
|
)
|
|
|
|
// FromURLMatchesRequestURL returns true if the from URL matches the request URL.
|
|
func FromURLMatchesRequestURL(fromURL, requestURL *url.URL) bool {
|
|
for _, domain := range urlutil.GetDomainsForURL(fromURL) {
|
|
if domain == requestURL.Host {
|
|
return true
|
|
}
|
|
|
|
if !strings.Contains(domain, "*") {
|
|
continue
|
|
}
|
|
|
|
reStr := WildcardToRegex(domain)
|
|
re := regexp.MustCompile(reStr)
|
|
if re.MatchString(requestURL.Host) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// WildcardToRegex converts a wildcard string to a regular expression.
|
|
func WildcardToRegex(wildcard string) string {
|
|
var b strings.Builder
|
|
b.WriteByte('^')
|
|
for {
|
|
idx := strings.IndexByte(wildcard, '*')
|
|
if idx < 0 {
|
|
break
|
|
}
|
|
b.WriteString(regexp.QuoteMeta(wildcard[:idx]))
|
|
b.WriteString("(.*)")
|
|
wildcard = wildcard[idx+1:]
|
|
}
|
|
b.WriteString(regexp.QuoteMeta(wildcard))
|
|
b.WriteByte('$')
|
|
return b.String()
|
|
}
|