From cae8d734e1f0f14bc5aee31d350eb1f1ccd2c85c Mon Sep 17 00:00:00 2001 From: TangBin Date: Sat, 11 Aug 2018 17:22:45 +0800 Subject: [PATCH 1/3] allow delete ldap --- pkg/mcclient/modules/mod_domains.go | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/pkg/mcclient/modules/mod_domains.go b/pkg/mcclient/modules/mod_domains.go index 81f1d10345..d29d10df59 100644 --- a/pkg/mcclient/modules/mod_domains.go +++ b/pkg/mcclient/modules/mod_domains.go @@ -233,19 +233,27 @@ func (this *DomainManager) DoDomainConfigDelete(s *mcclient.ClientSession, param params := jsonutils.NewDict() params.Add(jsonutils.NewString(objId), "domain_id") - result, err := UsersV3.List(s, params) - + detail, err := this.GetById(s, domain, nil) if err != nil { - log.Errorf("user list got error: %v", err) + log.Errorf("got domain detail error: %v", err) } - if len(result.Data) > 0 { - e := httputils.JSONClientError{ - Code: 403, - Class: "", - Details: fmt.Sprintf("域名%s下存在%d名用户,不允许删除.", objId, len(result.Data)), + driver, err := detail.GetString("driver") + if err != nil { + log.Errorf("got driver from domain detail error: %v", err) + } + + if driver != "ldap" { + if result, err := UsersV3.List(s, params); err != nil { + log.Errorf("user list got error: %v", err) + } else if len(result.Data) > 0 { + e := httputils.JSONClientError{ + Code: 403, + Class: "", + Details: fmt.Sprintf("域名%s下存在%d名用户,不允许删除.", objId, len(result.Data)), + } + return ret, &e } - return ret, &e } this.DeleteConfig(s, objId) From e7503d8d0a168bcd57c61c4c7e613e5deae18128 Mon Sep 17 00:00:00 2001 From: TangBin Date: Sat, 11 Aug 2018 17:58:08 +0800 Subject: [PATCH 2/3] return fast --- pkg/mcclient/modules/mod_domains.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pkg/mcclient/modules/mod_domains.go b/pkg/mcclient/modules/mod_domains.go index d29d10df59..1ef700b466 100644 --- a/pkg/mcclient/modules/mod_domains.go +++ b/pkg/mcclient/modules/mod_domains.go @@ -217,6 +217,12 @@ func (this *DomainManager) DoDomainConfigDelete(s *mcclient.ClientSession, param ids, _ := params.GetArray("ids") domains := jsonutils.JSONArray2StringArray(ids) + E := httputils.JSONClientError{ + Code: 403, + Class: "", + Details: "", + } + for _, domain := range domains { objId, err := this.GetId(s, domain, nil) if err != nil { @@ -236,23 +242,25 @@ func (this *DomainManager) DoDomainConfigDelete(s *mcclient.ClientSession, param detail, err := this.GetById(s, domain, nil) if err != nil { log.Errorf("got domain detail error: %v", err) + E.Details = "找不到该认证域" + return ret, &E } driver, err := detail.GetString("driver") if err != nil { log.Errorf("got driver from domain detail error: %v", err) + E.Details = "服务器错误,获取认证协议失败,不允许删除" + return ret, &E } if driver != "ldap" { if result, err := UsersV3.List(s, params); err != nil { log.Errorf("user list got error: %v", err) + E.Details = "服务器错误,获取认证域用户列表失败,不允许删除" + return ret, &E } else if len(result.Data) > 0 { - e := httputils.JSONClientError{ - Code: 403, - Class: "", - Details: fmt.Sprintf("域名%s下存在%d名用户,不允许删除.", objId, len(result.Data)), - } - return ret, &e + E.Details = fmt.Sprintf("域名%s下存在%d名用户,不允许删除.", objId, len(result.Data)) + return ret, &E } } From 534d3d3d7785900c34abc4e6a3f4a0197986e989 Mon Sep 17 00:00:00 2001 From: TangBin Date: Sat, 11 Aug 2018 18:40:45 +0800 Subject: [PATCH 3/3] use httperrors lib --- pkg/mcclient/modules/mod_domains.go | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/pkg/mcclient/modules/mod_domains.go b/pkg/mcclient/modules/mod_domains.go index 1ef700b466..84d57ffb34 100644 --- a/pkg/mcclient/modules/mod_domains.go +++ b/pkg/mcclient/modules/mod_domains.go @@ -5,6 +5,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/util/httputils" "yunion.io/x/onecloud/pkg/mcclient" @@ -217,12 +218,6 @@ func (this *DomainManager) DoDomainConfigDelete(s *mcclient.ClientSession, param ids, _ := params.GetArray("ids") domains := jsonutils.JSONArray2StringArray(ids) - E := httputils.JSONClientError{ - Code: 403, - Class: "", - Details: "", - } - for _, domain := range domains { objId, err := this.GetId(s, domain, nil) if err != nil { @@ -242,25 +237,21 @@ func (this *DomainManager) DoDomainConfigDelete(s *mcclient.ClientSession, param detail, err := this.GetById(s, domain, nil) if err != nil { log.Errorf("got domain detail error: %v", err) - E.Details = "找不到该认证域" - return ret, &E + return ret, httperrors.NewResourceNotFoundError("找不到该认证域") } driver, err := detail.GetString("driver") if err != nil { log.Errorf("got driver from domain detail error: %v", err) - E.Details = "服务器错误,获取认证协议失败,不允许删除" - return ret, &E + return ret, httperrors.NewInternalServerError("服务器错误,获取认证协议失败,不允许删除") } if driver != "ldap" { if result, err := UsersV3.List(s, params); err != nil { log.Errorf("user list got error: %v", err) - E.Details = "服务器错误,获取认证域用户列表失败,不允许删除" - return ret, &E + return ret, httperrors.NewInternalServerError("服务器错误,获取认证域用户列表失败,不允许删除") } else if len(result.Data) > 0 { - E.Details = fmt.Sprintf("域名%s下存在%d名用户,不允许删除.", objId, len(result.Data)) - return ret, &E + return ret, httperrors.NewForbiddenError(fmt.Sprintf("域名%s下存在%d名用户,不允许删除.", objId, len(result.Data))) } }