Bumps [github.com/libregraph/lico](https://github.com/libregraph/lico) from 0.60.1-0.20230811070109-1d4140be554d to 0.61.1. - [Changelog](https://github.com/libregraph/lico/blob/master/CHANGELOG.md) - [Commits](https://github.com/libregraph/lico/commits/v0.61.1) --- updated-dependencies: - dependency-name: github.com/libregraph/lico dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package cors
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
type converter func(string) string
|
|
|
|
type wildcard struct {
|
|
prefix string
|
|
suffix string
|
|
}
|
|
|
|
func (w wildcard) match(s string) bool {
|
|
return len(s) >= len(w.prefix)+len(w.suffix) && strings.HasPrefix(s, w.prefix) && strings.HasSuffix(s, w.suffix)
|
|
}
|
|
|
|
// split compounded header values ["foo, bar", "baz"] -> ["foo", "bar", "baz"]
|
|
func splitHeaderValues(values []string) []string {
|
|
out := values
|
|
copied := false
|
|
for i, v := range values {
|
|
needsSplit := strings.IndexByte(v, ',') != -1
|
|
if !copied {
|
|
if needsSplit {
|
|
split := strings.Split(v, ",")
|
|
out = make([]string, i, len(values)+len(split)-1)
|
|
copy(out, values[:i])
|
|
for _, s := range split {
|
|
out = append(out, strings.TrimSpace(s))
|
|
}
|
|
copied = true
|
|
}
|
|
} else {
|
|
if needsSplit {
|
|
split := strings.Split(v, ",")
|
|
for _, s := range split {
|
|
out = append(out, strings.TrimSpace(s))
|
|
}
|
|
} else {
|
|
out = append(out, v)
|
|
}
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
// convert converts a list of string using the passed converter function
|
|
func convert(s []string, c converter) []string {
|
|
out, _ := convertDidCopy(s, c)
|
|
return out
|
|
}
|
|
|
|
// convertDidCopy is same as convert but returns true if it copied the slice
|
|
func convertDidCopy(s []string, c converter) ([]string, bool) {
|
|
out := s
|
|
copied := false
|
|
for i, v := range s {
|
|
if !copied {
|
|
v2 := c(v)
|
|
if v2 != v {
|
|
out = make([]string, len(s))
|
|
copy(out, s[:i])
|
|
out[i] = v2
|
|
copied = true
|
|
}
|
|
} else {
|
|
out[i] = c(v)
|
|
}
|
|
}
|
|
return out, copied
|
|
}
|