11
11
#include "../generate_token/totp_scene_generate_token.h"
12
12
13
13
#define TOKEN_ALGO_LIST_LENGTH 3
14
- char * TOKEN_ALGO_LIST [] = { "SHA1" , "SHA256" , "SHA512" };
14
+ char * TOKEN_ALGO_LIST [] = {"SHA1" , "SHA256" , "SHA512" };
15
15
#define TOKEN_DIGITS_LIST_LENGTH 2
16
- char * TOKEN_DIGITS_LIST [] = { "6 digits" , "8 digits" };
16
+ char * TOKEN_DIGITS_LIST [] = {"6 digits" , "8 digits" };
17
17
18
18
typedef enum {
19
19
TokenNameTextBox ,
@@ -62,7 +62,9 @@ static void on_token_secret_user_comitted(InputTextSceneCallbackResult* result)
62
62
free (result );
63
63
}
64
64
65
- void totp_scene_add_new_token_activate (PluginState * plugin_state , const TokenAddEditSceneContext * context ) {
65
+ void totp_scene_add_new_token_activate (
66
+ PluginState * plugin_state ,
67
+ const TokenAddEditSceneContext * context ) {
66
68
SceneState * scene_state = malloc (sizeof (SceneState ));
67
69
plugin_state -> current_scene_state = scene_state ;
68
70
scene_state -> token_name = "Name" ;
@@ -84,25 +86,52 @@ void totp_scene_add_new_token_activate(PluginState* plugin_state, const TokenAdd
84
86
85
87
scene_state -> input_state = NULL ;
86
88
87
- if (context == NULL ) {
89
+ if (context == NULL ) {
88
90
scene_state -> current_token_index = -1 ;
89
91
} else {
90
92
scene_state -> current_token_index = context -> current_token_index ;
91
93
}
92
94
}
93
95
94
96
void totp_scene_add_new_token_render (Canvas * const canvas , PluginState * plugin_state ) {
95
- SceneState * scene_state = (SceneState * )plugin_state -> current_scene_state ;
96
- if (scene_state -> input_started_at > 0 ) {
97
+ SceneState * scene_state = (SceneState * )plugin_state -> current_scene_state ;
98
+ if (scene_state -> input_started_at > 0 ) {
97
99
totp_input_text_render (canvas , scene_state -> input_state );
98
100
return ;
99
101
}
100
102
101
- ui_control_text_box_render (canvas , 10 - scene_state -> screen_y_offset , scene_state -> token_name , scene_state -> selected_control == TokenNameTextBox );
102
- ui_control_text_box_render (canvas , 27 - scene_state -> screen_y_offset , scene_state -> token_secret , scene_state -> selected_control == TokenSecretTextBox );
103
- ui_control_select_render (canvas , 0 , 44 - scene_state -> screen_y_offset , SCREEN_WIDTH , TOKEN_ALGO_LIST [scene_state -> algo ], scene_state -> selected_control == TokenAlgoSelect );
104
- ui_control_select_render (canvas , 0 , 63 - scene_state -> screen_y_offset , SCREEN_WIDTH , TOKEN_DIGITS_LIST [scene_state -> digits_count ], scene_state -> selected_control == TokenLengthSelect );
105
- ui_control_button_render (canvas , SCREEN_WIDTH_CENTER - 24 , 85 - scene_state -> screen_y_offset , 48 , 13 , "Confirm" , scene_state -> selected_control == ConfirmButton );
103
+ ui_control_text_box_render (
104
+ canvas ,
105
+ 10 - scene_state -> screen_y_offset ,
106
+ scene_state -> token_name ,
107
+ scene_state -> selected_control == TokenNameTextBox );
108
+ ui_control_text_box_render (
109
+ canvas ,
110
+ 27 - scene_state -> screen_y_offset ,
111
+ scene_state -> token_secret ,
112
+ scene_state -> selected_control == TokenSecretTextBox );
113
+ ui_control_select_render (
114
+ canvas ,
115
+ 0 ,
116
+ 44 - scene_state -> screen_y_offset ,
117
+ SCREEN_WIDTH ,
118
+ TOKEN_ALGO_LIST [scene_state -> algo ],
119
+ scene_state -> selected_control == TokenAlgoSelect );
120
+ ui_control_select_render (
121
+ canvas ,
122
+ 0 ,
123
+ 63 - scene_state -> screen_y_offset ,
124
+ SCREEN_WIDTH ,
125
+ TOKEN_DIGITS_LIST [scene_state -> digits_count ],
126
+ scene_state -> selected_control == TokenLengthSelect );
127
+ ui_control_button_render (
128
+ canvas ,
129
+ SCREEN_WIDTH_CENTER - 24 ,
130
+ 85 - scene_state -> screen_y_offset ,
131
+ 48 ,
132
+ 13 ,
133
+ "Confirm" ,
134
+ scene_state -> selected_control == ConfirmButton );
106
135
107
136
canvas_set_color (canvas , ColorWhite );
108
137
canvas_draw_box (canvas , 0 , 0 , SCREEN_WIDTH , 10 );
@@ -113,7 +142,7 @@ void totp_scene_add_new_token_render(Canvas* const canvas, PluginState* plugin_s
113
142
}
114
143
115
144
void update_screen_y_offset (SceneState * scene_state ) {
116
- if (scene_state -> selected_control > TokenAlgoSelect ) {
145
+ if (scene_state -> selected_control > TokenAlgoSelect ) {
117
146
scene_state -> screen_y_offset = 35 ;
118
147
} else {
119
148
scene_state -> screen_y_offset = 0 ;
@@ -122,121 +151,130 @@ void update_screen_y_offset(SceneState* scene_state) {
122
151
123
152
bool totp_scene_add_new_token_handle_event (PluginEvent * const event , PluginState * plugin_state ) {
124
153
if (event -> type == EventTypeKey ) {
125
- SceneState * scene_state = (SceneState * )plugin_state -> current_scene_state ;
126
- if (scene_state -> input_started_at > 0 && furi_get_tick () - scene_state -> input_started_at > 300 ) {
154
+ SceneState * scene_state = (SceneState * )plugin_state -> current_scene_state ;
155
+ if (scene_state -> input_started_at > 0 &&
156
+ furi_get_tick () - scene_state -> input_started_at > 300 ) {
127
157
return totp_input_text_handle_event (event , scene_state -> input_state );
128
158
}
129
159
130
- if (event -> input .type == InputTypeLong && event -> input .key == InputKeyBack ) {
160
+ if (event -> input .type == InputTypeLong && event -> input .key == InputKeyBack ) {
131
161
return false;
132
162
} else if (event -> input .type == InputTypePress ) {
133
163
switch (event -> input .key ) {
134
- case InputKeyUp :
135
- if (scene_state -> selected_control > TokenNameTextBox ) {
136
- scene_state -> selected_control -- ;
137
- update_screen_y_offset (scene_state );
164
+ case InputKeyUp :
165
+ if (scene_state -> selected_control > TokenNameTextBox ) {
166
+ scene_state -> selected_control -- ;
167
+ update_screen_y_offset (scene_state );
168
+ }
169
+ break ;
170
+ case InputKeyDown :
171
+ if (scene_state -> selected_control < ConfirmButton ) {
172
+ scene_state -> selected_control ++ ;
173
+ update_screen_y_offset (scene_state );
174
+ }
175
+ break ;
176
+ case InputKeyRight :
177
+ if (scene_state -> selected_control == TokenAlgoSelect ) {
178
+ if (scene_state -> algo < SHA512 ) {
179
+ scene_state -> algo ++ ;
180
+ } else {
181
+ scene_state -> algo = SHA1 ;
138
182
}
139
- break ;
140
- case InputKeyDown :
141
- if ( scene_state -> selected_control < ConfirmButton ) {
142
- scene_state -> selected_control ++ ;
143
- update_screen_y_offset ( scene_state ) ;
183
+ } else if ( scene_state -> selected_control == TokenLengthSelect ) {
184
+ if ( scene_state -> digits_count < TOTP_8_DIGITS ) {
185
+ scene_state -> digits_count ++ ;
186
+ } else {
187
+ scene_state -> digits_count = TOTP_6_DIGITS ;
144
188
}
145
- break ;
146
- case InputKeyRight :
147
- if (scene_state -> selected_control == TokenAlgoSelect ) {
148
- if (scene_state -> algo < SHA512 ) {
149
- scene_state -> algo ++ ;
150
- } else {
151
- scene_state -> algo = SHA1 ;
152
- }
189
+ }
190
+ break ;
191
+ case InputKeyLeft :
192
+ if (scene_state -> selected_control == TokenAlgoSelect ) {
193
+ if (scene_state -> algo > SHA1 ) {
194
+ scene_state -> algo -- ;
195
+ } else {
196
+ scene_state -> algo = SHA512 ;
197
+ }
198
+ } else if (scene_state -> selected_control == TokenLengthSelect ) {
199
+ if (scene_state -> digits_count > TOTP_6_DIGITS ) {
200
+ scene_state -> digits_count -- ;
201
+ } else {
202
+ scene_state -> digits_count = TOTP_8_DIGITS ;
153
203
}
154
- else if (scene_state -> selected_control == TokenLengthSelect ) {
155
- if (scene_state -> digits_count < TOTP_8_DIGITS ) {
156
- scene_state -> digits_count ++ ;
157
- } else {
158
- scene_state -> digits_count = TOTP_6_DIGITS ;
159
- }
204
+ }
205
+ break ;
206
+ case InputKeyOk :
207
+ switch (scene_state -> selected_control ) {
208
+ case TokenNameTextBox :
209
+ if (scene_state -> input_state != NULL ) {
210
+ totp_input_text_free (scene_state -> input_state );
160
211
}
212
+ scene_state -> input_state =
213
+ totp_input_text_activate (scene_state -> token_name_input_context );
214
+ scene_state -> input_started_at = furi_get_tick ();
161
215
break ;
162
- case InputKeyLeft :
163
- if (scene_state -> selected_control == TokenAlgoSelect ) {
164
- if (scene_state -> algo > SHA1 ) {
165
- scene_state -> algo -- ;
166
- } else {
167
- scene_state -> algo = SHA512 ;
168
- }
169
- }
170
- else if (scene_state -> selected_control == TokenLengthSelect ) {
171
- if (scene_state -> digits_count > TOTP_6_DIGITS ) {
172
- scene_state -> digits_count -- ;
173
- } else {
174
- scene_state -> digits_count = TOTP_8_DIGITS ;
175
- }
216
+ case TokenSecretTextBox :
217
+ if (scene_state -> input_state != NULL ) {
218
+ totp_input_text_free (scene_state -> input_state );
176
219
}
220
+ scene_state -> input_state =
221
+ totp_input_text_activate (scene_state -> token_secret_input_context );
222
+ scene_state -> input_started_at = furi_get_tick ();
177
223
break ;
178
- case InputKeyOk :
179
- switch (scene_state -> selected_control ) {
180
- case TokenNameTextBox :
181
- if (scene_state -> input_state != NULL ) {
182
- totp_input_text_free (scene_state -> input_state );
183
- }
184
- scene_state -> input_state = totp_input_text_activate (scene_state -> token_name_input_context );
185
- scene_state -> input_started_at = furi_get_tick ();
186
- break ;
187
- case TokenSecretTextBox :
188
- if (scene_state -> input_state != NULL ) {
189
- totp_input_text_free (scene_state -> input_state );
190
- }
191
- scene_state -> input_state = totp_input_text_activate (scene_state -> token_secret_input_context );
192
- scene_state -> input_started_at = furi_get_tick ();
193
- break ;
194
- case TokenAlgoSelect :
195
- break ;
196
- case TokenLengthSelect :
197
- break ;
198
- case ConfirmButton : {
199
- TokenInfo * tokenInfo = token_info_alloc ();
200
- tokenInfo -> name = malloc (scene_state -> token_name_length + 1 );
201
- strcpy (tokenInfo -> name , scene_state -> token_name );
202
-
203
- token_info_set_secret (tokenInfo , scene_state -> token_secret , scene_state -> token_secret_length , & plugin_state -> iv [0 ]);
224
+ case TokenAlgoSelect :
225
+ break ;
226
+ case TokenLengthSelect :
227
+ break ;
228
+ case ConfirmButton : {
229
+ TokenInfo * tokenInfo = token_info_alloc ();
230
+ tokenInfo -> name = malloc (scene_state -> token_name_length + 1 );
231
+ strcpy (tokenInfo -> name , scene_state -> token_name );
204
232
205
- tokenInfo -> algo = scene_state -> algo ;
206
- tokenInfo -> digits = scene_state -> digits_count ;
207
-
208
- if (plugin_state -> tokens_list == NULL ) {
209
- plugin_state -> tokens_list = list_init_head (tokenInfo );
210
- } else {
211
- list_add (plugin_state -> tokens_list , tokenInfo );
212
- }
213
- plugin_state -> tokens_count ++ ;
233
+ token_info_set_secret (
234
+ tokenInfo ,
235
+ scene_state -> token_secret ,
236
+ scene_state -> token_secret_length ,
237
+ & plugin_state -> iv [0 ]);
214
238
215
- totp_config_file_save_new_token (tokenInfo );
239
+ tokenInfo -> algo = scene_state -> algo ;
240
+ tokenInfo -> digits = scene_state -> digits_count ;
216
241
217
- GenerateTokenSceneContext generate_scene_context = { .current_token_index = plugin_state -> tokens_count - 1 };
218
- totp_scene_director_activate_scene (plugin_state , TotpSceneGenerateToken , & generate_scene_context );
219
- break ;
220
- }
221
- }
222
- break ;
223
- case InputKeyBack :
224
- if (scene_state -> current_token_index >= 0 ) {
225
- GenerateTokenSceneContext generate_scene_context = { .current_token_index = scene_state -> current_token_index };
226
- totp_scene_director_activate_scene (plugin_state , TotpSceneGenerateToken , & generate_scene_context );
242
+ if (plugin_state -> tokens_list == NULL ) {
243
+ plugin_state -> tokens_list = list_init_head (tokenInfo );
227
244
} else {
228
- totp_scene_director_activate_scene (plugin_state , TotpSceneGenerateToken , NULL );
245
+ list_add (plugin_state -> tokens_list , tokenInfo );
229
246
}
247
+ plugin_state -> tokens_count ++ ;
248
+
249
+ totp_config_file_save_new_token (tokenInfo );
250
+
251
+ GenerateTokenSceneContext generate_scene_context = {
252
+ .current_token_index = plugin_state -> tokens_count - 1 };
253
+ totp_scene_director_activate_scene (
254
+ plugin_state , TotpSceneGenerateToken , & generate_scene_context );
230
255
break ;
256
+ }
257
+ }
258
+ break ;
259
+ case InputKeyBack :
260
+ if (scene_state -> current_token_index >= 0 ) {
261
+ GenerateTokenSceneContext generate_scene_context = {
262
+ .current_token_index = scene_state -> current_token_index };
263
+ totp_scene_director_activate_scene (
264
+ plugin_state , TotpSceneGenerateToken , & generate_scene_context );
265
+ } else {
266
+ totp_scene_director_activate_scene (plugin_state , TotpSceneGenerateToken , NULL );
267
+ }
268
+ break ;
231
269
}
232
270
}
233
271
}
234
272
return true;
235
273
}
236
274
237
275
void totp_scene_add_new_token_deactivate (PluginState * plugin_state ) {
238
- if (plugin_state -> current_scene_state == NULL ) return ;
239
- SceneState * scene_state = (SceneState * )plugin_state -> current_scene_state ;
276
+ if (plugin_state -> current_scene_state == NULL ) return ;
277
+ SceneState * scene_state = (SceneState * )plugin_state -> current_scene_state ;
240
278
free (scene_state -> token_name );
241
279
free (scene_state -> token_secret );
242
280
@@ -246,7 +284,7 @@ void totp_scene_add_new_token_deactivate(PluginState* plugin_state) {
246
284
free (scene_state -> token_secret_input_context -> header_text );
247
285
free (scene_state -> token_secret_input_context );
248
286
249
- if (scene_state -> input_state != NULL ) {
287
+ if (scene_state -> input_state != NULL ) {
250
288
totp_input_text_free (scene_state -> input_state );
251
289
}
252
290
0 commit comments