From fcc9b4a4b95afce19d14b2af2af9e670c9324ef0 Mon Sep 17 00:00:00 2001 From: Giorgio UTZERI <giorgio.utzeri.etu@univ-lille.fr> Date: Mon, 17 Mar 2025 08:50:25 +0100 Subject: [PATCH] encore du refacto --- WEB-INF/src/controleurs/APIRest.java | 21 +- WEB-INF/src/controleurs/AccountAuthent.java | 3 +- WEB-INF/src/controleurs/AccountCreate.java | 3 +- WEB-INF/src/controleurs/FilAddUser.java | 4 +- WEB-INF/src/controleurs/FilCreate.java | 4 +- WEB-INF/src/controleurs/FilLeave.java | 1 - WEB-INF/src/controleurs/FilUser.java | 3 +- WEB-INF/src/controleurs/JwtManager.java | 13 - WEB-INF/src/controleurs/LikeControler.java | 5 +- WEB-INF/src/controleurs/LogoutControler.java | 4 +- WEB-INF/src/controleurs/Menu.java | 5 - WEB-INF/src/controleurs/MessageSend.java | 1 - WEB-INF/src/controleurs/UserInfo.java | 1 - WEB-INF/src/dao/DS.java | 2 - WEB-INF/src/dao/FilDAO.java | 4 - WEB-INF/src/dao/MessageDAO.java | 8 +- WEB-INF/src/dao/ParticipantFilDAO.java | 1 - WEB-INF/src/dao/UtilisateurDAO.java | 1 - creerFil.html | 43 +-- login.html | 49 ++-- menu.jsp | 274 ++++++++++--------- new.html | 55 ++-- 22 files changed, 235 insertions(+), 270 deletions(-) diff --git a/WEB-INF/src/controleurs/APIRest.java b/WEB-INF/src/controleurs/APIRest.java index 5010a47..a035c89 100644 --- a/WEB-INF/src/controleurs/APIRest.java +++ b/WEB-INF/src/controleurs/APIRest.java @@ -5,16 +5,12 @@ import dao.FilDAO; import dao.MessageDAO; import dao.UtilisateurDAO; import io.jsonwebtoken.Claims; -import jakarta.servlet.ServletException; import jakarta.servlet.http.*; import jakarta.servlet.annotation.WebServlet; - import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.Base64; - import dto.Fil; import dto.Message; import dto.Utilisateur; @@ -44,7 +40,7 @@ public class APIRest extends HttpServlet { } public void doGet(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { + throws IOException { res.setContentType("application/json;charset=UTF-8"); PrintWriter out = res.getWriter(); if (!verifToken(req)) { @@ -58,7 +54,6 @@ public class APIRest extends HttpServlet { res.setContentType("application/json;charset=UTF-8"); ObjectMapper objectMapper = new ObjectMapper(); - String info = req.getPathInfo(); String login = (String) req.getAttribute("login"); int userId = utilisateurDAO.getUserIdByEmail(login); @@ -67,7 +62,6 @@ public class APIRest extends HttpServlet { for (Fil fil : fils) { List<Message> messages = messageDAO.getLastMessages(fil.getFid()); - // Construction du JSON Map<String, Object> filData = new HashMap<>(); filData.put("id", fil.getFid()); filData.put("titre", fil.getTitre()); @@ -79,14 +73,10 @@ public class APIRest extends HttpServlet { msgData.put("auteurId", msg.getUid()); if (msg.isImage()) { - // Encodage en Base64 pour les images - // msgData.put("message", - // Base64.getEncoder().encodeToString(msg.getMessageData())); Utilisateur user = utilisateurDAO.getUserById(msg.getUid()); msgData.put("message", "Ceci est une image envoyé par " + user.getPrenom() + " " + user.getNom()); } else { - // Texte classique (UTF-8) msgData.put("message", new String(msg.getMessageData(), StandardCharsets.UTF_8)); } @@ -98,14 +88,9 @@ public class APIRest extends HttpServlet { filData.put("messages", messagesList); filsList.add(filData); } - - String jsonstring = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(filsList); // Convertit - // la liste - // des fils - // en JSON - out.println(jsonstring); // Envoie la réponse en JSON au client + String jsonstring = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(filsList); + out.println(jsonstring); return; - } out.close(); } diff --git a/WEB-INF/src/controleurs/AccountAuthent.java b/WEB-INF/src/controleurs/AccountAuthent.java index 716f5f6..7d05227 100644 --- a/WEB-INF/src/controleurs/AccountAuthent.java +++ b/WEB-INF/src/controleurs/AccountAuthent.java @@ -2,7 +2,6 @@ package controleurs; import java.io.IOException; -import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotation.WebServlet; import dao.UtilisateurDAO; @@ -15,7 +14,7 @@ public class AccountAuthent extends HttpServlet { UtilisateurDAO utilisateurDAO = new UtilisateurDAO(); protected void service(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { + throws IOException { HttpSession session = req.getSession(true); String login = StringEscapeUtils.escapeHtml4(req.getParameter("login")); diff --git a/WEB-INF/src/controleurs/AccountCreate.java b/WEB-INF/src/controleurs/AccountCreate.java index b185df2..740558c 100644 --- a/WEB-INF/src/controleurs/AccountCreate.java +++ b/WEB-INF/src/controleurs/AccountCreate.java @@ -2,7 +2,6 @@ package controleurs; import java.io.IOException; -import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotation.WebServlet; import dao.UtilisateurDAO; @@ -14,7 +13,7 @@ public class AccountCreate extends HttpServlet { UtilisateurDAO utilisateurDAO = new UtilisateurDAO(); protected void service(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { + throws IOException { res.setContentType("text/html;charset=UTF-8"); HttpSession session = req.getSession(true); diff --git a/WEB-INF/src/controleurs/FilAddUser.java b/WEB-INF/src/controleurs/FilAddUser.java index 02a2c93..fa37b7d 100644 --- a/WEB-INF/src/controleurs/FilAddUser.java +++ b/WEB-INF/src/controleurs/FilAddUser.java @@ -3,21 +3,19 @@ package controleurs; import dao.ParticipantFilDAO; import dao.UtilisateurDAO; import dto.Utilisateur; -import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import org.apache.tomcat.jakartaee.commons.lang3.StringEscapeUtils; - import java.io.IOException; import java.util.Arrays; import java.util.List; @WebServlet("/addUserFil") public class FilAddUser extends HttpServlet { - protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html;charset=UTF-8"); HttpSession session = req.getSession(true); ParticipantFilDAO participantFilDAO = new ParticipantFilDAO(); diff --git a/WEB-INF/src/controleurs/FilCreate.java b/WEB-INF/src/controleurs/FilCreate.java index 9a78689..dc8abe1 100644 --- a/WEB-INF/src/controleurs/FilCreate.java +++ b/WEB-INF/src/controleurs/FilCreate.java @@ -4,10 +4,8 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; - import dao.FilDAO; import dto.Utilisateur; -import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotation.WebServlet; import org.apache.tomcat.jakartaee.commons.lang3.StringEscapeUtils; @@ -15,7 +13,7 @@ import org.apache.tomcat.jakartaee.commons.lang3.StringEscapeUtils; @WebServlet("/CreateFil") public class FilCreate extends HttpServlet { - protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html;charset=UTF-8"); HttpSession session = req.getSession(true); diff --git a/WEB-INF/src/controleurs/FilLeave.java b/WEB-INF/src/controleurs/FilLeave.java index e940e07..3dacc7a 100644 --- a/WEB-INF/src/controleurs/FilLeave.java +++ b/WEB-INF/src/controleurs/FilLeave.java @@ -1,7 +1,6 @@ package controleurs; import java.io.IOException; - import dao.ParticipantFilDAO; import jakarta.servlet.*; import jakarta.servlet.http.*; diff --git a/WEB-INF/src/controleurs/FilUser.java b/WEB-INF/src/controleurs/FilUser.java index 46bae1f..f48c60a 100644 --- a/WEB-INF/src/controleurs/FilUser.java +++ b/WEB-INF/src/controleurs/FilUser.java @@ -2,7 +2,6 @@ package controleurs; import java.io.IOException; import java.util.List; - import dao.FilDAO; import dao.ParticipantFilDAO; import dto.Fil; @@ -42,7 +41,7 @@ public class FilUser extends HttpServlet { } } - protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { String userIdString = req.getParameter("userId"); String filIdString = req.getParameter("filId"); diff --git a/WEB-INF/src/controleurs/JwtManager.java b/WEB-INF/src/controleurs/JwtManager.java index 3b5c0d6..3ba5383 100644 --- a/WEB-INF/src/controleurs/JwtManager.java +++ b/WEB-INF/src/controleurs/JwtManager.java @@ -10,13 +10,11 @@ import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.Date; import java.util.UUID; - import javax.crypto.SecretKey; import io.jsonwebtoken.*; import io.jsonwebtoken.security.Keys; public class JwtManager { - // pour SHA256 : 256 bits mini private static final String SECRET_KEY = "bachibouzoukbachibouzoukbachibouzoukbachibouzouk"; public static String createJWT(String login) { @@ -28,7 +26,6 @@ public class JwtManager { Instant expiration = now.plusSeconds(1200); // 20 mn Date expDate = Date.from(expiration); - // Let's set the JWT Claims String token = Jwts.builder() .id(UUID.randomUUID().toString().replace("-", "")) .issuedAt(Date.from(now)) @@ -42,8 +39,6 @@ public class JwtManager { } public static Claims decodeJWT(String jwt) throws Exception { - // This line will throw an exception if it is not a signed JWS (as expected) - byte[] keyBytes = SECRET_KEY.getBytes(StandardCharsets.UTF_8); SecretKey signingKey = Keys.hmacShaKeyFor(keyBytes); @@ -55,17 +50,9 @@ public class JwtManager { return claims; } - // Exemple de fonctionnement public static void main(String args[]) { System.out.println(JwtManager.SECRET_KEY); String token = JwtManager.createJWT("Toto"); - /* - * try { - * Thread.sleep(10000); - * } catch (InterruptedException e) { - * e.printStackTrace(); - * } - */ System.out.println(token); Claims claims = null; diff --git a/WEB-INF/src/controleurs/LikeControler.java b/WEB-INF/src/controleurs/LikeControler.java index 9e898b0..58ddaf5 100644 --- a/WEB-INF/src/controleurs/LikeControler.java +++ b/WEB-INF/src/controleurs/LikeControler.java @@ -1,7 +1,6 @@ package controleurs; import dao.LikeDAO; -import dao.MessageDAO; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; @@ -17,17 +16,15 @@ import java.io.IOException; public class LikeControler extends HttpServlet { private static final long serialVersionUID = 1L; private LikeDAO likeDAO; - private MessageDAO messageDAO; @Override public void init() throws ServletException { super.init(); likeDAO = new LikeDAO(); - messageDAO = new MessageDAO(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + throws IOException { response.setContentType("text/html;charset=UTF-8"); HttpSession session = request.getSession(true); diff --git a/WEB-INF/src/controleurs/LogoutControler.java b/WEB-INF/src/controleurs/LogoutControler.java index d5e5137..9cbea7e 100644 --- a/WEB-INF/src/controleurs/LogoutControler.java +++ b/WEB-INF/src/controleurs/LogoutControler.java @@ -1,8 +1,6 @@ package controleurs; import java.io.IOException; - -import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotation.WebServlet; @@ -10,7 +8,7 @@ import jakarta.servlet.annotation.WebServlet; public class LogoutControler extends HttpServlet { protected void service(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { + throws IOException { HttpSession session = req.getSession(false); if (session != null) { session.invalidate(); diff --git a/WEB-INF/src/controleurs/Menu.java b/WEB-INF/src/controleurs/Menu.java index bf80019..118d59e 100644 --- a/WEB-INF/src/controleurs/Menu.java +++ b/WEB-INF/src/controleurs/Menu.java @@ -4,7 +4,6 @@ import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; - import dao.FilDAO; import dao.MessageDAO; import dao.ParticipantFilDAO; @@ -16,8 +15,6 @@ import jakarta.servlet.http.*; import jakarta.servlet.annotation.WebServlet; import org.apache.tomcat.jakartaee.commons.lang3.StringEscapeUtils; -//Servlet qui permet de rediriger l'utilisateur vers le login.html si il n'est pas connecté, et si il l'est, -// on récupère sa liste de fils et on redirige vers la JSP menu @WebServlet("/Menu") public class Menu extends HttpServlet { @@ -51,10 +48,8 @@ public class Menu extends HttpServlet { } } - // Vérifier si l'utilisateur est admin du fil boolean isAdmin = participantFilDAO.isAdmin(utilisateur, Integer.parseInt(rese)); - // Envoyer les données à la JSP req.setAttribute("isAdmin", isAdmin); req.setAttribute("userNames", userNames); diff --git a/WEB-INF/src/controleurs/MessageSend.java b/WEB-INF/src/controleurs/MessageSend.java index a7f4c35..7d746c6 100644 --- a/WEB-INF/src/controleurs/MessageSend.java +++ b/WEB-INF/src/controleurs/MessageSend.java @@ -2,7 +2,6 @@ package controleurs; import java.io.IOException; import java.nio.charset.StandardCharsets; - import dao.MessageDAO; import dto.Utilisateur; import jakarta.servlet.*; diff --git a/WEB-INF/src/controleurs/UserInfo.java b/WEB-INF/src/controleurs/UserInfo.java index fc7b9c4..160f780 100644 --- a/WEB-INF/src/controleurs/UserInfo.java +++ b/WEB-INF/src/controleurs/UserInfo.java @@ -1,7 +1,6 @@ package controleurs; import java.io.*; - import dao.UtilisateurDAO; import jakarta.servlet.*; import jakarta.servlet.http.*; diff --git a/WEB-INF/src/dao/DS.java b/WEB-INF/src/dao/DS.java index a1cd076..89001c1 100644 --- a/WEB-INF/src/dao/DS.java +++ b/WEB-INF/src/dao/DS.java @@ -2,7 +2,6 @@ package dao; import java.sql.Connection; import java.sql.DriverManager; -import java.util.Properties; public class DS { private String driver; @@ -11,7 +10,6 @@ public class DS { private String password; public DS() { - Properties p = new Properties(); try { this.driver = ConfigLoader.getProperty("driver"); Class.forName(driver); diff --git a/WEB-INF/src/dao/FilDAO.java b/WEB-INF/src/dao/FilDAO.java index 34e1466..de94b0f 100644 --- a/WEB-INF/src/dao/FilDAO.java +++ b/WEB-INF/src/dao/FilDAO.java @@ -1,7 +1,6 @@ package dao; import dto.Fil; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -15,9 +14,6 @@ public class FilDAO { public FilDAO() { this.ds = new DS(); } - - // Méthode qui rerourne une Liste des fils de l'utilisateur, dont l'identifiant - // à été passé en paramètre public List<Fil> getFilsByUser(int id) { List<Fil> fils = new ArrayList<>(); String query = "SELECT F.F_ID, F.TITRE FROM FIL AS F JOIN PARTICIPANT_FIL AS P ON F.F_ID = P.FP_ID WHERE P.UP_ID = ?"; diff --git a/WEB-INF/src/dao/MessageDAO.java b/WEB-INF/src/dao/MessageDAO.java index 516711e..05bddd5 100644 --- a/WEB-INF/src/dao/MessageDAO.java +++ b/WEB-INF/src/dao/MessageDAO.java @@ -6,9 +6,7 @@ import java.time.ZoneId; import java.util.ArrayList; import java.util.List; import java.sql.Timestamp; - import dto.Message; - import java.time.LocalDate; public class MessageDAO { @@ -32,8 +30,8 @@ public class MessageDAO { rs.getInt("m_id"), rs.getInt("f_id"), rs.getInt("u_id"), - rs.getBytes("message_data"), // Récupère les données sous forme de bytes - rs.getBoolean("is_image"), // Vérifie si c'est une image + rs.getBytes("message_data"), + rs.getBoolean("is_image"), rs.getInt("d_vie"), rs.getTimestamp("DateMessage")); messages.add(mess); @@ -52,7 +50,7 @@ public class MessageDAO { PreparedStatement ps = con.prepareStatement(query)) { ps.setInt(1, fid); ps.setInt(2, uid); - ps.setBytes(3, data); // Stocke l'image ou le texte + ps.setBytes(3, data); ps.setBoolean(4, isImage); ps.setInt(5, Integer.parseInt(ConfigLoader.getProperty("nbday"))); ps.setTimestamp(6, Timestamp.valueOf(LocalDateTime.now())); diff --git a/WEB-INF/src/dao/ParticipantFilDAO.java b/WEB-INF/src/dao/ParticipantFilDAO.java index b2f04d3..035a70d 100644 --- a/WEB-INF/src/dao/ParticipantFilDAO.java +++ b/WEB-INF/src/dao/ParticipantFilDAO.java @@ -1,7 +1,6 @@ package dao; import dto.Utilisateur; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; diff --git a/WEB-INF/src/dao/UtilisateurDAO.java b/WEB-INF/src/dao/UtilisateurDAO.java index 042f682..9e3ec66 100644 --- a/WEB-INF/src/dao/UtilisateurDAO.java +++ b/WEB-INF/src/dao/UtilisateurDAO.java @@ -1,7 +1,6 @@ package dao; import dto.Utilisateur; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; diff --git a/creerFil.html b/creerFil.html index 187245c..648dd00 100644 --- a/creerFil.html +++ b/creerFil.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html lang="en"> + <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> @@ -8,27 +9,31 @@ <link href="css/style.css" rel="stylesheet"> <link rel="icon" href="images/LilleConnect.png" type="image/png"> </head> + <body> -<div class="container"> - <form action=CreateFil method=get> - <h2>Créer un Fil</h2> - <div class="mb-3"> - <label for="titre" class="form-label">Titre</label> - <input type="text" class="form-control" id="titre" name="titre" aria-describedby="emailHelp"> + <div class="container"> + <form action=CreateFil method=get> + <h2>Créer un Fil</h2> + <div class="mb-3"> + <label for="titre" class="form-label">Titre</label> + <input type="text" class="form-control" id="titre" name="titre" aria-describedby="emailHelp"> + </div> + <div class="mb-3"> + <label for="utilisateurs" class="form-label">Utilisateur(s)</label> + <input type="text" class="form-control" id="utilisateurs" name="utilisateurs"> + <p>Séparez les mails utilisateurs par des "/"</p> + <label for="admin" class="form-label">Admin ? (true / false)</label> + <input type="text" class="form-control" id="admin" name="admin"> + </div> + <button type="submit" class="btn btn-primary">Créer</button> + </form> + <div class="mt-3"> + <a href="Menu" class="btn btn-secondary">Retour au menu</a> </div> - <div class="mb-3"> - <label for="utilisateurs" class="form-label">Utilisateur(s)</label> - <input type="text" class="form-control" id="utilisateurs" name="utilisateurs"> - <p>Séparez les mails utilisateurs par des "/"</p> - <label for="admin" class="form-label">Admin ? (true / false)</label> - <input type="text" class="form-control" id="admin" name="admin"> - </div> - <button type="submit" class="btn btn-primary">Créer</button> - </form> - <div class="mt-3"> - <a href="Menu" class="btn btn-secondary">Retour au menu</a> </div> -</div> -<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" + integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" + crossorigin="anonymous"></script> </body> + </html> \ No newline at end of file diff --git a/login.html b/login.html index 93834ad..52b6749 100644 --- a/login.html +++ b/login.html @@ -1,30 +1,35 @@ <!DOCTYPE html> <html lang="en"> + <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Connection LilleConnect</title> - <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> - <link href="css/style.css" rel="stylesheet"> - <link rel="icon" href="images/LilleConnect.png" type="image/png"> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Connection LilleConnect</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> + <link href="css/style.css" rel="stylesheet"> + <link rel="icon" href="images/LilleConnect.png" type="image/png"> </head> -<body> - <div class="container"> + +<body> + <div class="container"> <form action=Authent method=get> - <h2>Se connecter</h2> - <div class="mb-3"> - <label for="login" class="form-label">Adresse Mail</label> - <input type="text" class="form-control" id="login" name="login" aria-describedby="emailHelp"> - </div> - <div class="mb-3"> - <label for="mdp" class="form-label">Mot de Passe</label> - <input type="password" class="form-control" id="mdp" name="mdp"> - <a href="new.html">Vous n'avez pas de compte ?</a> + <h2>Se connecter</h2> + <div class="mb-3"> + <label for="login" class="form-label">Adresse Mail</label> + <input type="text" class="form-control" id="login" name="login" aria-describedby="emailHelp"> + </div> + <div class="mb-3"> + <label for="mdp" class="form-label">Mot de Passe</label> + <input type="password" class="form-control" id="mdp" name="mdp"> + <a href="new.html">Vous n'avez pas de compte ?</a> - </div> - <button type="submit" class="btn btn-primary">Connexion</button> - </form> -</div> - <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> + </div> + <button type="submit" class="btn btn-primary">Connexion</button> + </form> + </div> + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" + integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" + crossorigin="anonymous"></script> </body> + </html> \ No newline at end of file diff --git a/menu.jsp b/menu.jsp index c1fa6e5..87d0ce9 100644 --- a/menu.jsp +++ b/menu.jsp @@ -7,6 +7,7 @@ <!DOCTYPE html> <html lang="fr"> + <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> @@ -17,162 +18,169 @@ <meta http-equiv="refresh" content="10"> <link rel="icon" href="images/LilleConnect.png" type="image/png"> </head> + <body> -<div class="container"> - <% - List<Fil> fils = (List<Fil>) request.getAttribute("fils"); - Utilisateur utilisateur = (Utilisateur) session.getAttribute("utilisateur"); - boolean isUserInFil = fils != null && !fils.isEmpty(); - %> - - <button class="navbar-toggler d-lg-none text-white" style="background-color: #00072D;" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-controls="sidebar" aria-expanded="false" aria-label="Toggle navigation"> - <span class="navbar-toggler-icon"></span> - </button> - - <div class="sidebar collapse d-lg-block col-12 col-md-3" id="sidebar"> - <div class="d-flex align-items-center justify-content-between w-100"> - <a href="UserInfo" class="d-flex align-items-center gap-3 fs-4 text-decoration-none text-light"> - <i class="bi bi-person"></i> - <span><%= utilisateur.getPrenom() + " " + utilisateur.getNom() %></span> - </a> - - <a href="Logout" class="text-danger fs-3"> - <i class="bi bi-box-arrow-right"></i> - </a> - </div> + <div class="container"> + <% + List<Fil> fils = (List<Fil>) request.getAttribute("fils"); + Utilisateur utilisateur = (Utilisateur) session.getAttribute("utilisateur"); + boolean isUserInFil = fils != null && !fils.isEmpty(); + %> - <div class="separator"></div> - <h3>Vos fils de discussion</h3> - <div class="separator"></div> + <button class="navbar-toggler d-lg-none text-white" style="background-color: #00072D;" type="button" + data-bs-toggle="collapse" data-bs-target="#sidebar" aria-controls="sidebar" aria-expanded="false" + aria-label="Toggle navigation"> + <span class="navbar-toggler-icon"></span> + </button> - <% if (isUserInFil) { %> - <ul class="list-group"> - <% for (Fil fil : fils) { %> - <li class="list-group-item d-flex justify-content-center align-items-center text-white border-0" style="background-color: #00072D;"> - <a href="Menu?filId=<%= fil.getFid() %>" class="gap-2 px-5 py-2"> - <%= fil.getTitre() %> + <div class="sidebar collapse d-lg-block col-12 col-md-3" id="sidebar"> + <div class="d-flex align-items-center justify-content-between w-100"> + <a href="UserInfo" class="d-flex align-items-center gap-3 fs-4 text-decoration-none text-light"> + <i class="bi bi-person"></i> + <span><%= utilisateur.getPrenom() + " " + utilisateur.getNom() %></span> </a> - <a href="LeaveFil?filId=<%= fil.getFid() %>" class="text-danger fs-3"> + + <a href="Logout" class="text-danger fs-3"> <i class="bi bi-box-arrow-right"></i> </a> - </li> - <% } %> - </ul> - <% } else { %> + </div> + + <div class="separator"></div> + <h3>Vos fils de discussion</h3> + <div class="separator"></div> + + <% if (isUserInFil) { %> + <ul class="list-group"> + <% for (Fil fil : fils) { %> + <li class="list-group-item d-flex justify-content-center align-items-center text-white border-0" + style="background-color: #00072D;"> + <a href="Menu?filId=<%= fil.getFid() %>" class="gap-2 px-5 py-2"> + <%= fil.getTitre() %> + </a> + <a href="LeaveFil?filId=<%= fil.getFid() %>" class="text-danger fs-3"> + <i class="bi bi-box-arrow-right"></i> + </a> + </li> + <% } %> + </ul> + <% } else { %> <ul class="list-group"> - <li class="list-group-item d-flex justify-content-center align-items-center text-white border-0" style="background-color: #00072D;"> + <li class="list-group-item d-flex justify-content-center align-items-center text-white border-0" + style="background-color: #00072D;"> <p>Aucun fil de discussion trouvé.</p> </li> </ul> - <% } %> + <% } %> - <div class="separator"></div> + <div class="separator"></div> - <div class="mt-3 text-center"> - <a href="creerFil.html" class="btn btn-primary d-flex align-items-center gap-2 px-4 py-2"> - <span class="d-inline-flex justify-content-center align-items-center border border-light rounded" style="width: 24px; height: 24px;"> - <i class="bi bi-plus-lg"></i> - </span> - Ajouter un fil - </a> + <div class="mt-3 text-center"> + <a href="creerFil.html" class="btn btn-primary d-flex align-items-center gap-2 px-4 py-2"> + <span class="d-inline-flex justify-content-center align-items-center border border-light rounded" + style="width: 24px; height: 24px;"> + <i class="bi bi-plus-lg"></i> + </span> + Ajouter un fil + </a> + </div> </div> - </div> - <div class="main-content d-flex flex-column bg-image" - style="min-height: 100vh; background-image: url('images/login-bg.png'); background-size: cover; background-position: center;"> - <% - List<Message> messages = (List<Message>) request.getAttribute("message"); - if (messages != null && isUserInFil) { - %> - <div class="message-container w-100"> - <% for (Message mess : messages) { - boolean utilisateurConnecte = mess.getUid() == utilisateur.getId(); + <div class="main-content d-flex flex-column bg-image" + style="min-height: 100vh; background-image: url('images/login-bg.png'); background-size: cover; background-position: center;"> + <% + List<Message> messages = (List<Message>) request.getAttribute("message"); + if (messages != null && isUserInFil) { + %> + <div class="message-container w-100"> + <% for (Message mess : messages) { + boolean utilisateurConnecte = mess.getUid() == utilisateur.getId(); + %> + <div> + <div class="message <% if(utilisateurConnecte) { %> blue ms-auto <% } %> w-75 mb-2 p-3 rounded shadow-sm"> + <p class="username"> + <i class="bi-person pe-2"></i> + <%= ((Map<Integer, String>) request.getAttribute("userNames")).get(mess.getUid()) %> + </p> + + <% + byte[] messageData = mess.getMessageData(); + String encodedImage = null; + boolean isImage = mess.isImage(); + + if (isImage) { + encodedImage = java.util.Base64.getEncoder().encodeToString(messageData); + } + %> + <% if (isImage) { %> + <img src="data:image/jpeg;base64,<%= encodedImage %>" alt="Message Image" + class="contenu-img img-fluid" /> + <% } else { %> + <p class="contenu"><%= new String(messageData, "UTF-8") %></p> + <% } %> + <div class="d-flex align-items-center justify-content-end"> + <form action="ControleurLike" method="POST"> + <input type="hidden" name="messId" value="<%= mess.getMid() %>"> + <input type="hidden" name="fid" value="<%= request.getAttribute("filId") %>"> + <button type="submit" class="btn text-dark d-flex align-items-center gap-1"> + <i class="bi bi-hand-thumbs-up"></i><%= new dao.LikeDAO().getNbLike(mess.getMid()) %> + </button> + </form> + </div> + </div> + </div> + <% } %> + </div> + <% + Boolean isAdmin = (Boolean) request.getAttribute("isAdmin"); %> - <div> - <div class="message <% if(utilisateurConnecte) { %> blue ms-auto <% } %> w-75 mb-2 p-3 rounded shadow-sm"> - <p class="username"> - <i class="bi-person pe-2"></i> - <%= ((Map<Integer, String>) request.getAttribute("userNames")).get(mess.getUid()) %> - </p> - - <% - byte[] messageData = mess.getMessageData(); - String encodedImage = null; - boolean isImage = mess.isImage(); - - if (isImage) { - encodedImage = java.util.Base64.getEncoder().encodeToString(messageData); - } - %> - <% if (isImage) { %> - <img src="data:image/jpeg;base64,<%= encodedImage %>" alt="Message Image" class="contenu-img img-fluid" /> - <% } else { %> - <p class="contenu"><%= new String(messageData, "UTF-8") %></p> + <form action="EnvoyerMessage" method="POST" class="w-100 mt-auto d-flex flex-column" enctype="multipart/form-data"> + <input type="hidden" name="fid" value="<%= request.getAttribute("filId") %>"> + <input type="hidden" name="uid" value="<%= utilisateur.getId() %>"> + <div class="input-group p-1 rounded border d-flex align-items-center bg-white"> + <% if(isAdmin){ %> + <a href="AddUser?filId=<%=request.getAttribute("filId")%>" class="btn btn-light text-dark fs3"> + <i class="bi bi-person-plus fs-4"></i> + </a> + <span class="px-2 text-muted bg-white">|</span> <% } %> - <div class="d-flex align-items-center justify-content-end"> - <form action="ControleurLike" method="POST"> - <input type="hidden" name="messId" value="<%= mess.getMid() %>"> - <input type="hidden" name="fid" value="<%= request.getAttribute("filId") %>"> - <button type="submit" class="btn text-dark d-flex align-items-center gap-1"> - <i class="bi bi-hand-thumbs-up"></i><%= new dao.LikeDAO().getNbLike(mess.getMid()) %> - </button> - </form> - </div> + <label class="btn btn-light text-dark" for="image-upload"> + <i class="bi bi-image fs-4"></i> + </label> + <input type="file" id="image-upload" name="image" class="d-none" accept="image/*"> + + <span class="px-2 text-muted bg-white">|</span> + <input type="text" class="form-control border-0" name="message" placeholder="Tapez votre message ici ..." + aria-label="Message"> + <span class="px-2 text-muted bg-white">|</span> + <button class="btn btn-light text-dark" type="submit"> + <i class="bi bi-send fs-4"></i> + </button> + </div> + </form> + <% } else { %> + <div class="container d-flex justify-content-center"> + <div class="text-center mx-auto align-self-start p-5 rounded-3 shadow-lg text-white" + style="background-color: #291968; width: fit-content;"> + <h1 class="display-4 mb-4">Bienvenue sur LilleConnect</h1> + <p class="lead">Veuillez sélectionner un fil de discussion.</p> </div> </div> - <% } %> + <% } %> </div> -<% -Boolean isAdmin = (Boolean) request.getAttribute("isAdmin"); -%> - <form action="EnvoyerMessage" method="POST" class="w-100 mt-auto d-flex flex-column" enctype="multipart/form-data"> - <input type="hidden" name="fid" value="<%= request.getAttribute("filId") %>"> - <input type="hidden" name="uid" value="<%= utilisateur.getId() %>"> - <div class="input-group p-1 rounded border d-flex align-items-center bg-white"> -<% -if(isAdmin){ -%> - <a href="AddUser?filId=<%=request.getAttribute("filId")%>" class="btn btn-light text-dark fs3"> - <i class="bi bi-person-plus fs-4"></i> - </a> - <span class="px-2 text-muted bg-white">|</span> -<% } %> - <label class="btn btn-light text-dark" for="image-upload"> - <i class="bi bi-image fs-4"></i> - </label> - <input type="file" id="image-upload" name="image" class="d-none" accept="image/*"> - - <span class="px-2 text-muted bg-white">|</span> - <input type="text" class="form-control border-0" name="message" placeholder="Tapez votre message ici ..." aria-label="Message"> - <span class="px-2 text-muted bg-white">|</span> - <button class="btn btn-light text-dark" type="submit"> - <i class="bi bi-send fs-4"></i> - </button> - </div> - </form> - <% } else { %> -<div class="container d-flex justify-content-center"> - <div class="text-center mx-auto align-self-start p-5 rounded-3 shadow-lg text-white" - style="background-color: #291968; width: fit-content;"> - <h1 class="display-4 mb-4">Bienvenue sur LilleConnect</h1> - <p class="lead">Veuillez sélectionner un fil de discussion.</p> - </div> -</div> - <% } %> </div> -</div> -<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> -<script> - window.onload = () => { - const container = document.querySelector('.message-container'); - if (container) { - container.scrollTop = container.scrollHeight; - } - }; -</script> + <script> + window.onload = () => { + const container = document.querySelector('.message-container'); + if (container) { + container.scrollTop = container.scrollHeight; + } + }; + </script> </body> + </html> diff --git a/new.html b/new.html index 427e411..b63f115 100644 --- a/new.html +++ b/new.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <html lang="fr"> + <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> @@ -8,30 +9,34 @@ <link href="css/style.css" rel="stylesheet"> <link rel="icon" href="images/LilleConnect.png" type="image/png"> </head> + <body> -<div class="container"> - <form action="Create" method="get"> - <h2>Créer un compte</h2> - <div class="mb-3"> - <label for="prenom" class="form-label">Prénom</label> - <input type="text" class="form-control" id="prenom" name="prenom"> - </div> - <div class="mb-3"> - <label for="nom" class="form-label">Nom</label> - <input type="text" class="form-control" id="nom" name="nom"> - </div> - <div class="mb-3"> - <label for="mail" class="form-label">Mail</label> - <input type="email" class="form-control" id="mail" name="mail"> - </div> - <div class="mb-3"> - <label for="mdp" class="form-label">Mot de passe</label> - <input type="password" class="form-control" id="mdp" name="mdp"> - <a href="login.html">Vous avez déjà un compte ?</a> - </div> - <button type="submit" class="btn btn-primary">Créer un compte</button> - </form> -</div> -<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> + <div class="container"> + <form action="Create" method="get"> + <h2>Créer un compte</h2> + <div class="mb-3"> + <label for="prenom" class="form-label">Prénom</label> + <input type="text" class="form-control" id="prenom" name="prenom"> + </div> + <div class="mb-3"> + <label for="nom" class="form-label">Nom</label> + <input type="text" class="form-control" id="nom" name="nom"> + </div> + <div class="mb-3"> + <label for="mail" class="form-label">Mail</label> + <input type="email" class="form-control" id="mail" name="mail"> + </div> + <div class="mb-3"> + <label for="mdp" class="form-label">Mot de passe</label> + <input type="password" class="form-control" id="mdp" name="mdp"> + <a href="login.html">Vous avez déjà un compte ?</a> + </div> + <button type="submit" class="btn btn-primary">Créer un compte</button> + </form> + </div> + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" + integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" + crossorigin="anonymous"></script> </body> -</html> + +</html> \ No newline at end of file -- GitLab