|
@@ -1,17 +1,17 @@
|
|
package ldap
|
|
package ldap
|
|
|
|
|
|
import (
|
|
import (
|
|
- "fmt"
|
|
|
|
"log"
|
|
"log"
|
|
|
|
|
|
- "github.com/go-ldap/ldap"
|
|
|
|
auth "imuslab.com/arozos/mod/auth"
|
|
auth "imuslab.com/arozos/mod/auth"
|
|
|
|
+ "imuslab.com/arozos/mod/auth/ldap/ldapreader"
|
|
reg "imuslab.com/arozos/mod/auth/register"
|
|
reg "imuslab.com/arozos/mod/auth/register"
|
|
db "imuslab.com/arozos/mod/database"
|
|
db "imuslab.com/arozos/mod/database"
|
|
)
|
|
)
|
|
|
|
|
|
type ldapHandler struct {
|
|
type ldapHandler struct {
|
|
- ag *auth.AuthAgent
|
|
|
|
|
|
+ ag *auth.AuthAgent
|
|
|
|
+ ldapreader *ldapreader.LdapReader
|
|
}
|
|
}
|
|
|
|
|
|
const (
|
|
const (
|
|
@@ -19,77 +19,28 @@ const (
|
|
BindPassword = "12345678"
|
|
BindPassword = "12345678"
|
|
FQDN = "192.168.1.147"
|
|
FQDN = "192.168.1.147"
|
|
BaseDN = "cn=users,dc=dsm"
|
|
BaseDN = "cn=users,dc=dsm"
|
|
- Filter = "(objectClass=*)"
|
|
|
|
)
|
|
)
|
|
|
|
|
|
//NewOauthHandler xxx
|
|
//NewOauthHandler xxx
|
|
func NewLdapHandler(authAgent *auth.AuthAgent, register *reg.RegisterHandler, coreDb *db.Database) *ldapHandler {
|
|
func NewLdapHandler(authAgent *auth.AuthAgent, register *reg.RegisterHandler, coreDb *db.Database) *ldapHandler {
|
|
- err := coreDb.NewTable("oauth")
|
|
|
|
|
|
+ log.Println("Starting LDAP server...")
|
|
|
|
+ err := coreDb.NewTable("ldap")
|
|
if err != nil {
|
|
if err != nil {
|
|
log.Println("Failed to create oauth database. Terminating.")
|
|
log.Println("Failed to create oauth database. Terminating.")
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
|
|
- NewlyCreatedOauthHandler := ldapHandler{
|
|
|
|
- ag: authAgent,
|
|
|
|
|
|
+ LDAPHandler := ldapHandler{
|
|
|
|
+ ag: authAgent,
|
|
|
|
+ ldapreader: ldapreader.NewLDAPReader(BindUsername, BindPassword, FQDN, BaseDN),
|
|
}
|
|
}
|
|
|
|
|
|
- return &NewlyCreatedOauthHandler
|
|
|
|
|
|
+ return &LDAPHandler
|
|
}
|
|
}
|
|
|
|
|
|
-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)
|
|
|
|
- }
|
|
|
|
- for _, v := range result.Entries {
|
|
|
|
|
|
+func (handler *ldapHandler) SyncInformation() {
|
|
|
|
+ result, _ := handler.ldapreader.GetAllUser()
|
|
|
|
+ for _, v := range result {
|
|
v.PrettyPrint(4)
|
|
v.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.ScopeWholeSubtree,
|
|
|
|
- ldap.NeverDerefAliases,
|
|
|
|
- 0,
|
|
|
|
- 0,
|
|
|
|
- false,
|
|
|
|
- Filter,
|
|
|
|
- []string{"uid", "memberOf"},
|
|
|
|
- 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")
|
|
|
|
- }
|
|
|
|
-}
|
|
|