diff --git a/public/mix-manifest.json b/public/mix-manifest.json index f4315922..c03e5471 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -62,7 +62,7 @@ "/chunks/settings-password.js": "/chunks/settings-password.js?id=d00bf503d8126dc4", "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=092e324aad54656b", "/chunks/billing.js": "/chunks/billing.js?id=115c25478cee576d", - "/chunks/platform.js": "/chunks/platform.js?id=6c6ff48803c933ab", + "/chunks/platform.js": "/chunks/platform.js?id=e0dcb4aa27710e07", "/chunks/files.js": "/chunks/files.js?id=a74bc8acc7ea876a", "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=c6ed26eaace65f01", "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=6adbb309c700eaf7", diff --git a/src/Domain/Sharing/Controllers/GetShareLinkViaQrCodeController.php b/src/Domain/Sharing/Controllers/GetShareLinkViaQrCodeController.php index 7232b8af..5a58f53e 100644 --- a/src/Domain/Sharing/Controllers/GetShareLinkViaQrCodeController.php +++ b/src/Domain/Sharing/Controllers/GetShareLinkViaQrCodeController.php @@ -28,6 +28,6 @@ class GetShareLinkViaQrCodeController extends Controller $qrCode = trim(substr($svg, strpos($svg, "\n") + 1)); // Return qr code - return response($qrCode, 201); + return response($qrCode); } } diff --git a/src/Domain/Sharing/Controllers/ShareController.php b/src/Domain/Sharing/Controllers/ShareController.php index efc88f53..ae60e354 100644 --- a/src/Domain/Sharing/Controllers/ShareController.php +++ b/src/Domain/Sharing/Controllers/ShareController.php @@ -1,7 +1,9 @@ type, $share->item_id); + + // If sharing folder, check permission attribute + if ($item instanceof Folder && $request->missing('permission')) { + return response()->json([ + 'type' => 'error', + 'message' => 'The permission field for folder is required.', + ], 422); + } + $share->update([ - 'permission' => $request->input('permission'), - 'is_protected' => $request->input('protected'), 'expire_in' => $request->input('expiration') ?? null, - 'password' => $request->input('password') + 'permission' => $request->input('permission'), + 'is_protected' => $request->boolean('protected'), + 'password' => $request->has('password') ? bcrypt($request->input('password')) : $share->password, ]); // Return shared record - return new ShareResource($share); + return response()->json(new ShareResource($share)); } /** * Delete sharing item */ - public function destroy(): Response + public function destroy(RevokeSharesRequest $request): JsonResponse { - foreach (request()->input('tokens') as $token) { + foreach ($request->input('tokens') as $token) { // Delete share record - Share::where('token', $token) + $record = Share::where('token', $token) ->where('user_id', Auth::id()) - ->firstOrFail() - ->delete(); + ->first(); + + $record?->delete(); } - return response('Done.', 204); + return response()->json([ + 'type' => 'success', + 'message' => 'The share links was revoked successfully.', + ]); } } diff --git a/src/Domain/Sharing/Controllers/ShareViaEmailController.php b/src/Domain/Sharing/Controllers/ShareViaEmailController.php index cd4a5bdc..7fbeb4eb 100644 --- a/src/Domain/Sharing/Controllers/ShareViaEmailController.php +++ b/src/Domain/Sharing/Controllers/ShareViaEmailController.php @@ -2,8 +2,8 @@ namespace Domain\Sharing\Controllers; use Auth; -use Illuminate\Http\Request; -use Illuminate\Http\Response; +use Domain\Sharing\Requests\ShareByEmailRequest; +use Illuminate\Http\JsonResponse; use App\Http\Controllers\Controller; use Domain\Sharing\Actions\SendViaEmailAction; @@ -15,15 +15,18 @@ class ShareViaEmailController extends Controller } public function __invoke( - Request $request, + ShareByEmailRequest $request, string $token, - ): Response { + ): JsonResponse { ($this->sendLinkToEmailAction)->onQueue()->execute( emails: $request->input('emails'), token: $token, user: Auth::user(), ); - return response('Done.', 204); + return response()->json([ + 'type' => 'success', + 'message' => 'The share link was shared via email successfully.', + ]); } } diff --git a/src/Domain/Sharing/Requests/RevokeSharesRequest.php b/src/Domain/Sharing/Requests/RevokeSharesRequest.php new file mode 100644 index 00000000..faa0451e --- /dev/null +++ b/src/Domain/Sharing/Requests/RevokeSharesRequest.php @@ -0,0 +1,30 @@ + 'required|array', + 'tokens.*' => 'string', + ]; + } +} diff --git a/src/Domain/Sharing/Requests/ShareByEmailRequest.php b/src/Domain/Sharing/Requests/ShareByEmailRequest.php new file mode 100644 index 00000000..09116cd2 --- /dev/null +++ b/src/Domain/Sharing/Requests/ShareByEmailRequest.php @@ -0,0 +1,31 @@ + 'required|array', + 'emails.*' => 'email', + ]; + } +} diff --git a/src/Domain/Sharing/Requests/UpdateShareRequest.php b/src/Domain/Sharing/Requests/UpdateShareRequest.php index af7ab47a..a5edae6a 100644 --- a/src/Domain/Sharing/Requests/UpdateShareRequest.php +++ b/src/Domain/Sharing/Requests/UpdateShareRequest.php @@ -1,7 +1,6 @@ 'required|boolean', - 'permission' => 'nullable|string', - 'expiration' => 'integer|nullable', - 'password' => 'string', + 'password' => 'required_if:protected,true|string', + 'permission' => 'sometimes|string', + 'expiration' => 'sometimes|integer', ]; } }