1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package ldap
- import (
- "fmt"
- "log"
- "github.com/go-ldap/ldap"
- auth "imuslab.com/arozos/mod/auth"
- reg "imuslab.com/arozos/mod/auth/register"
- db "imuslab.com/arozos/mod/database"
- )
- type ldapHandler struct {
- ag *auth.AuthAgent
- }
- const (
- BindUsername = "read-only-admin"
- BindPassword = "password"
- FQDN = "ldap.forumsys.com"
- BaseDN = "ou=mathematicians,dc=example,dc=com"
- Filter = "(objectClass=*)"
- )
- //NewOauthHandler xxx
- func NewLdapHandler(authAgent *auth.AuthAgent, register *reg.RegisterHandler, coreDb *db.Database) *ldapHandler {
- err := coreDb.NewTable("oauth")
- if err != nil {
- log.Println("Failed to create oauth database. Terminating.")
- panic(err)
- }
- NewlyCreatedOauthHandler := ldapHandler{
- ag: authAgent,
- }
- return &NewlyCreatedOauthHandler
- }
- func (handler *ldapHandler) Ldap() {
- // Non-TLS Connection
- l, err := handler.Connect()
- if err != nil {
- log.Fatal(err)
- }
- defer l.Close()
- // Normal Bind and Search
- result, err := handler.BindAndSearch(l)
- if err != nil {
- log.Fatal(err)
- }
- result.Entries[0].PrettyPrint(4)
- }
- // Ldap Connection without TLS
- func (handler *ldapHandler) Connect() (*ldap.Conn, error) {
- // You can also use IP instead of FQDN
- l, err := ldap.DialURL(fmt.Sprintf("ldap://%s:389", FQDN))
- if err != nil {
- return nil, err
- }
- return l, nil
- }
- // Normal Bind and Search
- func (handler *ldapHandler) BindAndSearch(l *ldap.Conn) (*ldap.SearchResult, error) {
- l.Bind(BindUsername, BindPassword)
- searchReq := ldap.NewSearchRequest(
- BaseDN,
- ldap.ScopeBaseObject, // you can also use ldap.ScopeWholeSubtree
- ldap.NeverDerefAliases,
- 0,
- 0,
- false,
- Filter,
- []string{},
- nil,
- )
- result, err := l.Search(searchReq)
- if err != nil {
- return nil, fmt.Errorf("Search Error: %s", err)
- }
- if len(result.Entries) > 0 {
- return result, nil
- } else {
- return nil, fmt.Errorf("Couldn't fetch search entries")
- }
- }
|