outposts/ldap: optimise backend Search API requests
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
33
internal/outpost/ldap/instance_search_group.go
Normal file
33
internal/outpost/ldap/instance_search_group.go
Normal file
@ -0,0 +1,33 @@
|
||||
package ldap
|
||||
|
||||
import (
|
||||
ber "github.com/nmcclain/asn1-ber"
|
||||
"github.com/nmcclain/ldap"
|
||||
"goauthentik.io/api"
|
||||
)
|
||||
|
||||
func parseFilterForGroup(req api.ApiCoreGroupsListRequest, filter string) api.ApiCoreGroupsListRequest {
|
||||
f, err := ldap.CompileFilter(filter)
|
||||
if err != nil {
|
||||
return req
|
||||
}
|
||||
switch f.Tag {
|
||||
case ldap.FilterEqualityMatch:
|
||||
return parseFilterForGroupSingle(req, f)
|
||||
case ldap.FilterAnd:
|
||||
for _, child := range f.Children {
|
||||
req = parseFilterForGroupSingle(req, child)
|
||||
}
|
||||
return req
|
||||
}
|
||||
return req
|
||||
}
|
||||
|
||||
func parseFilterForGroupSingle(req api.ApiCoreGroupsListRequest, f *ber.Packet) api.ApiCoreGroupsListRequest {
|
||||
v := f.Children[1].Value.(string)
|
||||
switch f.Children[0].Value.(string) {
|
||||
case "cn":
|
||||
return req.Name(v)
|
||||
}
|
||||
return req
|
||||
}
|
Reference in New Issue
Block a user