Advertisement
Guest User

Untitled

a guest
Dec 10th, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.92 KB | None | 0 0
  1. package fr.acceis.forum.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.OutputStreamWriter;
  5. import java.security.MessageDigest;
  6. import java.security.NoSuchAlgorithmException;
  7. import java.sql.Connection;
  8. import java.util.ArrayList;
  9. import java.util.Date;
  10. import java.util.Random;
  11. import java.util.regex.Matcher;
  12. import java.util.regex.Pattern;
  13. import java.sql.DriverManager;
  14. import java.sql.PreparedStatement;
  15. import java.sql.ResultSet;
  16. import java.sql.SQLException;
  17. import java.sql.Statement;
  18. import java.text.DateFormat;
  19. import java.text.SimpleDateFormat;
  20.  
  21. import javax.servlet.ServletException;
  22. import javax.servlet.ServletOutputStream;
  23. import javax.servlet.annotation.WebServlet;
  24. import javax.servlet.http.HttpServlet;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import javax.servlet.http.HttpSession;
  28.  
  29. import fr.acceis.forum.beans.Topics;
  30. import fr.acceis.forum.beans.User;
  31.  
  32.  
  33.  
  34. /**
  35.  * Servlet implementation class Authentification
  36.  */
  37. @WebServlet("/Inscription")
  38. public class Inscription extends HttpServlet {
  39.     private static final long serialVersionUID = 1L;
  40.        
  41.     /**
  42.      * @see HttpServlet#HttpServlet()
  43.      */
  44.     public Inscription() {
  45.         super();
  46.         // TODO Auto-generated constructor stub
  47.     }
  48.  
  49.     /**
  50.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  51.      */
  52.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  53.         // TODO Auto-generated method stub
  54.         response.getWriter().append("Served at: ").append(request.getContextPath());
  55.        
  56.         // Si l'utilisateur est déjà connecté, renvoie vers accueil
  57.         HttpSession session = request.getSession();
  58.         User sLogin = (User) session.getAttribute("user");
  59.         System.out.print("User : " + sLogin);
  60.         if (sLogin != null) {
  61.             String alreadyconnected = "Inscription impossible, veuillez vous déconnecter avant.";
  62.             //String askconnexion = " Connexion";
  63.             session.setAttribute("message",alreadyconnected);
  64.             response.sendRedirect("/forum/home");
  65.         }
  66.         else {
  67.            
  68.             this.getServletContext().getRequestDispatcher("/WEB-INF/jsp/signin.jsp").forward(request, response);
  69.             session.removeAttribute("message_inscription");
  70.     }
  71.     }
  72.  
  73.    
  74.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  75.         // TODO Auto-generated method stub
  76.         //doGet(request, response);
  77.        
  78.        
  79.         ServletOutputStream out = response.getOutputStream();
  80.         HttpSession session = request.getSession();
  81.        
  82.        
  83.        
  84.            
  85.             ArrayList<User> users = new ArrayList();
  86.             User user = new User();
  87.            
  88.         // Paramètres à récupérer du formulaire
  89.         user.setLogin(request.getParameter("username"));   
  90.         user.setPassword(request.getParameter("password"));
  91.         user.setMail(request.getParameter("mail"));
  92.        
  93.         // Récupération de la date actuelle
  94.             /* Date actuelle = new Date(0);
  95.              DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
  96.              String date = dateFormat.format(actuelle);
  97.              System.out.println("======================");
  98.              System.out.println(date);
  99.              */
  100.  
  101.        
  102.        
  103.             try {
  104.                 Class.forName("org.hsqldb.jdbcDriver").newInstance();
  105.                 Connection connexion = null;
  106.                 connexion = DriverManager.getConnection("jdbc:hsqldb:/home/matt/Documents/Cours M2 Cyber/GLA/ForumGLA/forum/data/basejpa", "sa",  "");
  107.  
  108.                
  109.  
  110.                
  111.                 // Regex pour politique des passwords
  112.                 /*String password_regex = "[A-Z]"  + //commence par une majuscule
  113.                            "(?=(.*[a-z]){2,})"   + //contient au moins deux minuscule
  114.                            "(?=(.*[0-9]){2,})"   + //contient au moins deux chiffres
  115.                            "(?!.*\\|)"           + //ne contient pas de '|'
  116.                            "(?=(.*\\W)+})"         ;    //contient au moins un caractère spécial
  117.                           */  
  118.                
  119.                 String password_regex = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}";
  120.                
  121.                 Pattern patternPassword = Pattern.compile(password_regex);
  122.                 Matcher matcherPassword = patternPassword.matcher(user.getPassword());
  123.                
  124.                
  125.                 // On check si tous les champs sont remplis
  126.                 if(user.getMail().isEmpty() || user.getPassword().isEmpty() || user.getLogin().isEmpty()) {
  127.                     session.setAttribute("message_inscription", "Veuillez compléter tous les champs");
  128.                     response.sendRedirect("/forum/inscription");
  129.                     throw new Exception( "Veuillez compléter tous les champs" );
  130.                 }
  131.                
  132.                 // On check si mail est non nul et si il convient à la politique des adresses mail
  133.                 if ( !user.getMail().matches( "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)" ) ) {
  134.                    
  135.                     session.setAttribute("message_inscription", "Merci de saisir une adresse mail valide.");
  136.                     response.sendRedirect("/forum/inscription");
  137.                     throw new Exception( "Merci de saisir une adresse mail valide." );
  138.                                    
  139.                 }
  140.                 System.out.println("Hello");
  141.                 // On check si password est non nul et si il fait moins de 8 caractères
  142.                 if ( user.getPassword().length() <= 8 ) {
  143.                     session.setAttribute("message_inscription", "Merci de saisir un password de plus de 8 caractères.");
  144.                     response.sendRedirect("/forum/inscription");
  145.                     throw new Exception( "Merci de saisir un mot de passe de plus de 8 caractères." );
  146.                 }
  147.                
  148.                 // On check maintenant si le password est non nul et respecte la politique de password
  149.                 if ( !matcherPassword.matches()) {
  150.                     String Newligne=System.getProperty("line.separator");
  151.                     String politiquePass = "Merci de saisir un mot de passe respectant la politique des mots de passe : \n"
  152.                             + Newligne + " - commence par une majuscule\n"
  153.                             + Newligne + "  - contient au moins deux minuscule\n"
  154.                             + Newligne + "  - contient au moins deux chiffres\n"
  155.                             + Newligne + "  - contient au moins un caractère spécial\n"
  156.                             + Newligne + "  - ne contient pas de '|'";
  157.                     session.setAttribute("message_inscription", politiquePass);
  158.                     response.sendRedirect("/forum/inscription");
  159.                     throw new Exception( "Merci de saisir un mot de passe respectant la politique des mots de passe : \n"
  160.                             + " - commence par une majuscule\n" +
  161.                             "   - contient au moins deux minuscule\n" +
  162.                             "   - contient au moins deux chiffres\n" +
  163.                             "   - contient au moins un caractère spécial\n" +
  164.                             "   - ne contient pas de '|'" );
  165.                    
  166.                    
  167.                 }
  168.                 else {
  169.                     // Création du sel et hash
  170.                     String sel = Inscription_sel_hash.createSel();
  171.                     String SPassword = user.getPassword() + ':' + sel;
  172.                     System.out.println(" ce qu'il faut hasher : " + SPassword);
  173.  
  174.                     MessageDigest md;
  175.                     try {
  176.                         md = MessageDigest.getInstance("SHA-512");
  177.                         byte[] hash = md.digest(SPassword.getBytes());
  178.                        
  179.                         String HPassword = Inscription_sel_hash.toHexString(hash);
  180.                         System.out.println(" Hash Password : " + HPassword);
  181.                        
  182.                         /* Création de l'objet gérant les requêtes préparées */
  183.                         PreparedStatement preparedSIGNIN = connexion.prepareStatement( "INSERT INTO UTILISATEURS (login,password,mail,date) VALUES(?, ?, ?,NOW())",Statement.RETURN_GENERATED_KEYS );
  184.                         PreparedStatement preparedSEL = connexion.prepareStatement( "INSERT INTO SEL (sel) VALUES (?)" );
  185.                        
  186.    
  187.                         preparedSIGNIN.setString( 1, user.getLogin() );
  188.                         preparedSIGNIN.setString( 2, HPassword );
  189.                         preparedSIGNIN.setString( 3, user.getMail() );
  190.                        
  191.                        
  192.                        
  193.                         preparedSEL.setString(1,sel);
  194.                        
  195.                         // Execution des requêtes d'inscription et stockage du sel
  196.                        
  197.                         int res_sign = preparedSIGNIN.executeUpdate();
  198.                         int res_sel = preparedSEL.executeUpdate();
  199.                         System.out.println("SIGNIN : " + res_sign);
  200.                         System.out.println("SEL : " + res_sel);
  201.                        
  202.                         session.removeAttribute("message_inscription");
  203.                        
  204.                         try (ResultSet rs = preparedSIGNIN.getGeneratedKeys()) {
  205.                             if (rs.next()) {
  206.                                 user.setId(rs.getLong(1));
  207.                             }
  208.                         } catch (SQLException s) {
  209.                             s.printStackTrace();
  210.                         }
  211.                        
  212.                         ;
  213.                         //response.sendRedirect("/forum/login");
  214.                        
  215.                     } catch (NoSuchAlgorithmException e) {
  216.                         // TODO Auto-generated catch block
  217.                         e.printStackTrace();
  218.                         return;
  219.                     }
  220.                     }
  221.             } catch (InstantiationException e) {
  222.                 // TODO Auto-generated catch block
  223.                 e.printStackTrace();
  224.             } catch (IllegalAccessException e) {
  225.                 // TODO Auto-generated catch block
  226.                 e.printStackTrace();
  227.             } catch (ClassNotFoundException e) {
  228.                 // TODO Auto-generated catch block
  229.                 e.printStackTrace();
  230.             } catch (SQLException e) {
  231.                 // TODO Auto-generated catch block
  232.                 e.printStackTrace();
  233.             } catch (Exception e) {
  234.                 // TODO Auto-generated catch block
  235.                 e.printStackTrace();
  236.             }
  237.            
  238.            
  239.        
  240.            
  241.            
  242.            
  243.        
  244.             /*    if (login != null && password != null) {
  245.                 //    String sql = "Select * from Utilisateurs Where login ='" + login + "' and password ='" + password + "'";
  246.                  //   ResultSet res = stmt.executeQuery(sql);
  247.                    
  248.                     ResultSet res = preparedLOGIN.executeQuery();
  249.                    
  250.                     if (res.next()) { //in this case enter when at least one result comes it means user is valid
  251.                         String passwordDB = res.getString("password");
  252.                         if(passwordDB.equals(password)) {
  253.                             System.out.println(" Authentification effectuée, bienvenue "+ login + " !");
  254.                             String connected = "Authentification effectuée, bienvenue "+ login + " !";
  255.                             String deconnexion = " Déconnexion";
  256.                             session.setAttribute("message",connected);
  257.                             session.setAttribute("message2",deconnexion);
  258.                             response.sendRedirect("/forum/home");
  259.                            
  260.                         }
  261.                         else {
  262.                             System.out.println("Connexion refusée, login ou mdp incorrect. (1)");
  263.                             String notconnected = "Connexion refusée, login ou mdp incorrect. \b veuillez vous connecter.";
  264.                             String askconnexion = " Connexion";
  265.                             request.setAttribute("message",notconnected);
  266.                             session.setAttribute("message2",askconnexion);
  267.                             response.sendRedirect("/forum/login");
  268.                        
  269.                         }
  270.                    
  271.                    
  272.                     } else { //in this case enter when  result size is zero  it means user is invalid
  273.                         System.out.println("Connexion refusée, login ou mdp incorrect. (2)");
  274.                         String notconnected = "Connexion refusée, login ou mdp incorrect. \\b veuillez vous connecter.";
  275.                         String askconnexion = " Connexion";
  276.                         request.setAttribute("message2",askconnexion);
  277.                         session.setAttribute("message",notconnected);
  278.                         response.sendRedirect("/forum/login");
  279.                     }
  280.                 }
  281.  
  282.             } catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException err) {
  283.                 err.printStackTrace();
  284.                 return;
  285.             }
  286.        
  287.        
  288.         */
  289.  
  290.        
  291.        
  292.        
  293.  
  294.  
  295. }
  296. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement