| 539 | } |
| 540 | |
| 541 | func loadRefreshTokenByCode(backup *model.BackupAccount) (string, error) { |
| 542 | varMap := make(map[string]interface{}) |
| 543 | if err := json.Unmarshal([]byte(backup.Vars), &varMap); err != nil { |
| 544 | return "", fmt.Errorf("unmarshal backup vars failed, err: %v", err) |
| 545 | } |
| 546 | if token, ok := varMap["refresh_token"]; ok && len(token.(string)) != 0 { |
| 547 | return "", nil |
| 548 | } |
| 549 | refreshToken := "" |
| 550 | var err error |
| 551 | switch backup.Type { |
| 552 | case constant.GoogleDrive: |
| 553 | refreshToken, err = client.RefreshGoogleToken("authorization_code", "refreshToken", varMap) |
| 554 | if err != nil { |
| 555 | return "", err |
| 556 | } |
| 557 | case constant.OneDrive: |
| 558 | refreshToken, err = client.RefreshToken("authorization_code", "refreshToken", varMap) |
| 559 | if err != nil { |
| 560 | return "", err |
| 561 | } |
| 562 | } |
| 563 | if backup.Type != constant.ALIYUN { |
| 564 | varMap["refresh_token"] = refreshToken |
| 565 | } |
| 566 | itemVars, _ := json.Marshal(varMap) |
| 567 | backup.Vars = string(itemVars) |
| 568 | return refreshToken, nil |
| 569 | } |
| 570 | |
| 571 | func loadBackupNamesByID(accountIDs string, downloadID uint) ([]string, string, error) { |
| 572 | accountIDList := strings.Split(accountIDs, ",") |