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 vine 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):
unsigned char superadmin_password[32]; // dichiara la password di accesso del superadmin
unsigned char manutentore_password[32]; // dichiara la password di accesso del manutentore
unsigned char new_superadmin_password[32]; // dichiara l' array relativo alla nuova password del super-admin
// nel caso si decida di modificarla
unsigned char new_manutentore_password[32]; // dichiara l' array relatIvo alla nuova password del manutentore
// nel caso si decida di modificarla
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
volatile int flag_msg_salva_password = 0; // flag relativa alla scritta di salvataggio effettuato dopo la modifica delle password
// 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 relativa alla flag di visualizzazione del messaggio di "Password salvata" (vedi page_modPassword.c)
void stop_msg_salva_password(void)
{
flag_msg_salva_password = 0;
}
// funzione per impostare i caratteri di default delle password
void reset_pasword(void)
{
snprintf(superadmin_password, sizeof(superadmin_password), "%s", "1234");
snprintf(manutentore_password, sizeof(manutentore_password), "%s", "5678");
}
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 della password inserita 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 vine 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 non è più 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 varibili new_seperadmin_password e new_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:
#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 nuove password, vengono stampate le password attualmente impostate
{
snprintf(new_superadmin_password, sizeof(new_superadmin_password), "%s", superadmin_password);
snprintf(new_manutentore_password, sizeof(new_manutentore_password), "%s", manutentore_password);
}
// -------------------------------
void Event(button1_onmousedown)() // quando si preme il pulsante di reset
{
reset_password(); // vengono reimpostate le password con i caratteri di default
// stampa negli edit le password reimpostate
snprintf(new_superadmin_password, sizeof(new_superadmin_password), "%s", superadmin_password);
snprintf(new_manutentore_password, sizeof(new_manutentore_password), "%s", manutentore_password);
}
// -------------------------------
void Event(bitmap1_onmousedown)() // quando viene premuta la bitmap per il salvataggio
{
v_tik(30);
// salva le nuove password negli array delle password correnti
snprintf(superadmin_password, sizeof(superadmin_password), "%s", new_superadmin_password);
snprintf(manutentore_password, sizeof(manutentore_password), "%s", new_manutentore_password);
// la flag del salvataggio che fa apparire il messaggio di password salvata viene messa a 1 e dopo 3 sec viene rimessa a 0
flag_msg_salva_password = 1;
remove_timer(stop_msg_salva_password);
exec_timer(stop_msg_salva password, ONCE, 3000);
}
// -------------------------------
void Event(label1_onentry)() // il label1 ("Password salvata") è visibile quando la flag relativa al messaggio di salvataggio è 1
{
me2->visible = flag_msg_salva_password;
}