]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Add VTOY_SHOW_PASSWORD_ASTERISK option in global control plugon. (#1931)
authorlongpanda <admin@ventoy.net>
Wed, 26 Oct 2022 07:27:51 +0000 (15:27 +0800)
committerlongpanda <admin@ventoy.net>
Wed, 26 Oct 2022 07:27:51 +0000 (15:27 +0800)
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
Plugson/src/Web/ventoy_http.c
Plugson/src/Web/ventoy_http.h
Plugson/vs/VentoyPlugson/Release/VentoyPlugson.exe
Plugson/www/plugson_control.html

index 935ad7a0cf21f34425b3401946b98c666e588005..73e982154fc99bf19660d142f23d40fba2cd2d31 100644 (file)
@@ -2212,6 +2212,21 @@ ventoy_password_get (char buf[], unsigned buf_size)
     return (key != GRUB_TERM_ESC);
 }
 
+static int ventoy_get_password(char buf[], unsigned buf_size)
+{
+    const char *env = NULL;
+
+    env = grub_env_get("VTOY_SHOW_PASSWORD_ASTERISK");
+    if (env && env[0] == '0' && env[1] == 0)
+    {
+        return grub_password_get(buf, buf_size);
+    }
+    else
+    {
+        return ventoy_password_get(buf, buf_size);
+    }
+}
+
 int ventoy_check_password(const vtoy_password *pwd, int retry)
 {
     int offset;
@@ -2227,7 +2242,7 @@ int ventoy_check_password(const vtoy_password *pwd, int retry)
         
         if (pwd->type == VTOY_PASSWORD_TXT)
         {
-            ventoy_password_get(input, 128);
+            ventoy_get_password(input, 128);
             if (grub_strcmp(pwd->text, input) == 0)
             {
                 return 0;
@@ -2235,7 +2250,7 @@ int ventoy_check_password(const vtoy_password *pwd, int retry)
         }
         else if (pwd->type == VTOY_PASSWORD_MD5)
         {
-            ventoy_password_get(input, 128);
+            ventoy_get_password(input, 128);
             grub_crypto_hash(GRUB_MD_MD5, md5, input, grub_strlen(input));
             if (grub_memcmp(pwd->md5, md5, 16) == 0)
             {
@@ -2245,7 +2260,7 @@ int ventoy_check_password(const vtoy_password *pwd, int retry)
         else if (pwd->type == VTOY_PASSWORD_SALT_MD5)
         {
             offset = (int)grub_snprintf(input, 128, "%s", pwd->salt);
-            ventoy_password_get(input + offset, 128);
+            ventoy_get_password(input + offset, 128);
             
             grub_crypto_hash(GRUB_MD_MD5, md5, input, grub_strlen(input));
             if (grub_memcmp(pwd->md5, md5, 16) == 0)
index be9639192c54897020d52da157ae3dbc6f5b8cd0..d72316903d5534c9384fa0eb64abccb7cc4c90fe 100644 (file)
@@ -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);
 
@@ -3981,31 +3986,35 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p)
 
             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 +4067,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);
             }
             
         }
index 4a75196d1eebfc64a9c43ddc065ba052744c1b8c..0ec1e22cb9afb4ca04d2a8e21bf0136d6ccc6cd3 100644 (file)
@@ -79,6 +79,7 @@ typedef struct data_control
     int secondary_menu_timeout;
     int linux_remount;
     int secondary_menu;
+    int password_asterisk;
     char default_search_root[MAX_PATH];
     char default_image[MAX_PATH];
     char default_kbd_layout[32];
@@ -402,9 +403,11 @@ else\
     } \
 }
 
-#define CONTROL_PARSE_INT(node, val) \
+#define CONTROL_PARSE_INT_DEF_0(node, val) \
     if (node->unData.pcStrVal[0] == '1') val = 1
 
+#define CONTROL_PARSE_INT_DEF_1(node, val) \
+    if (node->unData.pcStrVal[0] == '0') val = 0
 
 #define VTOY_JSON_INT(key, val) vtoy_json_get_int(json, key, &val)
 #define VTOY_JSON_STR(key, buf) vtoy_json_get_string(json, key, sizeof(buf), buf)
index c01dec7df7397052c6087c054608dc75d4c0c7c7..7d0d1ab9cf6a2492117e0cdaa412567c9706da35 100644 (file)
Binary files a/Plugson/vs/VentoyPlugson/Release/VentoyPlugson.exe and b/Plugson/vs/VentoyPlugson/Release/VentoyPlugson.exe differ
index 512872fd61dd67292abb4ed0b83ea731cba8afb2..8cfbfcba4b33849273abf82811d19b212a164e26 100644 (file)
             </div><!-- /.box-body -->\r
         </div><!-- /.box -->\r
         \r
+        \r
+        <div class="box box-primary box-solid">\r
+            <div class="box-header with-border">\r
+              <h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_SHOW_PASSWORD_ASTERISK\r
+                <span id="id_span_desc_cn"> —— 输入密码时显示星号</span></h3>\r
+              <div class="box-tools pull-right">\r
+                <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>\r
+              </div><!-- /.box-tools -->\r
+            </div><!-- /.box-header -->\r
+            <div class="box-body no-padding">\r
+                <table class="table table-bordered  no-padding">                    \r
+                    <tr style="font-weight:bold;">\r
+                      <td class="td_ctrl_col" id="td_title_setting">选项设置</td>\r
+                      <td>\r
+                        <label class="radio-inline">\r
+                            <input type="radio" id="id_ctrl_asterisk_radio0" name="id_ctrl_asterisk_radio" data-type="0" value="0"> <span style="font-weight:bold;">0</span>\r
+                        </label>&nbsp;&nbsp;&nbsp;&nbsp;\r
+                        <label class="radio-inline">\r
+                            <input type="radio" id="id_ctrl_asterisk_radio1" name="id_ctrl_asterisk_radio" data-type="1" value="1"> <span style="font-weight:bold;">1</span>\r
+                        </label>\r
+                      </td>\r
+                    </tr>\r
+                    <tr id="tr_title_desc_cn">\r
+                      <td class="td_ctrl_col" id="td_title_desc">选项说明</td>\r
+                      <td>输入密码时是否显示星号\r
+                        <code style="font-weight: bold;">0</code> 不显示 &nbsp;&nbsp; \r
+                        <code style="font-weight: bold;">1</code> 显示\r
+                      </td>\r
+                    </tr>\r
+                    <tr id="tr_title_desc_en">\r
+                      <td class="td_ctrl_col" id="td_title_desc">Option Description</td>\r
+                      <td>\r
+                      Display asterisk when typing password\r
+                      <code style="font-weight: bold;">0</code> Don't display &nbsp;&nbsp;&nbsp;\r
+                      <code style="font-weight: bold;">1</code> Display\r
+                      </td>\r
+                    </tr>\r
+                </table>\r
+            </div><!-- /.box-body -->\r
+        </div><!-- /.box -->\r
+        \r
+        \r
+        \r
         <div class="box box-primary box-solid">\r
             <div class="box-header with-border">\r
               <h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_SECONDARY_TIMEOUT\r
     data.win11_bypass_check = parseInt($('input:radio[name=id_ctrl_bypass_win11_radio]:checked').val());\r
     data.linux_remount = parseInt($('input:radio[name=id_ctrl_linux_remount_radio]:checked').val());\r
     data.secondary_menu = parseInt($('input:radio[name=id_ctrl_secondary_radio]:checked').val());\r
+    data.password_asterisk = parseInt($('input:radio[name=id_ctrl_asterisk_radio]:checked').val());\r
     data.default_search_root = $('input:text[id=id_ctrl_text_search_root]').val();\r
     data.menu_timeout = parseInt($('input:text[id=id_ctrl_text_timeout]').val());\r
     data.secondary_menu_timeout = parseInt($('input:text[id=id_ctrl_text_secondary_timeout]').val());\r
     $('input:radio[name=id_ctrl_bypass_win11_radio]')[data.win11_bypass_check].checked = true;\r
     $('input:radio[name=id_ctrl_linux_remount_radio]')[data.linux_remount].checked = true;\r
     $('input:radio[name=id_ctrl_secondary_radio]')[data.secondary_menu].checked = true;\r
+    $('input:radio[name=id_ctrl_asterisk_radio]')[data.password_asterisk].checked = true;\r
 \r
     //VTOY_DEFAULT_SEARCH_ROOT\r
     $('input:text[id=id_ctrl_text_search_root]').val(data.default_search_root);\r
       win11_bypass_check: data.win11_bypass_check,\r
       linux_remount:data.linux_remount,\r
       secondary_menu:data.secondary_menu,\r
+      password_asterisk:data.password_asterisk,\r
       default_search_root: data.default_search_root,\r
       menu_timeout: data.menu_timeout,\r
       secondary_menu_timeout: data.secondary_menu_timeout,\r