mirror of
https://github.com/hanzozt/x509-claims.git
synced 2026-10-30 20:36:36 +00:00
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package x509claims
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"net/url"
|
|
)
|
|
|
|
type Locator[M any] interface {
|
|
Locate(cert *x509.Certificate, matcher Matcher[M]) []string
|
|
}
|
|
|
|
var _ Locator[string] = &LocatorCommonName{}
|
|
|
|
type LocatorCommonName struct{}
|
|
|
|
func (_ *LocatorCommonName) Locate(cert *x509.Certificate, matcher Matcher[string]) []string {
|
|
if value, ok := matcher.Match(cert.Subject.CommonName); ok {
|
|
return []string{value}
|
|
}
|
|
|
|
return []string{}
|
|
}
|
|
|
|
var _ Locator[*url.URL] = &LocatorSanUri{}
|
|
|
|
type LocatorSanUri struct{}
|
|
|
|
func (_ *LocatorSanUri) Locate(cert *x509.Certificate, matcher Matcher[*url.URL]) []string {
|
|
var result []string
|
|
for _, uri := range cert.URIs {
|
|
if value, ok := matcher.Match(uri); ok {
|
|
result = append(result, value.String())
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
var _ Locator[string] = &LocatorSanEmail{}
|
|
|
|
type LocatorSanEmail struct{}
|
|
|
|
func (l *LocatorSanEmail) Locate(cert *x509.Certificate, matcher Matcher[string]) []string {
|
|
var result []string
|
|
for _, email := range cert.EmailAddresses {
|
|
if value, ok := matcher.Match(email); ok {
|
|
result = append(result, value)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|