diff --git a/agent/utils/cloud_storage/client/ali.go b/agent/utils/cloud_storage/client/ali.go index a5b970e49..cf52eda31 100644 --- a/agent/utils/cloud_storage/client/ali.go +++ b/agent/utils/cloud_storage/client/ali.go @@ -497,6 +497,7 @@ func (a *aliClient) completeUpload(uploadID, fileID string) error { type tokenResp struct { RefreshToken string `json:"refresh_token"` + AccessToken string `json:"access_token"` } func loadToken(refresh_token string) (string, error) { @@ -524,7 +525,7 @@ func loadToken(refresh_token string) (string, error) { if err := json.Unmarshal(resp.Body(), &respItem); err != nil { return "", err } - return respItem.RefreshToken, nil + return respItem.AccessToken, nil } func RefreshALIToken(varMap map[string]interface{}) (string, error) { diff --git a/core/app/service/backup.go b/core/app/service/backup.go index 140c81917..df28e3325 100644 --- a/core/app/service/backup.go +++ b/core/app/service/backup.go @@ -284,7 +284,15 @@ func (u *BackupService) RefreshToken(req dto.OperateByName) error { varsItem, _ := json.Marshal(varMap) backup.Vars = string(varsItem) - return backupRepo.Save(&backup) + if err := backupRepo.Save(&backup); err != nil { + return err + } + go func() { + if err := xpack.Sync(constant.SyncBackupAccounts); err != nil { + global.LOG.Errorf("sync backup account to node failed, err: %v", err) + } + }() + return nil } func (u *BackupService) NewClient(backup *model.BackupAccount) (cloud_storage.CloudStorageClient, error) { diff --git a/core/utils/cloud_storage/client/ali.go b/core/utils/cloud_storage/client/ali.go index 1dd1dc314..8fbd299ed 100644 --- a/core/utils/cloud_storage/client/ali.go +++ b/core/utils/cloud_storage/client/ali.go @@ -20,9 +20,10 @@ type aliClient struct { } func NewALIClient(vars map[string]interface{}) (*aliClient, error) { + refresh_token := loadParamFromVars("refresh_token", vars) drive_id := loadParamFromVars("drive_id", vars) - token, err := RefreshALIToken(vars) + token, err := loadToken(refresh_token) if err != nil { return nil, err } @@ -355,6 +356,35 @@ func (a *aliClient) completeUpload(uploadID, fileID string) error { type tokenResp struct { RefreshToken string `json:"refresh_token"` + AccessToken string `json:"access_token"` +} + +func loadToken(refresh_token string) (string, error) { + client := resty.New() + client.SetTLSClientConfig(&tls.Config{ + InsecureSkipVerify: true, + }) + data := map[string]interface{}{ + "grant_type": "refresh_token", + "refresh_token": refresh_token, + } + + url := "https://api.aliyundrive.com/token/refresh" + resp, err := client.R(). + SetBody(data). + Post(url) + + if err != nil { + return "", fmt.Errorf("load account token failed, err: %v", err) + } + if resp.StatusCode() != 200 { + return "", fmt.Errorf("load account token failed, code: %v", resp.StatusCode()) + } + var respItem tokenResp + if err := json.Unmarshal(resp.Body(), &respItem); err != nil { + return "", err + } + return respItem.AccessToken, nil } func RefreshALIToken(varMap map[string]interface{}) (string, error) {