pull: Add tls-client-cert-{path,key}

These can be used to present a client certificate when making requests
to a repository.
This commit is contained in:
Colin Walters committed 2014-05-01 07:57:06 -04:00
1 parent 7cc4a20f3b
commit 94f9ee7bce
4 files changed
+78 -1

No files matched your search

+21
View File
@@ -79,6 +79,8 @@ struct OstreeFetcher
GFile *tmpdir;
GTlsCertificate *client_cert;
SoupSession *session;
SoupRequester *requester;
@@ -107,6 +109,7 @@ ostree_fetcher_finalize (GObject *object)
g_clear_object (&self->session);
g_clear_object (&self->tmpdir);
g_clear_object (&self->client_cert);
g_hash_table_destroy (self->sending_messages);
g_hash_table_destroy (self->message_to_request);
@@ -175,6 +178,9 @@ ostree_fetcher_init (OstreeFetcher *self)
}
}
if (g_getenv ("OSTREE_DEBUG_HTTP"))
soup_session_add_feature (self->session, (SoupSessionFeature*)soup_logger_new (SOUP_LOGGER_LOG_BODY, 500));
self->requester = (SoupRequester *)soup_session_get_feature (self->session, SOUP_TYPE_REQUESTER);
g_object_get (self->session, "max-conns-per-host", &max_conns, NULL);
self->max_outstanding = 3 * max_conns;
@@ -204,6 +210,14 @@ ostree_fetcher_new (GFile *tmpdir,
return self;
}
void
ostree_fetcher_set_client_cert (OstreeFetcher *fetcher,
GTlsCertificate *cert)
{
g_clear_object (&fetcher->client_cert);
fetcher->client_cert = g_object_ref (cert);
}
static void
on_request_sent (GObject *object, GAsyncResult *result, gpointer user_data);
@@ -215,6 +229,13 @@ ostree_fetcher_process_pending_queue (OstreeFetcher *self)
self->outstanding < self->max_outstanding)
{
OstreeFetcherPendingURI *next = g_queue_pop_head (&self->pending_queue);
if (self->client_cert)
{
gs_unref_object SoupMessage *message = soup_request_http_get_message ((SoupRequestHTTP*)next->request);
g_object_set (message, "tls-certificate", self->client_cert, NULL);
}
self->outstanding++;
soup_request_send_async (next->request, next->cancellable,
on_request_sent, next);