1313use Pterodactyl \Repositories \Wings \DaemonBackupRepository ;
1414use Pterodactyl \Exceptions \Service \Backup \TooManyBackupsException ;
1515use Symfony \Component \HttpKernel \Exception \TooManyRequestsHttpException ;
16+ use Pterodactyl \Services \Backups \DeleteBackupService ;
1617
1718class InitiateBackupService
1819{
@@ -41,24 +42,32 @@ class InitiateBackupService
4142 */
4243 private $ backupManager ;
4344
45+ /**
46+ * @var \Pterodactyl\Services\Backups\DeleteBackupService
47+ */
48+ private $ deleteBackupService ;
49+
4450 /**
4551 * InitiateBackupService constructor.
4652 *
4753 * @param \Pterodactyl\Repositories\Eloquent\BackupRepository $repository
4854 * @param \Illuminate\Database\ConnectionInterface $connection
4955 * @param \Pterodactyl\Repositories\Wings\DaemonBackupRepository $daemonBackupRepository
56+ * @param \Pterodactyl\Services\Backups\DeleteBackupService $deleteBackupService
5057 * @param \Pterodactyl\Extensions\Backups\BackupManager $backupManager
5158 */
5259 public function __construct (
5360 BackupRepository $ repository ,
5461 ConnectionInterface $ connection ,
5562 DaemonBackupRepository $ daemonBackupRepository ,
63+ DeleteBackupService $ deleteBackupService ,
5664 BackupManager $ backupManager
5765 ) {
5866 $ this ->repository = $ repository ;
5967 $ this ->connection = $ connection ;
6068 $ this ->daemonBackupRepository = $ daemonBackupRepository ;
6169 $ this ->backupManager = $ backupManager ;
70+ $ this ->deleteBackupService = $ deleteBackupService ;
6271 }
6372
6473 /**
@@ -96,13 +105,8 @@ public function setIgnoredFiles(?array $ignored)
96105 * @throws \Pterodactyl\Exceptions\Service\Backup\TooManyBackupsException
97106 * @throws \Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException
98107 */
99- public function handle (Server $ server , string $ name = null ): Backup
108+ public function handle (Server $ server , string $ name = null , bool $ override = null ): Backup
100109 {
101- // Do not allow the user to continue if this server is already at its limit.
102- if (! $ server ->backup_limit || $ server ->backups ()->where ('is_successful ' , true )->count () >= $ server ->backup_limit ) {
103- throw new TooManyBackupsException ($ server ->backup_limit );
104- }
105-
106110 $ previous = $ this ->repository ->getBackupsGeneratedDuringTimespan ($ server ->id , 10 );
107111 if ($ previous ->count () >= 2 ) {
108112 throw new TooManyRequestsHttpException (
@@ -111,6 +115,17 @@ public function handle(Server $server, string $name = null): Backup
111115 );
112116 }
113117
118+ if (! $ server ->backup_limit || $ server ->backups ()->where ('is_successful ' , true )->count () >= $ server ->backup_limit ) {
119+ if ($ override ){
120+ // Remove latest backup
121+ $ last_backup = $ server ->backups ()->where ('is_successful ' , true )->oldest ()->first ();
122+ $ this ->deleteBackupService ->handle ($ last_backup );
123+ }else {
124+ // Do not allow the user to continue if this server is already at its limit.
125+ throw new TooManyBackupsException ($ server ->backup_limit );
126+ }
127+ }
128+
114129 return $ this ->connection ->transaction (function () use ($ server , $ name ) {
115130 /** @var \Pterodactyl\Models\Backup $backup */
116131 $ backup = $ this ->repository ->create ([
@@ -121,9 +136,7 @@ public function handle(Server $server, string $name = null): Backup
121136 'disk ' => $ this ->backupManager ->getDefaultAdapter (),
122137 ], true , true );
123138
124- $ this ->daemonBackupRepository ->setServer ($ server )
125- ->setBackupAdapter ($ this ->backupManager ->getDefaultAdapter ())
126- ->backup ($ backup );
139+ $ this ->daemonBackupRepository ->setServer ($ server )->setBackupAdapter ($ this ->backupManager ->getDefaultAdapter ())->backup ($ backup );
127140
128141 return $ backup ;
129142 });
0 commit comments