mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
fix: avoid using background context
This commit is contained in:
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Vendored
+1
-1
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user