Ho ereditato un sistema di autenticazione personalizzato che necessita di alcuni refactoring. Non sono del tutto sicuro di quale sia il modo migliore per suddividere la sezione della password e potrebbe servirci di aiuto.
Le classi password richiedono la seguente funzionalità:
- Verifica se una password è conforme alle restrizioni. Deve essere in grado di fornire un feedback sul motivo per cui è errata.
- Genera tre tipi di hash. Abbiamo diversi file system con hash incompatibili, quindi sfortunatamente devo mantenere tre hash.
-
Fornisci un hash diverso per un determinato tipo di utente. Se un utente è solo Web, non conserviamo una password perché non possono utilizzare il sistema. Le loro password sono sempre
*
. - Essere in grado di verificare una password per un determinato utente. Fortunatamente devo solo autenticarmi con uno dei tre hash che devo mantenere.
- Essere in grado di generare una password casuale, non crittografata.
- Invia nuova password al database.
Sto pensando di utilizzare quattro classi, Validator
, Hasher
, Generator
e Changer
.
- Validator
-
isCurrentPassword(int userid, string password): bool
-
getViolations(string password): array
-
- Generator
-
generate(int length):string
Crea una password.
-
- Hasher
-
hash_*(string password): string
dove*
è il tipo di hash. Avrò quattro funzioni di hashing.
-
- Changer
-
change(int userid, string password):void; throws database exceptions
-
Che cosa consiglieresti e perché?