cerringham / demo-recruiting

0 stars 0 forks source link

Realizzazione di un servizio di autenticazione #17

Open cerringham opened 1 year ago

cerringham commented 1 year ago

Realizzare un servizio di autenticazione. Per autenticarsi è necessario inserire una username e una password validi. Queste informazioni sono memorizzate nel database va quindi prevista la creazione di una tabella di nome account (non è possibile creare una tabella con nome user). La tabella deve contenere le seguenti informazioni:

Realizzare quindi un servizio REST che permette di inserire un account del database: /add-account che prende in input le informazioni di cui sopra (name, surname, email, username, password) e le salva nel database. Controlli da fare: username ed email devono coincidere. La password deve contenere almeno una lettera maiuscola, almeno un numero e almeno un carattere speciale. Lunghezza minima 6 massima 12.

Ogni volta che un utente si autentica con successo viene generato un access-token. L'access-token è univoco (non ci sono mai access-token uguali tra di loro) ed è composto:

Deve essere memorizzata l'associazione account access-token sul database quindi visto che ogni volta che faccio un login genero un access-token questi vanno salvati in una relazione uno a molti. L'access-token inoltre ha una proprietà che è la durata che vale 10 minuti, trascorso questo tempo l'access-token non è più valido. Va da se che occorre anche un attributo che indica se l'access-token è valido o meno.

Realizzare un servizio REST /login che prende in input un DTO con username e password e se queste sono corrette crea l'access-token, memorizza lo stesso sul database e restituisce uno status success. Altrimenti restituisce not authorized.

Realizzare un servizio REST /check-access-token che preso in input un access-token controlla se lo stesso è ancora valido o meno (questo servizio verrà poi disattivato, ma per il momento realizziamolo). Ovviamente va controllato anche che l'access-token rispetti il formato atteso.

Acceptance Criteria Il servizio di add-account deve restituire una ResponseEntity positiva nel caso in cui l'account è correttamente creato altrimenti una BadRequest. Sono necessarie tutte le validazioni sui campi viste nei task precedenti.

Il servizio di login oltre a creare un nuovo access-token deve porre lo status is_active a false per tutti gli altri token relativi a quell'utente

cerringham commented 1 year ago

Codice per salvare l'hashcode della password

public static String hashPassword(String plainText) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(plainText.getBytes());
        BigInteger number = new BigInteger(1, messageDigest);
        return number.toString(16);
}

Codice per mostrare i dati criptati in base64

private static String encodeString(String stringToDecrypt) {
        return new String(Base64.encodeBase64(stringToDecrypt.getBytes()));
}
cerringham commented 1 year ago

demo-recruiting-17-alessio demo-recruiting-17-veronica

cerringham commented 1 year ago

import org.apache.commons.codec.binary.Base64;