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" %>