summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2019-02-18 15:32:14 +0100
committerLubomir Rintel <lkundrak@v3.sk>2019-02-18 15:32:14 +0100
commit4b8161c51e7d302fb7fd60b70e6bf0032e63e69b (patch)
tree8444171ab0fcbb2d079557d2b2c3c8594bfdabfa
parent58fadb5fd63f1103ed87ecf5e8987c3c146e239c (diff)
parent92ff6b2a30529a69e6d28353efc88470f4279880 (diff)
downloadnetwork-manager-applet-4b8161c51e7d302fb7fd60b70e6bf0032e63e69b.tar.gz
merge: branch 'lr/cert-chooser-fixes'
https://gitlab.gnome.org/GNOME/network-manager-applet/merge_requests/32
-rw-r--r--.gitignore1
-rw-r--r--Makefile.am17
-rw-r--r--src/libnma/nma-pkcs11-cert-chooser.c25
-rw-r--r--src/libnma/tests/cert-chooser.c73
-rw-r--r--src/libnma/tests/meson.build9
5 files changed, 119 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore
index 423955b1..b93e1ecc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,6 +56,7 @@ src/libnma/NMA-1.0.typelib
src/libnma/nma-resources.c
src/libnma/nma-resources.h
src/libnma/nma-version.h
+src/libnma/tests/cert-chooser
src/libnma/tests/mobile-wizard
src/libnma/tests/run-vpn
src/libnma/tests/vpn-password-dialog
diff --git a/Makefile.am b/Makefile.am
index 5769b957..46095319 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -696,6 +696,23 @@ src_libnma_tests_run_vpn_LDADD = \
$(LIBNM_LIBS) \
src/libnma/libnma.la
+check_PROGRAMS_norun += src/libnma/tests/cert-chooser
+
+src_libnma_tests_cert_chooser_CPPFLAGS = \
+ $(dflt_cppflags) \
+ $(GLIB_CFLAGS) \
+ $(GTK3_CFLAGS) \
+ $(LIBNM_CFLAGS) \
+ "-I$(srcdir)/shared/" \
+ "-I$(srcdir)/src/libnma" \
+ -Isrc/libnma
+
+src_libnma_tests_cert_chooser_LDADD = \
+ $(GLIB_LIBS) \
+ $(GTK3_LIBS) \
+ $(LIBNM_LIBS) \
+ src/libnma/libnma.la
+
EXTRA_DIST += \
src/libnma/nma-version.h.in \
src/libnma/libnma.pc.in \
diff --git a/src/libnma/nma-pkcs11-cert-chooser.c b/src/libnma/nma-pkcs11-cert-chooser.c
index bcbe3059..e3775ed2 100644
--- a/src/libnma/nma-pkcs11-cert-chooser.c
+++ b/src/libnma/nma-pkcs11-cert-chooser.c
@@ -65,6 +65,9 @@ set_key_uri (NMACertChooser *cert_chooser, const gchar *uri)
gtk_widget_set_sensitive (priv->key_button_label, TRUE);
gtk_widget_set_sensitive (priv->key_password, TRUE);
gtk_widget_set_sensitive (priv->key_password_label, TRUE);
+ gtk_widget_show (priv->key_password);
+ gtk_widget_show (priv->key_password_label);
+ gtk_widget_show (priv->show_password);
nma_cert_chooser_button_set_uri (NMA_CERT_CHOOSER_BUTTON (priv->key_button), uri);
}
@@ -109,6 +112,9 @@ set_cert_uri (NMACertChooser *cert_chooser, const gchar *uri)
} else if (g_str_has_prefix (uri, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PKCS11)) {
gtk_widget_set_sensitive (priv->cert_password, TRUE);
gtk_widget_set_sensitive (priv->cert_password_label, TRUE);
+ gtk_widget_show (priv->cert_password);
+ gtk_widget_show (priv->cert_password_label);
+ gtk_widget_show (priv->show_password);
} else {
g_warning ("The certificate '%s' uses an unknown scheme\n", uri);
return;
@@ -365,17 +371,23 @@ static void
set_title (NMACertChooser *cert_chooser, const gchar *title)
{
NMAPkcs11CertChooserPrivate *priv = NMA_PKCS11_CERT_CHOOSER_GET_PRIVATE (cert_chooser);
+ gs_free gchar *mnemonic_escaped = NULL;
gchar *text;
+ char **split;
+
+ split = g_strsplit (title, "_", -1);
+ mnemonic_escaped = g_strjoinv("__", split);
+ g_strfreev (split);
text = g_strdup_printf (_("Choose a key for %s Certificate"), title);
nma_cert_chooser_button_set_title (NMA_CERT_CHOOSER_BUTTON (priv->key_button), text);
g_free (text);
- text = g_strdup_printf (_("%s private _key"), title);
+ text = g_strdup_printf (_("%s private _key"), mnemonic_escaped);
gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->key_button_label), text);
g_free (text);
- text = g_strdup_printf (_("%s key _password"), title);
+ text = g_strdup_printf (_("%s key _password"), mnemonic_escaped);
gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->key_password_label), text);
g_free (text);
@@ -383,11 +395,11 @@ set_title (NMACertChooser *cert_chooser, const gchar *title)
nma_cert_chooser_button_set_title (NMA_CERT_CHOOSER_BUTTON (priv->cert_button), text);
g_free (text);
- text = g_strdup_printf (_("%s _certificate"), title);
+ text = g_strdup_printf (_("%s _certificate"), mnemonic_escaped);
gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->cert_button_label), text);
g_free (text);
- text = g_strdup_printf (_("%s certificate _password"), title);
+ text = g_strdup_printf (_("%s certificate _password"), mnemonic_escaped);
gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->cert_password_label), text);
g_free (text);
}
@@ -410,8 +422,9 @@ set_flags (NMACertChooser *cert_chooser, NMACertChooserFlags flags)
gtk_widget_hide (priv->key_button);
gtk_widget_hide (priv->key_button_label);
- /* If these are not sensitive now, the cannot possibly be made
- * sensitive and there's no point in showing them. */
+ /* With FLAG_PASSWORDS the user can't pick a different key or a
+ * certificate, so there's no point in showing inactive password
+ * inputs. */
if (!gtk_widget_get_sensitive (priv->cert_password)) {
gtk_widget_hide (priv->cert_password);
gtk_widget_hide (priv->cert_password_label);
diff --git a/src/libnma/tests/cert-chooser.c b/src/libnma/tests/cert-chooser.c
new file mode 100644
index 00000000..9ba22ded
--- /dev/null
+++ b/src/libnma/tests/cert-chooser.c
@@ -0,0 +1,73 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License as
+ * published by the ree Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright 2019 Red Hat, Inc.
+ */
+
+#include "nm-default.h"
+
+#include <gtk/gtk.h>
+#include "nma-cert-chooser.h"
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *dialog;
+ GtkBox *content;
+ GtkWidget *widget;
+
+ gtk_init (&argc, &argv);
+
+ dialog = gtk_dialog_new_with_buttons ("NMACertChooser test",
+ NULL, GTK_DIALOG_MODAL,
+ "Dismiss", GTK_RESPONSE_DELETE_EVENT,
+ NULL);
+ content = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog)));
+
+ widget = nma_cert_chooser_new ("Any", 0);
+ gtk_widget_show (widget);
+ gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
+
+ widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_widget_show (widget);
+ gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
+
+ widget = nma_cert_chooser_new ("FLAG_PASSWORDS", NMA_CERT_CHOOSER_FLAG_PASSWORDS);
+ nma_cert_chooser_set_cert (NMA_CERT_CHOOSER (widget),
+ "pkcs11:object=praise;type=satan",
+ NM_SETTING_802_1X_CK_SCHEME_PKCS11);
+ nma_cert_chooser_set_key_uri (NMA_CERT_CHOOSER (widget),
+ "pkcs11:object=worship;type=doom");
+ gtk_widget_show (widget);
+ gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
+
+ widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_widget_show (widget);
+ gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
+
+ widget = nma_cert_chooser_new ("FLAG_CERT", NMA_CERT_CHOOSER_FLAG_CERT);
+ gtk_widget_show (widget);
+ gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
+
+ widget = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_widget_show (widget);
+ gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
+
+ widget = nma_cert_chooser_new ("FLAG_PEM", NMA_CERT_CHOOSER_FLAG_PEM);
+ gtk_widget_show (widget);
+ gtk_box_pack_start (content, widget, TRUE, TRUE, 6);
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+}
diff --git a/src/libnma/tests/meson.build b/src/libnma/tests/meson.build
index 4ac1543f..2d682e86 100644
--- a/src/libnma/tests/meson.build
+++ b/src/libnma/tests/meson.build
@@ -5,6 +5,15 @@ deps = [
]
executable(
+ 'cert-chooser',
+ 'cert-chooser.c',
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags,
+ install: false
+)
+
+executable(
'mobile-wizard',
'mobile-wizard.c',
include_directories: incs,