reader.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. returnVal, err := handler.retrieveInformation("uid="+username+","+handler.basedn, "(objectClass=*)", ldap.ScopeBaseObject)
  24. if err != nil {
  25. return nil, err
  26. }
  27. if len(returnVal) == 0 {
  28. return nil, fmt.Errorf("nothing found for user %s", username)
  29. }
  30. return returnVal[0], nil
  31. }
  32. func (handler *LdapReader) GetAllUser() ([]*ldap.Entry, error) {
  33. return handler.retrieveInformation(handler.basedn, "(objectClass=*)", ldap.ScopeWholeSubtree)
  34. }
  35. func (handler *LdapReader) retrieveInformation(dn string, filter string, typeOfSearch int) ([]*ldap.Entry, error) {
  36. ldapURL, err := ldap.DialURL(fmt.Sprintf("ldap://%s:389", handler.server))
  37. if err != nil {
  38. return nil, err
  39. }
  40. defer ldapURL.Close()
  41. ldapURL.Bind(handler.username, handler.password)
  42. searchReq := ldap.NewSearchRequest(
  43. dn,
  44. typeOfSearch,
  45. ldap.NeverDerefAliases,
  46. 0,
  47. 0,
  48. false,
  49. filter,
  50. []string{"uid", "memberOf"},
  51. nil,
  52. )
  53. result, err := ldapURL.Search(searchReq)
  54. if err != nil {
  55. return nil, fmt.Errorf("Search Error: %s", err)
  56. }
  57. if len(result.Entries) > 0 {
  58. return result.Entries, nil
  59. } else {
  60. return nil, fmt.Errorf("Couldn't fetch search entries")
  61. }
  62. }