From 9fbad31470debf555bc17bf62e1807fec6015364 Mon Sep 17 00:00:00 2001 From: jleroy Date: Tue, 30 Apr 2024 14:29:14 +0200 Subject: [PATCH] Gestion login after register beta --- .../enchere/controllers/AdminController.java | 8 +- .../controllers/InscriptionController.java | 2 +- .../enchere/controllers/LoginController.java | 24 ++++- .../enchere/dal/EnchereRepositoryImpl.java | 2 +- .../eni/enchere/dal/UserRepositoryImpl.java | 14 +-- .../resources/static/images/paiementSecu.png | Bin 0 -> 23059 bytes src/main/resources/templates/bank.html | 93 +++++++++--------- 7 files changed, 81 insertions(+), 62 deletions(-) create mode 100644 src/main/resources/static/images/paiementSecu.png diff --git a/src/main/java/fr/eni/enchere/controllers/AdminController.java b/src/main/java/fr/eni/enchere/controllers/AdminController.java index 53bf3e8..61cd8dd 100644 --- a/src/main/java/fr/eni/enchere/controllers/AdminController.java +++ b/src/main/java/fr/eni/enchere/controllers/AdminController.java @@ -2,14 +2,8 @@ package fr.eni.enchere.controllers; import fr.eni.enchere.bll.CategorieService; import fr.eni.enchere.bll.UserService; -import fr.eni.enchere.bo.Article; import fr.eni.enchere.bo.Categorie; -import fr.eni.enchere.bo.Retrait; -import fr.eni.enchere.bo.UserProfil; import fr.eni.enchere.dal.UserRepositoryImpl; -import jakarta.servlet.http.HttpServletRequest; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @@ -75,6 +69,8 @@ public class AdminController { userService.enableUtilisateur(id); }else { userService.disableUtilisateur(id); + //Désactiver tout + } return "redirect:/admin"; } diff --git a/src/main/java/fr/eni/enchere/controllers/InscriptionController.java b/src/main/java/fr/eni/enchere/controllers/InscriptionController.java index 8004b20..96e26fb 100644 --- a/src/main/java/fr/eni/enchere/controllers/InscriptionController.java +++ b/src/main/java/fr/eni/enchere/controllers/InscriptionController.java @@ -138,7 +138,7 @@ public class InscriptionController { // Sinon, enregistrer l'utilisateur et rediriger vers la page de connexion userService.setUtilisateur(userProfile); // Dans votre méthode setUser après la validation réussie - UriComponentsBuilder builder = UriComponentsBuilder.fromPath("/login"); + UriComponentsBuilder builder = UriComponentsBuilder.fromPath("/login/register"); builder.queryParam("username", userProfile.getPseudo()); builder.queryParam("password", userProfile.getPassword()); // Rediriger vers la méthode POST de /login avec les paramètres diff --git a/src/main/java/fr/eni/enchere/controllers/LoginController.java b/src/main/java/fr/eni/enchere/controllers/LoginController.java index f8063bb..80aa604 100644 --- a/src/main/java/fr/eni/enchere/controllers/LoginController.java +++ b/src/main/java/fr/eni/enchere/controllers/LoginController.java @@ -9,9 +9,11 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller +@RequestMapping("/login") public class LoginController { @Autowired @@ -22,7 +24,7 @@ public class LoginController { this.userService = userService; } - @GetMapping("/login") + @GetMapping public String login(Model modele) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!authentication.getName().equals("anonymousUser")){ @@ -31,13 +33,29 @@ public class LoginController { return "security/login"; } - @PostMapping("/login") - public String login(@RequestParam("username") String username, @RequestParam("password") String password) { + @PostMapping + public String login(@RequestParam("username") String username, @RequestParam("password") String password, + @RequestParam(value = "username", required = false) String usernameByRegister, + @RequestParam(value = "password", required = false) String passwordByRegister) { UserProfil user = userService.utilisateurByName(username); + UserProfil userRegister = userService.utilisateurByName(usernameByRegister); if (user != null && user.getPassword().equals(password)) { return "redirect:/enchere"; } else { return "redirect:/security/login?error"; } } + + @PostMapping("/register") + public String login(@RequestParam(value = "username", required = true) String usernameByRegister, + @RequestParam(value = "password", required = true) String passwordByRegister) { + UserProfil userRegister = userService.utilisateurByName(usernameByRegister); + System.out.println(usernameByRegister); + if (userRegister != null && userRegister.getPassword().equals(passwordByRegister)) { + return "redirect:/enchere"; + } else { + return "redirect:/security/login?error"; + } + } + } diff --git a/src/main/java/fr/eni/enchere/dal/EnchereRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/EnchereRepositoryImpl.java index 55390b4..6d02d58 100644 --- a/src/main/java/fr/eni/enchere/dal/EnchereRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/EnchereRepositoryImpl.java @@ -51,7 +51,7 @@ public class EnchereRepositoryImpl implements EnchereRepository { @Override public List findByIdArticle(int idArticle) { - String sql = "SELECT * FROM ENCHERES WHERE no_article = ?"; + String sql = "SELECT * FROM ENCHERES WHERE no_article = ? AND isDelete = 0"; List encheres = jdbcTemplate.query(sql, new EnchereRowMapper(), idArticle); return encheres; } diff --git a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java index af16ee6..19ffe84 100644 --- a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java @@ -56,28 +56,28 @@ public class UserRepositoryImpl implements UserRepository { @Override public UserProfil findByUsername(String username) { - String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = ? OR email = ? AND isDelete = 0"; + String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = ? OR email = ? AND isDelete = 0 AND isDisabled = 0"; UserProfil user = jdbcTemplate.queryForObject(sql, new UserRowMapper(), username, username); return user; } @Override public UserProfil findUserByEmail(String email) { - String sql = "SELECT * FROM UTILISATEURS WHERE email = ? AND isDelete = 0"; + String sql = "SELECT * FROM UTILISATEURS WHERE email = ? AND isDelete = 0 AND isDisabled = 0"; UserProfil user = jdbcTemplate.queryForObject(sql, new UserRowMapper(), email); return user; } @Override public List findAllUsernames() { - String sql = "SELECT pseudo FROM UTILISATEURS WHERE isDelete = 0"; + String sql = "SELECT pseudo FROM UTILISATEURS WHERE isDelete = 0 AND isDisabled = 0"; List usernames = jdbcTemplate.queryForList(sql, String.class); return usernames; } @Override public List findAllEmail() { - String sql = "SELECT email FROM UTILISATEURS WHERE isDelete = 0"; + String sql = "SELECT email FROM UTILISATEURS WHERE isDelete = 0 AND isDisabled = 0"; List email = jdbcTemplate.queryForList(sql, String.class); return email; } @@ -85,7 +85,7 @@ public class UserRepositoryImpl implements UserRepository { @Override public String findByEmail(String email) { //Vérifie si un email existe dans la base et est valide - String sql = "SELECT email FROM UTILISATEURS WHERE isDisabled = 0 AND email = ?"; + String sql = "SELECT email FROM UTILISATEURS WHERE isDisabled = 0 AND email = ? AND isDelete = 0"; try { return jdbcTemplate.queryForObject(sql, new Object[]{email}, String.class); } catch (EmptyResultDataAccessException e) { @@ -96,14 +96,14 @@ public class UserRepositoryImpl implements UserRepository { @Override public List findAll() { - String sql = "SELECT * FROM UTILISATEURS WHERE isDelete = 0"; + String sql = "SELECT * FROM UTILISATEURS WHERE isDelete = 0 AND isDisabled = 0"; List users = jdbcTemplate.query(sql, new UserRowMapper()); return users; } @Override public UserProfil findById(int id) { - String sql = "SELECT * FROM UTILISATEURS WHERE no_utilisateur = ?"; + String sql = "SELECT * FROM UTILISATEURS WHERE no_utilisateur = ? AND isDelete = 0 AND isDisabled = 0"; UserProfil user = jdbcTemplate.queryForObject(sql, new UserRowMapper(), id); return user; } diff --git a/src/main/resources/static/images/paiementSecu.png b/src/main/resources/static/images/paiementSecu.png new file mode 100644 index 0000000000000000000000000000000000000000..58153ac9667c5c17eae1ecb0783a4861f9f9c81e GIT binary patch literal 23059 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
-
-
-
- - -
-
    -
  • -
+
+
+ +
+ + +
+
    +
  • +
+
-
-
- - -
-
    -
  • -
+
+ + +
+
    +
  • +
+
-
-
- - -
-
    -
  • -
+
+ + +
+
    +
  • +
+
-
-
- - -
-
    -
  • -
+
+ + +
+
    +
  • +
+
-
-
- - -
-
    -
  • -
+
+ + +
+
    +
  • +
+
-
- - + + +
+
+ Paiement sécurisé +