diff --git a/app/Http/Controllers/FileFunctions/EditItemsController.php b/app/Http/Controllers/FileFunctions/EditItemsController.php index ca3d2caf..5f58e334 100644 --- a/app/Http/Controllers/FileFunctions/EditItemsController.php +++ b/app/Http/Controllers/FileFunctions/EditItemsController.php @@ -314,10 +314,12 @@ class EditItemsController extends Controller } // Check shared permission - if (!is_editor($shared)) abort(403); + if (is_visitor($shared)) { + abort(403); + } // Check access to requested directory - Guardian::check_item_access($request->parent_id, $shared); + Guardian::check_item_access($request->folder_id, $shared); // Return new uploaded file $new_file = Editor::upload($request, $shared); diff --git a/app/Http/Tools/Editor.php b/app/Http/Tools/Editor.php index f45a2c19..25d476c0 100644 --- a/app/Http/Tools/Editor.php +++ b/app/Http/Tools/Editor.php @@ -463,8 +463,12 @@ class Editor self::move_to_external_storage($disk_file_name, $thumbnail); } - // Store file - $options = [ + // Store user upload size + User::find($user_id) + ->record_upload($file_size); + + // Return new file + return UserFile::create([ 'mimetype' => get_file_type_from_mimetype($file_mimetype), 'type' => get_file_type($file_mimetype), 'folder_id' => $request->folder_id, @@ -475,14 +479,7 @@ class Editor 'thumbnail' => $thumbnail, 'filesize' => $file_size, 'user_id' => $user_id, - ]; - - // Store user upload size - User::find($user_id) - ->record_upload($file_size); - - // Return new file - return UserFile::create($options); + ]); } } @@ -632,15 +629,16 @@ class Editor { // Get user storage percentage and get storage_limitation setting $user_storage_used = user_storage_percentage($user_id, $file_size); - $storage_limitation = get_setting('storage_limitation'); // Check if user can upload - if ($storage_limitation && $user_storage_used >= 100) { + if (get_setting('storage_limitation') && $user_storage_used >= 100) { // Delete file - Storage::disk('local')->delete('chunks/' . $temp_filename); + Storage::disk('local') + ->delete("chunks/$temp_filename"); // Abort uploading + // TODO: test pre exceed storage limit abort(423, 'You exceed your storage limit!'); } } diff --git a/tests/Feature/Share/ShareEditorTest.php b/tests/Feature/Share/ShareEditorTest.php index 96610413..d6cb3e96 100644 --- a/tests/Feature/Share/ShareEditorTest.php +++ b/tests/Feature/Share/ShareEditorTest.php @@ -28,7 +28,7 @@ class ShareEditorTest extends TestCase /** * @test */ - public function it_rename_shared_file() + public function editor_rename_shared_file() { $user = User::factory(User::class) ->create(); @@ -69,7 +69,7 @@ class ShareEditorTest extends TestCase /** * @test */ - public function it_rename_shared_folder() + public function editor_rename_shared_folder() { $user = User::factory(User::class) ->create(); @@ -111,7 +111,7 @@ class ShareEditorTest extends TestCase /** * @test */ - public function it_create_new_folder_in_shared_folder() + public function editor_create_new_folder_in_shared_folder() { $folder = Folder::factory(Folder::class) ->create(); @@ -144,7 +144,7 @@ class ShareEditorTest extends TestCase /** * @test */ - public function it_delete_multiple_files_in_shared_folder() + public function editor_delete_multiple_files_in_shared_folder() { $folder = Folder::factory(Folder::class) ->create(); @@ -187,6 +187,56 @@ class ShareEditorTest extends TestCase }); } + /** + * @test + */ + public function editor_upload_file_into_shared_folder() + { + Storage::fake('local'); + + $this->setup->create_directories(); + + $user = User::factory(User::class) + ->create(); + + $folder = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'user_scope' => 'master', + ]); + + $share = Share::factory(Share::class) + ->create([ + 'item_id' => $folder->id, + 'user_id' => $user->id, + 'type' => 'folder', + 'is_protected' => false, + 'permission' => 'editor', + ]); + + $file = UploadedFile::fake() + ->create('fake-file.pdf', 1000, 'application/pdf'); + + $this->postJson("/api/editor/upload/public/$share->token", [ + 'file' => $file, + 'folder_id' => $folder->id, + 'is_last' => true, + ])->assertStatus(201); + + $this->assertDatabaseHas('traffic', [ + 'user_id' => $user->id, + ]); + + $this->assertDatabaseHas('files', [ + 'user_scope' => 'editor', + ]); + + Storage::disk('local') + ->assertExists( + "files/$user->id/fake-file.pdf" + ); + } + /** * @test */