G_MODULE_EXPORT void on_ssh_trust_toggled (GtkToggleButton *button, SeahorseWidget *swidget) { SeahorseSource *sksrc; SeahorseOperation *op; SeahorseObject *object; SeahorseSSHKey *skey; gboolean authorize; GError *err = NULL; object = SEAHORSE_OBJECT_WIDGET (swidget)->object; skey = SEAHORSE_SSH_KEY (object); sksrc = seahorse_object_get_source (object); g_return_if_fail (SEAHORSE_IS_SSH_SOURCE (sksrc)); authorize = gtk_toggle_button_get_active (button); gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE); op = seahorse_ssh_operation_authorize (SEAHORSE_SSH_SOURCE (sksrc), skey, authorize); g_return_if_fail (op); /* A very fast op, so just wait */ seahorse_operation_wait (op); if (!seahorse_operation_is_successful (op)) { seahorse_operation_copy_error (op, &err); seahorse_util_handle_error (err, _("Couldn't change authorization for key.")); g_clear_error (&err); } gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE); }
G_MODULE_EXPORT void on_ssh_export_button_clicked (GtkWidget *widget, SeahorseWidget *swidget) { SeahorseSource *sksrc; SeahorseObject *object; GFile *file; GtkDialog *dialog; guchar *results; gsize n_results; gchar* uri = NULL; GError *err = NULL; object = SEAHORSE_OBJECT_WIDGET (swidget)->object; g_return_if_fail (SEAHORSE_IS_SSH_KEY (object)); sksrc = seahorse_object_get_source (object); g_return_if_fail (SEAHORSE_IS_SSH_SOURCE (sksrc)); dialog = seahorse_util_chooser_save_new (_("Export Complete Key"), GTK_WINDOW (seahorse_widget_get_toplevel (swidget))); seahorse_util_chooser_show_key_files (dialog); seahorse_util_chooser_set_filename (dialog, object); uri = seahorse_util_chooser_save_prompt (dialog); if (!uri) return; results = seahorse_ssh_source_export_private (SEAHORSE_SSH_SOURCE (sksrc), SEAHORSE_SSH_KEY (object), &n_results, &err); if (results) { g_return_if_fail (err == NULL); file = g_file_new_for_uri (uri); g_file_replace_contents_async (file, (gchar*)results, n_results, NULL, FALSE, G_FILE_CREATE_PRIVATE, NULL, (GAsyncReadyCallback)export_complete, results); } if (err) { seahorse_util_handle_error (err, _("Couldn't export key.")); g_clear_error (&err); } g_free (uri); }
G_MODULE_EXPORT void on_ssh_passphrase_button_clicked (GtkWidget *widget, SeahorseWidget *swidget) { SeahorseOperation *op; SeahorseObject *object; GtkWidget *w; object = SEAHORSE_OBJECT_WIDGET (swidget)->object; g_assert (SEAHORSE_IS_SSH_KEY (object)); w = GTK_WIDGET (seahorse_widget_get_widget (swidget, "passphrase-button")); g_return_if_fail (w != NULL); gtk_widget_set_sensitive (w, FALSE); op = seahorse_ssh_operation_change_passphrase (SEAHORSE_SSH_KEY (object)); seahorse_operation_watch (op, (SeahorseDoneFunc)passphrase_done, swidget, NULL, NULL); /* Running operations ref themselves */ g_object_unref (op); }
G_MODULE_EXPORT void on_ssh_comment_activate (GtkWidget *entry, SeahorseWidget *swidget) { SeahorseObject *object; SeahorseSSHKey *skey; SeahorseSource *sksrc; SeahorseOperation *op; const gchar *text; gchar *comment; GError *err = NULL; object = SEAHORSE_OBJECT_WIDGET (swidget)->object; skey = SEAHORSE_SSH_KEY (object); sksrc = seahorse_object_get_source (object); g_return_if_fail (SEAHORSE_IS_SSH_SOURCE (sksrc)); text = gtk_entry_get_text (GTK_ENTRY (entry)); /* Make sure not the same */ if (skey->keydata->comment && g_utf8_collate (text, skey->keydata->comment) == 0) return; gtk_widget_set_sensitive (entry, FALSE); comment = g_strdup (text); op = seahorse_ssh_operation_rename (SEAHORSE_SSH_SOURCE (sksrc), skey, comment); g_free (comment); /* This is usually a quick operation */ seahorse_operation_wait (op); if (!seahorse_operation_is_successful (op)) { seahorse_operation_copy_error (op, &err); seahorse_util_handle_error (err, _("Couldn't rename key.")); g_clear_error (&err); gtk_entry_set_text (GTK_ENTRY (entry), skey->keydata->comment ? skey->keydata->comment : ""); } gtk_widget_set_sensitive (entry, TRUE); }
static void do_main (SeahorseWidget *swidget) { SeahorseObject *object; SeahorseSSHKey *skey; GtkWidget *widget; gchar *text; const gchar *label; const gchar *template; object = SEAHORSE_OBJECT_WIDGET (swidget)->object; skey = SEAHORSE_SSH_KEY (object); /* Image */ widget = GTK_WIDGET (gtk_builder_get_object (swidget->gtkbuilder, "key-image")); if (widget) gtk_image_set_from_stock (GTK_IMAGE (widget), SEAHORSE_STOCK_KEY_SSH, GTK_ICON_SIZE_DIALOG); /* Name and title */ label = seahorse_object_get_label (object); widget = GTK_WIDGET (gtk_builder_get_object (swidget->gtkbuilder, "comment-entry")); if (widget) gtk_entry_set_text (GTK_ENTRY (widget), label); widget = seahorse_widget_get_toplevel (swidget); gtk_window_set_title (GTK_WINDOW (widget), label); /* Key id */ widget = GTK_WIDGET (gtk_builder_get_object (swidget->gtkbuilder, "id-label")); if (widget) { label = seahorse_object_get_identifier (object); gtk_label_set_text (GTK_LABEL (widget), label); } /* Put in message */ widget = seahorse_widget_get_widget (swidget, "trust-message"); g_return_if_fail (widget != NULL);
G_MODULE_EXPORT void on_gpgme_add_subkey_ok_clicked (GtkButton *button, gpointer user_data) { SeahorseWidget *swidget = SEAHORSE_WIDGET (user_data); SeahorseObjectWidget *skwidget; SeahorseKeyEncType real_type; gint type; guint length; time_t expires; gpgme_error_t err; GtkWidget *widget; GtkComboBox *combo; GtkTreeModel *model; GtkTreeIter iter; skwidget = SEAHORSE_OBJECT_WIDGET (swidget); combo = GTK_COMBO_BOX (seahorse_widget_get_widget (swidget, "type")); gtk_combo_box_get_active_iter (combo, &iter); model = gtk_combo_box_get_model (combo); gtk_tree_model_get (model, &iter, COMBO_INT, &type, -1); length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON ( seahorse_widget_get_widget (swidget, LENGTH))); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON ( seahorse_widget_get_widget (swidget, "never_expires")))) expires = 0; else { widget = GTK_WIDGET (g_object_get_data (G_OBJECT (swidget), "expires-datetime")); g_return_if_fail (widget); egg_datetime_get_as_time_t (EGG_DATETIME (widget), &expires); } switch (type) { case 0: real_type = DSA; break; case 1: real_type = ELGAMAL; break; case 2: real_type = RSA_SIGN; break; default: real_type = RSA_ENCRYPT; break; } widget = GTK_WIDGET (seahorse_widget_get_widget (swidget, swidget->name)); gtk_widget_set_sensitive (widget, FALSE); err = seahorse_gpgme_key_op_add_subkey (SEAHORSE_GPGME_KEY (skwidget->object), real_type, length, expires); gtk_widget_set_sensitive (widget, TRUE); if (!GPG_IS_OK (err)) seahorse_gpgme_handle_error (err, _("Couldn't add subkey")); seahorse_widget_destroy (swidget); }