Преглед изворни кода

Added submenu to configure script settings

tcpassos пре 2 година
родитељ
комит
1385a71e42

+ 1 - 0
applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_config.h

@@ -7,6 +7,7 @@ ADD_SCENE(wifi_marauder, user_input, UserInput)
 ADD_SCENE(wifi_marauder, script_select, ScriptSelect)
 ADD_SCENE(wifi_marauder, script_options, ScriptOptions)
 ADD_SCENE(wifi_marauder, script_edit, ScriptEdit)
+ADD_SCENE(wifi_marauder, script_settings, ScriptSettings)
 ADD_SCENE(wifi_marauder, script_confirm_delete, ScriptConfirmDelete)
 ADD_SCENE(wifi_marauder, script_stage_edit, ScriptStageEdit)
 ADD_SCENE(wifi_marauder, script_stage_add, ScriptStageAdd)

+ 0 - 18
applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_script_edit.c

@@ -23,22 +23,6 @@ static void wifi_marauder_scene_script_edit_add_callback(void* context, uint32_t
     scene_manager_next_scene(app->scene_manager, WifiMarauderSceneScriptStageAdd);
 }
 
-static void wifi_marauder_scene_script_edit_save_callback(void* context, uint32_t index) {
-    UNUSED(index);
-    WifiMarauderApp* app = context;
-    
-    char script_path[256];
-    snprintf(script_path, sizeof(script_path), "%s/%s.json", MARAUDER_APP_FOLDER_SCRIPTS, app->script->name);
-    wifi_marauder_script_save_json(app->storage, script_path, app->script);
-
-    DialogMessage* message = dialog_message_alloc();
-    dialog_message_set_text(message, "Saved!", 88, 32, AlignCenter, AlignCenter);
-    dialog_message_set_icon(message, &I_DolphinCommon_56x48, 5, 6);
-    dialog_message_set_buttons(message, NULL, "Ok", NULL);
-    dialog_message_show(app->dialogs, message);
-    dialog_message_free(message);
-}
-
 void wifi_marauder_scene_script_edit_on_enter(void* context) {
     WifiMarauderApp* app = context;
     Submenu* script_edit_submenu = app->script_edit_submenu;
@@ -97,8 +81,6 @@ void wifi_marauder_scene_script_edit_on_enter(void* context) {
     }
 
     submenu_add_item(script_edit_submenu, "[+] ADD STAGE", stage_index++, wifi_marauder_scene_script_edit_add_callback, app);
-    submenu_add_item(script_edit_submenu, "[*] SAVE", stage_index, wifi_marauder_scene_script_edit_save_callback, app);
-
     submenu_set_selected_item(script_edit_submenu, scene_manager_get_scene_state(app->scene_manager, WifiMarauderSceneScriptEdit));
     view_dispatcher_switch_to_view(app->view_dispatcher, WifiMarauderAppViewScriptEdit);
 }

+ 27 - 5
applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_script_options.c

@@ -2,10 +2,25 @@
 
 enum SubmenuIndex {
     SubmenuIndexRun,
-    SubmenuIndexEdit,
+    SubmenuIndexSettings,
+    SubmenuIndexEditStages,
+    SubmenuIndexSave,
     SubmenuIndexDelete
 };
 
+void wifi_marauder_scene_script_options_save_script(WifiMarauderApp* app) {   
+    char script_path[256];
+    snprintf(script_path, sizeof(script_path), "%s/%s.json", MARAUDER_APP_FOLDER_SCRIPTS, app->script->name);
+    wifi_marauder_script_save_json(app->storage, script_path, app->script);
+
+    DialogMessage* message = dialog_message_alloc();
+    dialog_message_set_text(message, "Saved!", 88, 32, AlignCenter, AlignCenter);
+    dialog_message_set_icon(message, &I_DolphinCommon_56x48, 5, 6);
+    dialog_message_set_buttons(message, NULL, "Ok", NULL);
+    dialog_message_show(app->dialogs, message);
+    dialog_message_free(message);
+}
+
 static void wifi_marauder_scene_script_options_callback(void* context, uint32_t index) {
     WifiMarauderApp* app = context;
 
@@ -14,16 +29,21 @@ static void wifi_marauder_scene_script_options_callback(void* context, uint32_t
             scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneScriptOptions, index);
             scene_manager_next_scene(app->scene_manager, WifiMarauderSceneConsoleOutput);
             break;
-        case SubmenuIndexEdit:
+        case SubmenuIndexSettings:
+            scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneScriptOptions, index);
+            scene_manager_next_scene(app->scene_manager, WifiMarauderSceneScriptSettings);
+            break;
+        case SubmenuIndexEditStages:
             scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneScriptOptions, index);
             scene_manager_next_scene(app->scene_manager, WifiMarauderSceneScriptEdit);
             break;
+        case SubmenuIndexSave:
+            wifi_marauder_scene_script_options_save_script(app);
+            break;
         case SubmenuIndexDelete:
             scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneScriptOptions, index);
             scene_manager_next_scene(app->scene_manager, WifiMarauderSceneScriptConfirmDelete);
             break;
-        default:
-            break;
     }
 }
 
@@ -40,7 +60,9 @@ void wifi_marauder_scene_script_options_on_enter(void* context) {
 
     submenu_set_header(script_options_submenu, app->script->name);
     submenu_add_item(script_options_submenu, "[>] RUN", SubmenuIndexRun, wifi_marauder_scene_script_options_callback, app);
-    submenu_add_item(script_options_submenu, "[*] EDIT", SubmenuIndexEdit, wifi_marauder_scene_script_options_callback, app);
+    submenu_add_item(script_options_submenu, "[S] SETTINGS", SubmenuIndexSettings, wifi_marauder_scene_script_options_callback, app);
+    submenu_add_item(script_options_submenu, "[+] EDIT STAGES", SubmenuIndexEditStages, wifi_marauder_scene_script_options_callback, app);
+    submenu_add_item(script_options_submenu, "[*] SAVE", SubmenuIndexSave, wifi_marauder_scene_script_options_callback, app);
     submenu_add_item(script_options_submenu, "[X] DELETE", SubmenuIndexDelete, wifi_marauder_scene_script_options_callback, app);
 
     submenu_set_selected_item(script_options_submenu, scene_manager_get_scene_state(app->scene_manager, WifiMarauderSceneScriptOptions));

+ 74 - 0
applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_script_settings.c

@@ -0,0 +1,74 @@
+#include "../wifi_marauder_app_i.h"
+
+enum ScriptSettingsOption {
+    ScriptSettingsOptionRepeat,
+    ScriptSettingsOptionSavePcap,
+    ScriptSettingsOptionEnableLed
+};
+
+const char* option_values[3] = {"No", "Yes", "Default"};
+
+static void wifi_marauder_scene_script_settings_enter_callback(void* context, uint32_t index) {
+    WifiMarauderApp* app = context;
+    // Accept script repeat value
+    if (index == ScriptSettingsOptionRepeat) {
+        scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneScriptSettings, index);
+        app->user_input_type = WifiMarauderUserInputTypeNumber;
+        app->user_input_number_reference = &app->script->repeat;
+        scene_manager_next_scene(app->scene_manager, WifiMarauderSceneUserInput);
+    }
+}
+
+static void wifi_marauder_scene_script_settings_change_callback(VariableItem* item) {
+    WifiMarauderApp* app = variable_item_get_context(item);
+
+    uint8_t current_option = variable_item_list_get_selected_item_index(app->script_settings_list);
+    uint8_t option_value_index = variable_item_get_current_value_index(item);
+
+    switch (current_option) {
+        case ScriptSettingsOptionSavePcap:
+            variable_item_set_current_value_text(item, option_values[option_value_index]);
+            app->script->save_pcap = option_value_index;
+            break;
+        case ScriptSettingsOptionEnableLed:
+            variable_item_set_current_value_text(item, option_values[option_value_index]);
+            app->script->enable_led = option_value_index;
+            break;
+    }
+}
+
+void wifi_marauder_scene_script_settings_on_enter(void* context) {
+    WifiMarauderApp* app = context;
+    VariableItemList* script_settings_list = app->script_settings_list;
+    variable_item_list_set_enter_callback(app->script_settings_list, wifi_marauder_scene_script_settings_enter_callback, app);
+
+    // Script repeat option
+    VariableItem* repeat_item = variable_item_list_add(app->script_settings_list, "Repeat", 1, NULL, app);
+    char repeat_str[32];
+    snprintf(repeat_str, sizeof(repeat_str), "%d", app->script->repeat);
+    variable_item_set_current_value_text(repeat_item, repeat_str);
+
+    // Save PCAP option
+    VariableItem* save_pcap_item = variable_item_list_add(app->script_settings_list, "Save PCAP", 3, wifi_marauder_scene_script_settings_change_callback, app);
+    variable_item_set_current_value_index(save_pcap_item, app->script->save_pcap);
+    variable_item_set_current_value_text(save_pcap_item, option_values[app->script->save_pcap]);
+
+    // Enable board LED option
+    VariableItem* enable_led_item = variable_item_list_add(app->script_settings_list, "Enable LED", 3, wifi_marauder_scene_script_settings_change_callback, app);
+    variable_item_set_current_value_index(enable_led_item, app->script->enable_led);
+    variable_item_set_current_value_text(enable_led_item, option_values[app->script->enable_led]);
+
+    variable_item_list_set_selected_item(script_settings_list, scene_manager_get_scene_state(app->scene_manager, WifiMarauderSceneScriptSettings));
+    view_dispatcher_switch_to_view(app->view_dispatcher, WifiMarauderAppViewScriptSettings);
+}
+
+bool wifi_marauder_scene_script_settings_on_event(void* context, SceneManagerEvent event) {
+    UNUSED(context);
+    UNUSED(event);
+    return false;
+}
+
+void wifi_marauder_scene_script_settings_on_exit(void* context) {
+    WifiMarauderApp* app = context;
+    variable_item_list_reset(app->script_settings_list);
+}

+ 4 - 4
applications/external/wifi_marauder_companion/script/wifi_marauder_script.c

@@ -30,12 +30,12 @@ void _wifi_marauder_script_load_meta(WifiMarauderScript *script, cJSON *meta_sec
             script->description = strdup(description->valuestring);
         }
         // Enable LED
-        cJSON* enable_led_json = cJSON_GetObjectItemCaseSensitive(meta_section, "enableLed");
+        cJSON* enable_led_json = cJSON_GetObjectItem(meta_section, "enableLed");
         if (cJSON_IsBool(enable_led_json)) {
             script->enable_led = enable_led_json->valueint;
         }
         // Save PCAP
-        cJSON* save_pcap_json = cJSON_GetObjectItemCaseSensitive(meta_section, "savePcap");
+        cJSON* save_pcap_json = cJSON_GetObjectItem(meta_section, "savePcap");
         if (cJSON_IsBool(save_pcap_json)) {
             script->save_pcap = save_pcap_json->valueint;
         }
@@ -457,10 +457,10 @@ cJSON* _wifi_marauder_script_create_json_meta(WifiMarauderScript *script) {
         cJSON_AddStringToObject(meta_json, "description", "My Script");
     }
     if (script->enable_led != WifiMarauderScriptBooleanUndefined) {
-        cJSON_AddBoolToObject(meta_json, "enable_led", (script->enable_led == WifiMarauderScriptBooleanTrue));
+        cJSON_AddBoolToObject(meta_json, "enableLed", (script->enable_led == WifiMarauderScriptBooleanTrue));
     }
     if (script->save_pcap != WifiMarauderScriptBooleanUndefined) {
-        cJSON_AddBoolToObject(meta_json, "save_pcap", (script->save_pcap == WifiMarauderScriptBooleanTrue));
+        cJSON_AddBoolToObject(meta_json, "savePcap", (script->save_pcap == WifiMarauderScriptBooleanTrue));
     }
     cJSON_AddNumberToObject(meta_json, "repeat", script->repeat);
     return meta_json;

+ 6 - 0
applications/external/wifi_marauder_companion/wifi_marauder_app.c

@@ -103,6 +103,10 @@ WifiMarauderApp* wifi_marauder_app_alloc() {
     app->script_edit_submenu = submenu_alloc();
     view_dispatcher_add_view(app->view_dispatcher, WifiMarauderAppViewScriptEdit, submenu_get_view(app->script_edit_submenu));
 
+    // Script stage edit
+    app->script_settings_list = variable_item_list_alloc();
+    view_dispatcher_add_view(app->view_dispatcher, WifiMarauderAppViewScriptSettings, variable_item_list_get_view(app->script_settings_list));
+
     // Script stage edit list submenu
     app->script_stage_edit_list_submenu = submenu_alloc();
     view_dispatcher_add_view(app->view_dispatcher, WifiMarauderAppViewScriptStageEditList, submenu_get_view(app->script_stage_edit_list_submenu));
@@ -229,6 +233,7 @@ void wifi_marauder_app_free(WifiMarauderApp* app) {
     view_dispatcher_remove_view(app->view_dispatcher, WifiMarauderAppViewScriptSelect);
     view_dispatcher_remove_view(app->view_dispatcher, WifiMarauderAppViewScriptOptions);
     view_dispatcher_remove_view(app->view_dispatcher, WifiMarauderAppViewScriptEdit);
+    view_dispatcher_remove_view(app->view_dispatcher, WifiMarauderAppViewScriptSettings);
     view_dispatcher_remove_view(app->view_dispatcher, WifiMarauderAppViewScriptStageEdit);
     view_dispatcher_remove_view(app->view_dispatcher, WifiMarauderAppViewScriptStageEditList);
     view_dispatcher_remove_view(app->view_dispatcher, WifiMarauderAppViewUserInput);
@@ -243,6 +248,7 @@ void wifi_marauder_app_free(WifiMarauderApp* app) {
     submenu_free(app->script_stage_add_submenu);
     submenu_free(app->script_edit_submenu);
     submenu_free(app->script_stage_edit_list_submenu);
+    variable_item_list_free(app->script_settings_list);
     variable_item_list_free(app->script_stage_edit_list);
     storage_file_free(app->capture_file);
     storage_file_free(app->log_file);

+ 2 - 0
applications/external/wifi_marauder_companion/wifi_marauder_app_i.h

@@ -110,6 +110,7 @@ struct WifiMarauderApp {
     Submenu* script_stage_edit_list_submenu;
     Widget* script_confirm_delete_widget;
     WifiMarauderScriptStage* script_edit_selected_stage;
+    VariableItemList* script_settings_list;
     VariableItemList* script_stage_edit_list;
     WifiMarauderScriptStageListItem* script_stage_edit_first_item;
     char*** script_stage_edit_strings_reference;
@@ -153,6 +154,7 @@ typedef enum {
     WifiMarauderAppViewScriptSelect,
     WifiMarauderAppViewScriptOptions,
     WifiMarauderAppViewScriptEdit,
+    WifiMarauderAppViewScriptSettings,
     WifiMarauderAppViewScriptConfirmDelete,
     WifiMarauderAppViewScriptStageAdd,
     WifiMarauderAppViewScriptStageEdit,