From 92405368578e3990bc3ddaca5890a9fa89ea1e16 Mon Sep 17 00:00:00 2001 From: ioito Date: Tue, 22 Sep 2020 21:23:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=8F=90=E5=8F=96?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=BB=E8=B4=A6=E5=8F=B7=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/climc/shell/cloudid/cloudusers.go | 1 + pkg/mcclient/modules/mod_cloudusers.go | 18 +++++++++++++++++- pkg/mcclient/options/clouduser.go | 9 +++++++++ pkg/multicloud/huawei/huawei.go | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/cmd/climc/shell/cloudid/cloudusers.go b/cmd/climc/shell/cloudid/cloudusers.go index 7e3f3c36be..27893882b2 100644 --- a/cmd/climc/shell/cloudid/cloudusers.go +++ b/cmd/climc/shell/cloudid/cloudusers.go @@ -32,6 +32,7 @@ func init() { cmd.Perform("attach-policy", &options.ClouduserPolicyOptions{}) cmd.Perform("detach-policy", &options.ClouduserPolicyOptions{}) cmd.Perform("change-owner", &options.ClouduserChangeOwnerOptions{}) + cmd.Perform("reset-password", &options.ClouduserResetPasswordOptions{}) cmd.Perform("cloud-user-join-group", &options.ClouduserGroupOptions{}) cmd.Perform("cloud-user-leave-group", &options.ClouduserGroupOptions{}) } diff --git a/pkg/mcclient/modules/mod_cloudusers.go b/pkg/mcclient/modules/mod_cloudusers.go index e366b1092c..bf46edec3b 100644 --- a/pkg/mcclient/modules/mod_cloudusers.go +++ b/pkg/mcclient/modules/mod_cloudusers.go @@ -16,6 +16,7 @@ package modules import ( "fmt" + "net/url" "strings" "yunion.io/x/jsonutils" @@ -72,15 +73,30 @@ func (this *SClouduserManager) GetLoginInfo(s *mcclient.ClientSession, id string return nil, errors.Wrap(err, "Descrypt") } - if user.Provider == api.CLOUD_PROVIDER_ALIYUN { + account := "" + + switch user.Provider { + case api.CLOUD_PROVIDER_ALIYUN: suffix := strings.TrimPrefix(user.IamLoginUrl, "https://signin.aliyun.com/") suffix = strings.TrimSuffix(suffix, "/login.htm") if len(suffix) > 0 { user.Name = fmt.Sprintf("%s@%s", user.Name, suffix) + account = suffix + } + case api.CLOUD_PROVIDER_QCLOUD, api.CLOUD_PROVIDER_HUAWEI: + u, _ := url.Parse(user.IamLoginUrl) + if u != nil { + account = u.Query().Get("account") + } + case api.CLOUD_PROVIDER_AWS: + account = strings.TrimPrefix(user.IamLoginUrl, "https://") + if info := strings.Split(account, "."); len(info) > 0 { + account = info[0] } } return jsonutils.Marshal(map[string]string{ + "account": account, "username": user.Name, "password": password, "url": user.IamLoginUrl, diff --git a/pkg/mcclient/options/clouduser.go b/pkg/mcclient/options/clouduser.go index a93aca2fe1..88041d6e27 100644 --- a/pkg/mcclient/options/clouduser.go +++ b/pkg/mcclient/options/clouduser.go @@ -105,3 +105,12 @@ type ClouduserGroupOptions struct { func (opts *ClouduserGroupOptions) Params() (jsonutils.JSONObject, error) { return jsonutils.Marshal(map[string]string{"cloudgroup_id": opts.CLOUDGROUP_ID}), nil } + +type ClouduserResetPasswordOptions struct { + ClouduserIdOption + Password string `help:"password"` +} + +func (opts *ClouduserResetPasswordOptions) Params() (jsonutils.JSONObject, error) { + return jsonutils.Marshal(map[string]string{"password": opts.Password}), nil +} diff --git a/pkg/multicloud/huawei/huawei.go b/pkg/multicloud/huawei/huawei.go index e39c088c39..c5207e0e11 100644 --- a/pkg/multicloud/huawei/huawei.go +++ b/pkg/multicloud/huawei/huawei.go @@ -323,7 +323,7 @@ func (client *SHuaweiClient) GetAccountId() string { } func (client *SHuaweiClient) GetIamLoginUrl() string { - return fmt.Sprintf("https://auth.huaweicloud.com/authui/login.html#/login?account=%s", client.ownerName) + return fmt.Sprintf("https://auth.huaweicloud.com/authui/login.html?account=%s#/login", client.ownerName) } func (self *SHuaweiClient) GetIRegions() []cloudprovider.ICloudRegion {