diff --git a/si-ejb/src/java/hola/BL/TipoBL.java b/si-ejb/src/java/hola/BL/TipoBL.java index ee49b20..a8d4afe 100644 --- a/si-ejb/src/java/hola/BL/TipoBL.java +++ b/si-ejb/src/java/hola/BL/TipoBL.java @@ -60,45 +60,51 @@ public class TipoBL implements TipoBLLocal { } @Override - public void eliminarId(Tipo tipo) { + public Mensaje eliminarId(Tipo tipo) { // Comentario de lógica: Método para eliminar un proveedor por ID TipoDAO tdao = new TipoDAO(); if (tdao.eliminar(tipo)) { System.out.println(Mensaje.SIN_ERROR); + return Mensaje.SIN_ERROR; } else { System.out.println(Mensaje.NO_EXISTE); + return Mensaje.NO_EXISTE; } + } @Override - public void editar(Tipo tipo) { + public Mensaje editar(Tipo tipo) { // Comentario de lógica: Método para editar un proveedor - + Mensaje mensaje = null; TipoDAO tipoDAO = new TipoDAO(); // Validar que los campos requeridos no estén vacíos if (tipo.getNombre().isEmpty() - || tipo.getNombre().isEmpty() - || tipo.getStatus() == null) { + + ) { // Enviar mensaje de error si algún campo está incompleto System.out.println(Mensaje.CAMPOS_INCOMPLETOS); - return; + return mensaje.CAMPOS_INCOMPLETOS; } try { // Editar el proveedor solo si todas las validaciones son exitosas if (tipoDAO.editar(tipo) == true) { System.out.println(Mensaje.SIN_ERROR); + mensaje = Mensaje.SIN_ERROR; } else { System.out.println(Mensaje.NO_EXISTE); + mensaje = Mensaje.N0_EXISTE; } } catch (Exception e) { // Capturar cualquier excepción que ocurra durante la edición del proveedor System.out.println(Mensaje.DATOS_INCORRECTOS); + mensaje = Mensaje.DATOS_INCORRECTOS; e.printStackTrace(); } - + return mensaje; } @Override diff --git a/si-ejb/src/java/hola/BL/TipoBLLocal.java b/si-ejb/src/java/hola/BL/TipoBLLocal.java index 55302a6..4066f15 100644 --- a/si-ejb/src/java/hola/BL/TipoBLLocal.java +++ b/si-ejb/src/java/hola/BL/TipoBLLocal.java @@ -20,9 +20,9 @@ public interface TipoBLLocal { public Tipo buscarId(Tipo tipo); - public void eliminarId(Tipo tipo); + public Mensaje eliminarId(Tipo tipo); - public void editar(Tipo tipo); + public Mensaje editar(Tipo tipo); public List buscarValidos(boolean estado); diff --git a/si-ejb/src/java/hola/BL/UsuarioBL.java b/si-ejb/src/java/hola/BL/UsuarioBL.java index 28b4928..e76f811 100644 --- a/si-ejb/src/java/hola/BL/UsuarioBL.java +++ b/si-ejb/src/java/hola/BL/UsuarioBL.java @@ -102,7 +102,8 @@ public class UsuarioBL implements UsuarioBLLocal { || usuario.getStatus() == null || usuario.getPaisId().getNombre().isEmpty() || usuario.getEstadoIdestado().getNombre().isEmpty() - || usuario.getRolIdrol().getNombre().isEmpty()) { + || usuario.getRolIdrol().getNombre().isEmpty() + ) { // Enviar mensaje de error si algún campo está incompleto m = Mensaje.CAMPOS_INCOMPLETOS; diff --git a/si-ejb/src/java/hola/dao/TipoDAO.java b/si-ejb/src/java/hola/dao/TipoDAO.java index f0482c8..780c856 100644 --- a/si-ejb/src/java/hola/dao/TipoDAO.java +++ b/si-ejb/src/java/hola/dao/TipoDAO.java @@ -39,6 +39,7 @@ public class TipoDAO { return false; } else { em.getTransaction().begin(); + tipo.setStatus(1); em.merge(tipo);//edita en la base de datos em.getTransaction().commit(); return true; diff --git a/si-ejb/src/java/hola/dao/UsuarioDAO.java b/si-ejb/src/java/hola/dao/UsuarioDAO.java index dbc7073..09526c4 100644 --- a/si-ejb/src/java/hola/dao/UsuarioDAO.java +++ b/si-ejb/src/java/hola/dao/UsuarioDAO.java @@ -5,10 +5,12 @@ package hola.dao; import hola.modelo.Usuario; +import hola.token.TokenGenerator; import java.util.List; import java.util.Optional; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; +import javax.persistence.NoResultException; import javax.persistence.Persistence; import javax.persistence.Query; @@ -27,6 +29,8 @@ public class UsuarioDAO { public void agregar(Usuario usuario) { em.getTransaction().begin(); usuario.setStatus(1); + String token = TokenGenerator.generateToken(); + usuario.setToken(token); em.persist(usuario);//Almacenar en DB em.getTransaction().commit(); @@ -142,5 +146,31 @@ public class UsuarioDAO { return Optional.empty(); } } + public Optional token(Usuario usuarios) { + Query q1 = em.createNamedQuery("Usuario.findByToken"); + q1.setParameter("token", usuarios.getToken()); + + List resToken = q1.getResultList(); + + if (!resToken.isEmpty()) { + Usuario tokenEncontrado = resToken.stream() + .findFirst() + .orElse(null); + return Optional.ofNullable(tokenEncontrado); + } else { + return Optional.empty(); + } + } + + public String tokenEnd(String token) { + try { + Query q = em.createQuery("SELECT u.token FROM Usuario u WHERE u.token = :token"); + q.setParameter("token", token); + return (String) q.getSingleResult(); + } catch (NoResultException e) { + System.out.println("No token found for: " + token); + return null; // O lanza una excepción específica si prefieres manejarlo de esa manera + } + } } diff --git a/si-ejb/src/java/hola/modelo/Usuario.java b/si-ejb/src/java/hola/modelo/Usuario.java index 435bcb6..bd1ecf6 100644 --- a/si-ejb/src/java/hola/modelo/Usuario.java +++ b/si-ejb/src/java/hola/modelo/Usuario.java @@ -36,7 +36,8 @@ import javax.xml.bind.annotation.XmlRootElement; @NamedQuery(name = "Usuario.findByDireccion", query = "SELECT u FROM Usuario u WHERE u.direccion = :direccion"), @NamedQuery(name = "Usuario.findByStatus", query = "SELECT u FROM Usuario u WHERE u.status = :status"), @NamedQuery(name = "Usuario.findByNpila", query = "SELECT u FROM Usuario u WHERE u.npila = :npila"), - @NamedQuery(name = "Usuario.findByUsername", query = "SELECT u FROM Usuario u WHERE u.username = :username")}) + @NamedQuery(name = "Usuario.findByUsername", query = "SELECT u FROM Usuario u WHERE u.username = :username"), + @NamedQuery(name = "Usuario.findByToken", query = "SELECT u FROM Usuario u WHERE u.token = :token")}) public class Usuario implements Serializable { private static final long serialVersionUID = 1L; @@ -67,6 +68,9 @@ public class Usuario implements Serializable { @Size(max = 20) @Column(name = "username") private String username; + @Size(max = 50) + @Column(name = "token") + private String token; @JoinColumn(name = "estado_idestado", referencedColumnName = "id") @ManyToOne(optional = false) private Estado estadoIdestado; @@ -156,6 +160,14 @@ public class Usuario implements Serializable { this.username = username; } + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + public Estado getEstadoIdestado() { return estadoIdestado; } diff --git a/si-ejb/src/java/hola/token/TokenGenerator.java b/si-ejb/src/java/hola/token/TokenGenerator.java new file mode 100644 index 0000000..9ea6d7c --- /dev/null +++ b/si-ejb/src/java/hola/token/TokenGenerator.java @@ -0,0 +1,25 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package hola.token; + +import java.security.SecureRandom; + +/** + * + * @author chore + */ +public class TokenGenerator { + private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"; + private static final int TOKEN_LENGTH = 50; + private static final SecureRandom secureRandom = new SecureRandom(); + + public static String generateToken() { + StringBuilder token = new StringBuilder(TOKEN_LENGTH); + for (int i = 0; i < TOKEN_LENGTH; i++) { + token.append(CHARACTERS.charAt(secureRandom.nextInt(CHARACTERS.length()))); + } + return token.toString(); + } +} diff --git a/si-war/src/java/hola/servicios/TipoEndpoint.java b/si-war/src/java/hola/servicios/TipoEndpoint.java new file mode 100644 index 0000000..71da58a --- /dev/null +++ b/si-war/src/java/hola/servicios/TipoEndpoint.java @@ -0,0 +1,160 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template + */ +package hola.servicios; + +import hola.BL.TipoBLLocal; +import hola.dao.UsuarioDAO; +import hola.modelo.Tipo; +import hola.modelo.Usuario; +import hola.msg.Mensaje; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; +import javax.ejb.EJB; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author chore + */ +@WebServlet(name = "TipoEndpoint", urlPatterns = {"/TipoEndpoint"}) +public class TipoEndpoint extends HttpServlet { + + @EJB + private TipoBLLocal tipoBL; + + /** + * Processes requests for both HTTP GET and POST + * methods. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + try (PrintWriter out = response.getWriter()) { + /* TODO output your page here. You may use following sample code. */ + + // Obtener el token de la solicitud + String token = request.getParameter("token"); + + // Verificar si el token es válido + UsuarioDAO usuarioDAO = new UsuarioDAO(); + Usuario usuario = new Usuario(); + usuario.setToken(token); + String s = usuarioDAO.tokenEnd(token); + System.out.println(s); + + if (s == null) { + // Token no válido + out.println("

Token no valido

"); + //response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Token no válido"); + List listaTipo = tipoBL.buscarValidos(true); + if (listaTipo != null && !listaTipo.isEmpty()) { + for (Tipo tipo : listaTipo) { + out.println("

" + tipo.getId() + " --- " + tipo.getNombre() + "

"); + } + } + + return; + } + + Tipo tipo = new Tipo(); + + String opc = request.getParameter("op"); + String id = request.getParameter("id"); + String nombre = request.getParameter("nombre"); + + Mensaje mensaje = null; + + if (opc != null) { + + switch (Integer.parseInt(opc)) { + case 1: + tipo.setNombre(nombre); + mensaje = tipoBL.agregar(tipo); + + break; + case 2: + + tipo.setId(Integer.valueOf(id)); + + tipo.setNombre(nombre); + + mensaje = tipoBL.editar(tipo); + break; + + case 3: + + tipo.setId(Integer.valueOf(id)); + + mensaje = tipoBL.eliminarId(tipo); + + break; + default: + throw new AssertionError(); + } + } + + List listaTipo = tipoBL.buscarValidos(true); + + if (listaTipo != null && !listaTipo.isEmpty()) { + for (Tipo tipos : listaTipo) { + out.println("

" + tipos.getId() + " --- " + tipos.getNombre() + "

"); + } + out.println(""+mensaje+"" ); + } + } + } + + // + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP POST method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + }// + +}