diff --git a/config/routes.yml b/config/routes.yml index c521124..f2a29a1 100644 --- a/config/routes.yml +++ b/config/routes.yml @@ -11,6 +11,9 @@ routes: get: Register\Show post: Register\Action /logout: Logout + /verify/{verify}: + get: Verify\Show + post: Verify\Action /ca: CA /crl: CRL /panel: diff --git a/public/css/main.css b/public/css/main.css index ae4eb0a..5c6cbaf 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -114,6 +114,10 @@ ul.topnav li a:hover { ul.topnav li.icon { display: none; } +.message { + padding: 15px; + font-size: 1.2em; } + input { padding: 10px; box-sizing: border-box; diff --git a/public/css/main.css.map b/public/css/main.css.map index 4606f8b..171d088 100644 --- a/public/css/main.css.map +++ b/public/css/main.css.map @@ -1,7 +1,7 @@ { "version": 3, -"mappings": "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", -"sources": ["main.scss","modules/_modules.scss","partials/_base.scss","partials/_navigation.sass","partials/_forms.sass","partials/_fonts.scss","partials/_typography.scss"], +"mappings": "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", +"sources": ["main.scss","modules/_modules.scss","partials/_base.scss","partials/_navigation.sass","partials/_messages.scss","partials/_forms.sass","partials/_fonts.scss","partials/_typography.scss"], "names": [], "file": "main.css" } \ No newline at end of file diff --git a/public/css/main.scss b/public/css/main.scss index e478a89..124780a 100644 --- a/public/css/main.scss +++ b/public/css/main.scss @@ -13,6 +13,7 @@ // partials @import "partials/_base"; @import "partials/_navigation"; +@import "partials/_messages"; @import "partials/_forms"; @import "partials/_fonts"; @import "partials/_typography"; diff --git a/public/css/partials/_messages.scss b/public/css/partials/_messages.scss new file mode 100644 index 0000000..1d24f5e --- /dev/null +++ b/public/css/partials/_messages.scss @@ -0,0 +1,4 @@ +.message { + padding: 15px; + font-size: 1.2em; +} \ No newline at end of file diff --git a/src/Core.php b/src/Core.php index 011bbc9..8f7869e 100644 --- a/src/Core.php +++ b/src/Core.php @@ -315,6 +315,10 @@ class Core implements ContainerInterface return $this->get('slim'); } + /** + * @param UriInterface $uri + * @return string + */ private function getBaseUrlFromUri(UriInterface $uri) { $baseUrl = $uri->getScheme() . '://' . $uri->getHost(); diff --git a/src/Handler/Login/Action.php b/src/Handler/Login/Action.php index dbcc95e..b7e3d80 100644 --- a/src/Handler/Login/Action.php +++ b/src/Handler/Login/Action.php @@ -28,7 +28,7 @@ class Action extends Main $loggedUser = $user->login($username, $password); if ($loggedUser === null) { - $segment->setFlash("error", "Login failed, username or password are incorrect"); + $segment->setFlash("message", "Login failed, username or password are incorrect"); $segment->setFlash('username', $username); return $this->redirect('/login'); diff --git a/src/Handler/Login/Show.php b/src/Handler/Login/Show.php index 0441628..f58db18 100644 --- a/src/Handler/Login/Show.php +++ b/src/Handler/Login/Show.php @@ -36,7 +36,7 @@ class Show extends Main $segment = $this->get('session')->getSegment('main'); $this->get('twig-vars')->def('username', $segment->getFlash('username')); - $this->get('twig-vars')->def('error', $segment->getFlash('error')); + $this->get('twig-vars')->def('message', $segment->getFlash('message')); return $this->render( "login.html.twig" diff --git a/src/Handler/Main.php b/src/Handler/Main.php index d09c167..a89ec25 100644 --- a/src/Handler/Main.php +++ b/src/Handler/Main.php @@ -156,4 +156,10 @@ abstract class Main implements ContainerInterface { return $this->getRequest()->getAttribute($name); } + + public function notFound() { + /** @var callable $notFoundHandler */ + $notFoundHandler = $this->get('notFoundHandler'); + return $notFoundHandler($this->getRequest(), $this->getResponse()); + } } \ No newline at end of file diff --git a/src/Handler/Verify/Action.php b/src/Handler/Verify/Action.php new file mode 100644 index 0000000..e7933ef --- /dev/null +++ b/src/Handler/Verify/Action.php @@ -0,0 +1,10 @@ +attr('verify'); + $verifyParts = explode('-', $verify, 2); + + if (count($verifyParts) < 2) { + return $this->notFound(); + } + + $id = intval($verifyParts[0]); + $verification = $verifyParts[1]; + + $user = $this->getUser(); + + if ($user !== null) { + + $email = $user->getEmailAddressRelatedByEmail(); + + if ($email === null || $email->getId() !== $id || $email->getVerified()) { + return $this->notFound(); + } + + /* @var \Aura\Session\Session $session */ + $session = $this->get('session'); + $segment = $session->getSegment('main'); + $segment->set('userId', null); + $this->setUser(null); + } + + $email = EmailAddressQuery::create()->findOneById($id); + + if ($email === null || $email->getVerified() || $email->getVerification() !== $verification) { + return $this->notFound(); + } + + return $this->render('login.html.twig', [ + 'message' => 'Please login to verify your email', + 'action' => $this->getRequest()->getUri()->getPath() + ]); + } +} \ No newline at end of file diff --git a/src/Service/Mail.php b/src/Service/Mail.php index 54b8c51..f86e35c 100644 --- a/src/Service/Mail.php +++ b/src/Service/Mail.php @@ -36,7 +36,7 @@ class Mail extends Main $txt = $twig->render($template, $context); - list($subject, $contents) = explode('===', $txt); + list($subject, $contents) = explode('===', $txt, 2); $message->setSubject(trim($subject)); $message->setContents(trim($contents)); diff --git a/views/login.html.twig b/views/login.html.twig index 5d3b21a..61cc442 100644 --- a/views/login.html.twig +++ b/views/login.html.twig @@ -11,13 +11,13 @@
- {% if error %} - - {% endif %} + {% if message %} + + {% endif %} -
+