From 78fd9172a91ec39a09ced550cb2b166be0668e00 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 29 Apr 2018 21:42:13 +0200
Subject: [PATCH] #264 - added feedback messages for wrong password and
 successful logout

---
 .../controller/LoginController.java           | 13 +++++++-
 src/main/resources/languages/_de.properties   |  1 +
 src/main/resources/languages/_en.properties   |  1 +
 src/main/resources/static/css/style.css       | 13 ++++++++
 src/main/resources/templates/login.ftl        | 30 +++++++++++++++++--
 5 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/LoginController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/LoginController.java
index b889c19e2..015293630 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/LoginController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/LoginController.java
@@ -1,16 +1,27 @@
 package de.deadlocker8.budgetmaster.controller;
 
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
 
 @Controller
 public class LoginController extends BaseController
 {
 	@RequestMapping("/login")
-	public String login(HttpServletRequest request)
+	public String login(HttpServletRequest request, Model model)
 	{
+		Map<String, String[]> paramMap = request.getParameterMap();
+
+		if(paramMap.containsKey("error"))
+			model.addAttribute("isError", true);
+
+		if(paramMap.containsKey("logout"))
+			model.addAttribute("isLogout", true);
+
 		request.getSession().setAttribute("preLoginURL", request.getHeader("Referer"));
 		return "login";
 	}
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index dce78b746..03be375e8 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -362,6 +362,7 @@ settingstab.button.server.local=Lokaler Server
 
 login.password=Passwort
 login.button=Login
+logout.success=Erfolgreich abgemeldet.
 
 datepicker.label.month=Monat:
 datepicker.label.year=Jahr:
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index fc247d5db..5505dfe66 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -361,6 +361,7 @@ settingstab.button.server.local=Local Server
 
 login.password=Password
 login.button=Login
+logout.success=Successfully logged out.
 
 datepicker.label.month=Month:
 datepicker.label.year=Year:
diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css
index 71294588f..66f3bdc4f 100644
--- a/src/main/resources/static/css/style.css
+++ b/src/main/resources/static/css/style.css
@@ -309,6 +309,19 @@ ul.dropdown-content.select-dropdown li.selected {
     padding: 5px 32px 12px 32px;
 }
 
+.login-button {
+    text-transform: none;
+}
+
+.login-margin-top {
+    margin-top: 20px;
+}
+
+.login-message {
+    width: auto;
+    margin: auto
+}
+
 .hidden {
     display: none;
 }
diff --git a/src/main/resources/templates/login.ftl b/src/main/resources/templates/login.ftl
index e8e8a45ff..0c853bc89 100644
--- a/src/main/resources/templates/login.ftl
+++ b/src/main/resources/templates/login.ftl
@@ -20,14 +20,40 @@
                                 <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                                 <input type="hidden" name="username" value="Default">
 
-                                <div class="row">
+                                <div class="row no-margin-bottom">
                                     <div class="input-field col s12">
                                         <input id="password" type="password" name="password">
                                         <label for="password">${locale.getString("login.password")}</label>
                                     </div>
                                 </div>
 
-                                <div class="row">
+                                <#if isError??>
+                                    <div class="row no-margin-bottom">
+                                        <div class="col s12 center-align">
+                                            <table class="text-red login-message">
+                                                <tr>
+                                                    <td><i class="material-icons">warning</i></td>
+                                                    <td>${locale.getString("warning.wrong.password")}</td>
+                                                </tr>
+                                            </table>
+                                        </div>
+                                    </div>
+                                </#if>
+
+                                <#if isLogout??>
+                                    <div class="row no-margin-bottom">
+                                        <div class="col s12 center-align">
+                                            <table class="text-dark-green login-message">
+                                                <tr>
+                                                    <td><i class="material-icons">info_outline</i></td>
+                                                    <td>${locale.getString("logout.success")}</td>
+                                                </tr>
+                                            </table>
+                                        </div>
+                                    </div>
+                                </#if>
+
+                                <div class="row login-margin-top">
                                     <div class="col s12 right-align">
                                         <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="action">
                                             <i class="material-icons left">send</i>${locale.getString("login.button")}
-- 
GitLab