accountRepository = $accountRepository; $this->aliasRepository = $aliasRepository; } public function showAccounts(Request $request, Response $response): Response { // Parse query parameters for filters $queryParams = $request->getQueryParams(); $filterByDomain = $queryParams['domain'] ?? null; $renderData = [ 'filterDomain' => $filterByDomain, 'accountList' => $this->accountRepository->fetchAccountList($filterByDomain), ]; return $this->view->render($response, 'accounts.html.twig', $renderData); } public function showAccountDetails(Request $request, Response $response, array $args): Response { // Parse URL arguments $accountId = (int)$args['id']; // Get account data from database $accountData = $this->accountRepository->fetchAccountById($accountId); $accountUsername = $accountData['username']; $accountData['domain'] = explode('@', $accountUsername, 2)[1]; // Don't display the password hash, but at least the type of hash (used hash algorithm) if ($accountData['password'] === '') { $passwordHashType = 'empty'; } else { $passwordHashInfo = password_get_info($accountData['password']); $passwordHashType = $passwordHashInfo['algoName'] ?? 'unknown'; } // Get list of aliases for this account $aliases = $this->aliasRepository->fetchAliasesForUserId($accountId); $renderData = [ 'id' => $accountId, 'accountUsername' => $accountUsername, 'accountData' => $accountData, 'passwordHashType' => $passwordHashType, 'aliases' => $aliases, ]; return $this->view->render($response, 'account_details.html.twig', $renderData); } }