mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 16:22:14 +00:00
create share api update
This commit is contained in:
@@ -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=38562970e9950381",
|
||||
"/chunks/platform.js": "/chunks/platform.js?id=6c6ff48803c933ab",
|
||||
"/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",
|
||||
|
||||
@@ -209,15 +209,15 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
id: undefined,
|
||||
isExpiration: false,
|
||||
isEmailSharing: false,
|
||||
shareOptions: {
|
||||
isPassword: false,
|
||||
isPassword: undefined,
|
||||
expiration: undefined,
|
||||
password: undefined,
|
||||
permission: undefined,
|
||||
type: undefined,
|
||||
id: undefined,
|
||||
emails: undefined,
|
||||
},
|
||||
pickedItem: undefined,
|
||||
@@ -244,7 +244,7 @@ export default {
|
||||
|
||||
// Send request to get share link
|
||||
axios
|
||||
.post(`/api/share`, this.shareOptions)
|
||||
.post(`/api/share/${this.id}`, this.shareOptions)
|
||||
.then((response) => {
|
||||
// End loading
|
||||
this.isGeneratedShared = true
|
||||
@@ -278,13 +278,14 @@ export default {
|
||||
this.pickedItem = args.item
|
||||
|
||||
this.shareOptions.type = args.item.data.type
|
||||
this.shareOptions.id = args.item.data.id
|
||||
this.id = args.item.data.id
|
||||
})
|
||||
|
||||
// Close popup
|
||||
events.$on('popup:close', () => {
|
||||
// Restore data
|
||||
setTimeout(() => {
|
||||
this.id = undefined
|
||||
this.isGeneratedShared = false
|
||||
this.isExpiration = false
|
||||
this.isEmailSharing = false
|
||||
@@ -294,7 +295,6 @@ export default {
|
||||
password: undefined,
|
||||
permission: undefined,
|
||||
type: undefined,
|
||||
id: undefined,
|
||||
emails: undefined,
|
||||
}
|
||||
}, 150)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
|
||||
use Domain\Sharing\Controllers\ShareItemController;
|
||||
use Domain\Zip\Controllers\ZipController;
|
||||
use Domain\Pages\Controllers\PagesController;
|
||||
use Domain\Sharing\Controllers\ShareController;
|
||||
@@ -72,6 +73,7 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||
Route::get('/share/{token}/qr', GetShareLinkViaQrCodeController::class);
|
||||
Route::post('/share/{token}/email', ShareViaEmailController::class);
|
||||
Route::apiResource('/share', ShareController::class);
|
||||
Route::post('/share/{id}', ShareItemController::class);
|
||||
|
||||
// Favourites
|
||||
Route::apiResource('/folders/favourites', FavouriteController::class);
|
||||
|
||||
@@ -6,8 +6,6 @@ use Domain\Sharing\Models\Share;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Sharing\Resources\ShareResource;
|
||||
use Domain\Sharing\Actions\SendViaEmailAction;
|
||||
use Domain\Sharing\Requests\CreateShareRequest;
|
||||
use Domain\Sharing\Requests\UpdateShareRequest;
|
||||
|
||||
class ShareController extends Controller
|
||||
@@ -21,40 +19,6 @@ class ShareController extends Controller
|
||||
return new ShareResource($share);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate file share link
|
||||
*/
|
||||
public function store(
|
||||
CreateShareRequest $request,
|
||||
SendViaEmailAction $sendLinkToEmailAction,
|
||||
): Response {
|
||||
$item = get_item($request->input('type'), $request->input('id'));
|
||||
|
||||
$this->authorize('owner', $item);
|
||||
|
||||
$shared = Share::create([
|
||||
'password' => $request->has('password') ? bcrypt($request->input('password')) : null,
|
||||
'type' => $request->input('type') === 'folder' ? 'folder' : 'file',
|
||||
'is_protected' => $request->input('isPassword'),
|
||||
'permission' => $request->input('permission') ?? null,
|
||||
'expire_in' => $request->input('expiration') ?? null,
|
||||
'item_id' => $request->input('id'),
|
||||
'user_id' => Auth::id(),
|
||||
]);
|
||||
|
||||
// Send shared link via email
|
||||
if ($request->has('emails')) {
|
||||
$sendLinkToEmailAction->onQueue()->execute(
|
||||
emails: $request->input('emails'),
|
||||
token: $shared->token,
|
||||
user: $shared->user,
|
||||
);
|
||||
}
|
||||
|
||||
// Return created shared record
|
||||
return response(new ShareResource($shared), 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update sharing
|
||||
*/
|
||||
|
||||
68
src/Domain/Sharing/Controllers/ShareItemController.php
Normal file
68
src/Domain/Sharing/Controllers/ShareItemController.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Sharing\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Domain\Sharing\Actions\SendViaEmailAction;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Sharing\Requests\CreateShareRequest;
|
||||
use Domain\Sharing\Resources\ShareResource;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class ShareItemController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public SendViaEmailAction $sendLinkToEmailAction,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Generate file share link
|
||||
*/
|
||||
public function __invoke(
|
||||
CreateShareRequest $request,
|
||||
string $id,
|
||||
): JsonResponse {
|
||||
$item = get_item($request->input('type'), $id);
|
||||
|
||||
// Check if item is currently shared
|
||||
if ($item->shared()->exists()) {
|
||||
return response()->json([
|
||||
'type' => 'error',
|
||||
'message' => 'The item is currently shared.',
|
||||
], 422);
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
$this->authorize('owner', $item);
|
||||
|
||||
$shared = Share::create([
|
||||
'password' => $request->has('password') ? bcrypt($request->input('password')) : null,
|
||||
'type' => $request->input('type') === 'folder' ? 'folder' : 'file',
|
||||
'is_protected' => $request->input('isPassword') ?? false,
|
||||
'permission' => $request->input('permission') ?? null,
|
||||
'expire_in' => $request->input('expiration') ?? null,
|
||||
'item_id' => $item->id,
|
||||
'user_id' => auth()->id(),
|
||||
]);
|
||||
|
||||
// Send shared link via email
|
||||
if ($request->has('emails')) {
|
||||
($this->sendLinkToEmailAction)->onQueue()->execute(
|
||||
emails: $request->input('emails'),
|
||||
token: $shared->token,
|
||||
user: $shared->user,
|
||||
);
|
||||
}
|
||||
|
||||
// Return created shared record
|
||||
return response()->json(new ShareResource($shared), 201);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Sharing\Requests;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -24,12 +25,12 @@ class CreateShareRequest extends FormRequest
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'id' => 'required|string',
|
||||
'isPassword' => 'required|boolean',
|
||||
'isPassword' => 'sometimes|boolean',
|
||||
'password' => 'required_if:isPassword,true',
|
||||
'type' => 'required|string',
|
||||
'expiration' => 'integer|nullable',
|
||||
'permission' => 'string',
|
||||
'password' => 'string',
|
||||
'expiration' => 'sometimes|integer',
|
||||
'permission' => 'sometimes|string',
|
||||
'emails' => 'sometimes|array',
|
||||
'emails.*' => 'email',
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user