diff --git a/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java b/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java index 013744a..b96c155 100644 --- a/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java +++ b/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -83,7 +84,6 @@ public class SecurityConfig{ // If the table is empty, insert 'READ', 'WRITE', and 'DELETE' jdbcTemplate.execute("INSERT INTO autoridad (nombre) VALUES ('READ'), ('WRITE'), ('DELETE')"); } - // Check if the rol table is empty Integer rolCount = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM rol", Integer.class); if (rolCount != null && rolCount == 0) { @@ -106,21 +106,10 @@ public class SecurityConfig{ String sql = "INSERT INTO usuario (nombre_usuario, nombre_log_in, email, password, fk_rol) VALUES (?, ?, ?, ?, ?)"; jdbcTemplate.update(sql, "admin", "admin", "admin@example.com", "$2a$10$3B5KqGe7WIYVYmLBqGAHOuT0SrWgI1.J1kDj3v7TrJC65bU6P49cC", 1); createDefaultData(); + triggerCreate(); } } - /* public void createDefaultRolesAuthoritiesAndAdmin() { - try { - if (usuarioService.findByNombreUsuario("admin").isEmpty()) { - Rol adminRole = rolService.findByName("ADMIN"); - usuarioService.createUsuario("admin", "admin", - "admin@example.com", - "1234", - false, adminRole.getId()); - } - } catch (Exception e) { - logger.error("Exception in createDefaultRolesAuthoritiesAndAdmin: ", e); - } - }*/ + private void createDefaultData(){ jdbcTemplate.execute("INSERT INTO skills (nombre) VALUES ('Java')"); jdbcTemplate.execute("INSERT INTO skills (nombre) VALUES ('Microsoft XL')"); @@ -179,4 +168,24 @@ public class SecurityConfig{ jdbcTemplate.execute("INSERT INTO ciclos (nombre, codigo, fk_familia) VALUES ('G.S. ADMINISTRACIÓN Y FINANZAS','GSADMFIN', 3)"); jdbcTemplate.execute("INSERT INTO ciclos (nombre, codigo, fk_familia) VALUES ('G.M. GESTIÓN ADMINISTRATIVA SEMIPRESENCIAL','GMGADMSEMI', 3)"); } + + private void triggerCreate() { + String createTriggerSql = "CREATE DEFINER=`projfin`@`%` TRIGGER `new_user` AFTER INSERT ON `alumnos` " + + "FOR EACH ROW " + + "BEGIN " + + " INSERT INTO usuario (email, nombre_log_in, nombre_usuario, password, fk_rol) " + + " VALUES ( " + + " NEW.correo, " + + " NEW.correo, " + + " CONCAT_WS(' ', NEW.nombre, NEW.apellido, NEW.apellido2), " + + " '$2a$10$1OSyk1wLCHMKQ9yjnB4pkOxQzsjo1dSpixbVoJrpqWlYq4wQBRs9e', " + + " 2 " + + " ); " + + "END;"; + try { + jdbcTemplate.execute(createTriggerSql); + } catch (DataAccessException ex) { + logger.error("Error creating trigger: ", ex); + } + } } diff --git a/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java b/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java index 436e809..3bede30 100644 --- a/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java +++ b/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java @@ -9,6 +9,7 @@ import com.example.proyectofinal.servicios.empresa.*; import com.example.proyectofinal.servicios.user.UsuarioService; import jakarta.annotation.security.RolesAllowed; import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; @@ -21,6 +22,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.server.ResponseStatusException; import java.text.ParseException; import java.util.*; @@ -72,7 +74,6 @@ public class BuscadorController { } } - @GetMapping("/empresas/page/{pageNum}") public String searchEmpresasList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -80,8 +81,8 @@ public class BuscadorController { @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir, @RequestParam String secondaryOption, - Model model){ - System.out.println("TEST SORT DIR " + sortDir); + Model model, + Authentication authentication) { String[] queryMultiWord = query.split(","); List queryList = new ArrayList<>(); for (String queryForList : queryMultiWord) { @@ -105,6 +106,13 @@ public class BuscadorController { model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("isAdmin", usuarioService.isAdmin()); } + + Collection authorities = authentication.getAuthorities(); + boolean isAdmin = authorities.stream() + .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN")); + if (!isAdmin) { + return "list_alu/empresas"; + } return "/list/empresas"; } @@ -128,7 +136,6 @@ public class BuscadorController { return "/list/sectores"; } - @GetMapping("/contactos/page/{pageNum}") public String searchContactosList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -136,7 +143,8 @@ public class BuscadorController { @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir, @RequestParam String secondaryOption, - Model model) { + Model model, + Authentication authentication) { String[] queryMultiWord = query.split(","); List queryList = new ArrayList<>(); for (String queryForList : queryMultiWord) { @@ -160,10 +168,15 @@ public class BuscadorController { model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("isAdmin", usuarioService.isAdmin()); } + Collection authorities = authentication.getAuthorities(); + boolean isAdmin = authorities.stream() + .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN")); + if (!isAdmin) { + return "list_alu/contactos"; + } return "/list/contactos"; } - @GetMapping("/sucursales/page/{pageNum}") public String searchSucursalesList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -171,7 +184,8 @@ public class BuscadorController { @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir, @RequestParam String secondaryOption, - Model model) { + Model model, + Authentication authentication) { String[] queryMultiWord = query.split(","); List queryList = new ArrayList<>(); for (String queryForList : queryMultiWord) { @@ -196,10 +210,15 @@ public class BuscadorController { model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("isAdmin", usuarioService.isAdmin()); } + Collection authorities = authentication.getAuthorities(); + boolean isAdmin = authorities.stream() + .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN")); + if (!isAdmin) { + return "list_alu/sucursales"; + } return "/list/sucursales"; } - @GetMapping("/ofertas/page/{pageNum}") public String searchOfertasList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -207,7 +226,8 @@ public class BuscadorController { @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "") String secondaryOption, - Model model) throws ParseException { + Model model, + Authentication authentication) throws ParseException { String[] queryMultiWord = query.split(","); List queryList = new ArrayList<>(); for (String queryForList : queryMultiWord) { @@ -232,10 +252,15 @@ public class BuscadorController { model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("isAdmin", usuarioService.isAdmin()); } + Collection authorities = authentication.getAuthorities(); + boolean isAdmin = authorities.stream() + .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN")); + if (!isAdmin) { + return "list_alu/ofertas"; + } return "/list/ofertas"; } - @GetMapping("/familias/page/{pageNum}") public String searchFamiliasList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -257,7 +282,6 @@ public class BuscadorController { return "/list/familias"; } - @GetMapping("/ciclos/page/{pageNum}") public String searchCiclosList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -265,7 +289,8 @@ public class BuscadorController { @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "") String secondaryOption, - Model model) throws ParseException { + Model model, + Authentication authentication) { String[] queryMultiWord = query.split(","); List queryList = new ArrayList<>(); for (String queryForList : queryMultiWord) { @@ -290,10 +315,15 @@ public class BuscadorController { model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("isAdmin", usuarioService.isAdmin()); } + Collection authorities = authentication.getAuthorities(); + boolean isAdmin = authorities.stream() + .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ADMIN")); + if (!isAdmin) { + return "list_alu/ciclos"; + } return "/list/ciclos"; } - @GetMapping("/alumnos/page/{pageNum}") public String searchAlumnosList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -301,8 +331,8 @@ public class BuscadorController { @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "") String secondaryOption, - Model model) { - + Model model, + Authentication authentication) { String[] queryMultiWord = query.split(","); List queryList = new ArrayList<>(); for (String queryForList : queryMultiWord) { @@ -326,7 +356,6 @@ public class BuscadorController { model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("isAdmin", usuarioService.isAdmin()); } - return "/list/alumnos"; } @@ -338,7 +367,6 @@ public class BuscadorController { @RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "") String secondaryOption, Model model) { - String[] word = query.split("\\b(y|o)\\b|[,/]"); List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); Map attributes = new HashMap<>(); if (secondaryOption.equalsIgnoreCase("Todo")) { @@ -400,14 +428,12 @@ public class BuscadorController { } - @GetMapping("/sectores/search") public ResponseEntity> searchSectores(@RequestParam String query) { List sectors = sectorService.search(query); return ResponseEntity.ok(sectors); } - @GetMapping("/contactos/search") public ResponseEntity> searchContactos(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { if(secondaryOption.equalsIgnoreCase("Todo")){ @@ -419,7 +445,6 @@ public class BuscadorController { } } - @GetMapping("/sucursales/search") public ResponseEntity> searchSucursales(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { if(secondaryOption.equalsIgnoreCase("Todo")){ @@ -431,14 +456,12 @@ public class BuscadorController { } } - @GetMapping("/familias/search") public ResponseEntity> searchFamilias(@RequestParam String query) { List familias = familiaService.search(query); return ResponseEntity.ok(familias); } - @GetMapping("/ciclos/search") public ResponseEntity> searchCiclos(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { if(secondaryOption.equalsIgnoreCase("Todo")){ @@ -450,14 +473,12 @@ public class BuscadorController { } } - @GetMapping("/skills/search") public ResponseEntity> searchSkills(@RequestParam String query) { List ciclos = skillService.search(query); return ResponseEntity.ok(ciclos); } - @GetMapping("/alumnos/search") public ResponseEntity> searchAlumnos(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { List alumnos; @@ -482,18 +503,6 @@ public class BuscadorController { return ResponseEntity.ok(alumnos); } - private void printTest (List alumnos){ - for (Alumno alumno : alumnos) { - System.out.println("----------------------------"); - System.out.println(alumno.getNombre()); - for(Skill skill : alumno.getSkills()) { - System.out.println(skill.getNombre()); - } - System.out.println("----------------------------"); - } - - } - @GetMapping("/ofertas/search") public ResponseEntity> searchOfertas(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { List ofertas; diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java index 48f1ba5..510f3a8 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java @@ -85,9 +85,7 @@ public class AlumnoController { nombreUsuarioBuilder.append(alumno.getApellido2().toLowerCase()); } String nombreUsuario = nombreUsuarioBuilder.toString(); - String nia = alumno.getNia(); - String firstThreeLetters = nia.substring(0, 3); - String nombreLogIn="alu." +alumno.getNombre()+firstThreeLetters; + String nombreLogIn=alumno.getCorreo(); String email = Optional.of(alumno.getCorreo()).orElse(alumno.getCorreo2()); Long newUser = usuarioService.findRolByName("USER"); usuarioService.createUsuario(nombreUsuario, nombreLogIn, email, password, newUser); diff --git a/src/main/resources/templates/buscador_alumno.html b/src/main/resources/templates/buscador_alumno.html index d3bf3e3..83d1444 100644 --- a/src/main/resources/templates/buscador_alumno.html +++ b/src/main/resources/templates/buscador_alumno.html @@ -107,12 +107,9 @@