| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | package ldapreaderimport (	"fmt"	"strings"	"github.com/go-ldap/ldap")type LdapReader struct {	username string	password string	server   string	basedn   string}//NewOauthHandler xxxfunc 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=person)", ldap.ScopeWholeSubtree, handler.username, handler.password)	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=person)", ldap.ScopeWholeSubtree, handler.username, handler.password)}func (handler *LdapReader) Authenticate(username string, password string) (bool, error) {	userInformation, err := handler.retrieveInformation("uid="+username+","+handler.basedn, "(objectClass=person)", ldap.ScopeBaseObject, "uid="+username+","+handler.basedn, password)	if err != nil {		if strings.Contains(err.Error(), "LDAP Result Code 32") {			return false, nil		}		if strings.Contains(err.Error(), "LDAP Result Code 53") {			return false, nil		}		if strings.Contains(err.Error(), "Couldn't fetch search entries") {			return false, nil		}		return false, err	}	if len(userInformation) > 0 {		if userInformation[0].GetAttributeValue("cn") == username {			return true, nil		}	}	return false, nil}func (handler *LdapReader) retrieveInformation(dn string, filter string, typeOfSearch int, username string, password string) ([]*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(username, password)	searchReq := ldap.NewSearchRequest(		dn,		typeOfSearch,		ldap.NeverDerefAliases,		0,		0,		false,		filter,		[]string{"uid", "memberOf", "cn", "sAMAccountName"},		//[]string{},		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")	}}
 |