mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-14 02:41:43 +01:00
commit
f2d71a6f2b
@ -31,6 +31,7 @@ type LdapUser struct {
|
|||||||
Username string `json:"ldap_username"`
|
Username string `json:"ldap_username"`
|
||||||
Email string `json:"ldap_email"`
|
Email string `json:"ldap_email"`
|
||||||
Realname string `json:"ldap_realname"`
|
Realname string `json:"ldap_realname"`
|
||||||
|
DN string `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
//LdapImportUser ...
|
//LdapImportUser ...
|
||||||
|
@ -151,7 +151,7 @@ func ConnectTest(ldapConfs models.LdapConf) error {
|
|||||||
var ldapConn *goldap.Conn
|
var ldapConn *goldap.Conn
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
ldapConn, err = dialLDAP(ldapConfs, ldapConn)
|
ldapConn, err = dialLDAP(ldapConfs)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -175,7 +175,7 @@ func SearchUser(ldapConfs models.LdapConf) ([]models.LdapUser, error) {
|
|||||||
var ldapConn *goldap.Conn
|
var ldapConn *goldap.Conn
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
ldapConn, err = dialLDAP(ldapConfs, ldapConn)
|
ldapConn, err = dialLDAP(ldapConfs)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -217,6 +217,7 @@ func SearchUser(ldapConfs models.LdapConf) ([]models.LdapUser, error) {
|
|||||||
u.Email = val
|
u.Email = val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
u.DN = ldapEntry.DN
|
||||||
ldapUsers = append(ldapUsers, u)
|
ldapUsers = append(ldapUsers, u)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,11 +313,25 @@ func ImportUser(user models.LdapUser) (int64, error) {
|
|||||||
return UserID, nil
|
return UserID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dialLDAP(ldapConfs models.LdapConf, ldap *goldap.Conn) (*goldap.Conn, error) {
|
// Bind establish a connection to ldap based on ldapConfs and bind the user with given parameters.
|
||||||
|
func Bind(ldapConfs models.LdapConf, dn string, password string) error {
|
||||||
|
conn, err := dialLDAP(ldapConfs)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
if ldapConfs.LdapSearchDn != "" {
|
||||||
|
if err := bindLDAPSearchDN(ldapConfs, conn); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return conn.Bind(dn, password)
|
||||||
|
}
|
||||||
|
|
||||||
|
func dialLDAP(ldapConfs models.LdapConf) (*goldap.Conn, error) {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
var ldap *goldap.Conn
|
||||||
//log.Debug("ldapConfs.LdapURL:", ldapConfs.LdapURL)
|
|
||||||
|
|
||||||
splitLdapURL := strings.Split(ldapConfs.LdapURL, "://")
|
splitLdapURL := strings.Split(ldapConfs.LdapURL, "://")
|
||||||
protocol, hostport := splitLdapURL[0], splitLdapURL[1]
|
protocol, hostport := splitLdapURL[0], splitLdapURL[1]
|
||||||
|
|
||||||
|
@ -75,6 +75,12 @@ func (l *Auth) Authenticate(m models.AuthModel) (*models.User, error) {
|
|||||||
u.Email = ldapUsers[0].Email
|
u.Email = ldapUsers[0].Email
|
||||||
u.Realname = ldapUsers[0].Realname
|
u.Realname = ldapUsers[0].Realname
|
||||||
|
|
||||||
|
dn := ldapUsers[0].DN
|
||||||
|
|
||||||
|
log.Debugf("username: %s, dn: %s", u.Username, dn)
|
||||||
|
if err := ldapUtils.Bind(ldapConfs, dn, m.Password); err != nil {
|
||||||
|
return nil, fmt.Errorf("Failed to bind user, username: %s, dn: %s, error: %v", u.Username, dn, err)
|
||||||
|
}
|
||||||
exist, err := dao.UserExists(u, "username")
|
exist, err := dao.UserExists(u, "username")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -87,11 +93,6 @@ func (l *Auth) Authenticate(m models.AuthModel) (*models.User, error) {
|
|||||||
}
|
}
|
||||||
u.UserID = currentUser.UserID
|
u.UserID = currentUser.UserID
|
||||||
} else {
|
} else {
|
||||||
// u.Password = "12345678AbC"
|
|
||||||
// u.Comment = "from LDAP."
|
|
||||||
// if u.Email == "" {
|
|
||||||
// u.Email = u.Username + "@placeholder.com"
|
|
||||||
// }
|
|
||||||
userID, err := ldapUtils.ImportUser(ldapUsers[0])
|
userID, err := ldapUtils.ImportUser(ldapUsers[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Can't import user %s, error: %v", ldapUsers[0].Username, err)
|
log.Errorf("Can't import user %s, error: %v", ldapUsers[0].Username, err)
|
||||||
|
@ -122,4 +122,10 @@ func TestAuthenticate(t *testing.T) {
|
|||||||
if user.Username != "test" {
|
if user.Username != "test" {
|
||||||
t.Errorf("unexpected ldap user authenticate fail: %s = %s", "user.Username", user.Username)
|
t.Errorf("unexpected ldap user authenticate fail: %s = %s", "user.Username", user.Username)
|
||||||
}
|
}
|
||||||
|
person.Principal = "test"
|
||||||
|
person.Password = "1"
|
||||||
|
_, err = auth.Authenticate(person)
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error for wrong password")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user