Autenticazione adminMode

This commit is contained in:
La Programmatrice Verde
2025-11-25 18:19:11 +01:00
parent a3f1c8a5fe
commit f9d6859b51
2 changed files with 135 additions and 14 deletions

View File

@@ -32,6 +32,7 @@ public class FatturaScontrini {
static final String PATH_MENU = "./src/fatturascontrini/menu.txt";
static final String PATH_SCONTRINI = "./src/fatturascontrini/scontrini/";
static final String PATH_FATTURA = "./src/fatturascontrini/fatture/";
static final String PATH_PROGRAM_DATA = "./src/fatturascontrini/programData.txt";
static final String ERRORE_DEFAULT = "Errore: opzione non valida.";
static final String ERRORE_FILE = "Errore nella lettura del file: ";
static int codiceScontrino = 0;
@@ -64,13 +65,8 @@ public class FatturaScontrini {
pausa();
break;
case 3:
if (!trovaScontrini().isEmpty()) {
fattura();
} else {
System.out.println(
"Errore: è necessario pagare prima di procedere alla creazione della fattura.");
}
pausa();
autenticazione();
adminMode();
break;
default:
System.out.println("Opzione non valida.");
@@ -180,7 +176,7 @@ public class FatturaScontrini {
ritorno = sc.nextInt();
sc.nextLine();
if (ritorno < 0 || ritorno >= getMenuSize()) {
if (ritorno < 0 || ritorno >= getFileSize(PATH_MENU)) {
System.out.println(ERRORE_DEFAULT);
pausa();
error = true;
@@ -200,7 +196,7 @@ public class FatturaScontrini {
StringTokenizer st;
String riga = br.readLine();
for (int i = 0; i < getMenuSize(); i++) {
for (int i = 0; i < getFileSize(PATH_MENU); i++) {
st = new StringTokenizer(riga, ":");
System.out.println(i + ". " + st.nextToken() + ": " + st.nextToken().trim());
riga = br.readLine();
@@ -210,9 +206,9 @@ public class FatturaScontrini {
}
}
static int getMenuSize() {
static int getFileSize(String path) {
int i = 0;
try (BufferedReader br = new BufferedReader(new FileReader(PATH_MENU))) {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
String riga = br.readLine();
while (riga != null) {
@@ -318,11 +314,11 @@ public class FatturaScontrini {
}
static String[][] tabellaNomePrezzo() {
String[][] ritorno = new String[2][getMenuSize()];
String[][] ritorno = new String[2][getFileSize(PATH_MENU)];
try (BufferedReader br = new BufferedReader(new FileReader(PATH_MENU))) {
String riga = br.readLine();
for (int i = 0; i < getMenuSize(); i++) {
for (int i = 0; i < getFileSize(PATH_MENU); i++) {
ritorno[0][i] = riga.split(":")[0];
ritorno[1][i] = riga.split(":")[1].trim();
riga = br.readLine();
@@ -381,7 +377,7 @@ public class FatturaScontrini {
scelta = sc.nextInt();
sc.nextLine();
if (scelta < 0 || scelta >= getMenuSize()) {
if (scelta < 0 || scelta >= getFileSize(PATH_MENU)) {
System.out.println(ERRORE_DEFAULT);
pausa();
error = true;
@@ -426,6 +422,128 @@ public class FatturaScontrini {
}
}
static void adminMode() {
int scelta = -1;
do {
System.out.println("Scegliere un'opzione:");
System.out.println("1. Visualizza menu");
System.out.println("2. Aggiunta di un nuovo piatto al menu");
System.out.println("3. Rimozione di un nuovo piatto dal menu");
System.out.println("4. Fatturazione elettronica della giornata");
System.out.println("0. Esci dalla modalità amministratore");
System.out.print("Opzione: ");
try {
scelta = sc.nextInt();
sc.nextLine();
switch (scelta) {
case 0:
break;
case 1:
stampaMenu();
pausa();
break;
case 2:
// ordinazione = placeOrdinazione(ordinazione);
pausa();
break;
case 3:
adminMode();
pausa();
break;
case 4:
adminMode();
pausa();
break;
default:
System.out.println("Opzione non valida.");
pausa();
break;
}
} catch (InputMismatchException _) {
System.out.println("Errore: scelta non valida.");
pausa();
}
} while (scelta != 0);
}
static void autenticazione() {
String username;
String password;
boolean error;
int failedLoginCount = 0;
final int MAX_FAILED_LOGIN_COUNT = 3;
String savedUsername = "";
String savedPassword = "";
try (BufferedReader br = new BufferedReader(new FileReader(PATH_PROGRAM_DATA))) {
String riga;
do {
riga = br.readLine();
} while (!riga.contains("username: "));
savedUsername = riga.split(":")[1].trim();
savedPassword = br.readLine().split(":")[1].trim();
} catch (IOException e) {
System.out.println(ERRORE_FILE + e.getMessage());
}
do {
error = false;
if (failedLoginCount == MAX_FAILED_LOGIN_COUNT) {
failedLoginCount = failedLogin(failedLoginCount);
error = true;
} else {
System.out.print("Username: ");
username = sc.nextLine().trim();
password = new String(System.console().readPassword("Password: ")).trim();
if (!username.equals(savedUsername)) {
System.out.println("Errore: il nome utente non è valido.");
pausa();
error = true;
failedLoginCount++;
} else {
if (!password.equals(savedPassword)) {
System.out.println("Errore: la password non è valida.");
pausa();
error = true;
failedLoginCount++;
}
}
}
} while (error);
}
static int failedLogin(int failedLoginCount) {
long durataTimer = 7500;
final String FORMATTAZIONE_ERRORE_TIMER = "\rRiprovare tra %d secondi";
long istanteInizioTimer = System.currentTimeMillis();
durataTimer *= 2;
System.out.println("Errore: troppi tentativi di login falliti.");
while (true) {
long differenzaDiTempo = System.currentTimeMillis() - istanteInizioTimer;
// mostra il tempo rimanente ogni secondo
if (System.currentTimeMillis() % 1000 == 0) {
System.out.printf(FORMATTAZIONE_ERRORE_TIMER, (int) ((durataTimer - differenzaDiTempo) / 1000));
}
if (differenzaDiTempo >= durataTimer) {
failedLoginCount = 0;
System.out.println();
break;
}
}
return failedLoginCount;
}
static void fattura() {
boolean error;
String formatoDataInserimento = "dd/MM/yyyy";