From f9d6859b516882a015dbe22f61617bcc75795004 Mon Sep 17 00:00:00 2001 From: La Programmatrice Verde Date: Tue, 25 Nov 2025 18:19:11 +0100 Subject: [PATCH] Autenticazione adminMode --- src/fatturascontrini/FatturaScontrini.java | 146 +++++++++++++++++++-- src/fatturascontrini/programData.txt | 3 + 2 files changed, 135 insertions(+), 14 deletions(-) create mode 100644 src/fatturascontrini/programData.txt diff --git a/src/fatturascontrini/FatturaScontrini.java b/src/fatturascontrini/FatturaScontrini.java index 54adea7..def5473 100644 --- a/src/fatturascontrini/FatturaScontrini.java +++ b/src/fatturascontrini/FatturaScontrini.java @@ -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"; diff --git a/src/fatturascontrini/programData.txt b/src/fatturascontrini/programData.txt new file mode 100644 index 0000000..d1774f3 --- /dev/null +++ b/src/fatturascontrini/programData.txt @@ -0,0 +1,3 @@ +numeroScontrino: 255 +username: password +password: admin \ No newline at end of file