[dynui] Add concept of a secret user interface item

For interactive forms, the concept of a secret value becomes
meaningful (e.g. for password fields).

Add a flag to indicate that an item represents a secret value, and
allow this flag to be set via the "--secret" option of the "item"
command.

This flag has no meaning for menu items, but is silently accepted
anyway to keep the code size minimal.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/1243/head
Michael Brown 2024-06-20 16:21:28 -07:00
parent 039019039e
commit 1c3c5e2b22
2 changed files with 9 additions and 0 deletions

View File

@ -116,6 +116,8 @@ struct item_options {
unsigned int key;
/** Use as default */
int is_default;
/** Value is a secret */
int is_secret;
/** Use as a separator */
int is_gap;
};
@ -128,6 +130,8 @@ static struct option_descriptor item_opts[] = {
struct item_options, key, parse_key ),
OPTION_DESC ( "default", 'd', no_argument,
struct item_options, is_default, parse_flag ),
OPTION_DESC ( "secret", 's', no_argument,
struct item_options, is_secret, parse_flag ),
OPTION_DESC ( "gap", 'g', no_argument,
struct item_options, is_gap, parse_flag ),
};
@ -177,6 +181,8 @@ static int item_exec ( int argc, char **argv ) {
/* Add dynamic user interface item */
if ( opts.is_default )
flags |= DYNUI_DEFAULT;
if ( opts.is_secret )
flags |= DYNUI_SECRET;
item = add_dynui_item ( dynui, name, ( text ? text : "" ), flags,
opts.key );
if ( ! item ) {

View File

@ -44,6 +44,9 @@ struct dynamic_item {
/** Dynamic user interface item is default selection */
#define DYNUI_DEFAULT 0x0001
/** Dynamic user interface item represents a secret */
#define DYNUI_SECRET 0x0002
extern struct dynamic_ui * create_dynui ( const char *name, const char *title );
extern struct dynamic_item * add_dynui_item ( struct dynamic_ui *dynui,
const char *name,