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/job/test"
|
||||||
"github.com/goharbor/harbor/src/common/models"
|
"github.com/goharbor/harbor/src/common/models"
|
||||||
"github.com/goharbor/harbor/src/common/utils"
|
"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/config"
|
||||||
"github.com/goharbor/harbor/src/core/filter"
|
"github.com/goharbor/harbor/src/core/filter"
|
||||||
"github.com/goharbor/harbor/tests/apitests/apilib"
|
"github.com/goharbor/harbor/tests/apitests/apilib"
|
||||||
@ -79,25 +78,6 @@ type usrInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
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 {
|
if err := config.Init(); err != nil {
|
||||||
log.Fatalf("failed to initialize configurations: %v", err)
|
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", &SystemInfoAPI{}, "get:GetGeneralInfo")
|
||||||
beego.Router("/api/systeminfo/volumes", &SystemInfoAPI{}, "get:GetVolumeInfo")
|
beego.Router("/api/systeminfo/volumes", &SystemInfoAPI{}, "get:GetVolumeInfo")
|
||||||
beego.Router("/api/systeminfo/getcert", &SystemInfoAPI{}, "get:GetCert")
|
beego.Router("/api/systeminfo/getcert", &SystemInfoAPI{}, "get:GetCert")
|
||||||
beego.Router("/api/ldap/ping", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "post:Ping")
|
beego.Router("/api/ldap/ping", &LdapAPI{}, "post:Ping")
|
||||||
beego.Router("/api/ldap/users/search", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "get:Search")
|
beego.Router("/api/ldap/users/search", &LdapAPI{}, "get:Search")
|
||||||
beego.Router("/api/ldap/groups/search", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "get:SearchGroup")
|
beego.Router("/api/ldap/groups/search", &LdapAPI{}, "get:SearchGroup")
|
||||||
beego.Router("/api/ldap/users/import", &LdapAPI{ldapConfig: ldapTestConfig, useTestConfig: true}, "post:ImportUser")
|
beego.Router("/api/ldap/users/import", &LdapAPI{}, "post:ImportUser")
|
||||||
beego.Router("/api/configurations", &ConfigAPI{})
|
beego.Router("/api/configurations", &ConfigAPI{})
|
||||||
beego.Router("/api/configurations/reset", &ConfigAPI{}, "post:Reset")
|
beego.Router("/api/configurations/reset", &ConfigAPI{}, "post:Reset")
|
||||||
beego.Router("/api/configs", &ConfigAPI{}, "get:GetInternalConfig")
|
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
|
// LdapAPI handles requesst to /api/ldap/ping /api/ldap/user/search /api/ldap/user/import
|
||||||
type LdapAPI struct {
|
type LdapAPI struct {
|
||||||
BaseController
|
BaseController
|
||||||
ldapConfig *ldapUtils.Session
|
ldapConfig *ldapUtils.Session
|
||||||
useTestConfig bool // Only used for unit test
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -51,14 +50,14 @@ func (l *LdapAPI) Prepare() {
|
|||||||
l.HandleForbidden(l.SecurityCtx.GetUsername())
|
l.HandleForbidden(l.SecurityCtx.GetUsername())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if l.useTestConfig {
|
|
||||||
ldapCfg, err := ldapUtils.LoadSystemLdapConfig()
|
ldapCfg, err := ldapUtils.LoadSystemLdapConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.HandleInternalServerError(fmt.Sprintf("Can't load system configuration, error: %v", err))
|
l.HandleInternalServerError(fmt.Sprintf("Can't load system configuration, error: %v", err))
|
||||||
return
|
return
|
||||||
}
|
|
||||||
l.ldapConfig = ldapCfg
|
|
||||||
}
|
}
|
||||||
|
l.ldapConfig = ldapCfg
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ping ...
|
// 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