diff --git a/src/main/java/fr/geoffrey/medical_training_tracker/config/SecSecurityConfig.java b/src/main/java/fr/geoffrey/medical_training_tracker/config/SecSecurityConfig.java index c508bd3..3132e85 100644 --- a/src/main/java/fr/geoffrey/medical_training_tracker/config/SecSecurityConfig.java +++ b/src/main/java/fr/geoffrey/medical_training_tracker/config/SecSecurityConfig.java @@ -87,6 +87,7 @@ public class SecSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers(IndexController.URL_INDEX).permitAll() .antMatchers(IndexController.URL_LOGIN).permitAll() .antMatchers(IndexController.URL_REGISTER).permitAll() + .antMatchers(IndexController.URL_CHANGE_PASSWORD).hasAnyRole(ROLE_ADMIN, ROLE_USER) .antMatchers(IndexController.URL_LOGOUT).hasAnyRole(ROLE_ADMIN, ROLE_USER) .anyRequest().authenticated() .and() diff --git a/src/main/java/fr/geoffrey/medical_training_tracker/controller/LoginController.java b/src/main/java/fr/geoffrey/medical_training_tracker/controller/LoginController.java index 0e7eccd..3ec1053 100644 --- a/src/main/java/fr/geoffrey/medical_training_tracker/controller/LoginController.java +++ b/src/main/java/fr/geoffrey/medical_training_tracker/controller/LoginController.java @@ -8,13 +8,13 @@ import javax.servlet.http.HttpSessionListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; - @Controller public class LoginController implements HttpSessionListener { @@ -22,9 +22,12 @@ public class LoginController implements HttpSessionListener { public static final String MODEL_MAP_REGISTER_NAME = "MODEL_MAP_REGISTER_NAME"; public static final String MODEL_MAP_REGISTER_ERROR_MESSAGE = "MODEL_MAP_REGISTER_ERROR_MESSAGE"; + public static final String MODEL_MAP_CHANGE_PASSWORD_ERROR_MESSAGE = "MODEL_MAP_CHANGE_PASSWORD_ERROR_MESSAGE"; + public static final String MODEL_MAP_CHANGE_PASSWORD_SUCCESS_MESSAGE = "MODEL_MAP_CHANGE_PASSWORD_SUCCESS_MESSAGE"; + @Autowired IServiceRegister serviceRegister; - + public static boolean isUserAlreadyAuth(HttpSession httpSession) { Authentication authentication = (Authentication) httpSession.getAttribute(IndexController.SESSION_ATTRIBUTE_AUTHENTICATION); return authentication != null && authentication.isAuthenticated(); @@ -35,7 +38,7 @@ public class LoginController implements HttpSessionListener { String page = IndexController.PAGE_LOGIN; if (isUserAlreadyAuth(httpSession)) { // Deja authentifie, redirection sur le viewer photo - page = IndexController.URL_REDIRECT+IndexController.URL_INDEX; + page = IndexController.URL_REDIRECT + IndexController.URL_INDEX; } else if (errAuth) { pModel.addAttribute("isErrorAuth", true); } @@ -71,6 +74,34 @@ public class LoginController implements HttpSessionListener { pModel.addAttribute(MODEL_MAP_REGISTER_ERROR_MESSAGE, "Le login existe déjà."); } + return page; + } + + @RequestMapping(value = IndexController.URL_CHANGE_PASSWORD, method = RequestMethod.POST) + public String doPostChangePassword(final ModelMap pModel, HttpSession httpSession, + @RequestParam(name = "old_password", required = true) String oldPassword, + @RequestParam(name = "password", required = true) String newPassword, + @RequestParam(name = "password_check", required = true) String newPasswordCheck) { + + String page; + if (LoginController.isUserAlreadyAuth(httpSession)) { + Authentication authentication = (Authentication) httpSession.getAttribute(IndexController.SESSION_ATTRIBUTE_AUTHENTICATION); + Object oUserDetails = authentication.getPrincipal(); + if (oUserDetails instanceof UserDetails) { + UserDetails userDetails = (UserDetails) oUserDetails; + boolean changed = serviceRegister.changePassword(userDetails.getUsername(), oldPassword, newPassword, newPasswordCheck); + if (changed) { + pModel.addAttribute(MODEL_MAP_CHANGE_PASSWORD_SUCCESS_MESSAGE, "true"); + pModel.addAttribute(MODEL_MAP_CHANGE_PASSWORD_ERROR_MESSAGE, "false"); + } else { + pModel.addAttribute(MODEL_MAP_CHANGE_PASSWORD_SUCCESS_MESSAGE, "false"); + pModel.addAttribute(MODEL_MAP_CHANGE_PASSWORD_ERROR_MESSAGE, "true"); + } + } + page = IndexController.URL_REDIRECT + IndexController.URL_ANIMAL_LIST; + } else { + page = IndexController.URL_REDIRECT + IndexController.URL_LOGIN; + } return page; } diff --git a/src/main/java/fr/geoffrey/medical_training_tracker/dao/IUserDao.java b/src/main/java/fr/geoffrey/medical_training_tracker/dao/IUserDao.java index 7131b40..163e0ac 100644 --- a/src/main/java/fr/geoffrey/medical_training_tracker/dao/IUserDao.java +++ b/src/main/java/fr/geoffrey/medical_training_tracker/dao/IUserDao.java @@ -7,4 +7,6 @@ public interface IUserDao extends CommonDao { public User getUser(String login); public boolean addUser(String login, String hashPassword, String name) throws UserAlreadyExistException; + + public boolean updatePassword(String username, String hashedPassword); } diff --git a/src/main/java/fr/geoffrey/medical_training_tracker/dao/bdd/postgres/UserBddDao.java b/src/main/java/fr/geoffrey/medical_training_tracker/dao/bdd/postgres/UserBddDao.java index 1d7f2d9..8edab2f 100644 --- a/src/main/java/fr/geoffrey/medical_training_tracker/dao/bdd/postgres/UserBddDao.java +++ b/src/main/java/fr/geoffrey/medical_training_tracker/dao/bdd/postgres/UserBddDao.java @@ -114,4 +114,38 @@ public class UserBddDao extends PostgresSqlDao implements IUserDao { } return ret; } + + @Override + public boolean updatePassword(String username, String hashedPassword) { + boolean ret = false; + Connection conn = null; + PreparedStatement statement = null; + try { + conn = mDataSource.getConnection(); + statement = conn.prepareStatement("UPDATE "+TABLE_NAME+" SET password = ? WHERE login = ?;"); + statement.setString(1, hashedPassword); + statement.setString(2, username); + System.out.println(IndexController.LOG_TAG + " SQL -> " + statement.toString()); + statement.executeUpdate(); + ret = true; + } catch (SQLException ex) { + System.err.println(IndexController.LOG_TAG + " SQLException -> updatePassword()"); + } finally { + if (statement != null) { + try { + statement.close(); + } catch (SQLException ex) { + System.err.println(IndexController.LOG_TAG + " Failed close statement -> updatePassword()"); + } + } + if (conn != null) { + try { + conn.close(); + } catch (SQLException ex) { + System.err.println(IndexController.LOG_TAG + " Failed close connection -> updatePassword()"); + } + } + } + return ret; + } } diff --git a/src/main/webapp/vue/animal_list.jsp b/src/main/webapp/vue/animal_list.jsp index e4c6368..0dc146a 100644 --- a/src/main/webapp/vue/animal_list.jsp +++ b/src/main/webapp/vue/animal_list.jsp @@ -4,6 +4,7 @@ <%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> <%@ page isELIgnored="false" %> + <%@ include file="base/language.jsp" %> @@ -33,7 +34,7 @@ <%@ include file="base/navbar.jsp" %>
-
+

List de vos animaux

@@ -51,26 +52,51 @@
-->
-
-
-
-
+ +
+

Ajouter un animal

- +
+
+
+
+

Changer de mot de passe

+
+
+ + + + + + +
+ +
+ +
+
Erreur lors de la mise à jour du mot de passe
+
+
+ +
+
Mot de passe mit à jour avec succès
+
+
+
<%@ include file="base/footer.jsp" %> -