mirror of
https://github.com/genuinetools/reg.git
synced 2024-08-22 22:40:24 -04:00
51 lines
1 KiB
Go
51 lines
1 KiB
Go
package libtrust
|
|
|
|
import (
|
|
"path/filepath"
|
|
)
|
|
|
|
// FilterByHosts filters the list of PublicKeys to only those which contain a
|
|
// 'hosts' pattern which matches the given host. If *includeEmpty* is true,
|
|
// then keys which do not specify any hosts are also returned.
|
|
func FilterByHosts(keys []PublicKey, host string, includeEmpty bool) ([]PublicKey, error) {
|
|
filtered := make([]PublicKey, 0, len(keys))
|
|
|
|
for _, pubKey := range keys {
|
|
var hosts []string
|
|
switch v := pubKey.GetExtendedField("hosts").(type) {
|
|
case []string:
|
|
hosts = v
|
|
case []interface{}:
|
|
for _, value := range v {
|
|
h, ok := value.(string)
|
|
if !ok {
|
|
continue
|
|
}
|
|
hosts = append(hosts, h)
|
|
}
|
|
}
|
|
|
|
if len(hosts) == 0 {
|
|
if includeEmpty {
|
|
filtered = append(filtered, pubKey)
|
|
}
|
|
continue
|
|
}
|
|
|
|
// Check if any hosts match pattern
|
|
for _, hostPattern := range hosts {
|
|
match, err := filepath.Match(hostPattern, host)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if match {
|
|
filtered = append(filtered, pubKey)
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
return filtered, nil
|
|
}
|