diff --git a/src/database/migrations/2022_05_13_100000_permissions_and_room_subscriptions.php b/src/database/migrations/2022_05_13_100000_permissions_and_room_subscriptions.php index 18ede086..ac3ea22d 100644 --- a/src/database/migrations/2022_05_13_100000_permissions_and_room_subscriptions.php +++ b/src/database/migrations/2022_05_13_100000_permissions_and_room_subscriptions.php @@ -1,150 +1,156 @@ string('id', 36)->primary(); $table->bigInteger('permissible_id'); $table->string('permissible_type'); $table->integer('rights')->default(0); $table->string('user'); $table->timestamps(); $table->index('user'); $table->index(['permissible_id', 'permissible_type']); } ); Schema::table( 'openvidu_rooms', function (Blueprint $table) { $table->bigInteger('tenant_id')->unsigned()->nullable(); $table->string('description')->nullable(); $table->softDeletes(); $table->foreign('tenant_id')->references('id')->on('tenants')->onDelete('set null'); } ); // Create the new SKUs if (!\App\Sku::where('title', 'room')->first()) { $sku = \App\Sku::create([ 'title' => 'group-room', 'name' => 'Group conference room', 'description' => 'Shareable audio & video conference room', 'cost' => 0, 'units_free' => 0, 'period' => 'monthly', 'handler_class' => 'App\Handlers\GroupRoom', 'active' => true, ]); $sku = \App\Sku::create([ 'title' => 'room', 'name' => 'Standard conference room', 'description' => 'Audio & video conference room', 'cost' => 0, 'units_free' => 0, 'period' => 'monthly', 'handler_class' => 'App\Handlers\Room', 'active' => true, ]); // Create the entitlement for every existing room foreach (\App\Meet\Room::get() as $room) { $user = \App\User::find($room->user_id); // @phpstan-ignore-line if (!$user) { $room->forceDelete(); continue; } // Set tenant_id if ($user->tenant_id) { $room->tenant_id = $user->tenant_id; $room->save(); } $wallet = $user->wallets()->first(); \App\Entitlement::create([ 'wallet_id' => $wallet->id, 'sku_id' => $sku->id, 'cost' => 0, 'fee' => 0, 'entitleable_id' => $room->id, 'entitleable_type' => \App\Meet\Room::class ]); } } // Remove 'meet' SKU/entitlements \App\Sku::where('title', 'meet')->delete(); Schema::table( 'openvidu_rooms', function (Blueprint $table) { $table->dropForeign('openvidu_rooms_user_id_foreign'); $table->dropColumn('user_id'); } ); } /** * Reverse the migrations. */ public function down(): void { Schema::table( 'openvidu_rooms', function (Blueprint $table) { $table->dropForeign('openvidu_rooms_tenant_id_foreign'); $table->dropColumn('tenant_id'); $table->dropColumn('description'); - $table->dropSoftDeletes(); $table->bigInteger('user_id')->nullable(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); } ); // Set user_id back foreach (\App\Meet\Room::get() as $room) { $wallet = $room->wallet(); if (!$wallet) { $room->forceDelete(); continue; } $room->user_id = $wallet->user_id; // @phpstan-ignore-line $room->save(); } + Schema::table( + 'openvidu_rooms', + function (Blueprint $table) { + $table->dropSoftDeletes(); + } + ); + \App\Entitlement::where('entitleable_type', \App\Meet\Room::class)->forceDelete(); \App\Sku::where('title', 'room')->delete(); \App\Sku::where('title', 'group-room')->delete(); \App\Sku::create([ 'title' => 'meet', 'name' => 'Voice & Video Conferencing (public beta)', 'description' => 'Video conferencing tool', 'cost' => 0, 'units_free' => 0, 'period' => 'monthly', 'handler_class' => 'App\Handlers\Meet', 'active' => true, ]); Schema::dropIfExists('permissions'); } }; diff --git a/src/database/seeds/local/UserSeeder.php b/src/database/seeds/local/UserSeeder.php index 8899f272..07c0dec5 100644 --- a/src/database/seeds/local/UserSeeder.php +++ b/src/database/seeds/local/UserSeeder.php @@ -1,246 +1,242 @@ 'kolab.org', 'status' => Domain::STATUS_NEW + Domain::STATUS_ACTIVE + Domain::STATUS_CONFIRMED + Domain::STATUS_VERIFIED, 'type' => Domain::TYPE_EXTERNAL ] ); $john = User::create( [ 'email' => 'john@kolab.org', 'password' => \App\Utils::generatePassphrase() ] ); $john->setSettings( [ 'first_name' => 'John', 'last_name' => 'Doe', 'currency' => 'USD', 'country' => 'US', 'billing_address' => "601 13th Street NW\nSuite 900 South\nWashington, DC 20005", 'external_email' => 'john.doe.external@gmail.com', 'organization' => 'Kolab Developers', 'phone' => '+1 509-248-1111', ] ); $john->setAliases(['john.doe@kolab.org']); $wallet = $john->wallets->first(); $packageDomain = \App\Package::withEnvTenantContext()->where('title', 'domain-hosting')->first(); $packageKolab = \App\Package::withEnvTenantContext()->where('title', 'kolab')->first(); $packageLite = \App\Package::withEnvTenantContext()->where('title', 'lite')->first(); $domain->assignPackage($packageDomain, $john); $john->assignPackage($packageKolab); $appDomain = \App\Domain::where( [ 'namespace' => \config('app.domain') ] )->first(); $fred = User::create( [ 'email' => 'fred@' . \config('app.domain'), 'password' => \App\Utils::generatePassphrase() ] ); $fred->setSettings( [ 'first_name' => 'fred', 'last_name' => 'Doe', 'currency' => 'USD', 'country' => 'US', 'billing_address' => "601 13th Street NW\nSuite 900 South\nWashington, DC 20005", 'external_email' => 'fred.doe.external@gmail.com', 'organization' => 'Kolab Developers', 'phone' => '+1 509-248-1111', ] ); $appDomain->assignPackage($packageDomain, $fred); $fred->assignPackage($packageKolab); $jack = User::create( [ 'email' => 'jack@kolab.org', 'password' => \App\Utils::generatePassphrase() ] ); $jack->setSettings( [ 'first_name' => 'Jack', 'last_name' => 'Daniels', 'currency' => 'USD', 'country' => 'US' ] ); $jack->setAliases(['jack.daniels@kolab.org']); $john->assignPackage($packageKolab, $jack); foreach ($john->entitlements as $entitlement) { $entitlement->created_at = Carbon::now()->subMonthsWithoutOverflow(1); $entitlement->updated_at = Carbon::now()->subMonthsWithoutOverflow(1); $entitlement->save(); } $ned = User::create( [ 'email' => 'ned@kolab.org', 'password' => \App\Utils::generatePassphrase() ] ); $ned->setSettings( [ 'first_name' => 'Edward', 'last_name' => 'Flanders', 'currency' => 'USD', 'country' => 'US', 'guam_enabled' => false, ] ); $john->assignPackage($packageKolab, $ned); $ned->assignSku(\App\Sku::withEnvTenantContext()->where('title', 'activesync')->first(), 1); // Ned is a controller on Jack's wallet $john->wallets()->first()->addController($ned); // Ned is also our 2FA test user $sku2fa = Sku::withEnvTenantContext()->where('title', '2fa')->first(); $ned->assignSku($sku2fa); - try { - SecondFactor::seed('ned@kolab.org'); - } catch (\Exception $e) { - // meh - } + SecondFactor::seed('ned@kolab.org'); $joe = User::create( [ 'email' => 'joe@kolab.org', 'password' => \App\Utils::generatePassphrase() ] ); $john->assignPackage($packageLite, $joe); //$john->assignSku(Sku::firstOrCreate(['title' => 'beta'])); //$john->assignSku(Sku::firstOrCreate(['title' => 'meet'])); $joe->setAliases(['joe.monster@kolab.org']); // This only exists so the user create job doesn't fail because the domain is not found Domain::create( [ 'namespace' => 'jeroen.jeroen', 'status' => Domain::STATUS_NEW + Domain::STATUS_ACTIVE + Domain::STATUS_CONFIRMED + Domain::STATUS_VERIFIED, 'type' => Domain::TYPE_EXTERNAL ] ); $jeroen = User::create( [ 'email' => 'jeroen@jeroen.jeroen', 'password' => \App\Utils::generatePassphrase() ] ); $jeroen->role = 'admin'; $jeroen->save(); $reseller = User::create( [ 'email' => 'reseller@' . \config('app.domain'), 'password' => \App\Utils::generatePassphrase() ] ); $reseller->role = 'reseller'; $reseller->save(); $reseller->assignPackage($packageKolab); // for tenants that are not the configured tenant id $tenants = \App\Tenant::where('id', '!=', \config('app.tenant_id'))->get(); foreach ($tenants as $tenant) { $domain = Domain::where('tenant_id', $tenant->id)->first(); $packageKolab = \App\Package::where( [ 'title' => 'kolab', 'tenant_id' => $tenant->id ] )->first(); if ($domain) { $reseller = User::create( [ 'email' => 'reseller@' . $domain->namespace, 'password' => \App\Utils::generatePassphrase() ] ); $reseller->role = 'reseller'; $reseller->tenant_id = $tenant->id; $reseller->save(); $reseller->assignPackage($packageKolab); $user = User::create( [ 'email' => 'user@' . $domain->namespace, 'password' => \App\Utils::generatePassphrase() ] ); $user->tenant_id = $tenant->id; $user->save(); $user->assignPackage($packageKolab); } } } }