12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package ldapreader
- import (
- "fmt"
- "github.com/go-ldap/ldap"
- )
- type LdapReader struct {
- username string
- password string
- server string
- basedn string
- }
- //NewOauthHandler xxx
- func NewLDAPReader(username string, password string, server string, basedn string) *LdapReader {
- LDAPHandler := LdapReader{
- username: username,
- password: password,
- server: server,
- basedn: basedn,
- }
- return &LDAPHandler
- }
- func (handler *LdapReader) GetUser(username string) (*ldap.Entry, error) {
- returnVal, err := handler.retrieveInformation("uid="+username+","+handler.basedn, "(objectClass=*)", ldap.ScopeBaseObject)
- if err != nil {
- return nil, err
- }
- if len(returnVal) == 0 {
- return nil, fmt.Errorf("nothing found for user %s", username)
- }
- return returnVal[0], nil
- }
- func (handler *LdapReader) GetAllUser() ([]*ldap.Entry, error) {
- return handler.retrieveInformation(handler.basedn, "(objectClass=*)", ldap.ScopeWholeSubtree)
- }
- func (handler *LdapReader) retrieveInformation(dn string, filter string, typeOfSearch int) ([]*ldap.Entry, error) {
- ldapURL, err := ldap.DialURL(fmt.Sprintf("ldap://%s:389", handler.server))
- if err != nil {
- return nil, err
- }
- defer ldapURL.Close()
- ldapURL.Bind(handler.username, handler.password)
- searchReq := ldap.NewSearchRequest(
- dn,
- typeOfSearch,
- ldap.NeverDerefAliases,
- 0,
- 0,
- false,
- filter,
- []string{"uid", "memberOf"},
- nil,
- )
- result, err := ldapURL.Search(searchReq)
- if err != nil {
- return nil, fmt.Errorf("Search Error: %s", err)
- }
- if len(result.Entries) > 0 {
- return result.Entries, nil
- } else {
- return nil, fmt.Errorf("Couldn't fetch search entries")
- }
- }
|