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
+