diff --git a/src/app/Console/Commands/User/CreateCommand.php b/src/app/Console/Commands/User/CreateCommand.php --- a/src/app/Console/Commands/User/CreateCommand.php +++ b/src/app/Console/Commands/User/CreateCommand.php @@ -57,17 +57,8 @@ return 1; } - if ($domain->isPublic()) { - $this->error("Domain {$domainName} is public."); - return 1; - } - - $owner = $domain->wallet()->owner; - - // Validate email address - if ($error = UsersController::validateEmail($email, $owner, $existingDeletedUser)) { - $this->error("{$email}: {$error}"); - return 1; + if (!$domain->isPublic()) { + $owner = $domain->wallet()->owner; } foreach ($packages as $package) { @@ -94,6 +85,18 @@ return 1; } + if (empty($owner)) { + $owner = $user; + } + + if ($role != User::ROLE_ADMIN && $role != User::ROLE_RESELLER) { + // Validate email address + if ($error = UsersController::validateEmail($email, $owner, $existingDeletedUser)) { + $this->error("{$email}: {$error}"); + return 1; + } + } + DB::beginTransaction(); if ($existingDeletedUser) { @@ -103,10 +106,6 @@ $user->save(); - if (empty($owner)) { - $owner = $user; - } - foreach ($packagesToAssign as $package) { $owner->assignPackage($package, $user); } diff --git a/src/tests/Feature/Console/User/CreateTest.php b/src/tests/Feature/Console/User/CreateTest.php --- a/src/tests/Feature/Console/User/CreateTest.php +++ b/src/tests/Feature/Console/User/CreateTest.php @@ -16,6 +16,7 @@ parent::setUp(); $this->deleteTestUser('user@kolab.org'); + $this->deleteTestUser('user@kolabnow.com'); $this->deleteTestUser('admin@kolab.org'); $this->deleteTestUser('reseller@unknown.domain.tld'); } @@ -26,6 +27,7 @@ public function tearDown(): void { $this->deleteTestUser('user@kolab.org'); + $this->deleteTestUser('user@kolabnow.com'); $this->deleteTestUser('admin@kolab.org'); $this->deleteTestUser('reseller@unknown.domain.tld'); @@ -66,12 +68,6 @@ $this->assertSame(1, $code); $this->assertSame("jack.daniels@kolab.org: The specified email is not available.", $output); - // Public domain not allowed in the group email address - $code = \Artisan::call("user:create user@kolabnow.com"); - $output = trim(\Artisan::output()); - $this->assertSame(1, $code); - $this->assertSame("Domain kolabnow.com is public.", $output); - // Valid (user) $code = \Artisan::call("user:create user@kolab.org --package=kolab"); $output = trim(\Artisan::output()); @@ -98,6 +94,13 @@ $this->assertEquals($user->id, $output); $this->assertEquals($user->role, User::ROLE_RESELLER); + // Valid (public domain) + $code = \Artisan::call("user:create user@kolabnow.com"); + $output = trim(\Artisan::output()); + $user = User::where('email', 'user@kolabnow.com')->first(); + $this->assertSame(0, $code); + $this->assertEquals($user->id, $output); + // Invalid role $code = \Artisan::call("user:create unknwon@kolab.org --role=unknown"); $output = trim(\Artisan::output());