Skip to content

Commit

Permalink
fix: avoid using background context
Browse files Browse the repository at this point in the history
  • Loading branch information
Qiu Jian committed May 14, 2020
1 parent 893df7b commit c35758d
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 24 deletions.
18 changes: 9 additions & 9 deletions pkg/cloudcommon/db/tenantcache.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ func RegistUserCredCacheUpdater() {
auth.RegisterAuthHook(onAuthCompleteUpdateCache)
}

func onAuthCompleteUpdateCache(userCred mcclient.TokenCredential) {
TenantCacheManager.updateTenantCache(userCred)
func onAuthCompleteUpdateCache(ctx context.Context, userCred mcclient.TokenCredential) {
TenantCacheManager.updateTenantCache(ctx, userCred)
UserCacheManager.updateUserCache(userCred)
}

Expand All @@ -109,8 +109,8 @@ func (manager *STenantCacheManager) InitializeData() error {
return nil
}

func (manager *STenantCacheManager) updateTenantCache(userCred mcclient.TokenCredential) {
manager.Save(context.Background(), userCred.GetProjectId(), userCred.GetProjectName(),
func (manager *STenantCacheManager) updateTenantCache(ctx context.Context, userCred mcclient.TokenCredential) {
manager.Save(ctx, userCred.GetProjectId(), userCred.GetProjectName(),
userCred.GetProjectDomainId(), userCred.GetProjectDomain())
}

Expand Down Expand Up @@ -381,14 +381,14 @@ func (manager *STenantCacheManager) findFirstProjectOfDomain(domainId string) (*
return &tenant, nil
}

func (manager *STenantCacheManager) fetchDomainTenantsFromKeystone(domainId string) error {
func (manager *STenantCacheManager) fetchDomainTenantsFromKeystone(ctx context.Context, domainId string) error {
if len(domainId) == 0 {
log.Debugf("fetch empty domain!!!!")
debug.PrintStack()
return fmt.Errorf("Empty domainId")
}

s := auth.GetAdminSession(context.Background(), consts.GetRegion(), "v1")
s := auth.GetAdminSession(ctx, consts.GetRegion(), "v1")
params := jsonutils.Marshal(map[string]string{"domain_id": domainId})
tenants, err := modules.Projects.List(s, params)
if err != nil {
Expand All @@ -399,19 +399,19 @@ func (manager *STenantCacheManager) fetchDomainTenantsFromKeystone(domainId stri
tenantName, _ := tenant.GetString("name")
domainId, _ := tenant.GetString("domain_id")
domainName, _ := tenant.GetString("project_domain")
_, err = manager.Save(context.Background(), tenantId, tenantName, domainId, domainName)
_, err = manager.Save(ctx, tenantId, tenantName, domainId, domainName)
if err != nil {
return err
}
}
return nil
}

func (manager *STenantCacheManager) FindFirstProjectOfDomain(domainId string) (*STenant, error) {
func (manager *STenantCacheManager) FindFirstProjectOfDomain(ctx context.Context, domainId string) (*STenant, error) {
tenant, err := manager.findFirstProjectOfDomain(domainId)
if err != nil {
if err == sql.ErrNoRows {
err = manager.fetchDomainTenantsFromKeystone(domainId)
err = manager.fetchDomainTenantsFromKeystone(ctx, domainId)
if err != nil {
return nil, errors.Wrap(err, "fetchDomainTenantsFromKeystone")
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/cloudaccounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -883,7 +883,7 @@ func (self *SCloudaccount) importSubAccount(ctx context.Context, userCred mcclie
ownerId = userCred
} else {
// find default project of domain
t, err := db.TenantCacheManager.FindFirstProjectOfDomain(ownerId.GetProjectDomainId())
t, err := db.TenantCacheManager.FindFirstProjectOfDomain(ctx, ownerId.GetProjectDomainId())
if err != nil {
log.Errorf("cannot find a valid porject for domain %s", ownerId.GetProjectDomainId())
return nil, err
Expand Down
4 changes: 3 additions & 1 deletion pkg/keystone/tokens/verify.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@
package tokens

import (
"context"

"yunion.io/x/log"

"yunion.io/x/onecloud/pkg/httperrors"
"yunion.io/x/onecloud/pkg/mcclient"
)

func FernetTokenVerifier(tokenStr string) (mcclient.TokenCredential, error) {
func FernetTokenVerifier(ctx context.Context, tokenStr string) (mcclient.TokenCredential, error) {
token := SAuthToken{}
err := token.ParseFernetToken(tokenStr)
if err != nil {
Expand Down
12 changes: 6 additions & 6 deletions pkg/mcclient/auth/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ func (c *TokenCacheVerify) DeleteToken(token string) bool {
return c.Delete(token)
}

func (c *TokenCacheVerify) Verify(cli *mcclient.Client, adminToken, token string) (mcclient.TokenCredential, error) {
func (c *TokenCacheVerify) Verify(ctx context.Context, cli *mcclient.Client, adminToken, token string) (mcclient.TokenCredential, error) {
cred, found := c.GetToken(token)
if found {
if cred.IsValid() {
Expand All @@ -132,7 +132,7 @@ func (c *TokenCacheVerify) Verify(cli *mcclient.Client, adminToken, token string
if err != nil {
return nil, fmt.Errorf("Add %s credential to cache: %#v", cred.GetTokenString(), err)
}
callbackAuthhooks(cred)
callbackAuthhooks(ctx, cred)
// log.Debugf("Add token: %s", cred)
return cred, nil
}
Expand Down Expand Up @@ -165,11 +165,11 @@ func (a *authManager) verifyRequest(req http.Request, virtualHost bool) (mcclien
return cred, nil
}

func (a *authManager) verify(token string) (mcclient.TokenCredential, error) {
func (a *authManager) verify(ctx context.Context, token string) (mcclient.TokenCredential, error) {
if a.adminCredential == nil {
return nil, fmt.Errorf("No valid admin token credential")
}
cred, err := a.tokenCacheVerify.Verify(a.client, a.adminCredential.GetTokenString(), token)
cred, err := a.tokenCacheVerify.Verify(ctx, a.client, a.adminCredential.GetTokenString(), token)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -258,8 +258,8 @@ func GetCatalogData(serviceTypes []string, region string) jsonutils.JSONObject {
return manager.adminCredential.GetCatalogData(serviceTypes, region)
}

func Verify(tokenId string) (mcclient.TokenCredential, error) {
return manager.verify(tokenId)
func Verify(ctx context.Context, tokenId string) (mcclient.TokenCredential, error) {
return manager.verify(ctx, tokenId)
}

func VerifyRequest(req http.Request, virtualHost bool) (mcclient.TokenCredential, error) {
Expand Down
12 changes: 8 additions & 4 deletions pkg/mcclient/auth/authhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@

package auth

import "yunion.io/x/onecloud/pkg/mcclient"
import (
"context"

type TAuthHook func(userCred mcclient.TokenCredential)
"yunion.io/x/onecloud/pkg/mcclient"
)

type TAuthHook func(ctx context.Context, userCred mcclient.TokenCredential)

var (
authHooks = make([]TAuthHook, 0)
Expand All @@ -26,8 +30,8 @@ func RegisterAuthHook(hook TAuthHook) {
authHooks = append(authHooks, hook)
}

func callbackAuthhooks(userCred mcclient.TokenCredential) {
func callbackAuthhooks(ctx context.Context, userCred mcclient.TokenCredential) {
for i := range authHooks {
authHooks[i](userCred)
authHooks[i](ctx, userCred)
}
}
2 changes: 1 addition & 1 deletion pkg/mcclient/auth/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func AuthenticateWithDelayDecision(f appsrv.FilterHandler, delayDecision bool) a
token = &GuestToken
} else {
var err error
token, err = DefaultTokenVerifier(tokenStr)
token, err = DefaultTokenVerifier(ctx, tokenStr)
if err != nil {
log.Errorf("Verify token failed: %s", err)
if !delayDecision {
Expand Down
2 changes: 1 addition & 1 deletion pkg/notify/cache/usercache.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func RegistUserCredCacheUpdater() {
auth.RegisterAuthHook(onAuthCompleteUpdateCache)
}

func onAuthCompleteUpdateCache(userCred mcclient.TokenCredential) {
func onAuthCompleteUpdateCache(ctx context.Context, userCred mcclient.TokenCredential) {
UserCacheManager.updateUserCache(userCred)
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/util/gin/middleware/keystone_auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func KeystoneTokenVerifyMiddleware() gin.HandlerFunc {
return
}

_, err := auth.Verify(token)
_, err := auth.Verify(c, token)
if err != nil {
c.AbortWithError(http.StatusUnauthorized, err)
return
Expand Down

0 comments on commit c35758d

Please sign in to comment.