. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Log; use Fisharebest\Webtrees\Services\UserService; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function response; /** * Delete a user. */ class DeleteUser implements RequestHandlerInterface { private UserService $user_service; /** * @param UserService $user_service */ public function __construct(UserService $user_service) { $this->user_service = $user_service; } /** * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $user_id = (int) $request->getAttribute('user_id'); $user = $this->user_service->find($user_id); if ($user === null) { throw new HttpNotFoundException('User ID ' . $user_id . ' not found'); } if (Auth::isAdmin($user)) { throw new HttpAccessDeniedException('Cannot delete an administrator'); } Log::addAuthenticationLog('Deleted user: ' . $user->userName()); $this->user_service->delete($user); return response(); } }