☰
Current Page
Main Menu
Home
Home
Editing
come_gestire_password
Edit
Preview
h1
h2
h3
Keybinding
default
vim
emacs
Markup
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
# Come gestire l' inserimento e il salvataggio di password Quando nel programma si deve mettere l'inserimento di una **password** con anche la possibilità di **cambiare e salvare una nuova password**, il modo per gestire queste operazioni è di inserire un **edit su una pagina grafica** per l'inserimento della password e un' altra pagina grafica in cui poter effettuare una modifica e salvataggio della nuova password. Si utilizza anche una serie di funzioni per gestire le operazioni. Nel seguente **esempio** viene mostrato la gestione dell' inserimento e della modifca di password di un progetto. Più avanti troverai anche le parti di codice scritte nei file .c relativi alle pagine. Nel **common.h** (o comunque in file .h inclusi nel common): // Nel seguente programma sono state omesse alcune funzioni e variabili che erano presenti nel progetto ma non sono necessarie per la // dimostrazione della gestione delle password unsigned char superadmin_password[32]; // dichiara la password di accesso del superadmin // (associata a un edit, vedi page_modePassword.c) unsigned char manutentore_password[32]; // dichiara la password di accesso del manutentore // (associata a un edit, vedi page_modePassword.c) volatile U8 my_password[32]; // array ralativo alla password che deve essere inserita volatile char livello_accesso; // variabile che indica chi ha effettuato l' accesso volatile int flag_visu_msg_password = 0; // flag relativa alla visualizzazione del messaggio di corretta o errata // dopo l' inserimento della password // variabili utili nelle funzioni salva e visualizzaEsitoSalvataggio (vedi page_modPassword.c) char esitoSalvataggio = 0; char visualizzaEsitoSalvataggioOK = 0; char visualizzaEsitoSalvataggio = 0; // Si deve definire un tipo di struttura per i dati fissi (in questo caso le password) // la gestione dei dati fissi è un argomento già trattato in un' altra sezione sulla home, in questo esempio non saranno commentate // le parti relative alle gestione dei dati fissi, per le informazioni dettagliate puoi andare su // Home->Come gestire una serie di dati fissi /********************************************/ typeded struct df { unsigned char superadmin_password_df[32]; unsigned char manutentore_password_df[32]; } char pathProg[32] = "C:\\progetto.fis"; // percorso del file in cui sono presenti i dati fissi FILE *fp; df dati_fissi; char salva_df(void) { fp = fopen(pathProg, "w"); if (fp == 0) return 0; fwrite(&dati_fissi, sizeof(dati_fissi), 1, fp); fclose(fp); return 1; } void reset_df(void) { snprintf(dati_fissi.superadmin_password_df, sizeof(dati_fissi.superadmin_password_df), "1234"); // valori di default snprintf(dati_fissi.manutentore_password_df, sizeof(dati_fissi.manutentore_password_df), "5678"); salva_df(); } void carica_df(void) { fp = fopen(pathProg, "r"); if (fp == 0) reset_df(); fread(&dati_fissi, sizeof(dati_fissi), 1, fp); fclose(fp); } /********************************************/ // funzione che stampa sulla pagina grafica la scritta se la password è corretta o errata void stampa_msg_password(void) { if (livello_accesso == 1) // se l' accesso è stato effettuato dal manutentore page_reqPassword->label1->caption = "Password manutentore corretta"; // label1 è la scritta sulla parte grafica della pagina else if (livello_accesso == 2) // se l' accesso è stato fatto dal super-admin page_reqPassword->label1->caption = "Password super-admin corretta"; else // se l' accesso non ha avuto successo page_reqPassword->label1->caption = "Password errata"; } // funzione relativa alla flag di visualizzazione del messaggio dopo l' inserimento della password void stop_visu_msg_password(void) { flag_visu_msg_password = 0; // dopo 2 sec dall' inserimento della password (vedi page_reqPassword.c) } // funzione che salva i dati fissi e fornisce l' esito del salvataggio per label (vedi page_modPassword.c) void salva(void) { // salva i dati fissi esitoSalvataggio = salva_df(); if (esitoSalvataggio) // se il salvataggio ha avuto successo visualizzaEsitoSalvataggioOK = 1; // la variabile associata alla visibilità di label1 della pagina page_modPassword.c else // se il salvataggio non ha avuto successo visualizzaEsitoSalvataggioNO = 1; // la variabile associata alla visibilità di label2 della pagina page_modPassword.c exec_timer(visualizzaEsitoSalvataggio, ONCE, 3000); // dopo 3 sec rimette a 0 le due variabili } // funzione che rimettte a 0 le variabili per visualizzare l' esito del salvataggio void visualizzaEsitoSalvataggio(void) { visualizzaEsitoSalvataggioOK = 0; visualizzaEsitoSalvataggioNO = 0; } Nello **start.c**: carica_df(); // carica nella struttura dati i caratteri delle password // imposta le password con i caratteri della struttura dati snprintf(superadmin_password, sizeof(superadmin_password), "%s", dati_fissi.superadmin_password_df); snprintf(manutentore_password, sizeof(manutentore_password), "%s", dati_fissi.manutentore_password_df); Nella pagina (**page_reqPassword.c**) in cui viene richiesto di inserire la password, la variabile **my_password** è associata ad un edit nel quale è possibile inserire la password con un **pulsante di conferma** ed è presente un **label (label1)** che scrive se la password è corretta o errata: #include "page_reqPassword.h" // -------------------------------+ // form page_req_password // -------------------------------+ void form_page_req_password(void) { object(TPage,(void **)&page_reqPassword,page_reqPassword_Body,0,0,&Null,None,1,0,"PAGE"); } // ------------------------------- // methods: // ------------------------------- void Event(passwordOK_onmouseup)() // quando il pulsante passwordOK di conferma password viene attivato { // (confermando la password inserita) if (!strcmp(my_password, superadmin_password)) // se la password inserita è uguale alla // password impostata per il super-admin livello_accesso = 2; else if (!strcmp(my_password, manutentore_password)) // se la password inserita è uguale alla // password impostata per il manutentore livello_accesso = 1; else // se la password non è corretta livello_accesso = 0; // la flag di visualizzazione messaggio viene messa a 1 e viene rimessa a 0 dopo 2 sec flag_visu_msg_password = 1; remove_timer(stop_visu_msg_password); exec_timer(stop_visu_msg_password, ONCE, 2000); } // ------------------------------- void Event(label1_onentry)() { // label1 viene visualizzato solo se la flag di visualizzazione messaggio è 1 // dopo 2 sec il messaggio ritorna non visibile me2->visible = flag_visu_msg_password; if (flag_visu_msg_password) // se il label è visibile { stampa_msg_password(); // stampa la scritta if (livello_accesso == 2 || livello_accesso == 1) // se la password è corretta me->fontcolor = GREEN; // il label diventa di colore verde else // se la password è errata me->fontcolor = RED; // il label diventa di colore rosso me->rgb_fontcolor = 0; } } Nella pagina **page_modPassword.c**, in cui si può modificare la password, le **superadmin_password** e **manutentore_password** sono associate a due edit nella parte grafica in cui si può inserire le nuove password, ed è presente anche un **pulsante di reset** che reimposta le password con i caratteri di default, ed è presente una **bitmap** che se premuta salva le nuove password inserite, e sono presenti anche due **label** che scrivono il messaggio "salvataggio Ok" o "salvataggio fallito": #include "page_modPassword.h" // -------------------------------+ // form page_modPassword // -------------------------------+ void form_page_modPassword(void) { object(TPage,(void **)&page_modPassword,page_modPassword_Body,0,0,&Null,None,1,0,"PAGE"); } // ------------------------------- // methods: // ------------------------------- void Event(onfirst)() // all' inizio, negli edit delle password, vengono stampate le password attualmente impostate { snprintf(superadmin_password, sizeof(superadmin_password), "%s", dati_fissi.superadmin_password_df); snprintf(manutentore_password, sizeof(manutentore_password), "%s", dati_fissi.manutentore_password_df); } // ------------------------------- void Event(button1_onmousedown)() // quando si preme il pulsante di reset { // imposta nella struttura dati i caratteri di default delle password snprintf(dati_fissi.superadmin_password_df, sizeof(dati_fissi.superadmin_password_df), "1234"); snprintf(dati_fissi.manutentore_password_df, sizeof(dati_fissi.manutentore_password_df), "5678"); salva(); // imposta come password i valori presi dalla struttura dati snprintf(superadmin_password, sizeof(superadmin_password), "%s", dfRic.superadmin_password_Ric); snprintf(manutentore_password, sizeof(manutentore_password), "%s", dfRic.manutentore_password_Ric); } // ------------------------------- void Event(bitmap1_onmousedown)() // quando viene premuta la bitmap per il salvataggio { v_tik(30); // salva le nuove password nella struttura dati snprintf(dati_fissi.superadmin_password_df, sizeof(dati_fissi.superadmin_password_df), "%s", superadmin_password); snprintf(dati_fissi.manutentore_password_df, sizeof(dati_fissi.manutentore_password_df), "%s", manutentore_password); salva(); } // ------------------------------- void Event(label1_onentry)() // il label1 ("Salvataggio OK") è visibile se l' esito del salvataggio ha avuto successso { me2->visible = visualizzaEsitoSalvataggioOK; } void Event(label2_onentry)() // il label2 ("Salvataggio fallito") è visibile se l' esito del salvataggio ha avuto successo { me2->visible = visualizzaEsitoSalvataggioNO; }
Uploading file...
Edit message:
Cancel