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) { return handler.retrieveInformation("uid="+username+","+handler.basedn, "(objectClass=*)", ldap.ScopeBaseObject) } 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") } }