mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-26 04:05:40 +01:00
Merge pull request #6005 from stonezdj/fix_ldap_search_error
Fix LDAP search error
This commit is contained in:
commit
36bdcb02f3
@ -31,7 +31,6 @@ import (
|
||||
"github.com/goharbor/harbor/src/common/job/test"
|
||||
"github.com/goharbor/harbor/src/common/models"
|
||||
"github.com/goharbor/harbor/src/common/utils"
|
||||
ldapUtils "github.com/goharbor/harbor/src/common/utils/ldap"
|
||||
"github.com/goharbor/harbor/src/core/config"
|
||||
"github.com/goharbor/harbor/src/core/filter"
|
||||
"github.com/goharbor/harbor/tests/apitests/apilib"
|
||||
@ -79,25 +78,6 @@ type usrInfo struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
ldapConfig := models.LdapConf{
|
||||
LdapURL: "ldap://127.0.0.1:389",
|
||||
LdapSearchDn: "cn=admin,dc=example,dc=com",
|
||||
LdapSearchPassword: "admin",
|
||||
LdapBaseDn: "dc=example,dc=com",
|
||||
LdapUID: "cn",
|
||||
LdapScope: 2,
|
||||
LdapConnectionTimeout: 5,
|
||||
}
|
||||
ldapGroupConfig := models.LdapGroupConf{
|
||||
LdapGroupBaseDN: "ou=groups,dc=example,dc=com",
|
||||
LdapGroupFilter: "objectclass=groupOfNames",
|
||||
LdapGroupSearchScope: 2,
|
||||
LdapGroupNameAttribute: "cn",
|
||||
}
|
||||
ldapTestConfig, err := ldapUtils.CreateWithAllConfig(ldapConfig, ldapGroupConfig)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to initialize configurations: %v", err)
|
||||
}
|
||||
if err := config.Init(); err != nil {
|
||||
log.Fatalf("failed to initialize configurations: %v", err)
|
||||
}
|
||||
@ -155,10 +135,10 @@ func init() {
|
||||
beego.Router("/api/systeminfo", &SystemInfoAPI{}, "get:GetGeneralInfo")
|
||||
beego.Router("/api/systeminfo/volumes", &SystemInfoAPI{}, "get:GetVolumeInfo")
|
||||
beego.Router("/api/systeminfo/getcert", &SystemInfoAPI{}, "get:GetCert")
|
||||
beego.Router("/api/ldap/ping", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "post:Ping")
|
||||
beego.Router("/api/ldap/users/search", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "get:Search")
|
||||
beego.Router("/api/ldap/groups/search", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "get:SearchGroup")
|
||||
beego.Router("/api/ldap/users/import", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "post:ImportUser")
|
||||
beego.Router("/api/ldap/ping", &LdapAPI{}, "post:Ping")
|
||||
beego.Router("/api/ldap/users/search", &LdapAPI{}, "get:Search")
|
||||
beego.Router("/api/ldap/groups/search", &LdapAPI{}, "get:SearchGroup")
|
||||
beego.Router("/api/ldap/users/import", &LdapAPI{}, "post:ImportUser")
|
||||
beego.Router("/api/configurations", &ConfigAPI{})
|
||||
beego.Router("/api/configurations/reset", &ConfigAPI{}, "post:Reset")
|
||||
beego.Router("/api/configs", &ConfigAPI{}, "get:GetInternalConfig")
|
||||
|
@ -28,8 +28,7 @@ import (
|
||||
// LdapAPI handles requesst to /api/ldap/ping /api/ldap/user/search /api/ldap/user/import
|
||||
type LdapAPI struct {
|
||||
BaseController
|
||||
ldapConfig *ldapUtils.Session
|
||||
useTestConfig bool // Only used for unit test
|
||||
ldapConfig *ldapUtils.Session
|
||||
}
|
||||
|
||||
const (
|
||||
@ -51,14 +50,14 @@ func (l *LdapAPI) Prepare() {
|
||||
l.HandleForbidden(l.SecurityCtx.GetUsername())
|
||||
return
|
||||
}
|
||||
if l.useTestConfig {
|
||||
ldapCfg, err := ldapUtils.LoadSystemLdapConfig()
|
||||
if err != nil {
|
||||
l.HandleInternalServerError(fmt.Sprintf("Can't load system configuration, error: %v", err))
|
||||
return
|
||||
}
|
||||
l.ldapConfig = ldapCfg
|
||||
|
||||
ldapCfg, err := ldapUtils.LoadSystemLdapConfig()
|
||||
if err != nil {
|
||||
l.HandleInternalServerError(fmt.Sprintf("Can't load system configuration, error: %v", err))
|
||||
return
|
||||
}
|
||||
l.ldapConfig = ldapCfg
|
||||
|
||||
}
|
||||
|
||||
// Ping ...
|
||||
|
@ -1,136 +0,0 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/goharbor/harbor/src/common/models"
|
||||
)
|
||||
|
||||
func TestLDAPPing(t *testing.T) {
|
||||
cases := []*codeCheckingCase{
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodPost,
|
||||
url: "/api/ldap/ping",
|
||||
},
|
||||
code: http.StatusUnauthorized,
|
||||
},
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodPost,
|
||||
url: "/api/ldap/ping",
|
||||
credential: admin,
|
||||
},
|
||||
code: http.StatusOK,
|
||||
},
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodPost,
|
||||
url: "/api/ldap/ping",
|
||||
bodyJSON: &models.LdapConf{
|
||||
LdapURL: "ldap://127.0.0.1:389",
|
||||
LdapSearchDn: "cn=admin,dc=example,dc=com",
|
||||
LdapSearchPassword: "admin",
|
||||
LdapBaseDn: "dc=example,dc=com",
|
||||
LdapUID: "cn",
|
||||
LdapScope: 2,
|
||||
LdapConnectionTimeout: 5,
|
||||
},
|
||||
credential: admin,
|
||||
},
|
||||
code: http.StatusOK,
|
||||
},
|
||||
}
|
||||
runCodeCheckingCases(t, cases...)
|
||||
}
|
||||
|
||||
func TestLDAPUserSearch(t *testing.T) {
|
||||
cases := []*codeCheckingCase{
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodGet,
|
||||
url: "/api/ldap/users/search?username=mike",
|
||||
},
|
||||
code: http.StatusUnauthorized,
|
||||
},
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodGet,
|
||||
url: "/api/ldap/users/search?username=mike",
|
||||
credential: admin,
|
||||
},
|
||||
code: http.StatusOK,
|
||||
},
|
||||
}
|
||||
runCodeCheckingCases(t, cases...)
|
||||
}
|
||||
|
||||
func TestLDAPGroupSearch(t *testing.T) {
|
||||
cases := []*codeCheckingCase{
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodGet,
|
||||
url: "/api/ldap/groups/search?groupname=harbor_users",
|
||||
},
|
||||
code: http.StatusUnauthorized,
|
||||
},
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodGet,
|
||||
url: "/api/ldap/groups/search?groupname=harbor_users",
|
||||
credential: admin,
|
||||
},
|
||||
code: http.StatusOK,
|
||||
},
|
||||
}
|
||||
runCodeCheckingCases(t, cases...)
|
||||
}
|
||||
|
||||
func TestLDAPGroupSearchWithDN(t *testing.T) {
|
||||
cases := []*codeCheckingCase{
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodGet,
|
||||
url: "/api/ldap/groups/search?groupdn=cn=harbor_users,ou=groups,dc=example,dc=com",
|
||||
},
|
||||
code: http.StatusUnauthorized,
|
||||
},
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodGet,
|
||||
url: "/api/ldap/groups/search?groupname=cn=harbor_users,ou=groups,dc=example,dc=com",
|
||||
credential: admin,
|
||||
},
|
||||
code: http.StatusOK,
|
||||
},
|
||||
}
|
||||
runCodeCheckingCases(t, cases...)
|
||||
}
|
||||
|
||||
func TestLDAPImportUser(t *testing.T) {
|
||||
cases := []*codeCheckingCase{
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodPost,
|
||||
url: "/api/ldap/users/import",
|
||||
bodyJSON: &models.LdapImportUser{
|
||||
LdapUIDList: []string{"mike", "mike02"},
|
||||
},
|
||||
},
|
||||
code: http.StatusUnauthorized,
|
||||
},
|
||||
{
|
||||
request: &testingRequest{
|
||||
method: http.MethodPost,
|
||||
url: "/api/ldap/users/import",
|
||||
bodyJSON: &models.LdapImportUser{
|
||||
LdapUIDList: []string{"mike", "mike02"},
|
||||
},
|
||||
credential: admin,
|
||||
},
|
||||
code: http.StatusOK,
|
||||
},
|
||||
}
|
||||
runCodeCheckingCases(t, cases...)
|
||||
}
|
Loading…
Reference in New Issue
Block a user