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); }
static void on_upload_complete (GObject *source, GAsyncResult *result, gpointer user_data) { GError *error = NULL; if (!seahorse_ssh_op_upload_finish (SEAHORSE_SSH_SOURCE (source), result, &error)) seahorse_util_handle_error (&error, NULL, _("Couldn't configure Secure Shell keys on remote computer.")); }
static void upload_keys (SeahorseWidget *swidget) { GtkWidget *widget; const gchar *cuser, *chost; gchar *user, *host, *port; GList *keys; GCancellable *cancellable; keys = (GList*)g_object_steal_data (G_OBJECT (swidget), "upload-keys"); if (keys == NULL) return; widget = GTK_WIDGET (seahorse_widget_get_widget (swidget, "user-label")); cuser = gtk_entry_get_text (GTK_ENTRY (widget)); g_return_if_fail (cuser && g_utf8_validate (cuser, -1, NULL)); widget = GTK_WIDGET (seahorse_widget_get_widget (swidget, "host-label")); chost = (gchar*)gtk_entry_get_text (GTK_ENTRY (widget)); g_return_if_fail (chost && g_utf8_validate (chost, -1, NULL)); user = g_strdup (cuser); host = g_strdup (chost); /* Port is anything past a colon */ port = strchr (host, ':'); if (port) { *port = 0; port++; /* Trim and check */ seahorse_util_string_trim_whitespace (port); if (!port[0]) port = NULL; } seahorse_util_string_trim_whitespace (host); seahorse_util_string_trim_whitespace (user); cancellable = g_cancellable_new (); /* Start an upload process */ seahorse_ssh_op_upload_async (SEAHORSE_SSH_SOURCE (seahorse_object_get_place (keys->data)), keys, user, host, port, cancellable, on_upload_complete, NULL); g_free (host); g_free (user); seahorse_progress_show (cancellable, _("Configuring Secure Shell Keys..."), FALSE); g_object_unref (cancellable); }
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_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); }