summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2022-07-28 15:58:02 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2022-09-28 09:09:09 +0200
commit81be1923bc00a771228957df7f689aec69da4b01 (patch)
tree2d39b62bc99450da853a8e9b49ae1271dd31bd66
parent7f5f2eefca05c36dfced3318a449de1cab93d40c (diff)
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.c116
-rw-r--r--src/nmtui/nmt-password-fields.h6
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);