2017-09-16 03:13:33 +00:00
|
|
|
<?php
|
2017-09-26 02:43:01 +00:00
|
|
|
/**
|
2017-09-16 03:13:33 +00:00
|
|
|
* Pterodactyl - Panel
|
|
|
|
* Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
|
|
|
|
*
|
2017-09-26 02:43:01 +00:00
|
|
|
* This software is licensed under the terms of the MIT license.
|
|
|
|
* https://opensource.org/licenses/MIT
|
2017-09-16 03:13:33 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Pterodactyl\Console\Commands\User;
|
|
|
|
|
|
|
|
use Webmozart\Assert\Assert;
|
2020-09-13 19:21:44 +00:00
|
|
|
use Pterodactyl\Models\User;
|
2017-09-16 03:13:33 +00:00
|
|
|
use Illuminate\Console\Command;
|
|
|
|
use Pterodactyl\Services\Users\UserDeletionService;
|
|
|
|
use Pterodactyl\Contracts\Repository\UserRepositoryInterface;
|
|
|
|
|
|
|
|
class DeleteUserCommand extends Command
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var \Pterodactyl\Services\Users\UserDeletionService
|
|
|
|
*/
|
|
|
|
protected $deletionService;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $description = 'Deletes a user from the Panel if no servers are attached to their account.';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var \Pterodactyl\Contracts\Repository\UserRepositoryInterface
|
|
|
|
*/
|
|
|
|
protected $repository;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $signature = 'p:user:delete {--user=}';
|
|
|
|
|
2017-09-16 04:46:22 +00:00
|
|
|
/**
|
|
|
|
* DeleteUserCommand constructor.
|
|
|
|
*
|
2019-09-06 04:32:57 +00:00
|
|
|
* @param \Pterodactyl\Services\Users\UserDeletionService $deletionService
|
2017-09-16 04:46:22 +00:00
|
|
|
*/
|
2020-09-13 19:21:44 +00:00
|
|
|
public function __construct(UserDeletionService $deletionService) {
|
2017-09-16 03:13:33 +00:00
|
|
|
parent::__construct();
|
|
|
|
|
|
|
|
$this->deletionService = $deletionService;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return bool
|
|
|
|
* @throws \Pterodactyl\Exceptions\DisplayException
|
|
|
|
*/
|
|
|
|
public function handle()
|
|
|
|
{
|
|
|
|
$search = $this->option('user') ?? $this->ask(trans('command/messages.user.search_users'));
|
2020-09-13 19:21:44 +00:00
|
|
|
Assert::notEmpty($search, 'Search term should be an email address, got: %s.');
|
|
|
|
|
|
|
|
$results = User::query()
|
|
|
|
->where('email', 'LIKE', "$search%")
|
|
|
|
->where('username', 'LIKE', "$search%")
|
|
|
|
->get();
|
2017-09-16 03:13:33 +00:00
|
|
|
|
|
|
|
if (count($results) < 1) {
|
|
|
|
$this->error(trans('command/messages.user.no_users_found'));
|
2017-09-16 06:45:56 +00:00
|
|
|
if ($this->input->isInteractive()) {
|
2017-09-16 03:13:33 +00:00
|
|
|
return $this->handle();
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2017-09-16 06:45:56 +00:00
|
|
|
if ($this->input->isInteractive()) {
|
2017-09-16 03:13:33 +00:00
|
|
|
$tableValues = [];
|
|
|
|
foreach ($results as $user) {
|
|
|
|
$tableValues[] = [$user->id, $user->email, $user->name];
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->table(['User ID', 'Email', 'Name'], $tableValues);
|
|
|
|
if (! $deleteUser = $this->ask(trans('command/messages.user.select_search_user'))) {
|
|
|
|
return $this->handle();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (count($results) > 1) {
|
|
|
|
$this->error(trans('command/messages.user.multiple_found'));
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
$deleteUser = $results->first();
|
|
|
|
}
|
|
|
|
|
2017-09-16 06:45:56 +00:00
|
|
|
if ($this->confirm(trans('command/messages.user.confirm_delete')) || ! $this->input->isInteractive()) {
|
2017-09-16 03:13:33 +00:00
|
|
|
$this->deletionService->handle($deleteUser);
|
|
|
|
$this->info(trans('command/messages.user.deleted'));
|
|
|
|
}
|
2020-09-13 19:21:44 +00:00
|
|
|
|
|
|
|
return;
|
2017-09-16 03:13:33 +00:00
|
|
|
}
|
|
|
|
}
|