예제 #1
0
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);
}
예제 #2
0
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);
}