@@ -52,31 +52,32 @@ public function __construct(BackupRepository $repository, BackupManager $backupM
5252 public function __invoke (Request $ request , string $ backup )
5353 {
5454 // Get the size query parameter.
55- $ size = $ request ->query ('size ' , null );
56- if (is_null ($ size )) {
57- throw new BadRequestHttpException ('Missing size query parameter. ' );
55+ $ size = ( int ) $ request ->query ('size ' );
56+ if (empty ($ size )) {
57+ throw new BadRequestHttpException ('A non-empty " size" query parameter must be provided . ' );
5858 }
5959
60- /** @var \Pterodactyl\Models\Backup $model */
61- $ model = Backup::query ()->where ([[ 'uuid ' , ' = ' , $ backup ]] )->firstOrFail ();
60+ /** @var \Pterodactyl\Models\Backup $backup */
61+ $ backup = Backup::query ()->where ('uuid ' , $ backup )->firstOrFail ();
6262
6363 // Prevent backups that have already been completed from trying to
6464 // be uploaded again.
65- if (! is_null ($ model ->completed_at )) {
65+ if (! is_null ($ backup ->completed_at )) {
6666 return new JsonResponse ([], JsonResponse::HTTP_CONFLICT );
6767 }
6868
6969 // Ensure we are using the S3 adapter.
7070 $ adapter = $ this ->backupManager ->adapter ();
7171 if (! $ adapter instanceof AwsS3Adapter) {
72- throw new BadRequestHttpException ('Backups are not using the s3 storage driver ' );
72+ throw new BadRequestHttpException ('The configured backup adapter is not an S3 compatiable adapter. ' );
7373 }
7474
7575 // The path where backup will be uploaded to
76- $ path = sprintf ('%s/%s.tar.gz ' , $ model ->server ->uuid , $ model ->uuid );
76+ $ path = sprintf ('%s/%s.tar.gz ' , $ backup ->server ->uuid , $ backup ->uuid );
7777
7878 // Get the S3 client
7979 $ client = $ adapter ->getClient ();
80+ $ expires = CarbonImmutable::now ()->addMinutes (30 );
8081
8182 // Params for generating the presigned urls
8283 $ params = [
@@ -88,57 +89,27 @@ public function __invoke(Request $request, string $backup)
8889 // Execute the CreateMultipartUpload request
8990 $ result = $ client ->execute ($ client ->getCommand ('CreateMultipartUpload ' , $ params ));
9091
91- // Get the UploadId from the CreateMultipartUpload request,
92- // this is needed to create the other presigned urls
93- $ uploadId = $ result ->get ('UploadId ' );
94-
95- // Create a CompleteMultipartUpload presigned url
96- $ completeMultipartUpload = $ client ->createPresignedRequest (
97- $ client ->getCommand (
98- 'CompleteMultipartUpload ' ,
99- array_merge ($ params , [
100- 'UploadId ' => $ uploadId ,
101- ])
102- ),
103- CarbonImmutable::now ()->addMinutes (30 )
104- );
105-
106- // Create a AbortMultipartUpload presigned url
107- $ abortMultipartUpload = $ client ->createPresignedRequest (
108- $ client ->getCommand (
109- 'AbortMultipartUpload ' ,
110- array_merge ($ params , [
111- 'UploadId ' => $ uploadId ,
112- ])
113- ),
114- CarbonImmutable::now ()->addMinutes (45 )
115- );
116-
117- // Calculate the number of parts needed to upload the backup
118- $ partCount = (int ) $ size / (self ::PART_SIZE );
92+ // Get the UploadId from the CreateMultipartUpload request, this is needed to create
93+ // the other presigned urls.
94+ $ params ['UploadId ' ] = $ result ->get ('UploadId ' );
11995
12096 // Create as many UploadPart presigned urls as needed
12197 $ parts = [];
122- for ($ i = 0 ; $ i < $ partCount ; $ i ++) {
123- $ part = $ client ->createPresignedRequest (
124- $ client ->getCommand (
125- 'UploadPart ' ,
126- array_merge ($ params , [
127- 'UploadId ' => $ uploadId ,
128- 'PartNumber ' => $ i + 1 ,
129- ])
130- ),
131- CarbonImmutable::now ()->addMinutes (30 )
132- );
133-
134- array_push ($ parts , $ part ->getUri ()->__toString ());
98+ for ($ i = 0 ; $ i < ($ size / self ::PART_SIZE ); $ i ++) {
99+ $ parts [] = $ client ->createPresignedRequest (
100+ $ client ->getCommand ('UploadPart ' , array_merge ($ params , ['PartNumber ' => $ i + 1 ])), $ expires
101+ )->getUri ()->__toString ();
135102 }
136103
137104 return new JsonResponse ([
138- 'complete_multipart_upload ' => $ completeMultipartUpload ->getUri ()->__toString (),
139- 'abort_multipart_upload ' => $ abortMultipartUpload ->getUri ()->__toString (),
140105 'parts ' => $ parts ,
141106 'part_size ' => self ::PART_SIZE ,
107+ 'complete_multipart_upload ' => $ client ->createPresignedRequest (
108+ $ client ->getCommand ('CompleteMultipartUpload ' , $ params ), $ expires
109+ )->getUri ()->__toString (),
110+ 'abort_multipart_upload ' => $ client ->createPresignedRequest (
111+ $ client ->getCommand ('AbortMultipartUpload ' , $ params ), $ expires ->addMinutes (15 )
112+ )->getUri ()->__toString (),
142113 ]);
143114 }
144115}
0 commit comments