mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-17 15:52:15 +00:00
share routes refactoring
This commit is contained in:
@@ -51,9 +51,12 @@ class Handler extends ExceptionHandler
|
||||
{
|
||||
if ($exception instanceof ModelNotFoundException) {
|
||||
if (in_array('application/json', $request->getAcceptableContentTypes())) {
|
||||
// Get ids
|
||||
$ids = implode(', ', $exception->getIds());
|
||||
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => "We couldn't find your requested item.",
|
||||
'message' => "We couldn't find the resource you requested with id $ids",
|
||||
], 404);
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ class RouteServiceProvider extends ServiceProvider
|
||||
->middleware('api')
|
||||
->group(base_path('routes/api.php'));
|
||||
|
||||
Route::prefix('api')
|
||||
Route::prefix('api/sharing')
|
||||
->middleware('api')
|
||||
->group(base_path('routes/share.php'));
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Domain\Browsing\Controllers;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
@@ -24,7 +25,7 @@ class VisitorBrowseFolderController
|
||||
public function __invoke(
|
||||
string $id,
|
||||
Share $shared,
|
||||
): array {
|
||||
): JsonResponse {
|
||||
// Check ability to access protected share record
|
||||
($this->protectShareRecord)($shared);
|
||||
|
||||
@@ -48,10 +49,10 @@ class VisitorBrowseFolderController
|
||||
// Set thumbnail links for public files
|
||||
$files->map(fn ($file) => $file->setSharedPublicUrl($shared->token));
|
||||
|
||||
return [
|
||||
return response()->json([
|
||||
'folders' => new FolderCollection($folders),
|
||||
'files' => new FilesCollection($files),
|
||||
'root' => new FolderResource($requestedFolder),
|
||||
];
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Http\Request;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
@@ -24,7 +25,7 @@ class VisitorSearchFilesAndFoldersController extends Controller
|
||||
public function __invoke(
|
||||
Request $request,
|
||||
Share $shared,
|
||||
): array {
|
||||
): JsonResponse {
|
||||
// Check ability to access protected share record
|
||||
($this->protectShareRecord)($shared);
|
||||
|
||||
@@ -70,9 +71,9 @@ class VisitorSearchFilesAndFoldersController extends Controller
|
||||
->take(3);
|
||||
|
||||
// Collect folders and files to single array
|
||||
return [
|
||||
return response()->json([
|
||||
'folders' => new FolderCollection($folders),
|
||||
'files' => new FilesCollection($files),
|
||||
];
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ namespace Domain\Files\Controllers;
|
||||
|
||||
use Gate;
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Files\Resources\FileResource;
|
||||
|
||||
/**
|
||||
@@ -14,7 +14,7 @@ class VisitorShowFileController
|
||||
{
|
||||
public function __invoke(
|
||||
Share $shared
|
||||
): Response {
|
||||
): JsonResponse {
|
||||
$file = File::whereUserId($shared->user_id)
|
||||
->whereId($shared->item_id)
|
||||
->firstOrFail();
|
||||
@@ -24,6 +24,6 @@ class VisitorShowFileController
|
||||
// Set access urls
|
||||
$file->setSharedPublicUrl($shared->token);
|
||||
|
||||
return response(new FileResource($file), 200);
|
||||
return response()->json(new FileResource($file));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,12 @@ class VisitorUploadFileChunksController extends Controller
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
return response()->json(accessDeniedError(), 403);
|
||||
}
|
||||
|
||||
// Add default parent id if missing
|
||||
if ($request->missing('parent_id')) {
|
||||
$request->merge(['parent_id' => $shared->item_id]);
|
||||
}
|
||||
|
||||
// Check access to requested directory
|
||||
|
||||
73
src/Domain/Files/Controllers/VisitorUploadFileController.php
Normal file
73
src/Domain/Files/Controllers/VisitorUploadFileController.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
namespace Domain\Files\Controllers;
|
||||
|
||||
use Str;
|
||||
use Storage;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Resources\FileResource;
|
||||
use Domain\Files\Actions\ProcessFileAction;
|
||||
use Domain\Files\Requests\UploadFileRequest;
|
||||
use Support\Demo\Actions\FakeUploadFileAction;
|
||||
use Domain\Files\Actions\StoreFileChunksAction;
|
||||
use Domain\Sharing\Actions\ProtectShareRecordAction;
|
||||
use Domain\Sharing\Actions\VerifyAccessToItemAction;
|
||||
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
|
||||
/**
|
||||
* guest user upload file into shared folder
|
||||
*/
|
||||
class VisitorUploadFileController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public ProcessFileAction $processFie,
|
||||
public StoreFileChunksAction $storeFileChunks,
|
||||
private FakeUploadFileAction $fakeUploadFile,
|
||||
private ProtectShareRecordAction $protectShareRecord,
|
||||
private VerifyAccessToItemAction $verifyAccessToItem,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws FileNotFoundException
|
||||
*/
|
||||
public function __invoke(
|
||||
UploadFileRequest $request,
|
||||
Share $shared,
|
||||
): JsonResponse {
|
||||
if (isDemoAccount()) {
|
||||
return response()->json(($this->fakeUploadFile)($request), 201);
|
||||
}
|
||||
|
||||
// Check ability to access protected share record
|
||||
($this->protectShareRecord)($shared);
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
return response()->json(accessDeniedError(), 403);
|
||||
}
|
||||
|
||||
// Add default parent id if missing
|
||||
if ($request->missing('parent_id')) {
|
||||
$request->merge(['parent_id' => $shared->item_id]);
|
||||
}
|
||||
|
||||
// Check access to requested directory
|
||||
($this->verifyAccessToItem)($request->input('parent_id'), $shared);
|
||||
|
||||
// Get file name
|
||||
$name = Str::uuid() . '.' . $request->input('extension');
|
||||
|
||||
// Put file to user directory
|
||||
Storage::disk('local')->put("files/$shared->user_id/$name", $request->file('file')->get());
|
||||
|
||||
// Process file
|
||||
$file = ($this->processFie)($request, $shared->user, $name);
|
||||
|
||||
// Set public access url
|
||||
$file->setSharedPublicUrl($shared->token);
|
||||
|
||||
return response()->json(new FileResource($file), 201);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
namespace Domain\Folders\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Folders\Actions\CreateFolderAction;
|
||||
@@ -28,11 +28,11 @@ class VisitorCreateFolderController extends Controller
|
||||
public function __invoke(
|
||||
CreateFolderRequest $request,
|
||||
Share $shared,
|
||||
): Response | array {
|
||||
): JsonResponse {
|
||||
if (isDemoAccount()) {
|
||||
$fakeFolder = ($this->fakeCreateFolder)($request);
|
||||
|
||||
return response(new FolderResource($fakeFolder), 201);
|
||||
return response()->json(new FolderResource($fakeFolder), 201);
|
||||
}
|
||||
|
||||
// Check ability to access protected share record
|
||||
@@ -40,21 +40,26 @@ class VisitorCreateFolderController extends Controller
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
return response()->json(accessDeniedError(), 403);
|
||||
}
|
||||
|
||||
// Add default parent id if missing
|
||||
if ($request->missing('parent_id')) {
|
||||
$request->merge(['parent_id' => $shared->item_id]);
|
||||
}
|
||||
|
||||
// Check access to requested directory
|
||||
($this->verifyAccessToItem)($request->parent_id, $shared);
|
||||
($this->verifyAccessToItem)($request->input('parent_id'), $shared);
|
||||
|
||||
try {
|
||||
// Create new folder
|
||||
$folder = ($this->createFolder)($request, $shared);
|
||||
|
||||
// Return new folder
|
||||
return response(new FolderResource($folder), 201);
|
||||
return response()->json(new FolderResource($folder), 201);
|
||||
} catch (InvalidUserActionException $e) {
|
||||
// Return error response
|
||||
return response([
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => $e->getMessage(),
|
||||
], 401);
|
||||
|
||||
@@ -3,6 +3,7 @@ namespace Domain\Folders\Controllers;
|
||||
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Sharing\Actions\ProtectShareRecordAction;
|
||||
use Domain\Sharing\Actions\VerifyAccessToItemAction;
|
||||
@@ -20,7 +21,7 @@ class VisitorNavigationFolderTreeController extends Controller
|
||||
|
||||
public function __invoke(
|
||||
Share $shared,
|
||||
): array {
|
||||
): JsonResponse {
|
||||
// Check ability to access protected share record
|
||||
($this->protectShareRecord)($shared);
|
||||
|
||||
@@ -34,7 +35,7 @@ class VisitorNavigationFolderTreeController extends Controller
|
||||
->sortable()
|
||||
->get(['id', 'parent_id', 'id', 'name']);
|
||||
|
||||
return [
|
||||
return response()->json([
|
||||
[
|
||||
'name' => __t('home'),
|
||||
'location' => 'public',
|
||||
@@ -42,6 +43,6 @@ class VisitorNavigationFolderTreeController extends Controller
|
||||
'isMovable' => true,
|
||||
'isOpen' => true,
|
||||
],
|
||||
];
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Domain\Homepage\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Domain\Homepage\Mail\SendContactMessage;
|
||||
@@ -14,17 +14,22 @@ class SendContactMessageController extends Controller
|
||||
*/
|
||||
public function __invoke(
|
||||
SendContactMessageRequest $request
|
||||
): Response {
|
||||
// Abort in demo mode
|
||||
abort_if(is_demo(), 201, 'Done');
|
||||
): JsonResponse {
|
||||
$message = [
|
||||
'type' => 'success',
|
||||
'message' => 'The message was successfully send',
|
||||
];
|
||||
|
||||
$contactEmail = get_settings('contact_email');
|
||||
|
||||
if ($contactEmail) {
|
||||
Mail::to($contactEmail)
|
||||
->send(new SendContactMessage($request->all()));
|
||||
// Return success in demo mode
|
||||
if (is_demo()) {
|
||||
return response()->json($message);
|
||||
}
|
||||
|
||||
return response('Done', 201);
|
||||
// Get contact mail
|
||||
if ($contactEmail = get_settings('contact_email')) {
|
||||
Mail::to($contactEmail)->send(new SendContactMessage($request->all()));
|
||||
}
|
||||
|
||||
return response()->json($message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
namespace Domain\Items\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Items\Requests\DeleteItemRequest;
|
||||
use Domain\Items\Actions\DeleteFileOrFolderAction;
|
||||
@@ -22,14 +22,19 @@ class VisitorDeleteFileOrFolderController extends Controller
|
||||
public function __invoke(
|
||||
DeleteItemRequest $request,
|
||||
Share $shared,
|
||||
): Response {
|
||||
): JsonResponse {
|
||||
$message = [
|
||||
'type' => 'success',
|
||||
'message' => 'Items was successfully deleted.',
|
||||
];
|
||||
|
||||
if (isDemoAccount()) {
|
||||
abort(204, 'Done.');
|
||||
return response()->json($message, 204);
|
||||
}
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
return response()->json(accessDeniedError(), 403);
|
||||
}
|
||||
|
||||
foreach ($request->input('items') as $file) {
|
||||
@@ -47,6 +52,6 @@ class VisitorDeleteFileOrFolderController extends Controller
|
||||
($this->deleteFileOrFolder)($file, $file['id'], $shared);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
return response()->json($message, 204);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
namespace Domain\Items\Controllers;
|
||||
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Items\Requests\MoveItemRequest;
|
||||
use Domain\Items\Actions\MoveFileOrFolderAction;
|
||||
@@ -23,14 +23,24 @@ class VisitorMoveFileOrFolderController extends Controller
|
||||
public function __invoke(
|
||||
MoveItemRequest $request,
|
||||
Share $shared,
|
||||
): Response {
|
||||
): JsonResponse {
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => 'Items was successfully moved.',
|
||||
];
|
||||
|
||||
if (isDemoAccount()) {
|
||||
abort(204, 'Done.');
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
return response()->json(accessDeniedError(), 403);
|
||||
}
|
||||
|
||||
// Add default parent id if missing
|
||||
if ($request->missing('to_id')) {
|
||||
$request->merge(['to_id' => $shared->item_id]);
|
||||
}
|
||||
|
||||
foreach ($request->input('items') as $item) {
|
||||
@@ -53,6 +63,6 @@ class VisitorMoveFileOrFolderController extends Controller
|
||||
|
||||
($this->moveFileOrFolder)($request, $shared);
|
||||
|
||||
return response('Done.', 204);
|
||||
return response()->json($successMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
namespace Domain\Items\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Resources\FileResource;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
@@ -29,15 +29,15 @@ class VisitorRenameFileOrFolderController extends Controller
|
||||
RenameItemRequest $request,
|
||||
string $id,
|
||||
Share $shared,
|
||||
): Response | array {
|
||||
): JsonResponse {
|
||||
// Return fake renamed item in demo
|
||||
if (isDemoAccount()) {
|
||||
return ($this->fakeRenameFileOrFolder)($request, $id);
|
||||
return response()->json(($this->fakeRenameFileOrFolder)($request, $id));
|
||||
}
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403);
|
||||
return response()->json(accessDeniedError(), 403);
|
||||
}
|
||||
|
||||
// Get file|folder item
|
||||
@@ -64,10 +64,10 @@ class VisitorRenameFileOrFolderController extends Controller
|
||||
}
|
||||
|
||||
if ($request->input('type') === 'folder') {
|
||||
return response(new FolderResource($item), 201);
|
||||
return response()->json(new FolderResource($item), 201);
|
||||
}
|
||||
|
||||
// Return updated item
|
||||
return response(new FileResource($item), 201);
|
||||
return response()->json(new FileResource($item), 201);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,16 +2,17 @@
|
||||
namespace Domain\Pages\Controllers;
|
||||
|
||||
use Domain\Pages\Models\Page;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Pages\Resources\PageResource;
|
||||
|
||||
class PagesController extends Controller
|
||||
class ShowPageController extends Controller
|
||||
{
|
||||
/**
|
||||
* Get single page content
|
||||
*/
|
||||
public function show(Page $page): PageResource
|
||||
public function __invoke(Page $page): JsonResponse
|
||||
{
|
||||
return new PageResource($page);
|
||||
return response()->json(new PageResource($page));
|
||||
}
|
||||
}
|
||||
@@ -18,8 +18,10 @@ class VisitorRemoteUploadFileController extends Controller
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(RemoteUploadRequest $request, ?Share $shared = null): JsonResponse
|
||||
{
|
||||
public function __invoke(
|
||||
RemoteUploadRequest $request,
|
||||
?Share $shared = null,
|
||||
): JsonResponse {
|
||||
$successMessage = [
|
||||
'type' => 'success',
|
||||
'message' => 'Files was successfully uploaded.',
|
||||
@@ -30,7 +32,12 @@ class VisitorRemoteUploadFileController extends Controller
|
||||
|
||||
// Check shared permission
|
||||
if (is_visitor($shared)) {
|
||||
abort(403, "You don't have access to this item");
|
||||
return response()->json(accessDeniedError(), 403);
|
||||
}
|
||||
|
||||
// Add default parent id if missing
|
||||
if ($request->missing('parent_id')) {
|
||||
$request->merge(['parent_id' => $shared->item_id]);
|
||||
}
|
||||
|
||||
// Check access to requested directory
|
||||
|
||||
@@ -5,14 +5,19 @@ use Domain\Sharing\Models\Share;
|
||||
|
||||
class ProtectShareRecordAction
|
||||
{
|
||||
private string $message = "Sorry, you don't have permission";
|
||||
|
||||
public function __invoke(
|
||||
Share $shared
|
||||
): void {
|
||||
if ($shared->is_protected) {
|
||||
$errorResponse = [
|
||||
'type' => 'error',
|
||||
'message' => "Sorry, you don't have permission",
|
||||
];
|
||||
|
||||
if (! request()->hasCookie('share_session')) {
|
||||
abort(403, $this->message);
|
||||
abort(
|
||||
response()->json($errorResponse, 403)
|
||||
);
|
||||
}
|
||||
|
||||
// Get shared session
|
||||
@@ -22,12 +27,16 @@ class ProtectShareRecordAction
|
||||
|
||||
// Check if is requested same share record
|
||||
if ($share_session->token !== $shared->token) {
|
||||
abort(403, $this->message);
|
||||
abort(
|
||||
response()->json($errorResponse, 403)
|
||||
);
|
||||
}
|
||||
|
||||
// Check if share record was authenticated previously via ShareController@authenticate
|
||||
if (! $share_session->authenticated) {
|
||||
abort(403, $this->message);
|
||||
abort(
|
||||
response()->json($errorResponse, 403)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@ class ShareController extends Controller
|
||||
*/
|
||||
public function show(
|
||||
Share $share,
|
||||
): ShareResource {
|
||||
return new ShareResource($share);
|
||||
): JsonResponse {
|
||||
return response()->json(new ShareResource($share));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,8 +4,6 @@ namespace Domain\Sharing\Controllers;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
|
||||
class WebCrawlerOpenGraphController extends Controller
|
||||
{
|
||||
@@ -14,7 +12,7 @@ class WebCrawlerOpenGraphController extends Controller
|
||||
*/
|
||||
public function __invoke(
|
||||
Share $share
|
||||
): Application|Factory|View {
|
||||
): View {
|
||||
$namespace = match ($share->type) {
|
||||
'folder' => 'Domain\\Folders\\Models\\Folder',
|
||||
'file' => 'Domain\\Files\\Models\\File',
|
||||
|
||||
Reference in New Issue
Block a user