summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2018-07-26 16:11:01 +0200
committerLubomir Rintel <lkundrak@v3.sk>2018-07-26 17:26:55 +0200
commitaf9885fa6e6697f5269eb91250dde667dfa2d16b (patch)
treeb809292bab50011661235a810169beddd1d6cf4a
parent38e390c6eb387574aeb939c1ff05eb6ce7377e7f (diff)
downloadnetwork-manager-applet-lr/external-auth-dialog.tar.gz
libnma/vpn-password-dialog: add nma_vpn_password_dialog_run_and_print()lr/external-auth-dialog
It should avoid code duplication in VPN plugins that implement external authentication while already utilizing the NMAVpnPasswordDialog. The auth-dialogs shall just do _set_password_*key() and then call nma_vpn_password_dialog_run_and_print() in place of nma_vpn_password_dialog_run_and_block().
-rw-r--r--src/libnma/libnma.ver7
-rw-r--r--src/libnma/nma-version.h.in12
-rw-r--r--src/libnma/nma-vpn-password-dialog.c186
-rw-r--r--src/libnma/nma-vpn-password-dialog.h18
4 files changed, 219 insertions, 4 deletions
diff --git a/src/libnma/libnma.ver b/src/libnma/libnma.ver
index 2f6a1b64..59369216 100644
--- a/src/libnma/libnma.ver
+++ b/src/libnma/libnma.ver
@@ -99,3 +99,10 @@ global:
libnma_1_8_12 {
nma_mobile_wizard_get_type;
} libnma_1_8_0;
+
+libnma_1_8_16 {
+ nma_vpn_password_dialog_run_and_print;
+ nma_vpn_password_dialog_set_password_key;
+ nma_vpn_password_dialog_set_password_secondary_key;
+ nma_vpn_password_dialog_set_password_tertiary_key;
+} libnma_1_8_12;
diff --git a/src/libnma/nma-version.h.in b/src/libnma/nma-version.h.in
index ba6af984..15a240d7 100644
--- a/src/libnma/nma-version.h.in
+++ b/src/libnma/nma-version.h.in
@@ -72,9 +72,11 @@
#define NMA_VERSION_1_8_8 (NMA_ENCODE_VERSION (1, 8, 8))
#define NMA_VERSION_1_8_10 (NMA_ENCODE_VERSION (1, 8, 10))
#define NMA_VERSION_1_8_12 (NMA_ENCODE_VERSION (1, 8, 12))
+#define NMA_VERSION_1_8_14 (NMA_ENCODE_VERSION (1, 8, 14))
+#define NMA_VERSION_1_8_16 (NMA_ENCODE_VERSION (1, 8, 16))
-#define NMA_VERSION_CUR_STABLE NMA_VERSION_1_8_10
-#define NMA_VERSION_NEXT_STABLE NMA_VERSION_1_8_12
+#define NMA_VERSION_CUR_STABLE NMA_VERSION_1_8_14
+#define NMA_VERSION_NEXT_STABLE NMA_VERSION_1_8_16
#define NMA_VERSION NMA_ENCODE_VERSION (NMA_MAJOR_VERSION, NMA_MINOR_VERSION, NMA_MICRO_VERSION)
@@ -123,4 +125,10 @@
# define NMA_AVAILABLE_IN_1_8
#endif
+#if NMA_VERSION_MAX_ALLOWED < NMA_VERSION_1_8_16
+# define NMA_AVAILABLE_IN_1_8_16 G_UNAVAILABLE(1,8.16)
+#else
+# define NMA_AVAILABLE_IN_1_8_16
+#endif
+
#endif /* NMA_VERSION_H */
diff --git a/src/libnma/nma-vpn-password-dialog.c b/src/libnma/nma-vpn-password-dialog.c
index 58a183b0..068e5900 100644
--- a/src/libnma/nma-vpn-password-dialog.c
+++ b/src/libnma/nma-vpn-password-dialog.c
@@ -35,6 +35,9 @@ typedef struct {
GtkEntry *password_entry;
GtkEntry *password_entry_secondary;
GtkEntry *password_entry_tertiary;
+ char *password_key;
+ char *password_key_secondary;
+ char *password_key_tertiary;
GtkCheckButton *show_passwords_checkbox;
} NMAVpnPasswordDialogPrivate;
@@ -69,11 +72,27 @@ show_passwords_toggled_cb (GtkWidget *widget, gpointer user_data)
}
static void
+dispose (GObject *object)
+{
+ NMAVpnPasswordDialogPrivate *priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (object);
+
+ g_clear_pointer (&priv->password_key, g_free);
+ g_clear_pointer (&priv->password_key_secondary, g_free);
+ g_clear_pointer (&priv->password_key_tertiary, g_free);
+
+ G_OBJECT_CLASS (nma_vpn_password_dialog_parent_class)->dispose (object);
+}
+
+static void
nma_vpn_password_dialog_class_init (NMAVpnPasswordDialogClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
g_type_ensure (NM_TYPE_DEVICE);
+
+ object_class->dispose = dispose;
+
gtk_widget_class_set_template_from_resource (widget_class,
"/org/freedesktop/network-manager-applet/nma-vpn-password-dialog.ui");
@@ -139,7 +158,7 @@ nma_vpn_password_dialog_new (const char *title,
}
nma_vpn_password_dialog_set_password (NMA_VPN_PASSWORD_DIALOG (dialog), password);
-
+
return GTK_WIDGET (dialog);
}
@@ -157,6 +176,126 @@ nma_vpn_password_dialog_run_and_block (NMAVpnPasswordDialog *dialog)
return button_clicked == GTK_RESPONSE_OK;
}
+#define UI_KEYFILE_GROUP "VPN Plugin UI"
+
+static void
+keyfile_add_entry_info (GKeyFile *keyfile,
+ const char *key,
+ const char *value,
+ const char *label,
+ gboolean is_secret,
+ gboolean should_ask)
+{
+ g_key_file_set_string (keyfile, key, "Value", value);
+ g_key_file_set_string (keyfile, key, "Label", label);
+ g_key_file_set_boolean (keyfile, key, "IsSecret", is_secret);
+ g_key_file_set_boolean (keyfile, key, "ShouldAsk", should_ask);
+}
+
+static void
+print_external_mode (NMAVpnPasswordDialog *dialog,
+ gboolean should_ask)
+{
+ NMAVpnPasswordDialogPrivate *priv;
+ GKeyFile *keyfile;
+ char *data;
+
+ g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
+
+ priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ keyfile = g_key_file_new ();
+
+ g_key_file_set_integer (keyfile, UI_KEYFILE_GROUP, "Version", 2);
+ g_key_file_set_string (keyfile, UI_KEYFILE_GROUP, "Description", gtk_label_get_text (priv->message_label));
+ g_key_file_set_string (keyfile, UI_KEYFILE_GROUP, "Title", gtk_window_get_title (GTK_WINDOW (dialog)));
+
+ if (gtk_widget_get_visible (GTK_WIDGET (priv->password_entry))) {
+ g_return_if_fail (priv->password_key);
+ keyfile_add_entry_info (keyfile,
+ priv->password_key,
+ gtk_entry_get_text (priv->password_entry),
+ gtk_label_get_text (priv->password_label),
+ TRUE,
+ should_ask);
+ }
+
+ if (gtk_widget_get_visible (GTK_WIDGET (priv->password_entry_secondary))) {
+ g_return_if_fail (priv->password_key_secondary);
+ keyfile_add_entry_info (keyfile,
+ priv->password_key_secondary,
+ gtk_entry_get_text (priv->password_entry_secondary),
+ gtk_label_get_text (priv->password_label_secondary),
+ TRUE,
+ should_ask);
+ }
+
+ if (gtk_widget_get_visible (GTK_WIDGET (priv->password_entry_tertiary))) {
+ g_return_if_fail (priv->password_key_tertiary);
+ keyfile_add_entry_info (keyfile,
+ priv->password_key_tertiary,
+ gtk_entry_get_text (priv->password_entry_tertiary),
+ gtk_label_get_text (priv->password_label_tertiary),
+ TRUE,
+ should_ask);
+ }
+
+ data = g_key_file_to_data (keyfile, NULL, NULL);
+ fputs (data, stdout);
+
+ g_key_file_unref (keyfile);
+ g_free (data);
+}
+
+static void
+print_secrets (NMAVpnPasswordDialog *dialog)
+{
+ NMAVpnPasswordDialogPrivate *priv;
+
+ g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
+
+ priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ if (gtk_widget_get_visible (GTK_WIDGET (priv->password_entry))) {
+ g_return_if_fail (priv->password_key);
+ g_print ("%s\n", priv->password_key);
+ g_print ("%s\n", gtk_entry_get_text (priv->password_entry));
+ }
+
+ if (gtk_widget_get_visible (GTK_WIDGET (priv->password_entry_secondary))) {
+ g_return_if_fail (priv->password_key_secondary);
+ g_print ("%s\n", priv->password_key_secondary);
+ g_print ("%s\n", gtk_entry_get_text (priv->password_entry_secondary));
+ }
+
+ if (gtk_widget_get_visible (GTK_WIDGET (priv->password_entry_tertiary))) {
+ g_return_if_fail (priv->password_key_tertiary);
+ g_print ("%s\n", priv->password_key_tertiary);
+ g_print ("%s\n", gtk_entry_get_text (priv->password_entry_tertiary));
+ }
+
+ g_print ("\n\n");
+}
+
+gboolean
+nma_vpn_password_dialog_run_and_print (NMAVpnPasswordDialog *dialog,
+ gboolean external_ui_mode,
+ gboolean should_ask)
+{
+ gboolean success = TRUE;
+
+ if (external_ui_mode) {
+ print_external_mode (dialog, should_ask);
+ } else {
+ if (should_ask)
+ success = nma_vpn_password_dialog_run_and_block (dialog);
+ if (success)
+ print_secrets (dialog);
+ }
+
+ return success;
+}
+
void
nma_vpn_password_dialog_set_password (NMAVpnPasswordDialog *dialog,
const char *password)
@@ -347,3 +486,48 @@ nma_vpn_password_dialog_set_password_ternary_label (NMAVpnPasswordDialog *dialog
gtk_label_set_text_with_mnemonic (priv->password_label_tertiary, label);
}
+
+void
+nma_vpn_password_dialog_set_password_key (NMAVpnPasswordDialog *dialog,
+ const char *key)
+{
+ NMAVpnPasswordDialogPrivate *priv;
+
+ g_return_if_fail (dialog != NULL);
+ g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
+
+ priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ g_clear_pointer (&priv->password_key, g_free);
+ priv->password_key = g_strdup (key);
+}
+
+void
+nma_vpn_password_dialog_set_password_secondary_key (NMAVpnPasswordDialog *dialog,
+ const char *key)
+{
+ NMAVpnPasswordDialogPrivate *priv;
+
+ g_return_if_fail (dialog != NULL);
+ g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
+
+ priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ g_clear_pointer (&priv->password_key_secondary, g_free);
+ priv->password_key_secondary = g_strdup (key);
+}
+
+void
+nma_vpn_password_dialog_set_password_tertiary_key (NMAVpnPasswordDialog *dialog,
+ const char *key)
+{
+ NMAVpnPasswordDialogPrivate *priv;
+
+ g_return_if_fail (dialog != NULL);
+ g_return_if_fail (NMA_VPN_IS_PASSWORD_DIALOG (dialog));
+
+ priv = NMA_VPN_PASSWORD_DIALOG_GET_PRIVATE (dialog);
+
+ g_clear_pointer (&priv->password_key_tertiary, g_free);
+ priv->password_key_tertiary = g_strdup (key);
+}
diff --git a/src/libnma/nma-vpn-password-dialog.h b/src/libnma/nma-vpn-password-dialog.h
index 3f9a8fb6..fd52cfe3 100644
--- a/src/libnma/nma-vpn-password-dialog.h
+++ b/src/libnma/nma-vpn-password-dialog.h
@@ -27,6 +27,8 @@
#include <gtk/gtk.h>
+#include "nma-version.h"
+
G_BEGIN_DECLS
#define NMA_VPN_TYPE_PASSWORD_DIALOG (nma_vpn_password_dialog_get_type ())
@@ -51,7 +53,12 @@ GtkWidget* nma_vpn_password_dialog_new (const char *title,
const char *message,
const char *password);
-gboolean nma_vpn_password_dialog_run_and_block (NMAVpnPasswordDialog *dialog);
+gboolean nma_vpn_password_dialog_run_and_block (NMAVpnPasswordDialog *dialog);
+
+NMA_AVAILABLE_IN_1_8_16
+gboolean nma_vpn_password_dialog_run_and_print (NMAVpnPasswordDialog *dialog,
+ gboolean external_ui_mode,
+ gboolean should_ask);
/* Attribute mutators */
void nma_vpn_password_dialog_set_show_password (NMAVpnPasswordDialog *dialog,
@@ -61,6 +68,9 @@ void nma_vpn_password_dialog_set_password (NMAVpnPasswordDialog
const char *password);
void nma_vpn_password_dialog_set_password_label (NMAVpnPasswordDialog *dialog,
const char *label);
+NMA_AVAILABLE_IN_1_8_16
+void nma_vpn_password_dialog_set_password_key (NMAVpnPasswordDialog *dialog,
+ const char *key);
void nma_vpn_password_dialog_set_show_password_secondary (NMAVpnPasswordDialog *dialog,
gboolean show);
@@ -69,6 +79,9 @@ void nma_vpn_password_dialog_set_password_secondary (NMAVpnPasswordDialog
const char *password_secondary);
void nma_vpn_password_dialog_set_password_secondary_label (NMAVpnPasswordDialog *dialog,
const char *label);
+NMA_AVAILABLE_IN_1_8_16
+void nma_vpn_password_dialog_set_password_secondary_key (NMAVpnPasswordDialog *dialog,
+ const char *key);
void nma_vpn_password_dialog_set_show_password_ternary (NMAVpnPasswordDialog *dialog,
gboolean show);
@@ -77,6 +90,9 @@ void nma_vpn_password_dialog_set_password_ternary (NMAVpnPasswordDialog *d
const char *password_ternary);
void nma_vpn_password_dialog_set_password_ternary_label (NMAVpnPasswordDialog *dialog,
const char *label);
+NMA_AVAILABLE_IN_1_8_16
+void nma_vpn_password_dialog_set_password_tertiary_key (NMAVpnPasswordDialog *dialog,
+ const char *key);
/* Attribute accessors */
const char *nma_vpn_password_dialog_get_password (NMAVpnPasswordDialog *dialog);