diff --git a/.env.example b/.env.example
index 9062de215..67d496d47 100644
--- a/.env.example
+++ b/.env.example
@@ -19,8 +19,8 @@ HASHIDS_SALT=
HASHIDS_LENGTH=8
MAIL_DRIVER=smtp
-MAIL_HOST=mailtrap.io
-MAIL_PORT=2525
+MAIL_HOST=smtp.example.com
+MAIL_PORT=25
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 1f83ddf93..4fa0845e5 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -25,11 +25,13 @@ class Kernel extends ConsoleKernel
// Execute scheduled commands for servers every minute, as if there was a normal cron running.
$schedule->command('p:schedule:process')->everyMinute()->withoutOverlapping();
- // Every 30 minutes, run the backup pruning command so that any abandoned backups can be removed
- // from the UI view for the server.
- $schedule->command('p:maintenance:prune-backups', [
- '--since-minutes' => '30',
- ])->everyThirtyMinutes();
+ // Every 30 minutes, run the backup pruning command so that any abandoned backups can be deleted.
+ $pruneAge = config('backups.prune_age', 360); // Defaults to 6 hours (time is in minuteS)
+ if ($pruneAge > 0) {
+ $schedule->command('p:maintenance:prune-backups', [
+ '--since-minutes' => $pruneAge,
+ ])->everyThirtyMinutes();
+ }
// Every day cleanup any internal backups of service files.
$schedule->command('p:maintenance:clean-service-backups')->daily();
diff --git a/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php b/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php
index 497d12904..6d50ad64d 100644
--- a/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php
+++ b/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php
@@ -52,7 +52,7 @@ class BackupRemoteUploadController extends Controller
public function __invoke(Request $request, string $backup)
{
// Get the size query parameter.
- $size = (int)$request->query('size');
+ $size = (int) $request->query('size');
if (empty($size)) {
throw new BadRequestHttpException('A non-empty "size" query parameter must be provided.');
}
diff --git a/app/Repositories/Wings/DaemonBackupRepository.php b/app/Repositories/Wings/DaemonBackupRepository.php
index 6506ac8a2..0eb9d4792 100644
--- a/app/Repositories/Wings/DaemonBackupRepository.php
+++ b/app/Repositories/Wings/DaemonBackupRepository.php
@@ -2,6 +2,7 @@
namespace Pterodactyl\Repositories\Wings;
+use Illuminate\Support\Arr;
use Webmozart\Assert\Assert;
use Pterodactyl\Models\Backup;
use Pterodactyl\Models\Server;
@@ -48,7 +49,7 @@ class DaemonBackupRepository extends DaemonRepository
'json' => [
'adapter' => $this->adapter ?? config('backups.default'),
'uuid' => $backup->uuid,
- 'ignored_files' => $backup->ignored_files,
+ 'ignore' => implode('\n', $backup->ignored_files),
],
]
);
diff --git a/app/Services/Backups/InitiateBackupService.php b/app/Services/Backups/InitiateBackupService.php
index 0857478ba..615f357ce 100644
--- a/app/Services/Backups/InitiateBackupService.php
+++ b/app/Services/Backups/InitiateBackupService.php
@@ -117,9 +117,9 @@ class InitiateBackupService
}
// Check if the server has reached or exceeded it's backup limit
- if (!$server->backup_limit || $server->backups()->where('is_successful', true)->count() >= $server->backup_limit) {
+ if (! $server->backup_limit || $server->backups()->where('is_successful', true)->count() >= $server->backup_limit) {
// Do not allow the user to continue if this server is already at its limit and can't override.
- if (!$override || $server->backup_limit <= 0) {
+ if (! $override || $server->backup_limit <= 0) {
throw new TooManyBackupsException($server->backup_limit);
}
diff --git a/config/backups.php b/config/backups.php
index 32ee1aa8a..a309a9ee6 100644
--- a/config/backups.php
+++ b/config/backups.php
@@ -12,6 +12,10 @@ return [
// uses to upload backups to S3 storage. Value is in minutes, so this would default to an hour.
'presigned_url_lifespan' => env('BACKUP_PRESIGNED_URL_LIFESPAN', 60),
+ // The time to wait before automatically failing a backup, time is in minutes and defaults
+ // to 6 hours. To disable this feature, set the value to `0`.
+ 'prune_age' => env('BACKUP_PRUNE_AGE', 360),
+
'disks' => [
// There is no configuration for the local disk for Wings. That configuration
// is determined by the Daemon configuration, and not the Panel.
diff --git a/database/seeds/eggs/minecraft/egg-sponge--sponge-vanilla.json b/database/seeds/eggs/minecraft/egg-sponge--sponge-vanilla.json
index 0a695ac2e..db3f7fc94 100644
--- a/database/seeds/eggs/minecraft/egg-sponge--sponge-vanilla.json
+++ b/database/seeds/eggs/minecraft/egg-sponge--sponge-vanilla.json
@@ -28,7 +28,7 @@
"name": "Sponge Version",
"description": "The version of SpongeVanilla to download and use.",
"env_variable": "SPONGE_VERSION",
- "default_value": "1.11.2-6.1.0-BETA-21",
+ "default_value": "1.12.2-7.3.0",
"user_viewable": true,
"user_editable": false,
"rules": "required|regex:\/^([a-zA-Z0-9.\\-_]+)$\/"
diff --git a/resources/scripts/components/server/databases/DatabaseRow.tsx b/resources/scripts/components/server/databases/DatabaseRow.tsx
index caf4a702e..148415a13 100644
--- a/resources/scripts/components/server/databases/DatabaseRow.tsx
+++ b/resources/scripts/components/server/databases/DatabaseRow.tsx
@@ -127,7 +127,7 @@ export default ({ database, className }: Props) => {