Compare commits

..

No commits in common. "b890432e5b9a5b95e820373c695dc8b1a13ca358" and "e58036b2b35cc935b98c9c4d422132bc89a7e168" have entirely different histories.

14 changed files with 22 additions and 117 deletions

View File

@ -31,7 +31,6 @@ nav {
nav ul { nav ul {
display: flex; display: flex;
margin: -1px 0 0 0;
padding: 0 1.5em; padding: 0 1.5em;
border: 0; border: 0;
border-bottom: 1px solid #000000; border-bottom: 1px solid #000000;

View File

@ -21,7 +21,8 @@ class AuthMiddleware implements MiddlewareInterface
// TODO: Lots of stuff. Session middleware, auth handler class, etc... // TODO: Lots of stuff. Session middleware, auth handler class, etc...
if ($uri->getPath() !== '/login') { if ($uri->getPath() !== '/login') {
// Check authorization via session // Check authorization via session
if (empty($_SESSION['user_id'])) { // TODO username or user ID?
if (empty($_SESSION['username'])) {
// Not logged in -> Redirect to /login // Not logged in -> Redirect to /login
$response = new Response(); $response = new Response();
return $response return $response

View File

@ -19,15 +19,15 @@ class UserHelper
public function isLoggedIn(): bool public function isLoggedIn(): bool
{ {
return !empty($_SESSION['user_id']); return !empty($_SESSION['username']);
} }
public function getCurrentUser(): AdminUser public function getCurrentUser(): AdminUser
{ {
$userId = $_SESSION['user_id'] ?? null; $username = $_SESSION['username'] ?? null;
if (empty($userId)) { if (empty($username)) {
throw new RuntimeException('Not logged in!'); throw new RuntimeException('Not logged in!');
} }
return $this->adminUserRepository->getUserById($userId); return $this->adminUserRepository->getUserByName($username);
} }
} }

View File

@ -5,8 +5,6 @@ namespace MailAccountAdmin;
use DI\Container; use DI\Container;
use MailAccountAdmin\Common\UserHelper; use MailAccountAdmin\Common\UserHelper;
use MailAccountAdmin\Frontend\Accounts\AccountController;
use MailAccountAdmin\Frontend\Domains\DomainController;
use MailAccountAdmin\Frontend\Login\LoginController; use MailAccountAdmin\Frontend\Login\LoginController;
use MailAccountAdmin\Frontend\Dashboard\DashboardController; use MailAccountAdmin\Frontend\Dashboard\DashboardController;
use MailAccountAdmin\Repositories\AdminUserRepository; use MailAccountAdmin\Repositories\AdminUserRepository;
@ -66,7 +64,7 @@ class Dependencies
); );
}); });
// Frontend controllers // Login page
$container->set(LoginController::class, function (ContainerInterface $c) { $container->set(LoginController::class, function (ContainerInterface $c) {
return new LoginController( return new LoginController(
$c->get(self::TWIG), $c->get(self::TWIG),
@ -74,24 +72,14 @@ class Dependencies
$c->get(AdminUserRepository::class), $c->get(AdminUserRepository::class),
); );
}); });
// Dashboard
$container->set(DashboardController::class, function (ContainerInterface $c) { $container->set(DashboardController::class, function (ContainerInterface $c) {
return new DashboardController( return new DashboardController(
$c->get(self::TWIG), $c->get(self::TWIG),
$c->get(UserHelper::class), $c->get(UserHelper::class),
); );
}); });
$container->set(DomainController::class, function (ContainerInterface $c) {
return new DomainController(
$c->get(self::TWIG),
$c->get(UserHelper::class),
);
});
$container->set(AccountController::class, function (ContainerInterface $c) {
return new AccountController(
$c->get(self::TWIG),
$c->get(UserHelper::class),
);
});
return $container; return $container;
} }

View File

@ -1,19 +0,0 @@
<?php
declare(strict_types=1);
namespace MailAccountAdmin\Frontend\Accounts;
use MailAccountAdmin\Frontend\BaseController;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class AccountController extends BaseController
{
public function showAccounts(Request $request, Response $response): Response
{
$renderData = [
];
return $this->view->render($response, 'accounts.html.twig', $renderData);
}
}

View File

@ -11,6 +11,13 @@ class DashboardController extends BaseController
{ {
public function showDashboard(Request $request, Response $response): Response public function showDashboard(Request $request, Response $response): Response
{ {
return $this->view->render($response, 'dashboard.html.twig'); $currentUser = $this->userHelper->getCurrentUser();
$renderData = [
'username' => $currentUser->getUsername(),
'user' => $currentUser,
];
return $this->view->render($response, 'dashboard.html.twig', $renderData);
} }
} }

View File

@ -1,19 +0,0 @@
<?php
declare(strict_types=1);
namespace MailAccountAdmin\Frontend\Domains;
use MailAccountAdmin\Frontend\BaseController;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class DomainController extends BaseController
{
public function showDomains(Request $request, Response $response): Response
{
$renderData = [
];
return $this->view->render($response, 'domains.html.twig', $renderData);
}
}

View File

@ -66,7 +66,7 @@ class LoginController extends BaseController
} }
// Set login session // Set login session
$_SESSION['user_id'] = $user->getId(); $_SESSION['username'] = $user->getUsername();
return $response return $response
->withHeader('Location', '/') ->withHeader('Location', '/')
->withStatus(303); ->withStatus(303);

View File

@ -17,22 +17,6 @@ class AdminUserRepository
$this->pdo = $pdo; $this->pdo = $pdo;
} }
/**
* @throws AdminUserNotFoundException
*/
public function getUserById(int $userId): AdminUser
{
$statement = $this->pdo->prepare('SELECT * FROM admin_users WHERE admin_id = :admin_id LIMIT 1');
$statement->execute(['admin_id' => $userId]);
if ($statement->rowCount() < 1) {
throw new AdminUserNotFoundException("Admin with ID '$userId' was not found.");
}
$row = $statement->fetch(PDO::FETCH_ASSOC);
return AdminUser::createFromArray($row);
}
/** /**
* @throws AdminUserNotFoundException * @throws AdminUserNotFoundException
*/ */

View File

@ -3,9 +3,7 @@ declare(strict_types=1);
namespace MailAccountAdmin; namespace MailAccountAdmin;
use MailAccountAdmin\Frontend\Accounts\AccountController;
use MailAccountAdmin\Frontend\Dashboard\DashboardController; use MailAccountAdmin\Frontend\Dashboard\DashboardController;
use MailAccountAdmin\Frontend\Domains\DomainController;
use MailAccountAdmin\Frontend\Login\LoginController; use MailAccountAdmin\Frontend\Login\LoginController;
use Slim\App; use Slim\App;
@ -20,13 +18,5 @@ class Routes
// Dashboard // Dashboard
$app->get('/', DashboardController::class . ':showDashboard'); $app->get('/', DashboardController::class . ':showDashboard');
// Domains
$app->get('/domains', DomainController::class . ':showDomains');
$app->get('/domains/{foo}', DomainController::class . ':showDomains');
// Accounts
$app->get('/accounts', AccountController::class . ':showAccounts');
$app->get('/accounts/{foo}', AccountController::class . ':showAccounts');
} }
} }

View File

@ -1,10 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}Accounts{% endblock %}
{% block content %}
<h2>Accounts</h2>
<p>List of accounts ... <b>TODO</b></p>
<p><a href="/accounts/42">Test</a></p>
{% endblock %}

View File

@ -18,15 +18,9 @@
<nav> <nav>
<ul> <ul>
{% macro navbar_item(path, text) -%} <li class="nav_current_page"><a href="/">Dashboard</a></li>
<li{% if current_url() == path or current_url() starts with path ~ '/' %} class="nav_current_page"{% endif %}> <li><a href="/domains">Domains</a></li>
<a href="{{ path }}">{{ text }}</a> <li><a href="/accounts">Accounts</a></li>
</li>
{%- endmacro -%}
{{ _self.navbar_item('/', 'Dashboard') }}
{{ _self.navbar_item('/domains', 'Domains') }}
{{ _self.navbar_item('/accounts', 'Accounts') }}
</ul> </ul>
</nav> </nav>

View File

@ -5,5 +5,5 @@
{% block content %} {% block content %}
<h2>Dashboard</h2> <h2>Dashboard</h2>
<p>Hello, {{ current_user_name }}!</p> <p>Hello, {{ username }}!</p>
{% endblock %} {% endblock %}

View File

@ -1,10 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}Domains{% endblock %}
{% block content %}
<h2>Domains</h2>
<p>List of domains ... <b>TODO</b></p>
<p><a href="/domains/42">Test</a></p>
{% endblock %}