diff --git a/.env.example b/.env.example index 4c30963d..37c85841 100644 --- a/.env.example +++ b/.env.example @@ -62,9 +62,6 @@ BACKBLAZE_ENDPOINT= BACKBLAZE_REGION= BACKBLAZE_BUCKET= -PASSPORT_CLIENT_ID= -PASSPORT_CLIENT_SECRET= - APP_DEPLOY_SECRET= CASHIER_LOGGER=stack diff --git a/app/Console/Commands/SetupDevEnvironment.php b/app/Console/Commands/SetupDevEnvironment.php index ca4a57db..bc01b141 100644 --- a/app/Console/Commands/SetupDevEnvironment.php +++ b/app/Console/Commands/SetupDevEnvironment.php @@ -2,7 +2,9 @@ namespace App\Console\Commands; +use App\Models\Folder; use App\Models\Page; +use App\Models\Share; use App\Services\SetupService; use App\Models\Setting; use App\Models\User; @@ -26,6 +28,8 @@ class SetupDevEnvironment extends Command */ protected $description = 'Set up development environment'; + private $setup; + /** * Create a new command instance. * @@ -35,7 +39,7 @@ class SetupDevEnvironment extends Command { parent::__construct(); $this->faker = Faker\Factory::create(); - $this->setup = app()->make(SetupService::class); + $this->setup = resolve(SetupService::class); } /** @@ -50,10 +54,21 @@ class SetupDevEnvironment extends Command $this->info('Creating system directories...'); $this->setup->create_directories(); + $this->info('Migrating Databases...'); $this->migrate_and_generate(); - $this->store_data(); - $this->seed_default_content(); + + $this->info('Storing default settings and content...'); + $this->store_default_settings(); + $this->setup->seed_default_pages(); + $this->setup->seed_default_settings('Extended'); + + $this->info('Creating default admin...'); $this->create_admin(); + + $this->info('Creating default admin content...'); + $this->create_admin_default_content(); + + $this->info('Clearing application cache...'); $this->clear_cache(); $this->info('Everything is done, congratulations! 🥳🥳🥳'); @@ -66,15 +81,15 @@ class SetupDevEnvironment extends Command { $user = User::forceCreate([ 'role' => 'admin', - 'email' => 'john@doe.com', - 'password' => Hash::make('secret'), + 'email' => 'howdy@hi5ve.digital', + 'password' => Hash::make('vuefilemanager'), ]); $user ->settings() ->create([ 'storage_capacity' => 5, - 'name' => 'John Doe', + 'name' => 'Jane Doe', 'address' => $this->faker->address, 'state' => $this->faker->state, 'city' => $this->faker->city, @@ -85,27 +100,167 @@ class SetupDevEnvironment extends Command ]); // Show user credentials - $this->info('Default admin account created. Email: john@doe.com and Password: secret'); + $this->info('Default admin account created. Email: howdy@hi5ve.digital and Password: vuefilemanager'); } /** - * Seed default content to database + * Create default admin content */ - private function seed_default_content(): void + private function create_admin_default_content(): void { - collect(config('content.content')) - ->each(function ($content) { - Setting::updateOrCreate($content); - }); + $user = User::whereEmail('howdy@hi5ve.digital') + ->first(); + + // 1. + $shared_folder = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'user_scope' => 'master', + 'name' => 'Shared Folder', + ]); + + Share::factory(Share::class) + ->create([ + 'type' => 'folder', + 'item_id' => $shared_folder->id, + 'permission' => 'editor', + 'is_protected' => false, + 'password' => null, + 'expire_in' => null, + ]); + + $peters_files = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $shared_folder->id, + 'user_scope' => 'master', + 'name' => "Peter's Files", + ]); + + // 2. + $random_pics = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'user_scope' => 'master', + 'name' => 'Random Pics', + ]); + + $nature = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $random_pics->id, + 'user_scope' => 'master', + 'name' => "Nature", + ]); + + $apartments = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $random_pics->id, + 'user_scope' => 'master', + 'name' => "Apartments", + ]); + + // 3. + $playable_media = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'user_scope' => 'master', + 'name' => 'Playable Media', + ]); + + $video = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $playable_media->id, + 'user_scope' => 'master', + 'name' => "Video", + ]); + + $audio = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $playable_media->id, + 'user_scope' => 'master', + 'name' => "Audio", + ]); + + // 4. + $multi_level = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'user_scope' => 'master', + 'name' => 'Multi Level Folder', + ]); + + $first_level = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $multi_level->id, + 'user_scope' => 'master', + 'name' => "First Level", + ]); + + $second_level = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $first_level->id, + 'user_scope' => 'master', + 'name' => "Second Level", + ]); + + $third_level = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'parent_id' => $second_level->id, + 'user_scope' => 'master', + 'name' => "Third Level", + ]); + + // 5. + $documents = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'user_scope' => 'master', + 'name' => 'Documents', + ]); + + Share::factory(Share::class) + ->create([ + 'type' => 'folder', + 'item_id' => $documents->id, + 'permission' => 'editor', + 'is_protected' => false, + 'password' => null, + 'expire_in' => null, + ]); + + // 6. + $videohive = Folder::factory(Folder::class) + ->create([ + 'user_id' => $user->id, + 'user_scope' => 'master', + 'name' => 'Videohive by MakingCG', + ]); + + $user + ->favouriteFolders() + ->sync([ + $shared_folder->id, + $random_pics->id, + $documents->id, + $peters_files->id, + ]); + } /** * Store main app settings into database */ - private function store_data(): void + private function store_default_settings(): void { // Get options - $settings = collect([ + collect([ [ 'name' => 'setup_wizard_database', 'value' => 1, @@ -162,11 +317,11 @@ class SetupDevEnvironment extends Command 'name' => 'purchase_code', 'value' => '26b889eb-3602-4bf2-beb3-3sc378fcf484', ] - ]); - - // Store options - $settings->each(function ($col) { - Setting::updateOrCreate(['name' => $col['name']], $col); + ])->each(function ($col) { + Setting::forceCreate([ + 'name' => $col['name'], + 'value' => $col['value'] + ]); }); } @@ -175,17 +330,15 @@ class SetupDevEnvironment extends Command */ private function migrate_and_generate(): void { - // Generate app key - $this->call('key:generate', [ - '--force' => true - ]); - // Migrate database $this->call('migrate:fresh', [ '--force' => true ]); - $this->setup->seed_default_pages(); + // Generate app key + $this->call('key:generate', [ + '--force' => true + ]); } /** diff --git a/app/Http/Controllers/FileManager/ShareController.php b/app/Http/Controllers/FileManager/ShareController.php index 64a7d2f7..63c8a948 100644 --- a/app/Http/Controllers/FileManager/ShareController.php +++ b/app/Http/Controllers/FileManager/ShareController.php @@ -43,15 +43,8 @@ class ShareController extends Controller */ public function store(CreateShareRequest $request, $id) { - // TODO: poriesit binarny string - do { - // Generate unique token - $token = Str::random(16); - - } while (Share::where('token', $token)->exists()); - // Create shared options - $options = [ + $shared = Share::create([ 'password' => $request->has('password') ? Hash::make($request->password) : null, 'type' => $request->type === 'folder' ? 'folder' : 'file', 'is_protected' => $request->isPassword, @@ -59,8 +52,7 @@ class ShareController extends Controller 'item_id' => $id, 'expire_in' => $request->expiration ?? null, 'user_id' => Auth::id(), - 'token' => $token, - ]; + ]); // Send shared link via email if ($request->has('emails')) { @@ -68,13 +60,13 @@ class ShareController extends Controller foreach ($request->emails as $email) { Notification::route('mail', $email)->notify( - new SharedSendViaEmail($token) + new SharedSendViaEmail($shared->token) ); } } // Return created shared record - return new ShareResource(Share::create($options)); + return new ShareResource($shared); } /** diff --git a/app/Models/Share.php b/app/Models/Share.php index 06326ae1..6fccb55d 100644 --- a/app/Models/Share.php +++ b/app/Models/Share.php @@ -43,8 +43,9 @@ class Share extends Model { parent::boot(); - static::creating(function ($model) { - $model->id = (string)Str::uuid(); + static::creating(function ($shared) { + $shared->id = (string)Str::uuid(); + $shared->token = Str::random(16); }); } } diff --git a/database/migrations/2019_08_15_171345_create_file_manager_files.php b/database/migrations/2019_08_15_171345_create_file_manager_files.php index 1ebeb359..989d8cc8 100644 --- a/database/migrations/2019_08_15_171345_create_file_manager_files.php +++ b/database/migrations/2019_08_15_171345_create_file_manager_files.php @@ -22,7 +22,7 @@ class CreateFileManagerFiles extends Migration $table->text('name'); $table->text('basename'); - $table->text('mimetype')->nullable()->index(); + $table->text('mimetype')->nullable(); $table->text('filesize'); $table->text('type')->nullable();