Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Alvaro Ordóñez Romero
/
DAE-aha00026-aor00039
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
af2f7cce
authored
Dec 21, 2023
by
Alvaro Ordóñez Romero
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Modificacioens
parent
398a6e91
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
23 additions
and
156 deletions
pom.xml
src/main/java/com/carpooling/carpoolingaoraha/entidades/Usuario.java
src/main/java/com/carpooling/carpoolingaoraha/rest/ControladorREST.java
src/main/java/com/carpooling/carpoolingaoraha/seguridad/ServicioDatosCliente.java
src/main/java/com/carpooling/carpoolingaoraha/seguridad/ServicioSeguridadCarpooling.java
src/main/java/com/carpooling/carpoolingaoraha/services/ServicioCarPooling.java
src/main/java/com/carpooling/carpoolingaoraha/utils/CachedBCryptPasswordEncoder.java
src/main/java/com/carpooling/carpoolingaoraha/utils/CodificadorPassword.java
src/test/java/com/carpooling/carpoolingaoraha/ControladorRESTEST/ControladorRESTTEST.java
pom.xml
View file @
af2f7cce
...
...
@@ -85,10 +85,6 @@
<version>
2.10.9.2
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-security
</artifactId>
</dependency>
</dependencies>
...
...
src/main/java/com/carpooling/carpoolingaoraha/entidades/Usuario.java
View file @
af2f7cce
...
...
@@ -4,7 +4,6 @@ import com.carpooling.carpoolingaoraha.excepciones.ReservaNoRegistrada;
import
com.carpooling.carpoolingaoraha.excepciones.SolicitudYaExistente
;
import
com.carpooling.carpoolingaoraha.excepciones.ViajeNoRegistrado
;
import
com.carpooling.carpoolingaoraha.services.ServicioCarPooling
;
import
com.carpooling.carpoolingaoraha.utils.CodificadorPassword
;
import
com.carpooling.carpoolingaoraha.utils.ExprReg
;
import
jakarta.persistence.*
;
import
org.antlr.v4.runtime.misc.NotNull
;
...
...
@@ -91,7 +90,7 @@ public class Usuario {
this
.
DNI
=
DNI
;
this
.
telefono
=
telefono
;
this
.
email
=
email
;
this
.
claveAcceso
=
(
claveAcceso
!=
null
?
CodificadorPassword
.
codificar
(
claveAcceso
)
:
null
)
;
this
.
claveAcceso
=
claveAcceso
;
this
.
puntuacion
=
new
ArrayList
<>();
this
.
rol
=
rol
;
this
.
viajesOfertados
=
new
ArrayList
<>();
...
...
@@ -387,8 +386,4 @@ public class Usuario {
this
.
historicoSolicitudes
=
historicoSolicitudes
;
}
public
boolean
claveValida
(
String
clave
)
{
return
CodificadorPassword
.
igual
(
clave
,
this
.
claveAcceso
);
//return this.clave.equals(clave);
}
}
src/main/java/com/carpooling/carpoolingaoraha/rest/ControladorREST.java
View file @
af2f7cce
...
...
@@ -30,7 +30,7 @@ public class ControladorREST {
@ExceptionHandler
(
ConstraintViolationException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
ResponseEntity
<
String
>
handlerViolacionRestricciones
(
ConstraintViolationException
ex
){
return
ResponseEntity
.
badRequest
().
body
(
ex
.
getMessage
());
return
ResponseEntity
.
badRequest
().
body
(
ex
.
getMessage
());
}
/**
...
...
@@ -150,7 +150,7 @@ public class ControladorREST {
Optional
<
Viaje
>
viajeExistente
=
servicioCarPooling
.
verViaje
(
id
);
return
viajeExistente
.
map
(
viaje
->
{
if
(
datosViaje
.
containsKey
(
"nuevoOrigen"
))
{
viaje
.
setOrigen
((
String
)
datosViaje
.
get
(
"nuevoOrigen"
));
viaje
.
setOrigen
((
String
)
datosViaje
.
get
(
"nuevoOrigen"
));
}
if
(
datosViaje
.
containsKey
(
"nuevoDestino"
))
{
viaje
.
setDestino
((
String
)
datosViaje
.
get
(
"nuevoDestino"
));
...
...
src/main/java/com/carpooling/carpoolingaoraha/seguridad/ServicioDatosCliente.java
deleted
100644 → 0
View file @
398a6e91
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
();
}
}
src/main/java/com/carpooling/carpoolingaoraha/seguridad/ServicioSeguridadCarpooling.java
deleted
100644 → 0
View file @
398a6e91
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
();
}
}
src/main/java/com/carpooling/carpoolingaoraha/services/ServicioCarPooling.java
View file @
af2f7cce
...
...
@@ -125,13 +125,6 @@ public class ServicioCarPooling {
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
public
Optional
<
Viaje
>
verViaje
(
@NotBlank
int
id
)
{
Optional
<
Viaje
>
viaje
=
repositorioViajes
.
buscar
(
id
);
...
...
@@ -236,7 +229,7 @@ public class ServicioCarPooling {
return
reservaActual
;
}
else
{
throw
new
ReservaNoRegistrada
();
throw
new
ReservaNoRegistrada
();
}
}
...
...
@@ -272,4 +265,12 @@ public class ServicioCarPooling {
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
;
}
}
src/main/java/com/carpooling/carpoolingaoraha/utils/CachedBCryptPasswordEncoder.java
deleted
100644 → 0
View file @
398a6e91
/*
* 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
;
}
}
src/main/java/com/carpooling/carpoolingaoraha/utils/CodificadorPassword.java
deleted
100644 → 0
View file @
398a6e91
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
);
}
}
src/test/java/com/carpooling/carpoolingaoraha/ControladorRESTEST/ControladorRESTTEST.java
View file @
af2f7cce
...
...
@@ -19,10 +19,13 @@ import org.springframework.http.HttpMethod;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.context.ActiveProfiles
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
@SpringBootTest
(
classes
=
com
.
carpooling
.
carpoolingaoraha
.
CarPoolingAorAhaApplication
.
class
,
webEnvironment
=
SpringBootTest
.
WebEnvironment
.
RANDOM_PORT
)
@ActiveProfiles
(
profiles
=
{
"test"
})
public
class
ControladorRESTTEST
{
...
...
@@ -30,38 +33,28 @@ public class ControladorRESTTEST {
int
localPort
;
@Autowired
MappingJackson2HttpMessageConverter
springBootJacksonConverter
;
MappingJackson2HttpMessageConverter
springBoot
;
TestRestTemplate
restTemplate
;
@PostConstruct
void
crearRestTemplate
()
{
RestTemplateBuilder
restTemplateBuilder
=
new
RestTemplateBuilder
()
.
rootUri
(
"http://localhost:"
+
localPort
+
"/carpooling"
)
.
additionalMessageConverters
(
List
.
of
(
springBoot
JacksonConverter
));
.
additionalMessageConverters
(
List
.
of
(
springBoot
));
restTemplate
=
new
TestRestTemplate
(
restTemplateBuilder
);
}
@Test
@DirtiesContext
(
methodMode
=
DirtiesContext
.
MethodMode
.
AFTER_METHOD
)
public
void
altaUsuario
(){
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
(
"/usuarios"
,
usuario
,
DTOUsuario
.
class
);
Assertions
.
assertThat
(
respuesta
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
ResponseEntity
<
DTOUsuario
>
respuestaLogin
=
restTemplate
.
withBasicAuth
(
usuario
.
DNI
(),
usuario
.
claveAcceso
())
.
getForEntity
(
"/usuarios/{dni}"
,
DTOUsuario
.
class
,
usuario
.
DNI
()
"/usuarios"
,
usuario
,
DTOUsuario
.
class
);
Assertions
.
assertThat
(
respuesta
Login
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
Assertions
.
assertThat
(
respuesta
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
}
@Test
...
...
@@ -356,7 +349,7 @@ public class ControladorRESTTEST {
Assertions
.
assertThat
(
respuestaA
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
}
@Test
public
void
solicitarViaje
()
{
public
void
crearSolicitud
()
{
Date
fecha
=
new
Date
(
2000
,
12
,
1
);
DTOUsuario
usuario
=
new
DTOUsuario
(
"Fernando"
,
"Alonso Diaz"
,
fecha
,
"78162640S"
,
670988953
,
"hola@gmail.com"
,
"1234"
,
Usuario
.
Rol
.
CONDUCTOR
);
ResponseEntity
<
DTOUsuario
>
respuesta
=
restTemplate
.
postForEntity
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment