66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package ldap
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
ldap "gopkg.in/ldap.v3"
|
|
)
|
|
|
|
type SearchOptions struct {
|
|
BaseDN string
|
|
Scope int
|
|
DerefAliases int
|
|
SizeLimit int
|
|
TimeLimit int
|
|
TypesOnly bool
|
|
Attributes []string
|
|
Controls []ldap.Control
|
|
}
|
|
|
|
type SearchOptionFunc func(opts *SearchOptions)
|
|
|
|
func WithBaseDN(dn string) SearchOptionFunc {
|
|
return func(opts *SearchOptions) {
|
|
opts.BaseDN = dn
|
|
}
|
|
}
|
|
|
|
func WithSizeLimit(sizeLimit int) SearchOptionFunc {
|
|
return func(opts *SearchOptions) {
|
|
opts.SizeLimit = sizeLimit
|
|
}
|
|
}
|
|
|
|
func WithAttributes(attributes ...string) SearchOptionFunc {
|
|
return func(opts *SearchOptions) {
|
|
opts.Attributes = attributes
|
|
}
|
|
}
|
|
|
|
func WithScope(scope int) SearchOptionFunc {
|
|
return func(opts *SearchOptions) {
|
|
opts.Scope = scope
|
|
}
|
|
}
|
|
|
|
func EscapeFilter(pattern string, values ...string) string {
|
|
escapedValues := make([]interface{}, len(values))
|
|
for i, v := range values {
|
|
escapedValues[i] = ldap.EscapeFilter(v)
|
|
}
|
|
return fmt.Sprintf(pattern, escapedValues...)
|
|
}
|
|
|
|
func defaultSearchOptions() *SearchOptions {
|
|
return &SearchOptions{
|
|
BaseDN: "",
|
|
Scope: ldap.ScopeSingleLevel,
|
|
DerefAliases: ldap.NeverDerefAliases,
|
|
SizeLimit: 0,
|
|
TimeLimit: 0,
|
|
TypesOnly: false,
|
|
Attributes: make([]string, 0),
|
|
Controls: make([]ldap.Control, 0),
|
|
}
|
|
}
|