howto/come_gestire_password.md
... ...
@@ -8,21 +8,68 @@ Più avanti troverai anche le parti di codice scritte nei file .c relativi alle
8 8
9 9
Nel **common.h** (o comunque in file .h inclusi nel common):
10 10
11
+ // Nel seguente programma sono state omesse alcune funzioni e variabili che erano presenti nel progetto ma non sono necessarie per la
12
+ // dimostrazione della gestione delle password
13
+
11 14
unsigned char superadmin_password[32]; // dichiara la password di accesso del superadmin
15
+ // (associata a un edit, vedi page_modePassword.c)
12 16
unsigned char manutentore_password[32]; // dichiara la password di accesso del manutentore
13
-
14
- unsigned char new_superadmin_password[32]; // dichiara l' array relativo alla nuova password del super-admin
15
- // nel caso si decida di modificarla
16
- unsigned char new_manutentore_password[32]; // dichiara l' array relatIvo alla nuova password del manutentore
17
- // nel caso si decida di modificarla
17
+ // (associata a un edit, vedi page_modePassword.c)
18 18
19 19
volatile U8 my_password[32]; // array ralativo alla password che deve essere inserita
20
-
21 20
volatile char livello_accesso; // variabile che indica chi ha effettuato l' accesso
22
-
23 21
volatile int flag_visu_msg_password = 0; // flag relativa alla visualizzazione del messaggio di corretta o errata
24 22
// dopo l' inserimento della password
25
- volatile int flag_msg_salva_password = 0; // flag relativa alla scritta di salvataggio effettuato dopo la modifica delle password
23
+
24
+ // variabili utili nelle funzioni salva e visualizzaEsitoSalvataggio (vedi page_modPassword.c)
25
+ int esitoSalvataggio = 0;
26
+ int visualizzaEsitoSalvataggioOK = 0;
27
+ int visualizzaEsitoSalvataggio = 0;
28
+
29
+
30
+ // Si deve definire un tipo di struttura per i dati fissi (in questo caso le password)
31
+ // la gestione dei dati fissi è un argomento già trattato in un' altra sezione sulla home, in questo esempio non saranno commentate
32
+ // le parti relative alle gestione dei dati fissi, per le informazioni dettagliate puoi andare su
33
+ // Home->Come gestire una serie di dati fissi
34
+ /********************************************/
35
+ typeded struct df
36
+ {
37
+ unsigned char superadmin_password_df[32];
38
+ unsigned char manutentore_password_df[32];
39
+ }
40
+
41
+ char pathProg[32] = "C:\\progetto.fis"; // percorso del file in cui sono presenti i dati fissi
42
+ FILE *fp;
43
+ df dati_fissi;
44
+
45
+ char salva_df(void)
46
+ {
47
+ fp = fopen(pathProg, "w");
48
+ if (fp == 0)
49
+ return 0;
50
+ fwrite(&dati_fissi, sizeof(dati_fissi), 1, fp);
51
+ fclose(fp);
52
+ return 1;
53
+ }
54
+
55
+ void reset_df(void)
56
+ {
57
+ snprintf(dati_fissi.superadmin_password_df, sizeof(dati_fissi.superadmin_password_df), "1234"); // valori di default
58
+ snprintf(dati_fissi.manutentore_password_df, sizeof(dati_fissi.manutentore_password_df), "5678");
59
+ salva_df();
60
+ }
61
+
62
+ void carica_df(void)
63
+ {
64
+ fp = fopen(pathProg, "r");
65
+ if (fp == 0)
66
+ reset_df();
67
+
68
+ fread(&dati_fissi, sizeof(dati_fissi), 1, fp);
69
+ fclose(fp);
70
+ }
71
+ /********************************************/
72
+
26 73
27 74
// funzione che stampa sulla pagina grafica la scritta se la password è corretta o errata
28 75
void stampa_msg_password(void)
... ...
@@ -41,19 +88,35 @@ Nel **common.h** (o comunque in file .h inclusi nel common):
41 88
flag_visu_msg_password = 0; // dopo 2 sec dall' inserimento della password (vedi page_reqPassword.c)
42 89
}
43 90
44
- // funzione relativa alla flag di visualizzazione del messaggio di "Password salvata" (vedi page_modPassword.c)
45
- void stop_msg_salva_password(void)
91
+ // funzione che salva i dati fissi e fornisce l' esito del salvataggio per label (vedi page_modPassword.c)
92
+ void salva(void)
46 93
{
47
- flag_msg_salva_password = 0;
94
+ // salva i dati fissi
95
+ esitoSalvataggio = salva_df();
96
+
97
+ if (esitoSalvataggio) // se il salvataggio ha avuto successo
98
+ visualizzaEsitoSalvataggioOK = 1; // la variabile associata alla visibilità di label1 della pagina page_modPassword.c
99
+ else // se il salvataggio non ha avuto successo
100
+ visualizzaEsitoSalvataggioNO = 1; // la variabile associata alla visibilità di label2 della pagina page_modPassword.c
101
+
102
+ exec_timer(visualizzaEsitoSalvataggio, ONCE, 3000); // dopo 3 sec rimette a 0 le due variabili
48 103
}
49 104
50
- // funzione per impostare i caratteri di default delle password
51
- void reset_pasword(void)
105
+ // funzione che rimettte a 0 le variabili per visualizzare l' esito del salvataggio
106
+ void visualizzaEsitoSalvataggio(void)
52 107
{
53
- snprintf(superadmin_password, sizeof(superadmin_password), "%s", "1234");
54
- snprintf(manutentore_password, sizeof(manutentore_password), "%s", "5678");
108
+ visualizzaEsitoSalvataggioOK = 0;
109
+ visualizzaEsitoSalvataggioNO = 0;
55 110
}
56 111
112
+Nello **start.c**:
113
+
114
+ carica_fissi(); // carica nella struttura dati i caratteri di default delle password
115
+
116
+ // imposta le password con i caratteri della struttura dati
117
+ snprintf(superadmin_password, sizeof(superadmin_password), "%s", dati_fissi.superadmin_password_df);
118
+ snprintf(manutentore_password, sizeof(manutentore_password), "%s", dati_fissi.manutentore_password_df);
119
+
57 120
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:
58 121
59 122
#include "page_reqPassword.h"
... ...
@@ -80,7 +143,7 @@ Nella pagina (**page_reqPassword.c**) in cui viene richiesto di inserire la pass
80 143
else // se la password non è corretta
81 144
livello_accesso = 0;
82 145
83
- // la flag di visualizzazione messaggio vine messa a 1 e viene rimessa a 0 dopo 2 sec
146
+ // la flag di visualizzazione messaggio viene messa a 1 e viene rimessa a 0 dopo 2 sec
84 147
flag_visu_msg_password = 1;
85 148
remove_timer(stop_visu_msg_password);
86 149
exec_timer(stop_visu_msg_password, ONCE, 2000);
... ...
@@ -104,7 +167,7 @@ Nella pagina (**page_reqPassword.c**) in cui viene richiesto di inserire la pass
104 167
}
105 168
}
106 169
107
-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:
170
+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":
108 171
109 172
#include "page_modPassword.h"
110 173
// -------------------------------+
... ...
@@ -117,37 +180,43 @@ Nella pagina **page_modPassword.c**, in cui si può modificare la password, le v
117 180
// -------------------------------
118 181
// methods:
119 182
// -------------------------------
120
- void Event(onfirst)() // all' inizio, negli edit delle nuove password, vengono stampate le password attualmente impostate
183
+ void Event(onfirst)() // all' inizio, negli edit delle password, vengono stampate le password attualmente impostate
121 184
{
122
- snprintf(new_superadmin_password, sizeof(new_superadmin_password), "%s", superadmin_password);
123
- snprintf(new_manutentore_password, sizeof(new_manutentore_password), "%s", manutentore_password);
185
+ snprintf(superadmin_password, sizeof(superadmin_password), "%s", dati_fissi.superadmin_password_df);
186
+ snprintf(manutentore_password, sizeof(manutentore_password), "%s", dati_fissi.manutentore_password_df);
124 187
}
125 188
// -------------------------------
126 189
void Event(button1_onmousedown)() // quando si preme il pulsante di reset
127 190
{
128
- reset_password(); // vengono reimpostate le password con i caratteri di default
191
+ // imposta nella struttura dati i caratteri di default delle password
192
+ snprintf(dati_fissi.superadmin_password_df, sizeof(dati_fissi.superadmin_password_df), "1234");
193
+ snprintf(dati_fissi.manutentore_password_df, sizeof(dati_fissi.manutentore_password_df), "5678");
194
+
195
+ salva();
129 196
130
- // stampa negli edit le password reimpostate
131
- snprintf(new_superadmin_password, sizeof(new_superadmin_password), "%s", superadmin_password);
132
- snprintf(new_manutentore_password, sizeof(new_manutentore_password), "%s", manutentore_password);
197
+ // imposta come password i valori presi dalla struttura dati
198
+ snprintf(superadmin_password, sizeof(superadmin_password), "%s", dfRic.superadmin_password_Ric);
199
+ snprintf(manutentore_password, sizeof(manutentore_password), "%s", dfRic.manutentore_password_Ric);
133 200
}
134 201
// -------------------------------
135 202
void Event(bitmap1_onmousedown)() // quando viene premuta la bitmap per il salvataggio
136 203
{
137 204
v_tik(30);
138 205
139
- // salva le nuove password negli array delle password correnti
140
- snprintf(superadmin_password, sizeof(superadmin_password), "%s", new_superadmin_password);
141
- snprintf(manutentore_password, sizeof(manutentore_password), "%s", new_manutentore_password);
142
-
143
- // la flag del salvataggio che fa apparire il messaggio di password salvata viene messa a 1 e dopo 3 sec viene rimessa a 0
144
- flag_msg_salva_password = 1;
145
- remove_timer(stop_msg_salva_password);
146
- exec_timer(stop_msg_salva password, ONCE, 3000);
206
+ // salva le nuove password nella struttura dati
207
+ snprintf(dati_fissi.superadmin_password_df, sizeof(dati_fissi.superadmin_password_df), "%s", superadmin_password);
208
+ snprintf(dati_fissi.manutentore_password_df, sizeof(dati_fissi.manutentore_password_df), "%s", manutentore_password);
209
+
210
+ salva();
147 211
}
148 212
// -------------------------------
149
- void Event(label1_onentry)() // il label1 ("Password salvata") è visibile quando la flag relativa al messaggio di salvataggio è 1
213
+ void Event(label1_onentry)() // il label1 ("Salvataggio OK") è visibile se l' esito del salvataggio ha avuto successso
214
+ {
215
+ me2->visible = visualizzaEsitoSalvataggioOK;
216
+ }
217
+
218
+ void Event(label2_onentry)() // il label2 ("Salvataggio fallito") è visibile se l' esito del salvataggio ha avuto successo
150 219
{
151
- me2->visible = flag_msg_salva_password;
220
+ me2->visible = visualizzaEsitoSalvataggioNO;
152 221
}
153 222