Merge pull request #154 from reasonerjt/master

adapt to other ldap servers
This commit is contained in:
kun wang 2016-04-26 12:30:22 +08:00
commit 6e58528fbf
2 changed files with 18 additions and 26 deletions

View File

@ -76,31 +76,25 @@ func (l *Auth) Authenticate(m models.AuthModel) (*models.User, error) {
scope := openldap.LDAP_SCOPE_SUBTREE // LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL, LDAP_SCOPE_SUBTREE scope := openldap.LDAP_SCOPE_SUBTREE // LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL, LDAP_SCOPE_SUBTREE
filter := "objectClass=*" filter := "objectClass=*"
attributes := []string{"cn", "mail", "uid"} attributes := []string{"mail"}
result, err := ldap.SearchAll(baseDn, scope, filter, attributes) result, err := ldap.SearchAll(baseDn, scope, filter, attributes)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(result.Entries()) != 1 {
log.Warningf("Found more than one entry.")
return nil, nil
}
en := result.Entries()[0]
u := models.User{} u := models.User{}
if len(result.Entries()) == 1 {
en := result.Entries()[0]
for _, attr := range en.Attributes() { for _, attr := range en.Attributes() {
val := attr.Values()[0] val := attr.Values()[0]
switch attr.Name() { if attr.Name() == "mail" {
case "uid":
u.Username = val
case "mail":
u.Email = val u.Email = val
case "cn": }
u.Realname = val
} }
} }
log.Debug("username:", u.Username, ",email:", u.Email, ",realname:", u.Realname) u.Username = m.Principal
log.Debug("username:", u.Username, ",email:", u.Email)
exist, err := dao.UserExists(u, "username") exist, err := dao.UserExists(u, "username")
if err != nil { if err != nil {
@ -114,6 +108,7 @@ func (l *Auth) Authenticate(m models.AuthModel) (*models.User, error) {
} }
u.UserID = currentUser.UserID u.UserID = currentUser.UserID
} else { } else {
u.Realname = m.Principal
u.Password = "12345678AbC" u.Password = "12345678AbC"
u.Comment = "registered from LDAP." u.Comment = "registered from LDAP."
userID, err := dao.Register(u) userID, err := dao.Register(u)

View File

@ -74,17 +74,14 @@ func validate(user models.User) error {
return errors.New("Username already exists.") return errors.New("Username already exists.")
} }
if len(user.Email) > 0 {
if m, _ := regexp.MatchString(`^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$`, user.Email); !m { if m, _ := regexp.MatchString(`^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$`, user.Email); !m {
return errors.New("Email with illegal format.") return errors.New("Email with illegal format.")
} }
if isIllegalLength(user.Email, 0, -1) {
return errors.New("Email cannot empty.")
}
if exist, _ := UserExists(models.User{Email: user.Email}, "email"); exist { if exist, _ := UserExists(models.User{Email: user.Email}, "email"); exist {
return errors.New("Email already exists.") return errors.New("Email already exists.")
} }
}
if isIllegalLength(user.Realname, 0, 20) { if isIllegalLength(user.Realname, 0, 20) {
return errors.New("Realname with illegal length.") return errors.New("Realname with illegal length.")