Support data coming from the panel better
This commit is contained in:
parent
151b00de23
commit
1e2da95d26
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -46,3 +46,4 @@ test_*/
|
|||
!.gitkeep
|
||||
debug
|
||||
data/.states.json
|
||||
.DS_Store
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package router
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/pterodactyl/wings/server"
|
||||
"github.com/pterodactyl/wings/server/backup"
|
||||
|
@ -12,14 +14,27 @@ import (
|
|||
func postServerBackup(c *gin.Context) {
|
||||
s := GetServer(c.Param("server"))
|
||||
|
||||
data := &backup.LocalBackup{}
|
||||
data := &backup.Request{}
|
||||
c.BindJSON(&data)
|
||||
|
||||
go func(b *backup.LocalBackup, serv *server.Server) {
|
||||
if err := serv.BackupLocal(b); err != nil {
|
||||
zap.S().Errorw("failed to generate backup for server", zap.Error(err))
|
||||
switch data.Adapter {
|
||||
case backup.LocalBackupAdapter:
|
||||
adapter, err := data.NewLocalBackup()
|
||||
if err != nil {
|
||||
TrackedServerError(err, s).AbortWithServerError(c)
|
||||
return
|
||||
}
|
||||
}(data, s)
|
||||
|
||||
go func(b *backup.LocalBackup, serv *server.Server) {
|
||||
if err := serv.BackupLocal(b); err != nil {
|
||||
zap.S().Errorw("failed to generate backup for server", zap.Error(err))
|
||||
}
|
||||
}(adapter, s)
|
||||
case backup.S3BackupAdapter:
|
||||
TrackedServerError(errors.New(fmt.Sprintf("unsupported backup adapter [%s] provided", data.Adapter)), s).AbortWithServerError(c)
|
||||
default:
|
||||
TrackedServerError(errors.New(fmt.Sprintf("unknown backup adapter [%s] provided", data.Adapter)), s).AbortWithServerError(c)
|
||||
}
|
||||
|
||||
c.Status(http.StatusAccepted)
|
||||
}
|
||||
|
@ -40,4 +55,4 @@ func deleteServerBackup(c *gin.Context) {
|
|||
}
|
||||
|
||||
c.Status(http.StatusNoContent)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,35 @@
|
|||
package backup
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/pterodactyl/wings/api"
|
||||
)
|
||||
|
||||
const (
|
||||
LocalBackupAdapter = "local"
|
||||
S3BackupAdapter = "s3"
|
||||
)
|
||||
|
||||
type Request struct {
|
||||
Adapter string `json:"adapter"`
|
||||
Uuid string `json:"uuid"`
|
||||
IgnoredFiles []string `json:"ignored_files"`
|
||||
PresignedUrl string `json:"presigned_url"`
|
||||
}
|
||||
|
||||
// Generates a new local backup struct.
|
||||
func (r *Request) NewLocalBackup() (*LocalBackup, error) {
|
||||
if r.Adapter != LocalBackupAdapter {
|
||||
return nil, errors.New(fmt.Sprintf("cannot create local backup using [%s] adapter", r.Adapter))
|
||||
}
|
||||
|
||||
return &LocalBackup{
|
||||
Uuid: r.Uuid,
|
||||
IgnoredFiles: r.IgnoredFiles,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type Backup interface {
|
||||
// Returns the UUID of this backup as tracked by the panel instance.
|
||||
Identifier() string
|
||||
|
@ -39,4 +65,4 @@ func (ad *ArchiveDetails) ToRequest(successful bool) api.BackupRequest {
|
|||
Size: ad.Size,
|
||||
Successful: successful,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user