[network-manager-openvpn/jk/bgo731891-gui-password-types: 1/2] properties/ui: add password storage combo for certpass (bgo #731891)
- From: Jiří Klimeš <jklimes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [network-manager-openvpn/jk/bgo731891-gui-password-types: 1/2] properties/ui: add password storage combo for certpass (bgo #731891)
- Date: Thu, 24 Jul 2014 10:31:13 +0000 (UTC)
commit 5b8039c43381e2bd315e2795cdfe9f9a2bea9bd9
Author: Jiří Klimeš <jklimes redhat com>
Date: Tue Jul 22 16:56:44 2014 +0200
properties/ui: add password storage combo for certpass (bgo #731891)
https://bugzilla.gnome.org/show_bug.cgi?id=731891
properties/auth-helpers.c | 257 +++++++++++++++++++++------------------
properties/nm-openvpn-dialog.ui | 52 +++++++-
2 files changed, 187 insertions(+), 122 deletions(-)
---
diff --git a/properties/auth-helpers.c b/properties/auth-helpers.c
index 4a29dbb..0c1499d 100644
--- a/properties/auth-helpers.c
+++ b/properties/auth-helpers.c
@@ -153,6 +153,89 @@ tls_cert_changed_cb (GtkWidget *widget, gpointer data)
}
static void
+pw_tls_type_combo_changed_cb (GtkWidget *combo, gpointer user_data)
+{
+ GtkWidget *entry = user_data;
+
+ /* If the user chose "Not required", desensitize and clear the correct
+ * password entry.
+ */
+ switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combo))) {
+ case PW_TYPE_ASK:
+ case PW_TYPE_UNUSED:
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+ gtk_widget_set_sensitive (entry, FALSE);
+ break;
+ default:
+ gtk_widget_set_sensitive (entry, TRUE);
+ break;
+ }
+}
+
+static void
+init_one_pw_tls_combo (GtkBuilder *builder,
+ NMSettingVPN *s_vpn,
+ gboolean pw_only,
+ const char *prefix,
+ const char *secret_key,
+ GtkWidget *entry_widget,
+ ChangedCallback changed_cb,
+ gpointer user_data)
+{
+ int active = -1;
+ GtkWidget *widget;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ const char *value = NULL;
+ char *tmp;
+ guint32 default_idx = 1;
+ NMSettingSecretFlags pw_flags = NM_SETTING_SECRET_FLAG_NONE;
+
+ /* If there's already a password and the password type can't be found in
+ * the VPN settings, default to saving it. Otherwise, always ask for it.
+ */
+ value = gtk_entry_get_text (GTK_ENTRY (entry_widget));
+ if (value && strlen (value))
+ default_idx = 0;
+
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ if (s_vpn)
+ nm_setting_get_secret_flags (NM_SETTING (s_vpn), secret_key, &pw_flags, NULL);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, _("Saved"), -1);
+ if ( (active < 0)
+ && !(pw_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
+ && !(pw_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) {
+ active = PW_TYPE_SAVE;
+ }
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, _("Always Ask"), -1);
+ if ((active < 0) && (pw_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED))
+ active = PW_TYPE_ASK;
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, _("Not Required"), -1);
+ if ((active < 0) && (pw_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED))
+ active = PW_TYPE_UNUSED;
+
+ tmp = g_strdup_printf ("%s_%s",
+ prefix, pw_only? "pass_type_combo" : "private_key_pass_type_combo");
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, tmp));
+ g_assert (widget);
+ g_free (tmp);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
+ g_object_unref (store);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active < 0 ? default_idx : active);
+ pw_tls_type_combo_changed_cb (widget, entry_widget);
+
+ g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (pw_tls_type_combo_changed_cb),
entry_widget);
+ g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (changed_cb), user_data);
+}
+
+static void
tls_setup (GtkBuilder *builder,
GtkSizeGroup *group,
NMSettingVPN *s_vpn,
@@ -233,92 +316,13 @@ tls_setup (GtkBuilder *builder,
g_free (tmp);
gtk_size_group_add_widget (group, widget);
g_signal_connect (widget, "changed", G_CALLBACK (changed_cb), user_data);
-}
-
-static void
-pw_type_combo_changed_cb (GtkWidget *combo, gpointer user_data)
-{
- GtkWidget *entry = user_data;
-
- /* If the user chose "Not required", desensitize and clear the correct
- * password entry.
- */
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combo))) {
- case PW_TYPE_ASK:
- case PW_TYPE_UNUSED:
- gtk_entry_set_text (GTK_ENTRY (entry), "");
- gtk_widget_set_sensitive (entry, FALSE);
- break;
- default:
- gtk_widget_set_sensitive (entry, TRUE);
- break;
- }
-}
-
-static void
-init_one_pw_combo (GtkBuilder *builder,
- NMSettingVPN *s_vpn,
- const char *prefix,
- const char *secret_key,
- GtkWidget *entry_widget,
- ChangedCallback changed_cb,
- gpointer user_data)
-{
- int active = -1;
- GtkWidget *widget;
- GtkListStore *store;
- GtkTreeIter iter;
- const char *value = NULL;
- char *tmp;
- guint32 default_idx = 1;
- NMSettingSecretFlags pw_flags = NM_SETTING_SECRET_FLAG_NONE;
-
- /* If there's already a password and the password type can't be found in
- * the VPN settings, default to saving it. Otherwise, always ask for it.
- */
- value = gtk_entry_get_text (GTK_ENTRY (entry_widget));
- if (value && strlen (value))
- default_idx = 0;
-
- store = gtk_list_store_new (1, G_TYPE_STRING);
- if (s_vpn)
- nm_setting_get_secret_flags (NM_SETTING (s_vpn), secret_key, &pw_flags, NULL);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, _("Saved"), -1);
- if ( (active < 0)
- && !(pw_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
- && !(pw_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) {
- active = PW_TYPE_SAVE;
- }
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, _("Always Ask"), -1);
- if ((active < 0) && (pw_flags & NM_SETTING_SECRET_FLAG_NOT_SAVED))
- active = PW_TYPE_ASK;
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, _("Not Required"), -1);
- if ((active < 0) && (pw_flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED))
- active = PW_TYPE_UNUSED;
-
- tmp = g_strdup_printf ("%s_pass_type_combo", prefix);
- widget = GTK_WIDGET (gtk_builder_get_object (builder, tmp));
- g_assert (widget);
- g_free (tmp);
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
- g_object_unref (store);
- gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active < 0 ? default_idx : active);
- pw_type_combo_changed_cb (widget, entry_widget);
- g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (pw_type_combo_changed_cb), entry_widget);
- g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (changed_cb), user_data);
+ init_one_pw_tls_combo (builder, s_vpn, FALSE, prefix, NM_OPENVPN_KEY_CERTPASS, widget, changed_cb,
user_data);
}
static void
pw_setup (GtkBuilder *builder,
- GtkSizeGroup *group,
+ GtkSizeGroup *group,
NMSettingVPN *s_vpn,
const char *prefix,
ChangedCallback changed_cb,
@@ -347,7 +351,7 @@ pw_setup (GtkBuilder *builder,
gtk_size_group_add_widget (group, widget);
g_signal_connect (widget, "changed", G_CALLBACK (changed_cb), user_data);
- init_one_pw_combo (builder, s_vpn, prefix, NM_OPENVPN_KEY_PASSWORD, widget, changed_cb, user_data);
+ init_one_pw_tls_combo (builder, s_vpn, TRUE, prefix, NM_OPENVPN_KEY_PASSWORD, widget, changed_cb,
user_data);
}
void
@@ -559,16 +563,20 @@ validate_tls (GtkBuilder *builder, const char *prefix, GError **error)
encrypted = is_encrypted (str);
g_free (str);
if (encrypted) {
- tmp = g_strdup_printf ("%s_private_key_password_entry", prefix);
+ tmp = g_strdup_printf ("%s_private_key_pass_type_combo", prefix);
widget = GTK_WIDGET (gtk_builder_get_object (builder, tmp));
g_free (tmp);
-
- if (!gtk_entry_get_text_length (GTK_ENTRY (widget))) {
- g_set_error (error,
- OPENVPN_PLUGIN_UI_ERROR,
- OPENVPN_PLUGIN_UI_ERROR_INVALID_PROPERTY,
- NM_OPENVPN_KEY_CERTPASS);
- return FALSE;
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (widget)) != PW_TYPE_ASK) {
+ tmp = g_strdup_printf ("%s_private_key_password_entry", prefix);
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, tmp));
+ g_free (tmp);
+ if (!gtk_entry_get_text_length (GTK_ENTRY (widget))) {
+ g_set_error (error,
+ OPENVPN_PLUGIN_UI_ERROR,
+ OPENVPN_PLUGIN_UI_ERROR_INVALID_PROPERTY,
+ NM_OPENVPN_KEY_CERTPASS);
+ return FALSE;
+ }
}
}
@@ -675,10 +683,45 @@ update_from_filechooser (GtkBuilder *builder,
}
static void
+_update_password_flags (GtkBuilder *builder,
+ GtkWidget *pw_widget,
+ const char *prefix,
+ const char *pw_key,
+ NMSettingVPN *s_vpn)
+{
+ NMSettingSecretFlags pw_flags;
+ GtkWidget *combo_widget;
+ char *tmp;
+
+ pw_flags = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (pw_widget), "flags"));
+ pw_flags &= ~(NM_SETTING_SECRET_FLAG_NOT_SAVED | NM_SETTING_SECRET_FLAG_NOT_REQUIRED);
+
+ if (strcmp (pw_key, NM_OPENVPN_KEY_PASSWORD) == 0)
+ tmp = g_strdup_printf ("%s_pass_type_combo", prefix);
+ else
+ tmp = g_strdup_printf ("%s_private_key_pass_type_combo", prefix);
+ combo_widget = GTK_WIDGET (gtk_builder_get_object (builder, tmp));
+ g_free (tmp);
+
+ switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combo_widget))) {
+ case PW_TYPE_SAVE:
+ break;
+ case PW_TYPE_UNUSED:
+ pw_flags |= NM_SETTING_SECRET_FLAG_NOT_REQUIRED;
+ break;
+ case PW_TYPE_ASK:
+ default:
+ pw_flags |= NM_SETTING_SECRET_FLAG_NOT_SAVED;
+ break;
+ }
+
+ nm_setting_set_secret_flags (NM_SETTING (s_vpn), pw_key, pw_flags, NULL);
+}
+
+static void
update_tls (GtkBuilder *builder, const char *prefix, NMSettingVPN *s_vpn)
{
GtkWidget *widget;
- NMSettingSecretFlags pw_flags;
char *tmp;
const char *str;
@@ -693,18 +736,17 @@ update_tls (GtkBuilder *builder, const char *prefix, NMSettingVPN *s_vpn)
g_free (tmp);
str = gtk_entry_get_text (GTK_ENTRY (widget));
- if (str && strlen (str))
+ if (str && *str)
nm_setting_vpn_add_secret (s_vpn, NM_OPENVPN_KEY_CERTPASS, str);
- pw_flags = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "flags"));
- nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENVPN_KEY_CERTPASS, pw_flags, NULL);
+ /* Update password flags */
+ _update_password_flags (builder, widget, prefix, NM_OPENVPN_KEY_CERTPASS, s_vpn);
}
static void
update_pw (GtkBuilder *builder, const char *prefix, NMSettingVPN *s_vpn)
{
GtkWidget *widget;
- NMSettingSecretFlags pw_flags;
char *tmp;
const char *str;
@@ -717,7 +759,7 @@ update_pw (GtkBuilder *builder, const char *prefix, NMSettingVPN *s_vpn)
g_free (tmp);
str = gtk_entry_get_text (GTK_ENTRY (widget));
- if (str && strlen (str))
+ if (str && *str)
nm_setting_vpn_add_data_item (s_vpn, NM_OPENVPN_KEY_USERNAME, str);
/* Password */
@@ -727,30 +769,11 @@ update_pw (GtkBuilder *builder, const char *prefix, NMSettingVPN *s_vpn)
g_free (tmp);
str = gtk_entry_get_text (GTK_ENTRY (widget));
- if (str && strlen (str))
+ if (str && *str)
nm_setting_vpn_add_secret (s_vpn, NM_OPENVPN_KEY_PASSWORD, str);
/* Update password flags */
- pw_flags = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "flags"));
- pw_flags &= ~(NM_SETTING_SECRET_FLAG_NOT_SAVED | NM_SETTING_SECRET_FLAG_NOT_REQUIRED);
-
- tmp = g_strdup_printf ("%s_pass_type_combo", prefix);
- widget = GTK_WIDGET (gtk_builder_get_object (builder, tmp));
- g_free (tmp);
-
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (widget))) {
- case PW_TYPE_SAVE:
- break;
- case PW_TYPE_UNUSED:
- pw_flags |= NM_SETTING_SECRET_FLAG_NOT_REQUIRED;
- break;
- case PW_TYPE_ASK:
- default:
- pw_flags |= NM_SETTING_SECRET_FLAG_NOT_SAVED;
- break;
- }
-
- nm_setting_set_secret_flags (NM_SETTING (s_vpn), NM_OPENVPN_KEY_PASSWORD, pw_flags, NULL);
+ _update_password_flags (builder, widget, prefix, NM_OPENVPN_KEY_PASSWORD, s_vpn);
}
gboolean
diff --git a/properties/nm-openvpn-dialog.ui b/properties/nm-openvpn-dialog.ui
index 6dfda15..aa5b06e 100644
--- a/properties/nm-openvpn-dialog.ui
+++ b/properties/nm-openvpn-dialog.ui
@@ -41,6 +41,8 @@
</object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkListStore" id="liststore2"/>
+ <object class="GtkListStore" id="liststore3"/>
+ <object class="GtkListStore" id="liststore4"/>
<object class="GtkListStore" id="model1">
<columns>
<!-- column-name gchararray -->
@@ -1005,7 +1007,7 @@ config: tls-auth <file> [direction]</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">6</property>
- <property name="n_columns">2</property>
+ <property name="n_columns">3</property>
<property name="column_spacing">6</property>
<property name="row_spacing">6</property>
<child>
@@ -1483,7 +1485,7 @@ config: key</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="right_attach">3</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
@@ -1519,7 +1521,7 @@ config: ca</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
@@ -1566,7 +1568,27 @@ config: cert</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="tls_private_key_pass_type_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">liststore3</property>
+ <child>
+ <object class="GtkCellRendererText" id="renderer11"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
@@ -1756,7 +1778,7 @@ config: auth-user-pass</property>
</object>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">3</property>
+ <property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="y_options"></property>
@@ -1972,6 +1994,26 @@ config: auth-user-pass</property>
<property name="y_options"></property>
</packing>
</child>
+ <child>
+ <object class="GtkComboBox" id="pw_tls_private_key_pass_type_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">liststore4</property>
+ <child>
+ <object class="GtkCellRendererText" id="renderer12"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
</object>
<packing>
<property name="position">2</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]