diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2022-07-28 15:58:02 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2022-09-28 09:09:09 +0200 |
commit | 81be1923bc00a771228957df7f689aec69da4b01 (patch) | |
tree | 2d39b62bc99450da853a8e9b49ae1271dd31bd66 | |
parent | 7f5f2eefca05c36dfced3318a449de1cab93d40c (diff) | |
download | NetworkManager-81be1923bc00a771228957df7f689aec69da4b01.tar.gz |
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.
-rw-r--r-- | src/nmtui/nmt-password-fields.c | 116 | ||||
-rw-r--r-- | src/nmtui/nmt-password-fields.h | 6 |
2 files changed, 77 insertions, 45 deletions
diff --git a/src/nmtui/nmt-password-fields.c b/src/nmtui/nmt-password-fields.c index de3ab6509d..2aad77ecf6 100644 --- a/src/nmtui/nmt-password-fields.c +++ b/src/nmtui/nmt-password-fields.c @@ -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 * @@ -93,25 +93,54 @@ nmt_password_fields_get_password(NmtPasswordFields *fields) } static void -always_ask_changed(GObject *object, GParamSpec *pspec, gpointer fields) +show_password_changed(GObject *object, GParamSpec *pspec, gpointer fields) { - g_object_notify(fields, "always-ask"); + g_object_notify(fields, "show-password"); } static void -show_password_changed(GObject *object, GParamSpec *pspec, gpointer fields) +secret_flags_changed(GObject *object, GParamSpec *pspec, gpointer fields) { - g_object_notify(fields, "show-password"); + 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); - - 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"))); + 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->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: * diff --git a/src/nmtui/nmt-password-fields.h b/src/nmtui/nmt-password-fields.h index 0fda7fc9d8..7fd0d94203 100644 --- a/src/nmtui/nmt-password-fields.h +++ b/src/nmtui/nmt-password-fields.h @@ -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); |