diff --git a/src/app/Console/Commands/User/CreateCommand.php b/src/app/Console/Commands/User/CreateCommand.php new file mode 100644 --- /dev/null +++ b/src/app/Console/Commands/User/CreateCommand.php @@ -0,0 +1,90 @@ +argument('email'); + $packages = $this->option('package'); + $admin = $this->option('admin'); + $password = $this->option('password'); + + list($local, $domainName) = explode('@', $email, 2); + + $domain = $this->getDomain($domainName); + + if (!$domain) { + $this->error("No such domain {$domainName}."); + 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)) { + $this->error("{$email}: {$error}"); + return 1; + } + + DB::beginTransaction(); + + $role = null; + if ($admin) { + $role = 'admin'; + } + + if (!$password) { + $password = \App\Utils::generatePassphrase(); + } + + $user = \App\User::create( + [ + 'email' => $email, + 'password' => $password, + 'role' => $role + ] + ); + + foreach ($packages as $i => $package) { + $userPackage = \App\Package::where(['title' => $package])->first(); + if (!$userPackage) { + $this->error("Invalid package: {$package}"); + return 1; + } + $user->assignPackage($userPackage); + } + + DB::commit(); + + $this->info($user->id); + } +}