X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/3f09fb9a2389c5c212a70feada3206a3cb523c95..44ff3dd8d4bd8152368e6d2da8b8ff3feabfbca6:/Plugson/src/Web/ventoy_http.c diff --git a/Plugson/src/Web/ventoy_http.c b/Plugson/src/Web/ventoy_http.c index be96391..a8a86df 100644 --- a/Plugson/src/Web/ventoy_http.c +++ b/Plugson/src/Web/ventoy_http.c @@ -513,6 +513,7 @@ void ventoy_data_default_control(data_control *data) { memset(data, 0, sizeof(data_control)); + data->password_asterisk = 1; data->secondary_menu = 1; data->filter_dot_underscore = 1; data->max_search_level = -1; @@ -539,6 +540,7 @@ int ventoy_data_cmp_control(data_control *data1, data_control *data2) data1->filter_vtoy != data2->filter_vtoy || data1->win11_bypass_check != data2->win11_bypass_check || data1->linux_remount != data2->linux_remount || + data1->password_asterisk != data2->password_asterisk || data1->secondary_menu != data2->secondary_menu || data1->menu_timeout != data2->menu_timeout || data1->secondary_menu_timeout != data2->secondary_menu_timeout) @@ -587,6 +589,7 @@ int ventoy_data_save_control(data_control *data, const char *title, char *buf, i VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_WIN11_BYPASS_CHECK", win11_bypass_check); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_LINUX_REMOUNT", linux_remount); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SECONDARY_BOOT_MENU", secondary_menu); + VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SHOW_PASSWORD_ASTERISK", password_asterisk); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_MENU_TIMEOUT", menu_timeout); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SECONDARY_TIMEOUT", secondary_menu_timeout); @@ -634,6 +637,7 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen) VTOY_JSON_FMT_SINT("win11_bypass_check", ctrl->win11_bypass_check); VTOY_JSON_FMT_SINT("linux_remount", ctrl->linux_remount); VTOY_JSON_FMT_SINT("secondary_menu", ctrl->secondary_menu); + VTOY_JSON_FMT_SINT("password_asterisk", ctrl->password_asterisk); VTOY_JSON_FMT_SINT("menu_timeout", ctrl->menu_timeout); VTOY_JSON_FMT_SINT("secondary_menu_timeout", ctrl->secondary_menu_timeout); VTOY_JSON_FMT_STRN("default_kbd_layout", ctrl->default_kbd_layout); @@ -702,6 +706,7 @@ static int ventoy_api_save_control(struct mg_connection *conn, VTOY_JSON *json) VTOY_JSON_INT("win11_bypass_check", ctrl->win11_bypass_check); VTOY_JSON_INT("linux_remount", ctrl->linux_remount); VTOY_JSON_INT("secondary_menu", ctrl->secondary_menu); + VTOY_JSON_INT("password_asterisk", ctrl->password_asterisk); VTOY_JSON_INT("menu_timeout", ctrl->menu_timeout); VTOY_JSON_INT("secondary_menu_timeout", ctrl->secondary_menu_timeout); @@ -3668,24 +3673,47 @@ static int ventoy_api_injection_del(struct mg_connection *conn, VTOY_JSON *json) static int ventoy_api_preview_json(struct mg_connection *conn, VTOY_JSON *json) { + int i = 0; int pos = 0; int len = 0; - int encodelen = 0; + int utf16enclen = 0; char *encodebuf = NULL; + unsigned short *utf16buf = NULL; (void)json; + /* We can not use json directly, because it will be formated in the JS. */ + len = ventoy_data_real_save_all(0); - encodebuf = ventoy_base64_encode(JSON_SAVE_BUFFER, len, &encodelen); - encodebuf[encodelen] = 0; + utf16buf = (unsigned short *)malloc(2 * len + 16); + if (!utf16buf) + { + goto json; + } + + utf16enclen = utf8_to_utf16((unsigned char *)JSON_SAVE_BUFFER, len, utf16buf, len + 2); + + encodebuf = (char *)malloc(utf16enclen * 4 + 16); + if (!encodebuf) + { + goto json; + } + + for (i = 0; i < utf16enclen; i++) + { + scnprintf(encodebuf + i * 4, 5, "%04X", utf16buf[i]); + } + +json: VTOY_JSON_FMT_BEGIN(pos, JSON_BUFFER, JSON_BUF_MAX); VTOY_JSON_FMT_OBJ_BEGIN(); - VTOY_JSON_FMT_STRN("json", encodebuf); + VTOY_JSON_FMT_STRN("json", (encodebuf ? encodebuf : "")); VTOY_JSON_FMT_OBJ_END(); VTOY_JSON_FMT_END(pos); - free(encodebuf); + CHECK_FREE(encodebuf); + CHECK_FREE(utf16buf); ventoy_json_buffer(conn, JSON_BUFFER, pos); return 0; @@ -3978,34 +4006,43 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p) if (node->enDataType == JSON_TYPE_OBJECT) { child = node->pstChild; + + if (child->enDataType != JSON_TYPE_STRING) + { + continue; + } if (strcmp(child->pcName, "VTOY_DEFAULT_MENU_MODE") == 0) { - CONTROL_PARSE_INT(child, data->default_menu_mode); + CONTROL_PARSE_INT_DEF_0(child, data->default_menu_mode); } else if (strcmp(child->pcName, "VTOY_WIN11_BYPASS_CHECK") == 0) { - CONTROL_PARSE_INT(child, data->win11_bypass_check); + CONTROL_PARSE_INT_DEF_0(child, data->win11_bypass_check); } else if (strcmp(child->pcName, "VTOY_LINUX_REMOUNT") == 0) { - CONTROL_PARSE_INT(child, data->linux_remount); + CONTROL_PARSE_INT_DEF_0(child, data->linux_remount); } else if (strcmp(child->pcName, "VTOY_SECONDARY_BOOT_MENU") == 0) { - CONTROL_PARSE_INT(child, data->secondary_menu); + CONTROL_PARSE_INT_DEF_1(child, data->secondary_menu); + } + else if (strcmp(child->pcName, "VTOY_SHOW_PASSWORD_ASTERISK") == 0) + { + CONTROL_PARSE_INT_DEF_1(child, data->password_asterisk); } else if (strcmp(child->pcName, "VTOY_TREE_VIEW_MENU_STYLE") == 0) { - CONTROL_PARSE_INT(child, data->treeview_style); + CONTROL_PARSE_INT_DEF_0(child, data->treeview_style); } else if (strcmp(child->pcName, "VTOY_FILT_DOT_UNDERSCORE_FILE") == 0) { - CONTROL_PARSE_INT(child, data->filter_dot_underscore); + CONTROL_PARSE_INT_DEF_1(child, data->filter_dot_underscore); } else if (strcmp(child->pcName, "VTOY_SORT_CASE_SENSITIVE") == 0) { - CONTROL_PARSE_INT(child, data->sort_casesensitive); + CONTROL_PARSE_INT_DEF_0(child, data->sort_casesensitive); } else if (strcmp(child->pcName, "VTOY_MAX_SEARCH_LEVEL") == 0) { @@ -4058,31 +4095,31 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p) } else if (strcmp(child->pcName, "VTOY_VHD_NO_WARNING") == 0) { - CONTROL_PARSE_INT(child, data->vhd_no_warning); + CONTROL_PARSE_INT_DEF_0(child, data->vhd_no_warning); } else if (strcmp(child->pcName, "VTOY_FILE_FLT_ISO") == 0) { - CONTROL_PARSE_INT(child, data->filter_iso); + CONTROL_PARSE_INT_DEF_0(child, data->filter_iso); } else if (strcmp(child->pcName, "VTOY_FILE_FLT_IMG") == 0) { - CONTROL_PARSE_INT(child, data->filter_img); + CONTROL_PARSE_INT_DEF_0(child, data->filter_img); } else if (strcmp(child->pcName, "VTOY_FILE_FLT_EFI") == 0) { - CONTROL_PARSE_INT(child, data->filter_efi); + CONTROL_PARSE_INT_DEF_0(child, data->filter_efi); } else if (strcmp(child->pcName, "VTOY_FILE_FLT_WIM") == 0) { - CONTROL_PARSE_INT(child, data->filter_wim); + CONTROL_PARSE_INT_DEF_0(child, data->filter_wim); } else if (strcmp(child->pcName, "VTOY_FILE_FLT_VHD") == 0) { - CONTROL_PARSE_INT(child, data->filter_vhd); + CONTROL_PARSE_INT_DEF_0(child, data->filter_vhd); } else if (strcmp(child->pcName, "VTOY_FILE_FLT_VTOY") == 0) { - CONTROL_PARSE_INT(child, data->filter_vtoy); + CONTROL_PARSE_INT_DEF_0(child, data->filter_vtoy); } }