fix: avoid using background context

This commit is contained in:
Qiu Jian
2020-05-14 16:51:26 +08:00
parent 8a7f37dcd1
commit db111a8da4
8 changed files with 30 additions and 24 deletions
+9 -9
View File
@@ -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)
}
@@ -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())
}
@@ -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 {
@@ -399,7 +399,7 @@ 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
}
@@ -407,11 +407,11 @@ func (manager *STenantCacheManager) fetchDomainTenantsFromKeystone(domainId stri
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")
}
+1 -1
View File
@@ -879,7 +879,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
+3 -1
View File
@@ -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 {
+6 -6
View File
@@ -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() {
@@ -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
}
@@ -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
}
@@ -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) {
+8 -4
View File
@@ -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)
@@ -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)
}
}
+1 -1
View File
@@ -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 {
+1 -1
View File
@@ -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)
}
+1 -1
View File
@@ -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