reader.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package ldapreader
  2. import (
  3. "fmt"
  4. "github.com/go-ldap/ldap"
  5. )
  6. type LdapReader struct {
  7. username string
  8. password string
  9. server string
  10. basedn string
  11. }
  12. //NewOauthHandler xxx
  13. func NewLDAPReader(username string, password string, server string, basedn string) *LdapReader {
  14. LDAPHandler := LdapReader{
  15. username: username,
  16. password: password,
  17. server: server,
  18. basedn: basedn,
  19. }
  20. return &LDAPHandler
  21. }
  22. func (handler *LdapReader) GetUser(username string) ([]*ldap.Entry, error) {
  23. return handler.retrieveInformation("uid="+username+","+handler.basedn, "(objectClass=*)", ldap.ScopeBaseObject)
  24. }
  25. func (handler *LdapReader) GetAllUser() ([]*ldap.Entry, error) {
  26. return handler.retrieveInformation(handler.basedn, "(objectClass=*)", ldap.ScopeWholeSubtree)
  27. }
  28. func (handler *LdapReader) retrieveInformation(dn string, filter string, typeOfSearch int) ([]*ldap.Entry, error) {
  29. ldapURL, err := ldap.DialURL(fmt.Sprintf("ldap://%s:389", handler.server))
  30. if err != nil {
  31. return nil, err
  32. }
  33. defer ldapURL.Close()
  34. ldapURL.Bind(handler.username, handler.password)
  35. searchReq := ldap.NewSearchRequest(
  36. dn,
  37. typeOfSearch,
  38. ldap.NeverDerefAliases,
  39. 0,
  40. 0,
  41. false,
  42. filter,
  43. []string{"uid", "memberOf"},
  44. nil,
  45. )
  46. result, err := ldapURL.Search(searchReq)
  47. if err != nil {
  48. return nil, fmt.Errorf("Search Error: %s", err)
  49. }
  50. if len(result.Entries) > 0 {
  51. return result.Entries, nil
  52. } else {
  53. return nil, fmt.Errorf("Couldn't fetch search entries")
  54. }
  55. }