4ba71d60cafbbcdc5ab6463ce3f01f2b55d9c749
howto/come_gestire_password.md
... | ... | @@ -4,20 +4,88 @@ Si utilizza anche una serie di funzioni per gestire le operazioni. |
4 | 4 | |
5 | 5 | Nel seguente esempio vine mostrato la gestione dell' inserimento e della modifca di due password di un progetto. |
6 | 6 | |
7 | +Più avanti troverai anche le parti di codice scritte nei file .c relativi alle pagine grafiche. |
|
7 | 8 | |
9 | +Nel **common.h** (o comunque in file .h inclusi nel common): |
|
8 | 10 | |
9 | - unsigned char superadmin_password[32]; |
|
10 | - unsigned char manutentore_password[32]; |
|
11 | - volatile U8 syel_password[32]="56025"; |
|
12 | - volatile U8 my_password[32]; |
|
11 | + unsigned char superadmin_password[32]; // dichiara la password di accesso del superadmin |
|
12 | + unsigned char manutentore_password[32]; // dichiara la password di accesso del manutentore |
|
13 | 13 | |
14 | - void resetPassword(void); |
|
14 | + volatile U8 my_password[32]; // array ralativo alla password che deve essere inserita |
|
15 | + volatile char livello_accesso; // variabile che indica chi ha effettuato l' accesso |
|
16 | + volatile int flag_visu_msg_password = 0; // flag relativa alla visualizzazione del messaggio di corretta o errata |
|
17 | + // dopo l' inserimento della password |
|
15 | 18 | |
16 | - volatile char password[32]; |
|
17 | - volatile char accesso; |
|
18 | - volatile char ledPress; |
|
19 | + // funzione che stampa sulla pagina grafica la scritta se la password è corretta o errata |
|
20 | + void stampa_msg_password(void) |
|
21 | + { |
|
22 | + if (livello_accesso == 1) // se l' accesso è stato effettuato dal manutentore |
|
23 | + page_reqPassword->label1->caption = "Password manutentore corretta"; // label1 è la scritta sulla parte grafica della pagina |
|
24 | + else if (livello_accesso == 2) // se l' accesso è stato fatto dal super-admin |
|
25 | + page_reqPassword->label1->caption = "Password super-admin corretta"; |
|
26 | + else // se l' accesso non ha avuto successo |
|
27 | + page_reqPassword->label1->caption = "Password errata"; |
|
28 | + } |
|
29 | + |
|
30 | + // funzione relativa alla flag di visualizzazione del messaggio dopo l' inserimento della password |
|
31 | + void stop_visu_msg_password(void) |
|
32 | + { |
|
33 | + flag_visu_msg_password = 0; // dopo 2 sec dall' inserimento della password (vedi page_reqPassword.c) |
|
34 | + } |
|
35 | + |
|
36 | + // funzione per impostare i valori di default delle password |
|
37 | + void reset_pasword(void) |
|
38 | + { |
|
39 | + superadmin_password = "1234"; |
|
40 | + manutentore_password = "5678"; |
|
41 | + } |
|
42 | + |
|
43 | +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 ed è presente un label (label1) che scrive se la password è corretta o errata: |
|
19 | 44 | |
20 | - void resetPassword() |
|
45 | + #include "page_reqPassword.h" |
|
46 | + |
|
47 | + // -------------------------------+ |
|
48 | + // form page_req_password |
|
49 | + // -------------------------------+ |
|
50 | + void form_page_req_password(void) |
|
51 | + { |
|
52 | + object(TPage,(void **)&page_reqPassword,page_reqPassword_Body,0,0,&Null,None,1,0,"PAGE"); |
|
53 | + } |
|
54 | + // ------------------------------- |
|
55 | + // methods: |
|
56 | + // ------------------------------- |
|
57 | + void Event(passwordOK_onmouseup)() // quando il pulsante passwordOK viene premuto |
|
58 | + { // (confermando la password inserita) |
|
59 | + |
|
60 | + if (!strcmp(my_password, superadmin_password)) // se la password inserita è uguale alla |
|
61 | + // password impostata per il super-admin |
|
62 | + livello_accesso = 2; |
|
63 | + else if (!strcmp(my_password, manutentore_password)) // se la password inserita è uguale alla |
|
64 | + // password impostat per il manutentore |
|
65 | + livello_accesso = 1; |
|
66 | + else // se la password non è corretta |
|
67 | + livello_accesso = 0; |
|
68 | + |
|
69 | + // la flag di visualizzazione messaggio vine messa a 1 e viene rimessa a 0 ogni 2 sec |
|
70 | + flag_visu_msg_password = 1; |
|
71 | + remove_timer(stop_visu_msg_password); |
|
72 | + exec_timer(stop_visu_msg_password, ONCE, 2000); |
|
73 | + } |
|
74 | + // ------------------------------- |
|
75 | + void Event(label1_onentry)() |
|
21 | 76 | { |
22 | - strcpy(password, "1"); |
|
23 | - } |
|
... | ... | \ No newline at end of file |
0 | + // label1 viene visualizzato solo se la flag di visualizzazione messaggio è 1 (ogni 2 sec) |
|
1 | + me2->visible = flag_visu_msg_password; |
|
2 | + if (flag_visu_msg_password) // se il label è visibile |
|
3 | + { |
|
4 | + stampa_msg_password(); // stampa la scritta |
|
5 | + |
|
6 | + if (livello_accesso == 3 || livello_accesso == 2 || livello_accesso == 1) // se la password è corretta |
|
7 | + me->fontcolor = GREEN; // il label diventa di colore verde |
|
8 | + else // se la password è errata |
|
9 | + me->fontcolor = RED; // il label diventa di colore rosso |
|
10 | + |
|
11 | + me->rgb_fontcolor=0; |
|
12 | + } |
|
13 | + } |
|
14 | + |