mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-03-24 12:30:35 +01:00
nmtui: add secret-flags support to NmtPasswordFields
The existing option ALWAYS_ASK is never used. Add a more generic option SHOW_SECRET_FLAGS to display a popup for choosing the secret flags.
This commit is contained in:
parent
7f5f2eefca
commit
81be1923bc
2 changed files with 78 additions and 46 deletions
|
|
@ -25,7 +25,7 @@ typedef struct {
|
|||
NmtPasswordFieldsExtras extras;
|
||||
|
||||
NmtNewtEntry *entry;
|
||||
NmtNewtCheckbox *always_ask;
|
||||
NmtNewtPopup *secret_flags;
|
||||
NmtNewtCheckbox *show_password;
|
||||
|
||||
char *init_password;
|
||||
|
|
@ -37,7 +37,7 @@ enum {
|
|||
PROP_WIDTH,
|
||||
PROP_EXTRAS,
|
||||
PROP_PASSWORD,
|
||||
PROP_ALWAYS_ASK,
|
||||
PROP_SECRET_FLAGS,
|
||||
PROP_SHOW_PASSWORD,
|
||||
|
||||
LAST_PROP
|
||||
|
|
@ -45,7 +45,7 @@ enum {
|
|||
|
||||
/**
|
||||
* NmtPasswordFieldsExtras:
|
||||
* @NMT_PASSWORD_FIELDS_ALWAYS_ASK: show an "Always ask" checkbox
|
||||
* @NMT_PASSWORD_FIELDS_SHOW_SECRET_FLAGS: show the secret flags popup
|
||||
* @NMT_PASSWORD_FIELDS_SHOW_PASSWORD: show a "Show password" checkbox
|
||||
* @NMT_PASSWORD_FIELDS_NOT_EMPTY: return NULL instead of empty string
|
||||
*
|
||||
|
|
@ -92,26 +92,55 @@ nmt_password_fields_get_password(NmtPasswordFields *fields)
|
|||
return text;
|
||||
}
|
||||
|
||||
static void
|
||||
always_ask_changed(GObject *object, GParamSpec *pspec, gpointer fields)
|
||||
{
|
||||
g_object_notify(fields, "always-ask");
|
||||
}
|
||||
|
||||
static void
|
||||
show_password_changed(GObject *object, GParamSpec *pspec, gpointer fields)
|
||||
{
|
||||
g_object_notify(fields, "show-password");
|
||||
}
|
||||
|
||||
static void
|
||||
secret_flags_changed(GObject *object, GParamSpec *pspec, gpointer fields)
|
||||
{
|
||||
g_object_notify(fields, "secret-flags");
|
||||
}
|
||||
|
||||
static guint
|
||||
secret_flags_from_popup_idx(guint idx)
|
||||
{
|
||||
switch (idx) {
|
||||
case 1:
|
||||
return NM_SETTING_SECRET_FLAG_AGENT_OWNED;
|
||||
case 2:
|
||||
return NM_SETTING_SECRET_FLAG_NOT_SAVED;
|
||||
default:
|
||||
case 0:
|
||||
return NM_SETTING_SECRET_FLAG_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
static guint
|
||||
secret_flags_to_popup_idx(guint flags)
|
||||
{
|
||||
if (flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)
|
||||
return 1;
|
||||
if (flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
nmt_password_fields_init(NmtPasswordFields *fields)
|
||||
{
|
||||
NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE(fields);
|
||||
NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE(fields);
|
||||
NmtNewtPopupEntry entries[] = {
|
||||
{_("Store password for all users"), NULL},
|
||||
{_("Store password only for this user"), NULL},
|
||||
{_("Ask password every time"), NULL},
|
||||
{},
|
||||
};
|
||||
|
||||
priv->entry = NMT_NEWT_ENTRY(nmt_newt_entry_new(-1, 0));
|
||||
priv->always_ask =
|
||||
NMT_NEWT_CHECKBOX(nmt_newt_checkbox_new(_("Ask for this password every time")));
|
||||
priv->entry = NMT_NEWT_ENTRY(nmt_newt_entry_new(-1, 0));
|
||||
priv->secret_flags = NMT_NEWT_POPUP(nmt_newt_popup_new(entries));
|
||||
priv->show_password = NMT_NEWT_CHECKBOX(nmt_newt_checkbox_new(_("Show password")));
|
||||
}
|
||||
|
||||
|
|
@ -120,20 +149,12 @@ nmt_password_fields_constructed(GObject *object)
|
|||
{
|
||||
NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE(object);
|
||||
NmtNewtGrid *grid = NMT_NEWT_GRID(object);
|
||||
guint row = 0;
|
||||
|
||||
nmt_newt_grid_add(grid, NMT_NEWT_WIDGET(priv->entry), 0, 0);
|
||||
|
||||
if (priv->extras & NMT_PASSWORD_FIELDS_ALWAYS_ASK) {
|
||||
nmt_newt_grid_add(grid, NMT_NEWT_WIDGET(priv->always_ask), 0, 1);
|
||||
g_signal_connect(priv->always_ask,
|
||||
"notify::active",
|
||||
G_CALLBACK(always_ask_changed),
|
||||
object);
|
||||
} else
|
||||
g_clear_object(&priv->always_ask);
|
||||
nmt_newt_grid_add(grid, NMT_NEWT_WIDGET(priv->entry), 0, row++);
|
||||
|
||||
if (priv->extras & NMT_PASSWORD_FIELDS_SHOW_PASSWORD) {
|
||||
nmt_newt_grid_add(grid, NMT_NEWT_WIDGET(priv->show_password), 0, 2);
|
||||
nmt_newt_grid_add(grid, NMT_NEWT_WIDGET(priv->show_password), 0, row++);
|
||||
g_signal_connect(priv->show_password,
|
||||
"notify::active",
|
||||
G_CALLBACK(show_password_changed),
|
||||
|
|
@ -146,6 +167,15 @@ nmt_password_fields_constructed(GObject *object)
|
|||
} else
|
||||
g_clear_object(&priv->show_password);
|
||||
|
||||
if (priv->extras & NMT_PASSWORD_FIELDS_SHOW_SECRET_FLAGS) {
|
||||
nmt_newt_grid_add(grid, NMT_NEWT_WIDGET(priv->secret_flags), 0, row++);
|
||||
g_signal_connect(priv->secret_flags,
|
||||
"notify::active-id",
|
||||
G_CALLBACK(secret_flags_changed),
|
||||
object);
|
||||
} else
|
||||
g_clear_object(&priv->secret_flags);
|
||||
|
||||
g_object_bind_property(priv->entry,
|
||||
"text",
|
||||
object,
|
||||
|
|
@ -160,9 +190,9 @@ nmt_password_fields_finalize(GObject *object)
|
|||
{
|
||||
NmtPasswordFieldsPrivate *priv = NMT_PASSWORD_FIELDS_GET_PRIVATE(object);
|
||||
|
||||
if (priv->always_ask) {
|
||||
g_signal_handlers_disconnect_by_func(priv->always_ask,
|
||||
G_CALLBACK(always_ask_changed),
|
||||
if (priv->secret_flags) {
|
||||
g_signal_handlers_disconnect_by_func(priv->secret_flags,
|
||||
G_CALLBACK(secret_flags_changed),
|
||||
object);
|
||||
}
|
||||
if (priv->show_password) {
|
||||
|
|
@ -194,9 +224,9 @@ nmt_password_fields_set_property(GObject *object,
|
|||
case PROP_PASSWORD:
|
||||
nmt_password_fields_set_password(fields, g_value_get_string(value));
|
||||
break;
|
||||
case PROP_ALWAYS_ASK:
|
||||
if (priv->always_ask)
|
||||
nmt_newt_checkbox_set_active(priv->always_ask, g_value_get_boolean(value));
|
||||
case PROP_SECRET_FLAGS:
|
||||
nmt_newt_popup_set_active(priv->secret_flags,
|
||||
secret_flags_to_popup_idx(g_value_get_uint(value)));
|
||||
break;
|
||||
case PROP_SHOW_PASSWORD:
|
||||
nmt_newt_checkbox_set_active(priv->show_password, g_value_get_boolean(value));
|
||||
|
|
@ -223,9 +253,10 @@ nmt_password_fields_get_property(GObject *object, guint prop_id, GValue *value,
|
|||
case PROP_PASSWORD:
|
||||
g_value_set_string(value, nmt_password_fields_get_password(entry));
|
||||
break;
|
||||
case PROP_ALWAYS_ASK:
|
||||
if (priv->always_ask)
|
||||
g_value_set_boolean(value, nmt_newt_checkbox_get_active(priv->always_ask));
|
||||
case PROP_SECRET_FLAGS:
|
||||
g_value_set_uint(
|
||||
value,
|
||||
secret_flags_from_popup_idx(nmt_newt_popup_get_active(priv->secret_flags)));
|
||||
break;
|
||||
case PROP_SHOW_PASSWORD:
|
||||
g_value_set_boolean(value, nmt_newt_checkbox_get_active(priv->show_password));
|
||||
|
|
@ -283,18 +314,19 @@ nmt_password_fields_class_init(NmtPasswordFieldsClass *entry_class)
|
|||
PROP_PASSWORD,
|
||||
g_param_spec_string("password", "", "", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
/**
|
||||
* NmtPasswordFields:always-ask:
|
||||
* NmtPasswordFields:secret-flags:
|
||||
*
|
||||
* The current state of the "Always ask" checkbox.
|
||||
* The current state of the "Secret flags" popup.
|
||||
*/
|
||||
g_object_class_install_property(
|
||||
object_class,
|
||||
PROP_ALWAYS_ASK,
|
||||
g_param_spec_boolean("always-ask",
|
||||
"",
|
||||
"",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
g_object_class_install_property(object_class,
|
||||
PROP_SECRET_FLAGS,
|
||||
g_param_spec_uint("secret-flags",
|
||||
"",
|
||||
"",
|
||||
0,
|
||||
G_MAXUINT,
|
||||
0,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
/**
|
||||
* NmtPasswordFields:show-password:
|
||||
*
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@ typedef struct {
|
|||
GType nmt_password_fields_get_type(void);
|
||||
|
||||
typedef enum {
|
||||
NMT_PASSWORD_FIELDS_ALWAYS_ASK = (1 << 0),
|
||||
NMT_PASSWORD_FIELDS_SHOW_PASSWORD = (1 << 1),
|
||||
NMT_PASSWORD_FIELDS_NOT_EMPTY = (1 << 2), /* Return NULL instead of empty string */
|
||||
NMT_PASSWORD_FIELDS_SHOW_SECRET_FLAGS = (1 << 0),
|
||||
NMT_PASSWORD_FIELDS_SHOW_PASSWORD = (1 << 1),
|
||||
NMT_PASSWORD_FIELDS_NOT_EMPTY = (1 << 2), /* Return NULL instead of empty string */
|
||||
} NmtPasswordFieldsExtras;
|
||||
|
||||
NmtNewtWidget *nmt_password_fields_new(int width, NmtPasswordFieldsExtras extras);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue