11package service
22
33import (
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 (
2824type BackupService struct {}
2925
3026type 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-
7037func (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-
15485func (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-
311212func (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- }
0 commit comments