diff --git a/router/router_server_transfer.go b/router/router_server_transfer.go index 656b84fe..852ee4e7 100644 --- a/router/router_server_transfer.go +++ b/router/router_server_transfer.go @@ -18,9 +18,10 @@ import ( // Data passed over to initiate a server transfer. type serverTransferRequest struct { - URL string `binding:"required" json:"url"` - Token string `binding:"required" json:"token"` - Server installer.ServerDetails `json:"server"` + URL string `binding:"required" json:"url"` + Token string `binding:"required" json:"token"` + Backups []string `json:"backups"` + Server installer.ServerDetails `json:"server"` } // postServerTransfer handles the start of a transfer for a server. @@ -80,7 +81,7 @@ func postServerTransfer(c *gin.Context) { go func() { defer transfer.Outgoing().Remove(trnsfr) - if _, err := trnsfr.PushArchiveToTarget(data.URL, data.Token); err != nil { + if _, err := trnsfr.PushArchiveToTarget(data.URL, data.Token, data.Backups); err != nil { notifyPanelOfFailure() if err == context.Canceled { diff --git a/server/transfer/archive.go b/server/transfer/archive.go index 684c11cc..8f6cfc59 100644 --- a/server/transfer/archive.go +++ b/server/transfer/archive.go @@ -35,6 +35,7 @@ func (t *Transfer) Archive() (*Archive, error) { } func (a *Archive) StreamBackups(ctx context.Context, mp *multipart.Writer) error { + // In theory this can't happen as this function is only called if there is at least 1 backup but just to be sure if len(a.transfer.BackupUUIDs) == 0 { a.transfer.Log().Debug("no backups specified for transfer") return nil diff --git a/server/transfer/source.go b/server/transfer/source.go index 9123023b..9e6fef05 100644 --- a/server/transfer/source.go +++ b/server/transfer/source.go @@ -14,7 +14,7 @@ import ( // PushArchiveToTarget POSTs the archive to the target node and returns the // response body. -func (t *Transfer) PushArchiveToTarget(url, token string) ([]byte, error) { +func (t *Transfer) PushArchiveToTarget(url, token string, backups []string) ([]byte, error) { ctx, cancel := context.WithCancel(t.ctx) defer cancel() @@ -123,7 +123,8 @@ func (t *Transfer) PushArchiveToTarget(url, token string) ([]byte, error) { errChan <- errors.New("failed to stream main archive checksum") return } - + // Store the UUID of the backups we want to transfer in the transfer struct + t.BackupUUIDs = backups if len(t.BackupUUIDs) > 0 { t.SendMessage(fmt.Sprintf("Streaming %d backup files to destination...", len(t.BackupUUIDs))) if err := a.StreamBackups(ctx, mp); err != nil {