diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2018-07-26 16:11:01 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2018-07-26 17:26:55 +0200 |
commit | af9885fa6e6697f5269eb91250dde667dfa2d16b (patch) | |
tree | b809292bab50011661235a810169beddd1d6cf4a | |
parent | 38e390c6eb387574aeb939c1ff05eb6ce7377e7f (diff) | |
download | network-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.ver | 7 | ||||
-rw-r--r-- | src/libnma/nma-version.h.in | 12 | ||||
-rw-r--r-- | src/libnma/nma-vpn-password-dialog.c | 186 | ||||
-rw-r--r-- | src/libnma/nma-vpn-password-dialog.h | 18 |
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); |