8c33f700e51930c51906c7597e53633d2847802a
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 |