routes response refactoring

This commit is contained in:
Čarodej
2022-05-16 14:14:48 +02:00
parent f66982b3ec
commit e87e2ec4e3
85 changed files with 534 additions and 316 deletions

View File

@@ -1,6 +1,6 @@
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:x5KqtYx90b6qdRZ0tzl1LunUYNlu6uXZATY3oKTMn1M=
APP_KEY=base64:qBL7kIM+I1U3jdkTiAelfVgVOLT3hfu0iOr8bUz2k1I=
APP_DEBUG=true
APP_URL=http://localhost
APP_DEMO=false

View File

@@ -54,7 +54,7 @@
"/chunks/demo.js": "/chunks/demo.js?id=355303e4230cb5ae",
"/chunks/successfully-email-verified.js": "/chunks/successfully-email-verified.js?id=c26cb144101e7c79",
"/chunks/successfully-email-send.js": "/chunks/successfully-email-send.js?id=170d814982e1c475",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=1631a0f4a4ad25c2",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=a837482b53d989dc",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=2af6073efe54c560",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=ff8954243e86c1e1",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=2f0401ee2fc148c4",
@@ -63,7 +63,7 @@
"/chunks/settings-password.js": "/chunks/settings-password.js?id=d00bf503d8126dc4",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=ecfee7f7e98204f8",
"/chunks/billing.js": "/chunks/billing.js?id=dd217d680baafb84",
"/chunks/platform.js": "/chunks/platform.js?id=a31d808015c4e7ea",
"/chunks/platform.js": "/chunks/platform.js?id=90d43ec56b62c721",
"/chunks/files.js": "/chunks/files.js?id=5f29f35c280e680b",
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=6f43aea38e0927bc",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=6e819ffe88a0fd1d",

View File

@@ -277,7 +277,7 @@ export default {
axios
.get(`/api/share/${this.shareOptions.token}/qr`)
.then((response) => {
this.qrCode = response.data
this.qrCode = response.data.data.svg
})
.catch(() => this.$isSomethingWrong())
},

View File

@@ -61,8 +61,8 @@ const actions = {
axios
.get(`/api/socialite/${provider}/redirect`)
.then((response) => {
if (response.data.url) {
window.location.href = response.data.url
if (response.data.data.url) {
window.location.href = response.data.data.url
}
})
.catch(() => this.$isSomethingWrong())

View File

@@ -320,7 +320,7 @@ export default {
.catch((error) => {
if (error.response.status == 404) {
this.$refs.log_in.setErrors({
'E-Mail': [error.response.data],
'E-Mail': [error.response.data.message],
})
}

View File

@@ -4,6 +4,8 @@ namespace App\Socialite\Controllers;
use App\Users\Models\User;
use App\Users\DTO\CreateUserData;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Laravel\Socialite\Facades\Socialite;
use App\Users\Actions\CreateNewUserAction;
use Illuminate\Contracts\Auth\StatefulGuard;
@@ -21,8 +23,9 @@ class SocialiteCallbackController extends Controller
/**
* @throws MeteredBillingPlanDoesntExist
*/
public function __invoke($provider)
{
public function __invoke(
$provider
): JsonResponse|RedirectResponse {
$isAllowedRegistration = intval(get_settings('registration'));
// Get socialite user
@@ -52,7 +55,7 @@ class SocialiteCallbackController extends Controller
// TODO: redirect to the error page
if ($plan->doesntExist()) {
return response([
return response()->json([
'type' => 'error',
'message' => 'User registrations are temporarily disabled',
], 409);
@@ -61,7 +64,7 @@ class SocialiteCallbackController extends Controller
// Check if account registration is enabled
if (! $isAllowedRegistration) {
return response([
return response()->json([
'type' => 'error',
'message' => 'User registration is not allowed',
], 401);

View File

@@ -1,17 +1,26 @@
<?php
namespace App\Socialite\Controllers;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;
class SocialiteRedirectController extends Controller
{
public function __invoke($provider)
{
$url = Socialite::driver($provider)->stateless()->redirect()->getTargetUrl();
public function __invoke(
string $provider
): JsonResponse {
$url = Socialite::driver($provider)
->stateless()
->redirect()
->getTargetUrl();
return response()->json([
'url' => $url,
'type' => 'success',
'message' => 'The user was successfully verified',
'data' => [
'url' => $url,
],
]);
}
}

View File

@@ -1,8 +1,8 @@
<?php
namespace App\Users\Controllers\Account;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Users\Resources\UserResource;
class AccountDetailsController extends Controller
@@ -10,10 +10,8 @@ class AccountDetailsController extends Controller
/**
* Get all user data for frontend
*/
public function __invoke(): UserResource
public function __invoke(): JsonResponse
{
return new UserResource(
Auth::user()
);
return response()->json(new UserResource(auth()->user()));
}
}

View File

@@ -1,15 +1,15 @@
<?php
namespace App\Users\Controllers\Account;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\JsonResponse;
use App\Users\Resources\UserStorageResource;
class StorageCapacityController
{
public function __invoke(): UserStorageResource
public function __invoke(): JsonResponse
{
return new UserStorageResource(
Auth::user()
return response()->json(
new UserStorageResource(auth()->user())
);
}
}

View File

@@ -14,9 +14,9 @@ class AccountAccessTokenController extends Controller
/**
* Get all user tokens
*/
public function index(): Response
public function index(): JsonResponse
{
return response(
return response()->json(
Auth::user()->tokens()->get()
);
}
@@ -24,8 +24,9 @@ class AccountAccessTokenController extends Controller
/**
* Create user tokens
*/
public function store(CreateAccessTokenRequest $request): JsonResponse
{
public function store(
CreateAccessTokenRequest $request
): JsonResponse {
if (isDemoAccount()) {
return response()->json([
'plainTextToken' => Str::random(40),
@@ -41,8 +42,9 @@ class AccountAccessTokenController extends Controller
/**
* Delete user token
*/
public function destroy(PersonalAccessToken $token): JsonResponse
{
public function destroy(
PersonalAccessToken $token
): JsonResponse {
$successMessage = [
'type' => 'success',
'message' => 'The token was successfully deleted.',
@@ -61,6 +63,6 @@ class AccountAccessTokenController extends Controller
$token->delete();
return response()->json($successMessage, 200);
return response()->json($successMessage);
}
}

View File

@@ -13,8 +13,9 @@ class AuthenticateAndReturnBearerTokenController extends Controller
/**
* @throws ValidationException
*/
public function __invoke(LoginUserRequest $request): JsonResponse
{
public function __invoke(
LoginUserRequest $request
): JsonResponse {
// Get user
$user = User::where('email', $request->input('email'))
->firstOrFail();

View File

@@ -17,8 +17,9 @@ class RegisterUserController extends Controller
) {
}
public function __invoke(RegisterUserRequest $request): JsonResponse
{
public function __invoke(
RegisterUserRequest $request
): JsonResponse {
// Check if account registration is enabled
if (! intval(get_settings('registration'))) {
return response()->json([

View File

@@ -1,9 +1,9 @@
<?php
namespace App\Users\Controllers;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Illuminate\Database\Eloquent\ModelNotFoundException;
class GetAvatarController
{
@@ -12,10 +12,10 @@ class GetAvatarController
*/
public function __invoke(
string $basename
): StreamedResponse | Response {
): StreamedResponse {
// Check if file exist
if (! Storage::exists("/avatars/$basename")) {
return response('File not found', 404);
throw new ModelNotFoundException();
}
// Return avatar

View File

@@ -13,7 +13,7 @@ class GetDashboardDataController extends Controller
public function __invoke(): JsonResponse
{
// Get bandwidth data
list($upload, $download, $uploadTotal, $downloadTotal, $storageUsage) = $this->getDiskData();
[$upload, $download, $uploadTotal, $downloadTotal, $storageUsage] = $this->getDiskData();
// Get total earnings from transactions
$totalEarnings = DB::table('transactions')

View File

@@ -1,13 +1,14 @@
<?php
namespace Domain\Admin\Controllers\Dashboard;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use VueFileManager\Subscription\Domain\Transactions\Models\Transaction;
use VueFileManager\Subscription\Domain\Transactions\Resources\TransactionCollection;
class GetLatestTransactionsController extends Controller
{
public function __invoke(): TransactionCollection
public function __invoke(): JsonResponse
{
$transactions = Transaction::sortable([
'created_at' => 'desc',
@@ -15,6 +16,6 @@ class GetLatestTransactionsController extends Controller
->take(5)
->get();
return new TransactionCollection($transactions);
return response()->json(new TransactionCollection($transactions));
}
}

View File

@@ -2,12 +2,13 @@
namespace Domain\Admin\Controllers\Dashboard;
use App\Users\Models\User;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Users\Resources\UsersCollection;
class GetNewbiesController extends Controller
{
public function __invoke(): UsersCollection
public function __invoke(): JsonResponse
{
$users = User::sortable([
'created_at' => 'desc',
@@ -15,6 +16,6 @@ class GetNewbiesController extends Controller
->take(5)
->get();
return new UsersCollection($users);
return response()->json(new UsersCollection($users));
}
}

View File

@@ -2,6 +2,7 @@
namespace Domain\Admin\Controllers\Users;
use App\Users\Models\User;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Users\Resources\UserResource;
use Domain\Admin\Requests\ChangeRoleRequest;
@@ -11,15 +12,15 @@ class ChangeUserRoleController extends Controller
public function __invoke(
ChangeRoleRequest $request,
User $user,
): UserResource {
): JsonResponse {
if (isDemoAccount()) {
return new UserResource($user);
return response()->json(new UserResource($user));
}
// Update user role
$user->role = $request->input('attributes.role');
$user->update();
return new UserResource($user);
return response()->json(new UserResource($user));
}
}

View File

@@ -2,6 +2,7 @@
namespace Domain\Admin\Controllers\Users;
use App\Users\Models\User;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Users\Resources\UserStorageResource;
use Domain\Admin\Requests\ChangeStorageCapacityRequest;
@@ -14,10 +15,10 @@ class ChangeUserStorageCapacityController extends Controller
public function __invoke(
ChangeStorageCapacityRequest $request,
User $user,
): UserStorageResource {
): JsonResponse {
// Abort in demo mode
if (isDemoAccount()) {
return new UserStorageResource($user);
return response()->json(new UserStorageResource($user));
}
$user
@@ -26,6 +27,6 @@ class ChangeUserStorageCapacityController extends Controller
$request->input('attributes')
);
return new UserStorageResource($user);
return response()->json(new UserStorageResource($user));
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Admin\Controllers\Users;
use App\Users\Models\User;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Domain\Admin\Requests\DeleteUserRequest;
@@ -17,21 +17,39 @@ class DeleteUserController extends Controller
DeleteUserRequest $request,
User $user,
DeleteUserDataAction $deleteUserData,
): Response {
): JsonResponse {
if (is_demo()) {
return response('Done.', 204);
return response()->json([
'type' => 'success',
'message' => 'The user was successfully deleted',
]);
}
if ($user->subscription && $user->subscription->active()) {
abort(202, "You can\'t delete this account since user has active subscription.");
abort(
response()->json([
'type' => 'error',
'message' => "You can\'t delete this account since user has active subscription.",
], 202)
);
}
if ($user->id === Auth::id()) {
abort(406, "You can\'t delete your account");
abort(
response()->json([
'type' => 'error',
'message' => "You can\'t delete your account",
], 406)
);
}
if (trim($user->settings->name) !== $request->input('name')) {
abort(403, 'The name you typed is wrong!');
abort(
response()->json([
'type' => 'error',
'message' => 'The name you typed is wrong!',
], 403)
);
}
$user->delete();
@@ -39,6 +57,9 @@ class DeleteUserController extends Controller
// Delete all user data
($deleteUserData)($user);
return response('Done.', 204);
return response()->json([
'type' => 'success',
'message' => 'The user was successfully deleted',
]);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Admin\Controllers\Users;
use App\Users\Models\User;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Password;
@@ -11,10 +11,15 @@ class ResetUserPasswordController extends Controller
/**
* Send user password reset link
*/
public function __invoke(User $user): Response
public function __invoke(User $user): JsonResponse
{
$message = [
'type' => 'success',
'message' => 'The password reset link was send succesfully',
];
if (is_demo()) {
return response('Done.', 204);
return response()->json($message);
}
// Get password token
@@ -24,6 +29,6 @@ class ResetUserPasswordController extends Controller
// Send user email
$user->sendPasswordResetNotification($token);
return response('Done.', 204);
return response()->json($message);
}
}

View File

@@ -2,6 +2,7 @@
namespace Domain\Admin\Controllers\Users;
use App\Users\Models\User;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Users\Resources\UserStorageResource;
@@ -10,8 +11,8 @@ class ShowUserStorageCapacityController extends Controller
/**
* Get user storage details
*/
public function __invoke(User $user): UserStorageResource
public function __invoke(User $user): JsonResponse
{
return new UserStorageResource($user);
return response()->json(new UserStorageResource($user));
}
}

View File

@@ -2,8 +2,8 @@
namespace Domain\Admin\Controllers\Users;
use App\Users\Models\User;
use Illuminate\Http\Response;
use App\Users\DTO\CreateUserData;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Users\Resources\UserResource;
use App\Users\Resources\UsersCollection;
@@ -21,26 +21,26 @@ class UserController extends Controller
/**
* Get all users
*/
public function index(): UsersCollection
public function index(): JsonResponse
{
$users = User::sortable(['created_at', 'DESC'])
->paginate(15);
return new UsersCollection($users);
return response()->json(new UsersCollection($users));
}
/**
* Get user details
*/
public function show(User $user): UserResource
public function show(User $user): JsonResponse
{
return new UserResource($user);
return response()->json(new UserResource($user));
}
/**
* Create new user by admin
*/
public function store(CreateUserByAdmin $request): Response
public function store(CreateUserByAdmin $request): JsonResponse
{
// Map user data
$data = CreateUserData::fromArray([
@@ -55,7 +55,7 @@ class UserController extends Controller
try {
$user = ($this->createNewUser)($data);
} catch (MeteredBillingPlanDoesntExist $e) {
return response([
return response()->json([
'type' => 'error',
'message' => 'User registrations are temporarily disabled',
], 409);
@@ -67,6 +67,6 @@ class UserController extends Controller
$user->save();
return response(new UserResource($user), 201);
return response()->json(new UserResource($user), 201);
}
}

View File

@@ -7,6 +7,7 @@ use Illuminate\Support\Arr;
use Domain\Files\Models\File;
use App\Users\Models\UserSetting;
use Domain\Folders\Models\Folder;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
use Domain\Items\Requests\SearchRequest;
use Domain\Files\Resources\FilesCollection;
@@ -17,7 +18,7 @@ class SpotlightSearchController
{
public function __invoke(
SearchRequest $request
) {
): JsonResponse {
// Prepare queries
$query = remove_accents(
$request->input('query')
@@ -32,11 +33,12 @@ class SpotlightSearchController
return $this->searchFiles($query);
}
private function searchUsers($query)
{
private function searchUsers(
string $query
): JsonResponse {
// Prevent to show non admin user searching
if (Auth::user()->role !== 'admin') {
abort(401);
abort(response()->json(accessDeniedError()), 403);
}
// Get user ids
@@ -44,13 +46,16 @@ class SpotlightSearchController
->get()
->pluck('user_id');
return new UsersMinimalCollection(
$users = new UsersMinimalCollection(
User::find($results)
);
return response()->json($users);
}
private function searchFiles(string $query)
{
private function searchFiles(
string $query
): JsonResponse {
$user_id = Auth::id();
// Get "shared with me" folders
@@ -92,9 +97,9 @@ class SpotlightSearchController
->take(3);
// Collect folders and files to single array
return [
return response()->json([
'folders' => new FolderCollection($folders),
'files' => new FilesCollection($files),
];
]);
}
}

View File

@@ -6,11 +6,13 @@ use Illuminate\Http\Response;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
class DownloadFileAction
{
/**
* Call and download file
* @throws FileNotFoundException
*/
public function __invoke(File $file): Response|StreamedResponse|RedirectResponse
{
@@ -21,7 +23,9 @@ class DownloadFileAction
$fileName = getPrettyName($file);
// Check if file exist
abort_if(Storage::missing($filePath), 404, 'The file not found.');
if (Storage::missing($filePath)) {
throw new FileNotFoundException();
}
// Format response header
$header = [

View File

@@ -2,19 +2,21 @@
namespace Domain\Files\Actions;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
class DownloadThumbnailAction
{
/**
* Get image thumbnail for browser
*
* @throws FileNotFoundException
*/
public function __invoke(
string $filename,
File $file
): StreamedResponse|Response {
): StreamedResponse {
// Get file path
$filePath = "/files/$file->user_id/$filename";
@@ -25,7 +27,7 @@ class DownloadThumbnailAction
// Check if original file exist
if (! Storage::exists($substituteFilePath)) {
return response('File not found', 404);
throw new FileNotFoundException();
}
// Return image thumbnail

View File

@@ -3,7 +3,7 @@ namespace Domain\Files\Controllers\FileAccess;
use Gate;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Domain\Files\Actions\DownloadFileAction;
@@ -20,7 +20,7 @@ class GetFileController extends Controller
public function __invoke(
string $filename,
): Response|RedirectResponse|StreamedResponse {
): JsonResponse|RedirectResponse|StreamedResponse {
// Get requested file
$file = File::withTrashed()
->where('basename', $filename)
@@ -28,12 +28,12 @@ class GetFileController extends Controller
// Check if user can download file
if (! $file->user->canDownload()) {
return response(userActionNotAllowedError(), 401);
return response()->json(userActionNotAllowedError(), 401);
}
// Check if user has privileges to download file
if (! Gate::any(['can-edit', 'can-view'], [$file, null])) {
return response(accessDeniedError(), 403);
return response()->json(accessDeniedError(), 403);
}
// TODO: resolve video buffering

View File

@@ -4,7 +4,7 @@ namespace Domain\Files\Controllers\FileAccess;
use Gate;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Domain\Files\Actions\DownloadThumbnailAction;
use Symfony\Component\HttpFoundation\StreamedResponse;
@@ -17,10 +17,13 @@ class GetThumbnailController extends Controller
) {
}
/**
* @throws FileNotFoundException
*/
public function __invoke(
Request $request,
string $filename,
): FileNotFoundException | StreamedResponse | Response {
): FileNotFoundException | StreamedResponse | JsonResponse {
// Get requested thumbnail
$file = File::withTrashed()
->where('basename', substr($filename, 3))
@@ -28,7 +31,7 @@ class GetThumbnailController extends Controller
// Check if user has privileges to download file
if (! Gate::any(['can-edit', 'can-view'], [$file, null])) {
return response(accessDeniedError(), 403);
return response()->json(accessDeniedError(), 403);
}
return ($this->downloadThumbnail)($filename, $file);

View File

@@ -2,8 +2,8 @@
namespace Domain\Files\Controllers\FileAccess;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Domain\Sharing\Models\Share;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Domain\Files\Actions\DownloadFileAction;
@@ -11,6 +11,7 @@ use Domain\Traffic\Actions\RecordDownloadAction;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Domain\Sharing\Actions\VerifyAccessToItemWithinAction;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
/**
* Get file public
@@ -25,13 +26,16 @@ class VisitorGetFileController extends Controller
) {
}
/**
* @throws FileNotFoundException
*/
public function __invoke(
$filename,
Share $shared,
): StreamedResponse|RedirectResponse|Response {
): StreamedResponse|RedirectResponse|JsonResponse {
// Check if user can download file
if (! $shared->user->canDownload()) {
return response(userActionNotAllowedError(), 401);
return response()->json(userActionNotAllowedError(), 401);
}
// Check ability to access protected share files

View File

@@ -9,6 +9,7 @@ use Domain\Files\Actions\DownloadThumbnailAction;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Domain\Sharing\Actions\VerifyAccessToItemWithinAction;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
/**
* Get public image thumbnail
@@ -23,6 +24,9 @@ class VisitorGetThumbnailController extends Controller
) {
}
/**
* @throws FileNotFoundException
*/
public function __invoke(
$filename,
Share $shared,

View File

@@ -26,8 +26,9 @@ class UploadFileChunksController extends Controller
*
* @throws FileNotFoundException
*/
public function __invoke(UploadChunkRequest $request)
{
public function __invoke(
UploadChunkRequest $request
) {
if (isDemoAccount()) {
return ($this->fakeUploadFile)($request);
}

View File

@@ -19,8 +19,9 @@ class UploadFileController extends Controller
) {
}
public function __invoke(UploadFileRequest $request): JsonResponse
{
public function __invoke(
UploadFileRequest $request
): JsonResponse {
if (isDemoAccount()) {
return response()->json(($this->fakeUploadFile)($request), 201);
}

View File

@@ -4,6 +4,7 @@ namespace Domain\Files\Controllers;
use Gate;
use Domain\Files\Models\File;
use Domain\Sharing\Models\Share;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Domain\Files\Resources\FileResource;
@@ -12,6 +13,9 @@ use Domain\Files\Resources\FileResource;
*/
class VisitorShowFileController
{
/**
* @throws AuthorizationException
*/
public function __invoke(
Share $shared
): JsonResponse {

View File

@@ -72,7 +72,7 @@ class VisitorUploadFileChunksController extends Controller
// Set public access url
$file->setSharedPublicUrl($shared->token);
return response(new FileResource($file), 201);
return response()->json(new FileResource($file), 201);
}
}
}

View File

@@ -11,8 +11,9 @@ class FavouriteController extends Controller
/**
* Add folder to user favourites
*/
public function store(AddFolderToFavouritesRequest $request): JsonResponse
{
public function store(
AddFolderToFavouritesRequest $request
): JsonResponse {
$successResponse = [
'type' => 'success',
'message' => 'Folder was successfully added into your favourites folders',
@@ -37,8 +38,9 @@ class FavouriteController extends Controller
/**
* Remove folder from user favourites
*/
public function destroy(string $id): JsonResponse
{
public function destroy(
string $id
): JsonResponse {
$successResponse = [
'type' => 'success',
'message' => 'Folder was successfully removed from your favourites folders',

View File

@@ -2,12 +2,13 @@
namespace Domain\Folders\Controllers;
use Domain\Folders\Models\Folder;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
class NavigationTreeController
{
public function __invoke(): array
public function __invoke(): JsonResponse
{
// Get signed user folders
$folders = Folder::with('folders:id,parent_id,name,team_folder')
@@ -36,7 +37,7 @@ class NavigationTreeController
->sortable()
->get(['id', 'parent_id', 'name']);
return [
return response()->json([
[
'location' => 'files',
'name' => __t('menu.files'),
@@ -58,6 +59,6 @@ class NavigationTreeController
'isMovable' => false,
'isOpen' => false,
],
];
]);
}
}

View File

@@ -16,8 +16,9 @@ class GetInvoiceController extends Controller
) {
}
public function __invoke(Transaction $invoice): View|Factory|Application
{
public function __invoke(
Transaction $invoice
): View {
// Get app settings
$settings = json_decode(
Setting::all()

View File

@@ -1,6 +1,7 @@
<?php
namespace Domain\Items\Controllers;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Domain\Files\Resources\FileResource;
use Domain\Folders\Resources\FolderResource;
@@ -27,15 +28,15 @@ class RenameFileOrFolderController extends Controller
public function __invoke(
RenameItemRequest $request,
string $id,
): FileResource|FolderResource {
): JsonResponse {
if (isDemoAccount()) {
$item = ($this->fakeRenameFileOrFolder)($request, $id);
if ($request->input('type') === 'folder') {
return new FolderResource($item);
return response()->json(new FolderResource($item));
}
return new FileResource($item);
return response()->json(new FileResource($item));
}
// If request contain icon or color, then change it
@@ -47,9 +48,9 @@ class RenameFileOrFolderController extends Controller
$item = ($this->renameFileOrFolder)($request, $id);
if ($request->input('type') === 'folder') {
return new FolderResource($item);
return response()->json(new FolderResource($item));
}
return new FileResource($item);
return response()->json(new FileResource($item));
}
}

View File

@@ -1,7 +1,7 @@
<?php
namespace Domain\Localization\Controllers;
use Illuminate\Support\Collection;
use Illuminate\Http\JsonResponse;
use Illuminate\Database\QueryException;
use Domain\Localization\Models\Language;
use Illuminate\Database\Eloquent\ModelNotFoundException;
@@ -13,7 +13,7 @@ class CurrentLocalizationController
*/
public function __invoke(
string $lang
): Collection {
): JsonResponse {
$translations = cache()
->rememberForever("language-translations-$lang", function () use ($lang) {
try {
@@ -25,8 +25,10 @@ class CurrentLocalizationController
}
});
return $translations
$appTranslations = $translations
? map_language_translations($translations)
: get_default_language_translations();
return response()->json($appTranslations);
}
}

View File

@@ -1,7 +1,7 @@
<?php
namespace Domain\Localization\Controllers;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Domain\Localization\Models\Language;
@@ -15,41 +15,48 @@ class LanguageController extends Controller
/**
* Get all languages for admin translate
*/
public function index(): Response
public function index(): JsonResponse
{
return response(
return response()->json(
new LanguageCollection(
Language::sortable(['created_at', 'DESC'])->get()
),
200
)
);
}
/**
* Get all language strings for admin translate
*/
public function show(Language $language): Response
{
return response(
new LanguageResource($language),
200
);
public function show(
Language $language
): JsonResponse {
return response()->json(new LanguageResource($language));
}
/**
* Create new language
*/
public function store(CreateLanguageRequest $request): Response
{
public function store(
CreateLanguageRequest $request
): JsonResponse {
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (is_demo()) {
$language = Language::query()
->where('locale', 'en')
->first();
return response()->json(
new LanguageResource($language),
201
);
}
$language = Language::create([
'name' => $request->input('name'),
'locale' => $request->input('locale'),
]);
return response(
return response()->json(
new LanguageResource($language),
201
);
@@ -61,15 +68,20 @@ class LanguageController extends Controller
public function update(
UpdateLanguageRequest $request,
Language $language
): Response {
): JsonResponse {
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (is_demo()) {
return response()->json(
new LanguageResource($language),
201
);
}
$language->update(
make_single_input($request)
);
return response(
return response()->json(
new LanguageResource($language),
201
);
@@ -78,13 +90,23 @@ class LanguageController extends Controller
/**
* Delete the language with all children strings
*/
public function destroy(Language $language): Response
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
public function destroy(
Language $language
): JsonResponse {
$message = [
'type' => 'success',
'message' => 'The language was successfully deleted',
];
if (is_demo()) {
return response()->json($message);
}
if ($language->locale === 'en') {
return response("Sorry, you can't delete default language.", 401);
return response()->json([
'type' => 'error',
'message' => "Sorry, you can't delete default language.",
], 422);
}
// If user try to delete language used as default,
@@ -96,9 +118,6 @@ class LanguageController extends Controller
$language->delete();
return response(
'Done',
204
);
return response()->json($message);
}
}

View File

@@ -1,7 +1,7 @@
<?php
namespace Domain\Localization\Controllers;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Domain\Localization\Models\Language;
use Domain\Localization\Requests\UpdateStringRequest;
@@ -14,9 +14,15 @@ class UpdateLanguageStringController extends Controller
public function __invoke(
UpdateStringRequest $request,
Language $language,
): Response {
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
): JsonResponse {
$message = [
'type' => 'success',
'message' => 'The language strings was successfully updated',
];
if (is_demo()) {
return response()->json($message);
}
$language
->languageTranslations()
@@ -27,9 +33,6 @@ class UpdateLanguageStringController extends Controller
cache()->forget("language-translations-{$language->locale}");
return response(
'Done',
204
);
return response()->json($message);
}
}

View File

@@ -18,7 +18,10 @@ class FlushUserNotificationsController extends Controller
}
// Delete all notifications
auth()->user()->notifications()->delete();
auth()
->user()
->notifications()
->delete();
return response()->json($successMessage);
}

View File

@@ -1,15 +1,18 @@
<?php
namespace Domain\Notifications\Controllers;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Domain\Notifications\Resources\NotificationCollection;
class GetUserNotificationsController extends Controller
{
public function __invoke(): NotificationCollection
public function __invoke(): JsonResponse
{
return new NotificationCollection(
$notifications = new NotificationCollection(
auth()->user()->notifications
);
return response()->json($notifications);
}
}

View File

@@ -18,9 +18,12 @@ class MarkUserNotificationsAsReadController extends Controller
}
// Mark all notifications as read
auth()->user()->unreadNotifications()->update([
'read_at' => now(),
]);
auth()
->user()
->unreadNotifications()
->update([
'read_at' => now(),
]);
return response()->json($successMessage);
}

View File

@@ -3,7 +3,7 @@ namespace Domain\Pages\Controllers;
use Illuminate\Http\Request;
use Domain\Pages\Models\Page;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Domain\Pages\Resources\PageResource;
use Domain\Pages\Resources\PageCollection;
@@ -13,37 +13,38 @@ class AdminPagesController extends Controller
/**
* Get all pages
*/
public function index(): PageCollection
public function index(): JsonResponse
{
return new PageCollection(
return response()->json(new PageCollection(
Page::sortable()
->paginate(10)
);
));
}
/**
* Get single page resource
*/
public function show(Page $page): PageResource
public function show(Page $page): JsonResponse
{
return new PageResource($page);
return response()->json(new PageResource($page));
}
/**
* Update page content
*/
public function update(Request $request, Page $page): Response
{
public function update(
Request $request,
Page $page,
): JsonResponse {
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (is_demo()) {
return response()->json(new PageResource($page));
}
$page->update(
make_single_input($request)
);
return response(
new PageResource($page),
204
);
return response()->json(new PageResource($page));
}
}

View File

@@ -15,8 +15,10 @@ class RemoteUploadFileController 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.',

View File

@@ -6,6 +6,7 @@ use Domain\UploadRequest\Models\UploadRequest;
use Domain\RemoteUpload\Requests\RemoteUploadRequest;
use Domain\RemoteUpload\Actions\GetContentFromExternalSource;
use Domain\UploadRequest\Actions\CreateUploadRequestRootFolderAction;
use Illuminate\Http\JsonResponse;
class UploadFilesRemotelyForUploadRequestController
{
@@ -15,8 +16,10 @@ class UploadFilesRemotelyForUploadRequestController
) {
}
public function __invoke(RemoteUploadRequest $request, UploadRequest $uploadRequest)
{
public function __invoke(
RemoteUploadRequest $request,
UploadRequest $uploadRequest
): JsonResponse {
$successMessage = [
'type' => 'success',
'message' => 'Files was successfully uploaded.',

View File

@@ -1,35 +1,33 @@
<?php
namespace Domain\Settings\Controllers;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\File;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class DownloadLogController extends Controller
{
public function __invoke($log): Response|BinaryFileResponse|Application|ResponseFactory
public function __invoke($log): JsonResponse|BinaryFileResponse
{
if (is_demo()) {
return response('Done.', 204);
return response()->json([
'type' => 'success',
]);
}
// Get log path
$logPath = storage_path("logs/$log");
// Download log
return response()->download(
storage_path("logs/$log"),
$log,
[
return response()
->download(storage_path("logs/$log"), $log, [
'Accept-Ranges' => 'bytes',
'Content-Type' => 'text/plain',
'Content-Length' => File::size($logPath),
'Content-Range' => 'bytes 0-600/' . File::size($logPath),
'Content-Disposition' => "attachment; filename=$log",
]
);
]);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Settings\Controllers;
use Artisan;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
class FlushCacheController extends Controller
@@ -10,10 +10,17 @@ class FlushCacheController extends Controller
/**
* Clear application cache
*/
public function __invoke(): Response
public function __invoke(): JsonResponse
{
$message = [
'type' => 'success',
'message' => 'The cache was successfully flushed',
];
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (is_demo()) {
return response()->json($message);
}
if (! app()->runningUnitTests()) {
Artisan::call('cache:clear');
@@ -21,6 +28,6 @@ class FlushCacheController extends Controller
Artisan::call('config:cache');
}
return response('Done', 204);
return response()->json($message);
}
}

View File

@@ -1,9 +1,9 @@
<?php
namespace Domain\Settings\Controllers;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Illuminate\Database\Eloquent\ModelNotFoundException;
class GetAppImageController
{
@@ -12,10 +12,10 @@ class GetAppImageController
*/
public function __invoke(
string $basename
): StreamedResponse | Response {
): StreamedResponse {
// Check if file exist
if (! Storage::exists("/system/$basename")) {
return response('File not found', 404);
throw new ModelNotFoundException();
}
// Return avatar

View File

@@ -2,6 +2,7 @@
namespace Domain\Settings\Controllers;
use Storage;
use Illuminate\Http\JsonResponse;
use Support\Status\Actions\GetServerSetupStatusAction;
class GetServerStatusController
@@ -11,7 +12,7 @@ class GetServerStatusController
) {
}
public function __invoke(): array
public function __invoke(): JsonResponse
{
// Get server data
$status = ($this->getServerSetupStatus)();
@@ -32,6 +33,6 @@ class GetServerStatusController
'lastUpdate' => isRunningCron() ? format_date(cache()->get('latest_cron_update')) : null,
];
return $status;
return response()->json($status);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Settings\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
class GetSettingsValueController
@@ -17,24 +17,32 @@ class GetSettingsValueController
*/
public function __invoke(
Request $request
): Collection {
): JsonResponse {
if (str_contains($request->get('column'), '|')) {
$columns = collect(explode('|', $request->get('column')))
->each(function ($column) {
if (in_array($column, $this->blacklist)) {
abort(401);
abort(
response()->json(accessDeniedError(), 401)
);
}
});
return Setting::whereIn('name', $columns)
$settings = Setting::whereIn('name', $columns)
->pluck('value', 'name');
return response()->json($settings);
}
if (in_array($request->get('column'), $this->blacklist)) {
abort(401);
abort(
response()->json(accessDeniedError(), 401)
);
}
return Setting::where('name', $request->get('column'))
$settings = Setting::where('name', $request->get('column'))
->pluck('value', 'name');
return response()->json($settings);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Settings\Controllers;
use Artisan;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Requests\StoreBroadcastServiceCredentialsRequest;
class StoreBroadcastServiceCredentialsController
@@ -10,10 +10,17 @@ class StoreBroadcastServiceCredentialsController
/**
* Configure stripe additionally
*/
public function __invoke(StoreBroadcastServiceCredentialsRequest $request): Response
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
public function __invoke(
StoreBroadcastServiceCredentialsRequest $request
): JsonResponse {
$message = [
'type' => 'success',
'message' => 'The 3rd part authentication credentials was successfully set',
];
if (is_demo()) {
return response()->json($message);
}
// Get and store credentials
if (! app()->runningUnitTests()) {
@@ -54,6 +61,6 @@ class StoreBroadcastServiceCredentialsController
}
}
return response('Done', 204);
return response()->json($message);
}
}

View File

@@ -22,10 +22,18 @@ class StoreEmailCredentialsController
/**
* Set new email credentials to .env file
*/
public function __invoke(StoreEmailCredentialsRequest $request): JsonResponse
{
public function __invoke(
StoreEmailCredentialsRequest $request
): JsonResponse {
$message = [
'type' => 'success',
'message' => 'The email credentials was successfully set',
];
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (is_demo()) {
return response()->json($message);
}
if (! app()->runningUnitTests()) {
// Test email connection
@@ -107,6 +115,6 @@ class StoreEmailCredentialsController
Artisan::call('config:cache');
}
return response()->json('Done', 204);
return response()->json($message);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Settings\Controllers;
use Artisan;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
use Domain\Settings\Actions\TestPayPalConnectionAction;
use Domain\Settings\Actions\TestStripeConnectionAction;
@@ -21,10 +21,17 @@ class StorePaymentServiceCredentialsController
/**
* Configure stripe additionally
*/
public function __invoke(StorePaymentServiceCredentialsRequest $request): Response
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
public function __invoke(
StorePaymentServiceCredentialsRequest $request
): JsonResponse {
$message = [
'type' => 'success',
'message' => 'The payment credentials was successfully set',
];
if (is_demo()) {
return response()->json($message);
}
$options = [
'stripe' => [
@@ -105,6 +112,6 @@ class StorePaymentServiceCredentialsController
}
}
return response('Done', 204);
return response()->json($message);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Settings\Controllers;
use Artisan;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
use Domain\Settings\Requests\StoreSocialServiceCredentialsRequest;
@@ -11,10 +11,17 @@ class StoreSocialServiceCredentialsController
/**
* Configure stripe additionally
*/
public function __invoke(StoreSocialServiceCredentialsRequest $request): Response
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
public function __invoke(
StoreSocialServiceCredentialsRequest $request
): JsonResponse {
$message = [
'type' => 'success',
'message' => 'The 3rd part authentication credentials was successfully set',
];
if (is_demo()) {
return response()->json($message);
}
// Set on social login
Setting::updateOrCreate([
@@ -55,6 +62,6 @@ class StoreSocialServiceCredentialsController
}
}
return response('Done', 204);
return response()->json($message);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Settings\Controllers;
use Artisan;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\DTO\S3CredentialsData;
use Domain\Settings\Actions\TestS3ConnectionAction;
use Domain\Settings\Actions\TestFTPConnectionAction;
@@ -19,10 +19,17 @@ class StoreStorageCredentialsController
/**
* Set new email credentials to .env file
*/
public function __invoke(StoreStorageCredentialsRequest $request): Response
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
public function __invoke(
StoreStorageCredentialsRequest $request
): JsonResponse {
$message = [
'type' => 'success',
'message' => 'The storage credentials was successfully set',
];
if (is_demo()) {
return response()->json($message);
}
// Get storage driver from request
$driver = match ($request->input('storage.driver')) {
@@ -72,6 +79,6 @@ class StoreStorageCredentialsController
Artisan::call('config:cache');
}
return response('Done', 204);
return response()->json($message);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Settings\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Artisan;
@@ -12,10 +12,17 @@ class UpdateSettingValueController extends Controller
/**
* Update setting item.
*/
public function __invoke(Request $request): Response
public function __invoke(Request $request): JsonResponse
{
$message = [
'type' => 'success',
'message' => 'The value was successfully updated',
];
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (is_demo()) {
return response()->json($message);
}
// Store image if exist
if ($request->hasFile($request->input('name'))) {
@@ -26,7 +33,7 @@ class UpdateSettingValueController extends Controller
'value' => store_system_image($request, $request->input('name')),
]);
return response('Done', 204);
return response()->json($message);
}
// Set paypal live option
@@ -41,7 +48,7 @@ class UpdateSettingValueController extends Controller
Artisan::call('config:cache');
}
return response('Done', 204);
return response()->json($message);
}
// Find and update variable
@@ -50,6 +57,6 @@ class UpdateSettingValueController extends Controller
['value' => $request->input('value')]
);
return response('Done', 204);
return response()->json($message);
}
}

View File

@@ -3,19 +3,18 @@ namespace Domain\Settings\Controllers;
use DB;
use Artisan;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Http;
use Domain\Localization\Models\Language;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Domain\Settings\Requests\UpgradeLicenseRequest;
class UpgradeLicenseController extends Controller
{
public function __invoke(UpgradeLicenseRequest $request): Response|Application|ResponseFactory
{
public function __invoke(
UpgradeLicenseRequest $request
): JsonResponse {
// Verify purchase code
$response = Http::get("https://verify.vuefilemanager.com/api/verify-code/{$request->input('purchaseCode')}");
@@ -94,9 +93,15 @@ class UpgradeLicenseController extends Controller
Artisan::call('config:clear');
Artisan::call('cache:clear');
return response('Your license was successfully upgraded', 201);
return response()->json([
'status' => 'success',
'message' => 'Your license was successfully upgraded',
], 201);
}
return response('Purchase code is invalid or is not Extended License.', 400);
return response()->json([
'status' => 'error',
'message' => 'Purchase code is invalid or is not Extended License.',
], 400);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\SetupWizard\Controllers;
use Illuminate\Support\Str;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Domain\SetupWizard\Requests\StoreAppSetupRequest;
@@ -14,7 +14,7 @@ class StoreAppSettingsController extends Controller
*/
public function __invoke(
StoreAppSetupRequest $request
): Response {
): JsonResponse {
collect([
[
'name' => 'subscription_type',
@@ -102,6 +102,9 @@ class StoreAppSettingsController extends Controller
]);
}
return response('Done', 204);
return response()->json([
'type' => 'success',
'message' => 'The app settings was set successfully',
]);
}
}

View File

@@ -3,6 +3,7 @@ namespace Domain\SetupWizard\Controllers;
use DB;
use Artisan;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Doctrine\DBAL\Driver\PDOException;
@@ -16,7 +17,7 @@ class StoreDatabaseCredentialsController extends Controller
*/
public function __invoke(
StoreDatabaseCredentialsRequest $request
): Response {
): JsonResponse {
if (! app()->runningUnitTests()) {
try {
// Set temporary database connection
@@ -57,6 +58,9 @@ class StoreDatabaseCredentialsController extends Controller
Artisan::call('config:cache');
}
return response('Done', 204);
return response()->json([
'type' => 'success',
'message' => 'The database was set successfully',
]);
}
}

View File

@@ -194,6 +194,9 @@ class StoreEnvironmentSettingsController extends Controller
Artisan::call('config:cache');
}
return response()->json('Done', 204);
return response()->json([
'type' => 'success',
'message' => 'The environment was set successfully',
]);
}
}

View File

@@ -2,7 +2,7 @@
namespace Domain\Sharing\Controllers;
use BaconQrCode\Writer;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use BaconQrCode\Renderer\Color\Rgb;
use App\Http\Controllers\Controller;
use BaconQrCode\Renderer\ImageRenderer;
@@ -12,8 +12,9 @@ use BaconQrCode\Renderer\RendererStyle\RendererStyle;
class GetShareLinkViaQrCodeController extends Controller
{
public function __invoke($token): Response
{
public function __invoke(
$token
): JsonResponse {
// Get share url
$url = url('/share', ['token' => $token]);
@@ -28,6 +29,12 @@ class GetShareLinkViaQrCodeController extends Controller
$qrCode = trim(substr($svg, strpos($svg, "\n") + 1));
// Return qr code
return response($qrCode);
return response()->json([
'type' => 'success',
'message' => 'QR code successfully generated',
'data' => [
'svg' => $qrCode,
],
]);
}
}

View File

@@ -54,8 +54,9 @@ class ShareController extends Controller
/**
* Delete sharing item
*/
public function destroy(RevokeSharesRequest $request): JsonResponse
{
public function destroy(
RevokeSharesRequest $request
): JsonResponse {
foreach ($request->input('tokens') as $token) {
// Delete share record
$record = Share::where('token', $token)

View File

@@ -28,7 +28,7 @@ class VisitorUnlockLockedShareController extends Controller
]);
// Return authorize token with shared options
return response(new ShareResource($shared), 200)
return response(new ShareResource($shared))
->cookie('share_session', $cookie, 43200);
}

View File

@@ -2,6 +2,7 @@
namespace Domain\Teams\Controllers;
use Domain\Folders\Models\Folder;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Gate;
@@ -19,6 +20,9 @@ class ConvertFolderIntoTeamFolderController extends Controller
) {
}
/**
* @throws AuthorizationException
*/
public function __invoke(
ConvertIntoTeamFolderRequest $request,
Folder $folder

View File

@@ -11,8 +11,9 @@ use Domain\Teams\Actions\ClearActionInInvitationNotificationAction;
class InvitationsController extends Controller
{
public function show(TeamFolderInvitation $invitation): JsonResponse
{
public function show(
TeamFolderInvitation $invitation
): JsonResponse {
// Check if invitation is not pending
if ($invitation->status !== 'pending') {
return response()->json([

View File

@@ -9,8 +9,9 @@ use App\Http\Controllers\Controller;
class LeaveTeamFolderController extends Controller
{
public function __invoke(Folder $folder): JsonResponse
{
public function __invoke(
Folder $folder
): JsonResponse {
$successMessage = [
'type' => 'success',
'message' => 'You left the team folder.',

View File

@@ -7,13 +7,14 @@ use Illuminate\Http\JsonResponse;
class NavigationTreeController
{
public function __invoke(Folder $folder): JsonResponse
{
public function __invoke(
Folder $folder
): JsonResponse {
// Get the root team folder
$teamFolder = $folder->getLatestParent();
if (! Gate::any(['can-edit', 'can-view'], [$teamFolder, null])) {
abort(403, 'Access Denied');
return response()->json(accessDeniedError(), 403);
}
$folders = Folder::with('folders:id,parent_id,id,name,team_folder')

View File

@@ -2,18 +2,19 @@
namespace Domain\Transactions\Controllers;
use App\Users\Models\User;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Domain\Transactions\Resources\TransactionCollection;
use VueFileManager\Subscription\Domain\Transactions\Models\Transaction;
class GetAllTransactionsController extends Controller
{
public function __invoke(User $user)
public function __invoke(User $user): JsonResponse
{
$transactions = Transaction::with('user')
->sortable(['created_at' => 'desc'])
->paginate(20);
return new TransactionCollection($transactions);
return response()->json(new TransactionCollection($transactions));
}
}

View File

@@ -2,18 +2,19 @@
namespace Domain\Transactions\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
use Domain\Transactions\Resources\TransactionCollection;
class GetTransactionsController extends Controller
{
public function __invoke()
public function __invoke(): JsonResponse
{
$transactions = Auth::user()
->transactions()
->sortable(['created_at' => 'desc'])
->paginate(15);
return new TransactionCollection($transactions);
return response()->json(new TransactionCollection($transactions));
}
}

View File

@@ -2,18 +2,19 @@
namespace Domain\Transactions\Controllers;
use App\Users\Models\User;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use Domain\Transactions\Resources\TransactionCollection;
class GetUserTransactionsController extends Controller
{
public function __invoke(User $user)
public function __invoke(User $user): JsonResponse
{
$transactions = $user
->transactions()
->sortable(['created_at' => 'desc'])
->paginate(20);
return new TransactionCollection($transactions);
return response()->json(new TransactionCollection($transactions));
}
}

View File

@@ -17,8 +17,9 @@ class CreateUploadRequestController extends Controller
/**
* @throws AuthorizationException
*/
public function __invoke(StoreUploadRequest $request): JsonResponse
{
public function __invoke(
StoreUploadRequest $request
): JsonResponse {
// Check if user is owner of the file
if ($request->has('folder_id')) {
$folder = Folder::findOrFail($request->input('folder_id'));

View File

@@ -15,11 +15,6 @@ class DeleteFileOrFolderController
DeleteItemRequest $request,
UploadRequest $uploadRequest
): JsonResponse {
$successMessage = [
'type' => 'success',
'message' => 'Items was successfully deleted.',
];
foreach ($request->input('items') as $file) {
// Get file or folder item
$item = get_item($file['type'], $file['id']);
@@ -35,7 +30,10 @@ class DeleteFileOrFolderController
}
}
return response()->json($successMessage);
return response()->json([
'type' => 'success',
'message' => 'Items was successfully deleted.',
]);
}
private function destroyFile(File $file): void

View File

@@ -2,7 +2,6 @@
namespace Domain\UploadRequest\Controllers\FileAccess;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Illuminate\Http\RedirectResponse;
use Domain\Files\Actions\DownloadFileAction;
use Domain\UploadRequest\Models\UploadRequest;
@@ -20,10 +19,13 @@ class GetFileFromUploadRequestController
) {
}
/**
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function __invoke(
string $filename,
UploadRequest $uploadRequest
): StreamedResponse|RedirectResponse|Response {
UploadRequest $uploadRequest,
): StreamedResponse|RedirectResponse {
// Get file
$file = File::where('user_id', $uploadRequest->user_id)
->where('basename', $filename)

View File

@@ -2,13 +2,10 @@
namespace Domain\UploadRequest\Controllers\FileAccess;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Domain\UploadRequest\Models\UploadRequest;
use Domain\Traffic\Actions\RecordDownloadAction;
use Illuminate\Contracts\Foundation\Application;
use Domain\Files\Actions\DownloadThumbnailAction;
use Illuminate\Contracts\Routing\ResponseFactory;
use Symfony\Component\HttpFoundation\StreamedResponse;
/**
@@ -22,10 +19,13 @@ class GetThumbnailFromUploadRequestController extends Controller
) {
}
/**
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function __invoke(
string $filename,
UploadRequest $uploadRequest
): Application|ResponseFactory|Response|StreamedResponse {
): StreamedResponse {
// Get file
$file = File::where('user_id', $uploadRequest->user_id)
->where('basename', substr($filename, 3))

View File

@@ -1,25 +1,24 @@
<?php
namespace Domain\UploadRequest\Controllers;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
use Domain\UploadRequest\Models\UploadRequest;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
class GetFolderTreeForUploadRequestController extends Controller
{
public function __invoke(UploadRequest $uploadRequest): Application|ResponseFactory|Response|array
{
public function __invoke(
UploadRequest $uploadRequest
): JsonResponse {
// Get folders
$folders = Folder::with('folders:id,parent_id,name')
->whereParentId($uploadRequest->id)
->whereUserId($uploadRequest->user_id)
->where('parent_id', $uploadRequest->id)
->where('user_id', $uploadRequest->user_id)
->sortable()
->get(['id', 'parent_id', 'id', 'name']);
return [
return response()->json([
[
'name' => __t('upload_request'),
'location' => 'upload-request',
@@ -27,6 +26,6 @@ class GetFolderTreeForUploadRequestController extends Controller
'isMovable' => true,
'isOpen' => true,
],
];
]);
}
}

View File

@@ -1,13 +1,15 @@
<?php
namespace Domain\UploadRequest\Controllers;
use Illuminate\Http\JsonResponse;
use Domain\UploadRequest\Models\UploadRequest;
use Domain\UploadRequest\Resources\UploadRequestResource;
class GetUploadRequestController
{
public function __invoke(UploadRequest $uploadRequest)
{
return new UploadRequestResource($uploadRequest);
public function __invoke(
UploadRequest $uploadRequest
): JsonResponse {
return response()->json(new UploadRequestResource($uploadRequest));
}
}

View File

@@ -20,7 +20,9 @@ class MoveItemInUploadRequestController extends Controller
return response()->json(accessDeniedError(), 403);
}
$item->update(['parent_id' => $request->input('to_id') ?? $uploadRequest->id]);
$item->update([
'parent_id' => $request->input('to_id') ?? $uploadRequest->id
]);
}
return response()->json([

View File

@@ -7,6 +7,7 @@ use Domain\Folders\Resources\FolderResource;
use Domain\Items\Requests\RenameItemRequest;
use Domain\UploadRequest\Models\UploadRequest;
use Domain\Folders\Actions\UpdateFolderPropertyAction;
use Illuminate\Http\JsonResponse;
use Support\Demo\Actions\FakeRenameFileOrFolderAction;
class RenameFileOrFolderController extends Controller
@@ -17,14 +18,17 @@ class RenameFileOrFolderController extends Controller
) {
}
public function __invoke(UploadRequest $uploadRequest, string $id, RenameItemRequest $request)
{
public function __invoke(
UploadRequest $uploadRequest,
string $id,
RenameItemRequest $request,
): JsonResponse {
// Get item
$item = get_item($request->input('type'), $id);
// Check privileges
if (! in_array($item->parent_id, getChildrenFolderIds($uploadRequest->id))) {
return response('Access Denied', 403);
return response()->json(accessDeniedError(), 403);
}
// If request contain icon or color, then change it
@@ -36,9 +40,9 @@ class RenameFileOrFolderController extends Controller
$item->update(['name' => $request->input('name')]);
if ($request->input('type') === 'folder') {
return new FolderResource($item);
return response()->json(new FolderResource($item));
}
return new FileResource($item);
return response()->json(new FileResource($item));
}
}

View File

@@ -7,8 +7,9 @@ use Domain\UploadRequest\Notifications\UploadRequestFulfilledNotification;
class SetUploadRequestAsFilledController
{
public function __invoke(UploadRequest $uploadRequest): JsonResponse
{
public function __invoke(
UploadRequest $uploadRequest
): JsonResponse {
$uploadRequest->update([
'status' => 'filled',
]);

View File

@@ -24,8 +24,10 @@ class UploadFileChunksForUploadRequestController
/**
* @throws FileNotFoundException
*/
public function __invoke(UploadChunkRequest $request, UploadRequest $uploadRequest)
{
public function __invoke(
UploadChunkRequest $request,
UploadRequest $uploadRequest,
) {
// Get upload request root folder query
$folder = Folder::where('id', $uploadRequest->id);

View File

@@ -142,7 +142,7 @@ class AdminTest extends TestCase
$this
->actingAs($admin)
->postJson("/api/admin/users/$user->id/reset-password")
->assertStatus(204);
->assertStatus(200);
Notification::assertTimesSent(1, ResetPassword::class);
}
@@ -310,7 +310,7 @@ class AdminTest extends TestCase
$this->deleteJson("/api/admin/users/$user->id/delete", [
'name' => $user->settings->name,
])
->assertStatus(204);
->assertStatus(200);
$this->assertDatabaseMissing('user_settings', [
'user_id' => $user->id,

View File

@@ -85,7 +85,7 @@ class AdminLanguageTranslatorTest extends TestCase
$this
->actingAs($admin)
->deleteJson("/api/admin/languages/$language->id")
->assertStatus(204);
->assertStatus(200);
$this->assertDatabaseMissing('languages', [
'name' => 'Slovenčina',
@@ -114,7 +114,7 @@ class AdminLanguageTranslatorTest extends TestCase
$this
->actingAs($admin)
->deleteJson("/api/admin/languages/$language->id")
->assertStatus(401);
->assertStatus(422);
}
/**

View File

@@ -64,7 +64,7 @@ class AdminPagesTest extends TestCase
->patchJson('/api/admin/pages/terms-of-service', [
'name' => 'title',
'value' => 'New Title',
])->assertStatus(204);
])->assertStatus(200);
$this->assertDatabaseHas('pages', [
'title' => 'New Title',

View File

@@ -84,7 +84,7 @@ class SettingsTest extends TestCase
->patchJson('/api/admin/settings', [
'name' => 'header_title',
'value' => 'New Header Title',
])->assertStatus(204);
])->assertStatus(200);
$this->assertDatabaseHas('settings', [
'value' => 'New Header Title',
@@ -112,7 +112,7 @@ class SettingsTest extends TestCase
->patchJson('/api/admin/settings', [
'name' => 'app_logo',
'app_logo' => $logo,
])->assertStatus(204);
])->assertStatus(200);
$this->assertDatabaseMissing('settings', [
'app_logo' => null,
@@ -134,7 +134,7 @@ class SettingsTest extends TestCase
$this
->actingAs($admin)
->getJson('/api/admin/settings/flush-cache')
->assertStatus(204);
->assertStatus(200);
}
/**
@@ -151,7 +151,7 @@ class SettingsTest extends TestCase
'service' => 'stripe',
'key' => '123456789',
'secret' => '123456789',
])->assertStatus(204);
])->assertStatus(200);
$this->assertDatabaseHas('settings', [
'name' => 'allowed_stripe',
@@ -173,7 +173,7 @@ class SettingsTest extends TestCase
'client_id' => '123456789',
'client_secret' => '123456789',
'service' => 'facebook',
])->assertStatus(204);
])->assertStatus(200);
$this->assertDatabaseHas('settings', [
'name' => 'allowed_facebook',
@@ -198,7 +198,7 @@ class SettingsTest extends TestCase
'smtp.username' => 'john@doe.com',
'smtp.password' => 'secret',
'smtp.encryption' => 'tls',
])->assertStatus(204);
])->assertStatus(200);
}
/**
@@ -220,7 +220,7 @@ class SettingsTest extends TestCase
'bucket' => 'cloud',
'endpoint' => 'https://cloud.frankfurt.storage.com',
],
])->assertStatus(204);
])->assertStatus(200);
}
/**
@@ -241,7 +241,7 @@ class SettingsTest extends TestCase
'cluster' => 'eu',
'port' => null,
'host' => null,
])->assertStatus(204);
])->assertStatus(200);
}
/**