summaryrefslogtreecommitdiff
path: root/src/libnma/nma-vpn-password-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnma/nma-vpn-password-dialog.c')
-rw-r--r--src/libnma/nma-vpn-password-dialog.c186
1 files changed, 185 insertions, 1 deletions
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);
+}