Modificacioens

parent 398a6e91
...@@ -85,10 +85,6 @@ ...@@ -85,10 +85,6 @@
<version>2.10.9.2</version> <version>2.10.9.2</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies> </dependencies>
......
...@@ -4,7 +4,6 @@ import com.carpooling.carpoolingaoraha.excepciones.ReservaNoRegistrada; ...@@ -4,7 +4,6 @@ import com.carpooling.carpoolingaoraha.excepciones.ReservaNoRegistrada;
import com.carpooling.carpoolingaoraha.excepciones.SolicitudYaExistente; import com.carpooling.carpoolingaoraha.excepciones.SolicitudYaExistente;
import com.carpooling.carpoolingaoraha.excepciones.ViajeNoRegistrado; import com.carpooling.carpoolingaoraha.excepciones.ViajeNoRegistrado;
import com.carpooling.carpoolingaoraha.services.ServicioCarPooling; import com.carpooling.carpoolingaoraha.services.ServicioCarPooling;
import com.carpooling.carpoolingaoraha.utils.CodificadorPassword;
import com.carpooling.carpoolingaoraha.utils.ExprReg; import com.carpooling.carpoolingaoraha.utils.ExprReg;
import jakarta.persistence.*; import jakarta.persistence.*;
import org.antlr.v4.runtime.misc.NotNull; import org.antlr.v4.runtime.misc.NotNull;
...@@ -91,7 +90,7 @@ public class Usuario { ...@@ -91,7 +90,7 @@ public class Usuario {
this.DNI = DNI; this.DNI = DNI;
this.telefono = telefono; this.telefono = telefono;
this.email = email; this.email = email;
this.claveAcceso = (claveAcceso != null ? CodificadorPassword.codificar(claveAcceso) : null); this.claveAcceso = claveAcceso;
this.puntuacion = new ArrayList<>(); this.puntuacion = new ArrayList<>();
this.rol = rol; this.rol = rol;
this.viajesOfertados = new ArrayList<>(); this.viajesOfertados = new ArrayList<>();
...@@ -387,8 +386,4 @@ public class Usuario { ...@@ -387,8 +386,4 @@ public class Usuario {
this.historicoSolicitudes = historicoSolicitudes; this.historicoSolicitudes = historicoSolicitudes;
} }
public boolean claveValida(String clave) {
return CodificadorPassword.igual(clave, this.claveAcceso);
//return this.clave.equals(clave);
}
} }
package com.carpooling.carpoolingaoraha.seguridad;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import com.carpooling.carpoolingaoraha.services.ServicioCarPooling;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
@Service
public class ServicioDatosCliente implements UserDetailsService {
@Autowired
ServicioCarPooling servicioCarPooling;
@Override
public UserDetails loadUserByUsername(String dni) throws UsernameNotFoundException {
Usuario cliente = servicioCarPooling.verUsuario(dni)
.orElseThrow(() -> new UsernameNotFoundException(""));
return User.withUsername(cliente.getDNI())
.roles("USUARIO").password(cliente.getClaveAcceso())
.build();
}
}
package com.carpooling.carpoolingaoraha.seguridad;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.access.expression.WebExpressionAuthorizationManager;
public class ServicioSeguridadCarpooling {
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.httpBasic(httpBasic -> httpBasic.realmName("carpooling"))
.csrf(csrf -> csrf.disable())
.sessionManagement(session -> session.disable())
.authorizeHttpRequests(request -> request.requestMatchers(HttpMethod.POST, "/carpooling/usuarios")
.permitAll());
return httpSecurity.build();
}
}
...@@ -125,13 +125,6 @@ public class ServicioCarPooling { ...@@ -125,13 +125,6 @@ public class ServicioCarPooling {
return usuarioLogin; return usuarioLogin;
} }
public Optional<Usuario> login(@NotBlank String dni, @NotBlank String clave) {
Optional<Usuario> clienteLogin = repositorioUsuario.buscar(dni)
.filter((cliente)->cliente.claveValida(clave));
return clienteLogin;
}
@Transactional @Transactional
public Optional<Viaje> verViaje(@NotBlank int id) { public Optional<Viaje> verViaje(@NotBlank int id) {
Optional<Viaje> viaje = repositorioViajes.buscar(id); Optional<Viaje> viaje = repositorioViajes.buscar(id);
...@@ -272,4 +265,12 @@ public class ServicioCarPooling { ...@@ -272,4 +265,12 @@ public class ServicioCarPooling {
return reservas; return reservas;
} }
public Optional<Usuario> login(@NotBlank String dni, @NotBlank String clave) {
Optional<Usuario> clienteLogin = repositorioUsuario.buscar(dni)
.filter((cliente)->cliente.equals(clave));
return clienteLogin;
}
} }
/*
* 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 com.carpooling.carpoolingaoraha.utils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author ajrueda
*/
public class CachedBCryptPasswordEncoder extends BCryptPasswordEncoder {
static Map<String, CharSequence> cache = new HashMap<>();
public CachedBCryptPasswordEncoder() {
super();
}
public CachedBCryptPasswordEncoder(int strength) {
super(strength);
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
CharSequence cachedMatch = cache.get(encodedPassword);
if (cachedMatch != null && cachedMatch.equals(rawPassword)) {
return true;
}
boolean result = super.matches(rawPassword, encodedPassword);
if (result == true) {
cache.put(encodedPassword, rawPassword);
}
return result;
}
}
package com.carpooling.carpoolingaoraha.utils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* Codificador sencillo para contraseñas basado en Md5 (no seguro)
* @author ajrueda
*/
public class CodificadorPassword {
static BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
private CodificadorPassword() {
}
public static String codificar(String cadena) {
return encoder.encode(cadena);
}
public static boolean igual(String password, String passwordCodificado) {
return encoder.matches(password, passwordCodificado);
}
}
...@@ -19,10 +19,13 @@ import org.springframework.http.HttpMethod; ...@@ -19,10 +19,13 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@SpringBootTest(classes = com.carpooling.carpoolingaoraha.CarPoolingAorAhaApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(classes = com.carpooling.carpoolingaoraha.CarPoolingAorAhaApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles(profiles = {"test"}) @ActiveProfiles(profiles = {"test"})
public class ControladorRESTTEST { public class ControladorRESTTEST {
...@@ -30,38 +33,28 @@ public class ControladorRESTTEST { ...@@ -30,38 +33,28 @@ public class ControladorRESTTEST {
int localPort; int localPort;
@Autowired @Autowired
MappingJackson2HttpMessageConverter springBootJacksonConverter; MappingJackson2HttpMessageConverter springBoot;
TestRestTemplate restTemplate; TestRestTemplate restTemplate;
@PostConstruct @PostConstruct
void crearRestTemplate() { void crearRestTemplate() {
RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder() RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder()
.rootUri("http://localhost:" + localPort + "/carpooling") .rootUri("http://localhost:" + localPort + "/carpooling")
.additionalMessageConverters(List.of(springBootJacksonConverter)); .additionalMessageConverters(List.of(springBoot));
restTemplate = new TestRestTemplate(restTemplateBuilder); restTemplate = new TestRestTemplate(restTemplateBuilder);
} }
@Test @Test
@DirtiesContext(methodMode = DirtiesContext.MethodMode.AFTER_METHOD)
public void altaUsuario(){ public void altaUsuario(){
Date fecha = new Date(2000, 12, 1); Date fecha = new Date(2000, 12, 1);
DTOUsuario usuario = new DTOUsuario("Fernando", "Alonso Diaz",fecha, "78062640S", 670988953, "hola@gmail.com", "clave", Usuario.Rol.CONDUCTOR); DTOUsuario usuario = new DTOUsuario("Fernando", "Alonso Diaz",fecha, "78062640S", 670988953, "hola@gmail.com", "1234", Usuario.Rol.CONDUCTOR);
ResponseEntity<DTOUsuario> respuesta = restTemplate.postForEntity ResponseEntity<DTOUsuario> respuesta = restTemplate.postForEntity
( (
"/usuarios", usuario, DTOUsuario.class "/usuarios", usuario, DTOUsuario.class
); );
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED); Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED);
ResponseEntity<DTOUsuario> respuestaLogin = restTemplate
.withBasicAuth(usuario.DNI(), usuario.claveAcceso())
.getForEntity(
"/usuarios/{dni}",
DTOUsuario.class,
usuario.DNI()
);
Assertions.assertThat(respuestaLogin.getStatusCode()).isEqualTo(HttpStatus.OK);
} }
@Test @Test
...@@ -356,7 +349,7 @@ public class ControladorRESTTEST { ...@@ -356,7 +349,7 @@ public class ControladorRESTTEST {
Assertions.assertThat(respuestaA.getStatusCode()).isEqualTo(HttpStatus.OK); Assertions.assertThat(respuestaA.getStatusCode()).isEqualTo(HttpStatus.OK);
} }
@Test @Test
public void solicitarViaje() { public void crearSolicitud() {
Date fecha = new Date(2000, 12, 1); Date fecha = new Date(2000, 12, 1);
DTOUsuario usuario = new DTOUsuario("Fernando", "Alonso Diaz",fecha, "78162640S", 670988953, "hola@gmail.com", "1234", Usuario.Rol.CONDUCTOR); DTOUsuario usuario = new DTOUsuario("Fernando", "Alonso Diaz",fecha, "78162640S", 670988953, "hola@gmail.com", "1234", Usuario.Rol.CONDUCTOR);
ResponseEntity<DTOUsuario> respuesta = restTemplate.postForEntity ResponseEntity<DTOUsuario> respuesta = restTemplate.postForEntity
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment