- Frontend restriction shared page

This commit is contained in:
Čarodej
2022-01-06 11:05:49 +01:00
parent 05f6023053
commit 8d53ed1531
17 changed files with 188 additions and 36 deletions
@@ -2,6 +2,7 @@
namespace Domain\Browsing\Controllers;
use Domain\Files\Models\File;
use Domain\Folders\Resources\FolderResource;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Domain\Files\Resources\FilesCollection;
@@ -30,6 +31,7 @@ class VisitorBrowseFolderController
// Check if user can get directory
($this->verifyAccessToItem)($id, $shared);
// Get requested folder
$requestedFolder = Folder::findOrFail($id);
// Get files and folders
@@ -49,7 +51,7 @@ class VisitorBrowseFolderController
return [
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
'root' => $requestedFolder,
'root' => new FolderResource($requestedFolder),
];
}
}
@@ -1,6 +1,7 @@
<?php
namespace Domain\Sharing\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;
use Domain\Files\Models\File;
use Domain\Sharing\Models\Share;
@@ -16,12 +17,16 @@ class SharePublicIndexController extends Controller
*/
public function __construct(
public RecordDownloadAction $recordDownload,
) {
}
) {}
public function __invoke(
Share $share,
): View | StreamedResponse {
): View | StreamedResponse | RedirectResponse {
// Check if user can see shared record
if (! $share->user->canVisitShared()) {
return redirect('/temporary-unavailable');
}
// Delete share_session if exist
if ($share->is_protected) {
cookie()->queue('share_session', '', -1);
@@ -1,7 +1,9 @@
<?php
namespace Domain\Sharing\Controllers;
use Illuminate\View\View;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
@@ -12,7 +14,8 @@ class WebCrawlerOpenGraphController extends Controller
*/
public function __invoke(
Share $share
): View {
): Application|Factory|View
{
$namespace = match ($share->type) {
'folder' => 'Domain\\Folders\\Models\\Folder',
'file' => 'Domain\\Files\\Models\\File',