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); } public function showAccountCreate(Request $request, Response $response): Response { return $this->showAccounts($request, $response); } public function showAccountEdit(Request $request, Response $response, array $args): Response { // Parse URL arguments $accountId = (int)$args['id']; // Get account data from database $accountData = $this->accountRepository->fetchAccountById($accountId); $renderData = [ 'id' => $accountId, 'accountUsername' => $accountData['username'], 'accountData' => $accountData, ]; return $this->view->render($response, 'account_edit.html.twig', $renderData); } public function editAccount(Request $request, Response $response, array $args): Response { // TODO: just a placeholder $this->view->getEnvironment()->addGlobal('error', 'Not implemented yet!'); return $this->showAccountEdit($request, $response, $args); } public function showAccountDelete(Request $request, Response $response, array $args): Response { // Parse URL arguments $accountId = (int)$args['id']; // Get account data and list of aliases from database $accountData = $this->accountRepository->fetchAccountById($accountId); $aliases = $this->aliasRepository->fetchAliasesForUserId($accountId); $renderData = [ 'id' => $accountId, 'accountUsername' => $accountData['username'], 'aliases' => $aliases, ]; return $this->view->render($response, 'account_delete.html.twig', $renderData); } public function deleteAccount(Request $request, Response $response, array $args): Response { // TODO: just a placeholder $this->view->getEnvironment()->addGlobal('error', 'Not implemented yet!'); return $this->showAccountDelete($request, $response, $args); } }