Skip to content

Commit 8073a75

Browse files
committed
pref: Optimize backup account code structure
1 parent 25fb431 commit 8073a75

File tree

29 files changed

+164
-3202
lines changed

29 files changed

+164
-3202
lines changed

core/app/api/v2/backup.go

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package v2
22

33
import (
4-
"fmt"
5-
64
"github.com/1Panel-dev/1Panel/core/app/api/v2/helper"
75
"github.com/1Panel-dev/1Panel/core/app/dto"
86
"github.com/gin-gonic/gin"
@@ -50,49 +48,6 @@ func (b *BaseApi) RefreshToken(c *gin.Context) {
5048
helper.Success(c)
5149
}
5250

53-
// @Tags Backup Account
54-
// @Summary List buckets
55-
// @Accept json
56-
// @Param request body dto.ForBuckets true "request"
57-
// @Success 200 {array} string
58-
// @Security ApiKeyAuth
59-
// @Security Timestamp
60-
// @Router /core/backups/buckets [post]
61-
func (b *BaseApi) ListBuckets(c *gin.Context) {
62-
var req dto.ForBuckets
63-
if err := helper.CheckBindAndValidate(&req, c); err != nil {
64-
return
65-
}
66-
67-
buckets, err := backupService.GetBuckets(req)
68-
if err != nil {
69-
helper.InternalServer(c, err)
70-
return
71-
}
72-
helper.SuccessWithData(c, buckets)
73-
}
74-
75-
// @Tags Backup Account
76-
// @Summary Load backup account base info
77-
// @Accept json
78-
// @Success 200 {object} dto.BackupClientInfo
79-
// @Security ApiKeyAuth
80-
// @Security Timestamp
81-
// @Router /core/backups/client/:clientType [get]
82-
func (b *BaseApi) LoadBackupClientInfo(c *gin.Context) {
83-
clientType, ok := c.Params.Get("clientType")
84-
if !ok {
85-
helper.BadRequest(c, fmt.Errorf("error %s in path", "clientType"))
86-
return
87-
}
88-
data, err := backupService.LoadBackupClientInfo(clientType)
89-
if err != nil {
90-
helper.InternalServer(c, err)
91-
return
92-
}
93-
helper.SuccessWithData(c, data)
94-
}
95-
9651
// @Tags Backup Account
9752
// @Summary Delete backup account
9853
// @Accept json

core/app/dto/backup.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ type BackupInfo struct {
3737
RememberAuth bool `json:"rememberAuth"`
3838
}
3939

40-
type BackupClientInfo struct {
41-
ClientID string `json:"client_id"`
42-
ClientSecret string `json:"client_secret"`
43-
RedirectUri string `json:"redirect_uri"`
44-
}
45-
4640
type ForBuckets struct {
4741
Type string `json:"type" validate:"required"`
4842
AccessKey string `json:"accessKey"`

core/app/service/backup.go

Lines changed: 4 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package service
22

33
import (
4-
"bufio"
54
"encoding/base64"
65
"encoding/json"
76
"fmt"
87
"net/http"
9-
"os"
10-
"path"
118
"strings"
129
"time"
1310

@@ -18,7 +15,6 @@ import (
1815
"github.com/1Panel-dev/1Panel/core/constant"
1916
"github.com/1Panel-dev/1Panel/core/global"
2017
"github.com/1Panel-dev/1Panel/core/utils/cloud_storage"
21-
"github.com/1Panel-dev/1Panel/core/utils/cloud_storage/client"
2218
"github.com/1Panel-dev/1Panel/core/utils/encrypt"
2319
"github.com/1Panel-dev/1Panel/core/utils/req_helper/proxy_local"
2420
"github.com/1Panel-dev/1Panel/core/utils/xpack"
@@ -28,9 +24,7 @@ import (
2824
type BackupService struct{}
2925

3026
type IBackupService interface {
31-
LoadBackupClientInfo(clientType string) (dto.BackupClientInfo, error)
3227
Create(backupDto dto.BackupOperate) error
33-
GetBuckets(backupDto dto.ForBuckets) ([]interface{}, error)
3428
Update(req dto.BackupOperate) error
3529
Delete(name string) error
3630
RefreshToken(req dto.OperateByName) error
@@ -40,33 +34,6 @@ func NewIBackupService() IBackupService {
4034
return &BackupService{}
4135
}
4236

43-
func (u *BackupService) LoadBackupClientInfo(clientType string) (dto.BackupClientInfo, error) {
44-
var data dto.BackupClientInfo
45-
clientIDKey := "OneDriveID"
46-
clientIDSc := "OneDriveSc"
47-
data.RedirectUri = constant.OneDriveRedirectURI
48-
clientID, err := settingRepo.Get(repo.WithByKey(clientIDKey))
49-
if err != nil {
50-
return data, err
51-
}
52-
idItem, err := base64.StdEncoding.DecodeString(clientID.Value)
53-
if err != nil {
54-
return data, err
55-
}
56-
data.ClientID = string(idItem)
57-
clientSecret, err := settingRepo.Get(repo.WithByKey(clientIDSc))
58-
if err != nil {
59-
return data, err
60-
}
61-
secretItem, err := base64.StdEncoding.DecodeString(clientSecret.Value)
62-
if err != nil {
63-
return data, err
64-
}
65-
data.ClientSecret = string(secretItem)
66-
67-
return data, err
68-
}
69-
7037
func (u *BackupService) Create(req dto.BackupOperate) error {
7138
if !req.IsPublic {
7239
return buserr.New("ErrBackupPublic")
@@ -97,11 +64,6 @@ func (u *BackupService) Create(req dto.BackupOperate) error {
9764
return err
9865
}
9966
}
100-
if req.Type != "LOCAL" {
101-
if _, err := u.checkBackupConn(&backup); err != nil {
102-
return buserr.WithMap("ErrBackupCheck", map[string]interface{}{"err": err.Error()}, err)
103-
}
104-
}
10567

10668
backup.AccessKey, err = encrypt.StringEncrypt(backup.AccessKey)
10769
if err != nil {
@@ -120,37 +82,6 @@ func (u *BackupService) Create(req dto.BackupOperate) error {
12082
return nil
12183
}
12284

123-
func (u *BackupService) GetBuckets(req dto.ForBuckets) ([]interface{}, error) {
124-
itemAccessKey, err := base64.StdEncoding.DecodeString(req.AccessKey)
125-
if err != nil {
126-
return nil, err
127-
}
128-
req.AccessKey = string(itemAccessKey)
129-
itemCredential, err := base64.StdEncoding.DecodeString(req.Credential)
130-
if err != nil {
131-
return nil, err
132-
}
133-
req.Credential = string(itemCredential)
134-
135-
varMap := make(map[string]interface{})
136-
if err := json.Unmarshal([]byte(req.Vars), &varMap); err != nil {
137-
return nil, err
138-
}
139-
switch req.Type {
140-
case constant.Sftp, constant.WebDAV:
141-
varMap["username"] = req.AccessKey
142-
varMap["password"] = req.Credential
143-
case constant.OSS, constant.S3, constant.MinIo, constant.Cos, constant.Kodo:
144-
varMap["accessKey"] = req.AccessKey
145-
varMap["secretKey"] = req.Credential
146-
}
147-
client, err := cloud_storage.NewCloudStorageClient(req.Type, varMap)
148-
if err != nil {
149-
return nil, err
150-
}
151-
return client.ListBuckets()
152-
}
153-
15485
func (u *BackupService) Delete(name string) error {
15586
backup, _ := backupRepo.Get(repo.WithByName(name))
15687
if backup.ID == 0 {
@@ -215,10 +146,6 @@ func (u *BackupService) Update(req dto.BackupOperate) error {
215146
return err
216147
}
217148
}
218-
isOk, err := u.checkBackupConn(&newBackup)
219-
if err != nil || !isOk {
220-
return buserr.WithMap("ErrBackupCheck", map[string]interface{}{"err": err.Error()}, err)
221-
}
222149

223150
newBackup.AccessKey, err = encrypt.StringEncrypt(newBackup.AccessKey)
224151
if err != nil {
@@ -258,9 +185,9 @@ func (u *BackupService) RefreshToken(req dto.OperateByName) error {
258185
)
259186
switch backup.Type {
260187
case constant.OneDrive:
261-
refreshToken, err = client.RefreshToken("refresh_token", "refreshToken", varMap)
188+
refreshToken, err = cloud_storage.RefreshToken("refresh_token", "refreshToken", varMap)
262189
case constant.ALIYUN:
263-
refreshToken, err = client.RefreshALIToken(varMap)
190+
refreshToken, err = cloud_storage.RefreshALIToken(varMap)
264191
}
265192
if err != nil {
266193
varMap["refresh_status"] = constant.StatusFailed
@@ -282,32 +209,6 @@ func (u *BackupService) RefreshToken(req dto.OperateByName) error {
282209
return nil
283210
}
284211

285-
func (u *BackupService) NewClient(backup *model.BackupAccount) (cloud_storage.CloudStorageClient, error) {
286-
varMap := make(map[string]interface{})
287-
if err := json.Unmarshal([]byte(backup.Vars), &varMap); err != nil {
288-
return nil, err
289-
}
290-
varMap["bucket"] = backup.Bucket
291-
switch backup.Type {
292-
case constant.Sftp, constant.WebDAV:
293-
varMap["username"] = backup.AccessKey
294-
varMap["password"] = backup.Credential
295-
case constant.OSS, constant.S3, constant.MinIo, constant.Cos, constant.Kodo:
296-
varMap["accessKey"] = backup.AccessKey
297-
varMap["secretKey"] = backup.Credential
298-
case constant.UPYUN:
299-
varMap["operator"] = backup.AccessKey
300-
varMap["password"] = backup.Credential
301-
}
302-
303-
backClient, err := cloud_storage.NewCloudStorageClient(backup.Type, varMap)
304-
if err != nil {
305-
return nil, err
306-
}
307-
308-
return backClient, nil
309-
}
310-
311212
func (u *BackupService) loadRefreshTokenByCode(backup *model.BackupAccount) error {
312213
varMap := make(map[string]interface{})
313214
if err := json.Unmarshal([]byte(backup.Vars), &varMap); err != nil {
@@ -316,12 +217,12 @@ func (u *BackupService) loadRefreshTokenByCode(backup *model.BackupAccount) erro
316217
refreshToken := ""
317218
var err error
318219
if backup.Type == constant.GoogleDrive {
319-
refreshToken, err = client.RefreshGoogleToken("authorization_code", "refreshToken", varMap)
220+
refreshToken, err = cloud_storage.RefreshGoogleToken("authorization_code", "refreshToken", varMap)
320221
if err != nil {
321222
return err
322223
}
323224
} else {
324-
refreshToken, err = client.RefreshToken("authorization_code", "refreshToken", varMap)
225+
refreshToken, err = cloud_storage.RefreshToken("authorization_code", "refreshToken", varMap)
325226
if err != nil {
326227
return err
327228
}
@@ -337,37 +238,3 @@ func (u *BackupService) loadRefreshTokenByCode(backup *model.BackupAccount) erro
337238
backup.Vars = string(itemVars)
338239
return nil
339240
}
340-
341-
func (u *BackupService) checkBackupConn(backup *model.BackupAccount) (bool, error) {
342-
client, err := u.NewClient(backup)
343-
if err != nil {
344-
return false, err
345-
}
346-
fileItem := path.Join(global.CONF.Base.InstallDir, "1panel/tmp/test/1panel")
347-
if _, err := os.Stat(path.Dir(fileItem)); err != nil && os.IsNotExist(err) {
348-
if err = os.MkdirAll(path.Dir(fileItem), os.ModePerm); err != nil {
349-
return false, err
350-
}
351-
}
352-
file, err := os.OpenFile(fileItem, os.O_WRONLY|os.O_CREATE, constant.FilePerm)
353-
if err != nil {
354-
return false, err
355-
}
356-
defer file.Close()
357-
write := bufio.NewWriter(file)
358-
_, _ = write.WriteString("1Panel 备份账号测试文件。\n")
359-
_, _ = write.WriteString("1Panel 備份賬號測試文件。\n")
360-
_, _ = write.WriteString("1Panel Backs up account test files.\n")
361-
_, _ = write.WriteString("1Panelアカウントのテストファイルをバックアップします。\n")
362-
write.Flush()
363-
364-
targetPath := path.Join(backup.BackupPath, "test/1panel")
365-
if backup.Type != constant.Sftp && backup.Type != constant.Local && targetPath != "/" {
366-
targetPath = strings.TrimPrefix(targetPath, "/")
367-
}
368-
if _, err := client.Upload(fileItem, targetPath); err != nil {
369-
return false, err
370-
}
371-
_, _ = client.Delete(path.Join(backup.BackupPath, "test/1panel"))
372-
return true, nil
373-
}

core/constant/common.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ const (
3030
UPYUN = "UPYUN"
3131
ALIYUN = "ALIYUN"
3232
GoogleDrive = "GoogleDrive"
33-
34-
OneDriveRedirectURI = "http://localhost/login/authorized"
3533
)
3634

3735
const (

core/init/cron/job/backup.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/1Panel-dev/1Panel/core/app/model"
88
"github.com/1Panel-dev/1Panel/core/constant"
99
"github.com/1Panel-dev/1Panel/core/global"
10-
"github.com/1Panel-dev/1Panel/core/utils/cloud_storage/client"
10+
"github.com/1Panel-dev/1Panel/core/utils/cloud_storage"
1111
"github.com/1Panel-dev/1Panel/core/utils/xpack"
1212
)
1313

@@ -39,9 +39,9 @@ func (b *backup) Run() {
3939
)
4040
switch backupItem.Type {
4141
case constant.OneDrive:
42-
refreshToken, err = client.RefreshToken("refresh_token", "refreshToken", varMap)
42+
refreshToken, err = cloud_storage.RefreshToken("refresh_token", "refreshToken", varMap)
4343
case constant.ALIYUN:
44-
refreshToken, err = client.RefreshALIToken(varMap)
44+
refreshToken, err = cloud_storage.RefreshALIToken(varMap)
4545
}
4646
if err != nil {
4747
varMap["refresh_status"] = constant.StatusFailed

core/router/ro_backup.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ func (s *BackupRouter) InitRouter(Router *gin.RouterGroup) {
1414
Use(middleware.PasswordExpired())
1515
baseApi := v2.ApiGroupApp.BaseApi
1616
{
17-
backupRouter.GET("/client/:clientType", baseApi.LoadBackupClientInfo)
1817
backupRouter.POST("/refresh/token", baseApi.RefreshToken)
19-
backupRouter.POST("/buckets", baseApi.ListBuckets)
2018
backupRouter.POST("", baseApi.CreateBackup)
2119
backupRouter.POST("/del", baseApi.DeleteBackup)
2220
backupRouter.POST("/update", baseApi.UpdateBackup)

0 commit comments

Comments
 (0)