public class Usuario {
private String login, password;
private LocalDate ultimo_acceso;
private ArrayList<String> historial_password;
public Usuario(String login, String password) {
this.login = login;
establecer_fecha(); //Este método puede ser tipo void, no es necesario que retorne nada
this.password = password;
this.historial_password = new ArrayList<String>();
this.historial_password.add(password);
}
public Usuario() {
}
public String getLogin() {
return login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public LocalDate getUltimo_acceso() {
return ultimo_acceso;
}
/*
* Siguiente método es innecesario. La gestión de la fecha de acceso
* se supone que ha de ser a nivel interno de la clase, no debería
* recibirse de forma externa, que es lo ofrece este método.
*/
/*
public void setUltimo_acceso(LocalDate ultimo_acceso) {
this.ultimo_acceso = ultimo_acceso;
}*/
/*
* Los dos siguientes métodos son innecesarios.
* EL historial de password se gestiona internamente.
* No hace falta, es más, no sería seguro, que puedan cambiarse
* u obtenerse de forma externa mediante métodos de tipo public.
*/
/*
public ArrayList<String> getHistorial_password() {
return historial_password;
}
public void setHistorial_password(ArrayList<String> historial_password) {
this.historial_password = historial_password;
}*/
@Override
public String toString() {
return "Usuario{" + "login=" + login + ", ultimo_acceso=" + ultimo_acceso + ", password=" + password + ", historial_password=" + historial_password + '}';
}
/*
* Completo el siguiente método.
* Solo se puede modificar la contraseña si:
* - ha proporciondo la contraseña actual correctamente.
* - la nueva constraseña NO EXISTE en el historial de contraseñas.
* Esto último, el ArrayList nos proporciona un método para comprobarlo fácilmente.
*/
public boolean modificar_password(String password, String nueva_password) {
if (validar(password) && !historial_password.contains(nueva_password)) {
//contraseña valida y nueva contraseña NO esta CONTENIDA en el historial
//Admitimos el cambio de contraseña
this.password = nueva_password;
//Actualizamos historial
historial_password.add(nueva_password);
return true;
}
else
return false;
}
/*
* El siguiente método, su código funciona correctamente, pero contiene cosas innecesarios.
* No es necesario que informe de nada por pantalla con System.out.
* El programa principal que recibirá el resultado boolean, ya se encargará de
* informar por pantalla si es necesario.
* El try catch tampoco hace falta, no se está realizando ninguna operación
* que pueda provocar una excepción para capturar.
* El uso de palabras con letra ñ se desaconseja.
* Por último, por lo general, las contraseñas han de ser case sensitive,
* es decir, se ha de distinguir entre mayúsculas y minúsculas:
* Por ejemplo: Hola, hola, hOLA, HOLA, HoLa...
* deben ser consideradas contraseñas distintas, ergo, no debemos comparar con ignoreCase.
*
* Debajo pongo una versión de este método más sencilla y acorde con las necesidades
* que ha de cumplir.
*/
/*
public boolean validar(String contraseña) {
try {
if (this.password.equalsIgnoreCase(contraseña)) {
System.out.println("las contraseñas coinciden");
return true;
} else {
System.out.println("Las contraseñas no coinciden");
return false;
}
} catch (Exception e) {
System.out.println("Error");
}
return false;
}*/
public boolean validar(String password) {
return this.password.equals(password);
}
/*
* El siguiente método no es necesario que retorne nada.
* Puede ser de tipo void y modificar directamente el atributo
*
* Debajo hay una version alternativa.
*/
/*public LocalDate establecer_fecha() {
return this.ultimo_acceso = LocalDate.now();
}*/
public void establecer_fecha() {
ultimo_acceso = LocalDate.now();
}
}