mirror of
https://github.com/0rangebananaspy/authelia.git
synced 2024-09-14 22:47:21 +07:00
ab1d0c51d3
This adds the named group functionality from domain_regex to the resource criteria.
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package authorization
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/authelia/authelia/v4/internal/utils"
|
|
)
|
|
|
|
// RegexpGroupStringSubjectMatcher matches the input string against the pattern taking into account Subexp groups.
|
|
type RegexpGroupStringSubjectMatcher struct {
|
|
Pattern regexp.Regexp
|
|
SubexpNameUser int
|
|
SubexpNameGroup int
|
|
}
|
|
|
|
// IsMatch returns true if the underlying pattern matches the input given the subject.
|
|
func (r RegexpGroupStringSubjectMatcher) IsMatch(input string, subject Subject) (match bool) {
|
|
matches := r.Pattern.FindAllStringSubmatch(input, -1)
|
|
if matches == nil {
|
|
return false
|
|
}
|
|
|
|
if r.SubexpNameUser != -1 && !strings.EqualFold(subject.Username, matches[0][r.SubexpNameUser]) {
|
|
return false
|
|
}
|
|
|
|
if r.SubexpNameGroup != -1 && !utils.IsStringInSliceFold(matches[0][r.SubexpNameGroup], subject.Groups) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// String returns the pattern string.
|
|
func (r RegexpGroupStringSubjectMatcher) String() string {
|
|
return r.Pattern.String()
|
|
}
|
|
|
|
// RegexpStringSubjectMatcher just matches the input string against the pattern.
|
|
type RegexpStringSubjectMatcher struct {
|
|
Pattern regexp.Regexp
|
|
}
|
|
|
|
// IsMatch returns true if the underlying pattern matches the input.
|
|
func (r RegexpStringSubjectMatcher) IsMatch(input string, _ Subject) (match bool) {
|
|
return r.Pattern.MatchString(input)
|
|
}
|
|
|
|
// String returns the pattern string.
|
|
func (r RegexpStringSubjectMatcher) String() string {
|
|
return r.Pattern.String()
|
|
}
|