Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package fr.acceis.forum.servlet;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.sql.Connection;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.Random;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import fr.acceis.forum.beans.Topics;
- import fr.acceis.forum.beans.User;
- /**
- * Servlet implementation class Authentification
- */
- @WebServlet("/Inscription")
- public class Inscription extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#HttpServlet()
- */
- public Inscription() {
- super();
- // TODO Auto-generated constructor stub
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- response.getWriter().append("Served at: ").append(request.getContextPath());
- // Si l'utilisateur est déjà connecté, renvoie vers accueil
- HttpSession session = request.getSession();
- User sLogin = (User) session.getAttribute("user");
- System.out.print("User : " + sLogin);
- if (sLogin != null) {
- String alreadyconnected = "Inscription impossible, veuillez vous déconnecter avant.";
- //String askconnexion = " Connexion";
- session.setAttribute("message",alreadyconnected);
- response.sendRedirect("/forum/home");
- }
- else {
- this.getServletContext().getRequestDispatcher("/WEB-INF/jsp/signin.jsp").forward(request, response);
- session.removeAttribute("message_inscription");
- }
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- //doGet(request, response);
- ServletOutputStream out = response.getOutputStream();
- HttpSession session = request.getSession();
- ArrayList<User> users = new ArrayList();
- User user = new User();
- // Paramètres à récupérer du formulaire
- user.setLogin(request.getParameter("username"));
- user.setPassword(request.getParameter("password"));
- user.setMail(request.getParameter("mail"));
- // Récupération de la date actuelle
- /* Date actuelle = new Date(0);
- DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
- String date = dateFormat.format(actuelle);
- System.out.println("======================");
- System.out.println(date);
- */
- try {
- Class.forName("org.hsqldb.jdbcDriver").newInstance();
- Connection connexion = null;
- connexion = DriverManager.getConnection("jdbc:hsqldb:/home/matt/Documents/Cours M2 Cyber/GLA/ForumGLA/forum/data/basejpa", "sa", "");
- // Regex pour politique des passwords
- /*String password_regex = "[A-Z]" + //commence par une majuscule
- "(?=(.*[a-z]){2,})" + //contient au moins deux minuscule
- "(?=(.*[0-9]){2,})" + //contient au moins deux chiffres
- "(?!.*\\|)" + //ne contient pas de '|'
- "(?=(.*\\W)+})" ; //contient au moins un caractère spécial
- */
- String password_regex = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}";
- Pattern patternPassword = Pattern.compile(password_regex);
- Matcher matcherPassword = patternPassword.matcher(user.getPassword());
- // On check si tous les champs sont remplis
- if(user.getMail().isEmpty() || user.getPassword().isEmpty() || user.getLogin().isEmpty()) {
- session.setAttribute("message_inscription", "Veuillez compléter tous les champs");
- response.sendRedirect("/forum/inscription");
- throw new Exception( "Veuillez compléter tous les champs" );
- }
- // On check si mail est non nul et si il convient à la politique des adresses mail
- if ( !user.getMail().matches( "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)" ) ) {
- session.setAttribute("message_inscription", "Merci de saisir une adresse mail valide.");
- response.sendRedirect("/forum/inscription");
- throw new Exception( "Merci de saisir une adresse mail valide." );
- }
- System.out.println("Hello");
- // On check si password est non nul et si il fait moins de 8 caractères
- if ( user.getPassword().length() <= 8 ) {
- session.setAttribute("message_inscription", "Merci de saisir un password de plus de 8 caractères.");
- response.sendRedirect("/forum/inscription");
- throw new Exception( "Merci de saisir un mot de passe de plus de 8 caractères." );
- }
- // On check maintenant si le password est non nul et respecte la politique de password
- if ( !matcherPassword.matches()) {
- String Newligne=System.getProperty("line.separator");
- String politiquePass = "Merci de saisir un mot de passe respectant la politique des mots de passe : \n"
- + Newligne + " - commence par une majuscule\n"
- + Newligne + " - contient au moins deux minuscule\n"
- + Newligne + " - contient au moins deux chiffres\n"
- + Newligne + " - contient au moins un caractère spécial\n"
- + Newligne + " - ne contient pas de '|'";
- session.setAttribute("message_inscription", politiquePass);
- response.sendRedirect("/forum/inscription");
- throw new Exception( "Merci de saisir un mot de passe respectant la politique des mots de passe : \n"
- + " - commence par une majuscule\n" +
- " - contient au moins deux minuscule\n" +
- " - contient au moins deux chiffres\n" +
- " - contient au moins un caractère spécial\n" +
- " - ne contient pas de '|'" );
- }
- else {
- // Création du sel et hash
- String sel = Inscription_sel_hash.createSel();
- String SPassword = user.getPassword() + ':' + sel;
- System.out.println(" ce qu'il faut hasher : " + SPassword);
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA-512");
- byte[] hash = md.digest(SPassword.getBytes());
- String HPassword = Inscription_sel_hash.toHexString(hash);
- System.out.println(" Hash Password : " + HPassword);
- /* Création de l'objet gérant les requêtes préparées */
- PreparedStatement preparedSIGNIN = connexion.prepareStatement( "INSERT INTO UTILISATEURS (login,password,mail,date) VALUES(?, ?, ?,NOW())",Statement.RETURN_GENERATED_KEYS );
- PreparedStatement preparedSEL = connexion.prepareStatement( "INSERT INTO SEL (sel) VALUES (?)" );
- preparedSIGNIN.setString( 1, user.getLogin() );
- preparedSIGNIN.setString( 2, HPassword );
- preparedSIGNIN.setString( 3, user.getMail() );
- preparedSEL.setString(1,sel);
- // Execution des requêtes d'inscription et stockage du sel
- int res_sign = preparedSIGNIN.executeUpdate();
- int res_sel = preparedSEL.executeUpdate();
- System.out.println("SIGNIN : " + res_sign);
- System.out.println("SEL : " + res_sel);
- session.removeAttribute("message_inscription");
- try (ResultSet rs = preparedSIGNIN.getGeneratedKeys()) {
- if (rs.next()) {
- user.setId(rs.getLong(1));
- }
- } catch (SQLException s) {
- s.printStackTrace();
- }
- ;
- //response.sendRedirect("/forum/login");
- } catch (NoSuchAlgorithmException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return;
- }
- }
- } catch (InstantiationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- /* if (login != null && password != null) {
- // String sql = "Select * from Utilisateurs Where login ='" + login + "' and password ='" + password + "'";
- // ResultSet res = stmt.executeQuery(sql);
- ResultSet res = preparedLOGIN.executeQuery();
- if (res.next()) { //in this case enter when at least one result comes it means user is valid
- String passwordDB = res.getString("password");
- if(passwordDB.equals(password)) {
- System.out.println(" Authentification effectuée, bienvenue "+ login + " !");
- String connected = "Authentification effectuée, bienvenue "+ login + " !";
- String deconnexion = " Déconnexion";
- session.setAttribute("message",connected);
- session.setAttribute("message2",deconnexion);
- response.sendRedirect("/forum/home");
- }
- else {
- System.out.println("Connexion refusée, login ou mdp incorrect. (1)");
- String notconnected = "Connexion refusée, login ou mdp incorrect. \b veuillez vous connecter.";
- String askconnexion = " Connexion";
- request.setAttribute("message",notconnected);
- session.setAttribute("message2",askconnexion);
- response.sendRedirect("/forum/login");
- }
- } else { //in this case enter when result size is zero it means user is invalid
- System.out.println("Connexion refusée, login ou mdp incorrect. (2)");
- String notconnected = "Connexion refusée, login ou mdp incorrect. \\b veuillez vous connecter.";
- String askconnexion = " Connexion";
- request.setAttribute("message2",askconnexion);
- session.setAttribute("message",notconnected);
- response.sendRedirect("/forum/login");
- }
- }
- } catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException err) {
- err.printStackTrace();
- return;
- }
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement