mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-02-09 01:50:06 +08:00
![ssongliu](/assets/img/avatar_default.png)
* feat: Add usage scope for backup accounts * fix: 解决计划任务列表不显示备份账号的问题 * feat: 统一备份文件大小获取接口
62 lines
2.0 KiB
Go
62 lines
2.0 KiB
Go
package job
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/1Panel-dev/1Panel/agent/app/model"
|
|
"github.com/1Panel-dev/1Panel/agent/constant"
|
|
"github.com/1Panel-dev/1Panel/agent/global"
|
|
"github.com/1Panel-dev/1Panel/agent/utils/cloud_storage/client"
|
|
)
|
|
|
|
type backup struct{}
|
|
|
|
func NewBackupJob() *backup {
|
|
return &backup{}
|
|
}
|
|
|
|
func (b *backup) Run() {
|
|
var backups []model.BackupAccount
|
|
_ = global.DB.Where("`type` in (?) AND is_public = 0", []string{constant.OneDrive, constant.ALIYUN, constant.GoogleDrive}).Find(&backups)
|
|
if len(backups) == 0 {
|
|
return
|
|
}
|
|
for _, backupItem := range backups {
|
|
if backupItem.ID == 0 {
|
|
continue
|
|
}
|
|
global.LOG.Infof("Start to refresh %s-%s access_token ...", backupItem.Type, backupItem.Name)
|
|
varMap := make(map[string]interface{})
|
|
if err := json.Unmarshal([]byte(backupItem.Vars), &varMap); err != nil {
|
|
global.LOG.Errorf("Failed to refresh %s - %s token, please retry, err: %v", backupItem.Type, backupItem.Name, err)
|
|
continue
|
|
}
|
|
var (
|
|
refreshToken string
|
|
err error
|
|
)
|
|
switch backupItem.Type {
|
|
case constant.OneDrive:
|
|
refreshToken, err = client.RefreshToken("refresh_token", "refreshToken", varMap)
|
|
case constant.GoogleDrive:
|
|
refreshToken, err = client.RefreshGoogleToken("refresh_token", "refreshToken", varMap)
|
|
case constant.ALIYUN:
|
|
refreshToken, err = client.RefreshALIToken(varMap)
|
|
}
|
|
if err != nil {
|
|
varMap["refresh_status"] = constant.StatusFailed
|
|
varMap["refresh_msg"] = err.Error()
|
|
global.LOG.Errorf("Failed to refresh OneDrive token, please retry, err: %v", err)
|
|
continue
|
|
}
|
|
varMap["refresh_status"] = constant.StatusSuccess
|
|
varMap["refresh_time"] = time.Now().Format(constant.DateTimeLayout)
|
|
varMap["refresh_token"] = refreshToken
|
|
|
|
varsItem, _ := json.Marshal(varMap)
|
|
_ = global.DB.Model(&model.BackupAccount{}).Where("id = ?", backupItem.ID).Updates(map[string]interface{}{"vars": string(varsItem)}).Error
|
|
global.LOG.Infof("Refresh %s-%s access_token successful!", backupItem.Type, backupItem.Name)
|
|
}
|
|
}
|