Просмотр исходного кода

Merge picopass from https://github.com/flipperdevices/flipperzero-good-faps

Willy-JL 1 год назад
Родитель
Сommit
a39b95fd2f
2 измененных файлов с 13 добавлено и 1 удалено
  1. 1 1
      picopass/helpers/iclass_elite_dict.c
  2. 12 0
      picopass/scenes/picopass_scene_write_key.c

+ 1 - 1
picopass/helpers/iclass_elite_dict.c

@@ -147,7 +147,7 @@ bool iclass_elite_dict_add_key(IclassEliteDict* dict, uint8_t* key) {
     furi_assert(dict->stream);
 
     FuriString* key_str = furi_string_alloc();
-    for(size_t i = 0; i < 6; i++) {
+    for(size_t i = 0; i < ICLASS_ELITE_KEY_LEN; i++) {
         furi_string_cat_printf(key_str, "%02X", key[i]);
     }
     furi_string_cat_printf(key_str, "\n");

+ 12 - 0
picopass/scenes/picopass_scene_write_key.c

@@ -17,6 +17,7 @@ NfcCommand picopass_scene_write_key_poller_callback(PicopassPollerEvent event, v
             event.data->req_write_key.key,
             picopass->write_key_context.key_to_write,
             PICOPASS_KEY_LEN);
+
         event.data->req_write_key.is_elite_key = picopass->write_key_context.is_elite;
     } else if(event.type == PicopassPollerEventTypeSuccess) {
         view_dispatcher_send_custom_event(
@@ -44,6 +45,17 @@ void picopass_scene_write_key_on_enter(void* context) {
     view_dispatcher_switch_to_view(picopass->view_dispatcher, PicopassViewPopup);
     picopass_blink_start(picopass);
 
+    // If there is no user dictionary, create it with the key they entered
+    // Prevent people who set all 0's from bricking their card
+    // TODO: Consider checking the elite user dict, when it exists, for the key
+    if(!iclass_elite_dict_check_presence(IclassEliteDictTypeUser)) {
+        storage_simply_mkdir(picopass->dev->storage, STORAGE_APP_DATA_PATH_PREFIX);
+        storage_simply_mkdir(picopass->dev->storage, APP_DATA_PATH("assets"));
+        IclassEliteDict* dict = iclass_elite_dict_alloc(IclassEliteDictTypeUser);
+        iclass_elite_dict_add_key(dict, picopass->write_key_context.key_to_write);
+        iclass_elite_dict_free(dict);
+    }
+
     picopass->poller = picopass_poller_alloc(picopass->nfc);
     picopass_poller_start(picopass->poller, picopass_scene_write_key_poller_callback, picopass);
 }