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),
|
||
|
}
|
||
|
}
|