22
33namespace Pterodactyl \Http \Controllers \Api \Client \Servers ;
44
5+ use Carbon \Carbon ;
56use Pterodactyl \Models \Backup ;
67use Pterodactyl \Models \Server ;
78use Illuminate \Http \JsonResponse ;
89use Pterodactyl \Services \Backups \DeleteBackupService ;
10+ use Pterodactyl \Repositories \Eloquent \BackupRepository ;
911use Pterodactyl \Services \Backups \InitiateBackupService ;
1012use Pterodactyl \Transformers \Api \Client \BackupTransformer ;
1113use Pterodactyl \Http \Controllers \Api \Client \ClientApiController ;
14+ use Symfony \Component \HttpKernel \Exception \TooManyRequestsHttpException ;
1215use Pterodactyl \Http \Requests \Api \Client \Servers \Backups \GetBackupsRequest ;
1316use Pterodactyl \Http \Requests \Api \Client \Servers \Backups \StoreBackupRequest ;
1417use Pterodactyl \Http \Requests \Api \Client \Servers \Backups \DeleteBackupRequest ;
@@ -25,18 +28,28 @@ class BackupController extends ClientApiController
2528 */
2629 private $ deleteBackupService ;
2730
31+ /**
32+ * @var \Pterodactyl\Repositories\Eloquent\BackupRepository
33+ */
34+ private $ repository ;
35+
2836 /**
2937 * BackupController constructor.
3038 *
39+ * @param \Pterodactyl\Repositories\Eloquent\BackupRepository $repository
3140 * @param \Pterodactyl\Services\Backups\DeleteBackupService $deleteBackupService
3241 * @param \Pterodactyl\Services\Backups\InitiateBackupService $initiateBackupService
3342 */
34- public function __construct (DeleteBackupService $ deleteBackupService , InitiateBackupService $ initiateBackupService )
35- {
43+ public function __construct (
44+ BackupRepository $ repository ,
45+ DeleteBackupService $ deleteBackupService ,
46+ InitiateBackupService $ initiateBackupService
47+ ) {
3648 parent ::__construct ();
3749
3850 $ this ->initiateBackupService = $ initiateBackupService ;
3951 $ this ->deleteBackupService = $ deleteBackupService ;
52+ $ this ->repository = $ repository ;
4053 }
4154
4255 /**
@@ -65,6 +78,14 @@ public function index(GetBackupsRequest $request, Server $server)
6578 */
6679 public function store (StoreBackupRequest $ request , Server $ server )
6780 {
81+ $ previous = $ this ->repository ->getBackupsGeneratedDuringTimespan ($ server ->id , 10 );
82+ if ($ previous ->count () >= 2 ) {
83+ throw new TooManyRequestsHttpException (
84+ Carbon::now ()->diffInSeconds ($ previous ->last ()->created_at ->addMinutes (10 )),
85+ 'Only two backups may be generated within a 10 minute span of time. '
86+ );
87+ }
88+
6889 $ backup = $ this ->initiateBackupService
6990 ->setIgnoredFiles ($ request ->input ('ignored ' ))
7091 ->handle ($ server , $ request ->input ('name ' ));
0 commit comments