fix(keystone): ensure comparing id with non-utf8 string

This commit is contained in:
Qiu Jian
2021-02-25 02:24:58 +08:00
parent 49dc4dc292
commit 601112dd7f
3 changed files with 15 additions and 10 deletions
@@ -32,6 +32,7 @@ import (
func init() {
type IdentityProviderListOptions struct {
options.BaseListOptions
SsoDomain string `help:"Filter SSO IDP by domain" json:"sso_domain"`
}
R(&IdentityProviderListOptions{}, "idp-list", "List all identity provider", func(s *mcclient.ClientSession, args *IdentityProviderListOptions) error {
params, err := options.ListStructToParams(args)
+3
View File
@@ -150,6 +150,9 @@ func (manager *SDomainManager) FetchDomain(domainId string, domainName string) (
}
func (manager *SDomainManager) FetchDomainByIdOrName(domain string) (*SDomain, error) {
if stringutils2.IsUtf8(domain) {
return manager.FetchDomainByName(domain)
}
obj, err := db.NewModelObject(manager)
if err != nil {
return nil, err
+11 -10
View File
@@ -1063,16 +1063,17 @@ func (rm *SReceiverManager) FetchByIdOrNames(ctx context.Context, idOrNames ...s
}
var err error
q := rm.Query()
if len(idOrNames) == 1 {
q = q.Filter(sqlchemy.OR(
sqlchemy.Equals(q.Field("id"), idOrNames[0]),
sqlchemy.Equals(q.Field("name"), idOrNames[0]),
))
} else {
q = q.Filter(sqlchemy.OR(
sqlchemy.In(q.Field("id"), idOrNames),
sqlchemy.In(q.Field("name"), idOrNames),
))
var conds []sqlchemy.ICondition
for _, idOrName := range idOrNames {
conds = append(conds, sqlchemy.Equals(q.Field("name"), idOrName))
if !stringutils2.IsUtf8(idOrName) {
conds = append(conds, sqlchemy.Equals(q.Field("id"), idOrName))
}
}
if len(conds) == 1 {
q = q.Filter(conds[0])
} else if len(conds) > 1 {
q = q.Filter(sqlchemy.OR(conds...))
}
receivers := make([]SReceiver, 0, len(idOrNames))
err = db.FetchModelObjects(rm, q, &receivers)