static void verifier_verify_cb (GObject *source, GAsyncResult *result, gpointer user_data) { TpTLSCertificateRejectReason reason; GError *error = NULL; TpTLSCertificate *certificate = NULL; GHashTable *details = NULL; gchar *hostname = NULL; g_object_get (source, "certificate", &certificate, NULL); empathy_tls_verifier_verify_finish (EMPATHY_TLS_VERIFIER (source), result, &reason, &details, &error); if (error != NULL) { DEBUG ("Error: %s", error->message); display_interactive_dialog (certificate, EMPATHY_TLS_VERIFIER (source), reason, details); g_error_free (error); } else { tp_tls_certificate_accept_async (certificate, NULL, NULL); } g_free (hostname); g_object_unref (certificate); }
static void tls_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer user_data) { TpTLSCertificate *certificate = NULL; TpTLSCertificateRejectReason reason = 0; GHashTable *details = NULL; EmpathyTLSDialog *tls_dialog = EMPATHY_TLS_DIALOG (dialog); gboolean remember = FALSE; EmpathyTLSVerifier *verifier = EMPATHY_TLS_VERIFIER (user_data); g_object_get (tls_dialog, "certificate", &certificate, "reason", &reason, "remember", &remember, "details", &details, NULL); DEBUG ("Response %d (remember: %d)", response_id, remember); gtk_widget_destroy (GTK_WIDGET (dialog)); if (response_id == GTK_RESPONSE_YES) { tp_tls_certificate_accept_async (certificate, NULL, NULL); } else { tp_asv_set_boolean (details, "user-requested", TRUE); tp_tls_certificate_add_rejection (certificate, reason, NULL, g_variant_new_parsed ("{ 'user-requested': <%b> }", TRUE)); tp_tls_certificate_reject_async (certificate, NULL, NULL); } if (remember) empathy_tls_verifier_store_exception (verifier); g_object_unref (certificate); g_hash_table_unref (details); /* restart the timeout */ num_windows--; if (num_windows > 0) return; start_timer (); }
static void perform_verification_cb (GObject *object, GAsyncResult *res, gpointer user_data) { GError *error = NULL; GcrCertificateChain *chain = GCR_CERTIFICATE_CHAIN (object); EmpathyTLSVerifier *self = EMPATHY_TLS_VERIFIER (user_data); /* Even if building the chain fails, try verifying what we have */ if (!gcr_certificate_chain_build_finish (chain, res, &error)) { DEBUG ("Building of certificate chain failed: %s", error->message); g_clear_error (&error); } perform_verification (self, chain); /* Matches ref when staring chain build */ g_object_unref (self); }