diff --git a/src/libostree/ostree-fetcher.c b/src/libostree/ostree-fetcher.c index 21526813..a4d46016 100644 --- a/src/libostree/ostree-fetcher.c +++ b/src/libostree/ostree-fetcher.c @@ -326,6 +326,16 @@ session_thread_set_proxy_cb (ThreadClosure *thread_closure, } } +static void +session_thread_set_cookie_jar_cb (ThreadClosure *thread_closure, + gpointer data) +{ + SoupCookieJar *jar = data; + + soup_session_add_feature (thread_closure->session, + SOUP_SESSION_FEATURE (jar)); +} + #ifdef HAVE_LIBSOUP_CLIENT_CERTS static void session_thread_set_tls_interaction_cb (ThreadClosure *thread_closure, @@ -746,6 +756,23 @@ _ostree_fetcher_set_proxy (OstreeFetcher *self, } } +void +_ostree_fetcher_set_cookie_jar (OstreeFetcher *self, + const char *jar_path) +{ + SoupCookieJar *jar; + + g_return_if_fail (OSTREE_IS_FETCHER (self)); + g_return_if_fail (jar_path != NULL); + + jar = soup_cookie_jar_text_new (jar_path, TRUE); + + session_thread_idle_add (self->thread_closure, + session_thread_set_cookie_jar_cb, + jar, /* takes ownership */ + (GDestroyNotify) g_object_unref); +} + void _ostree_fetcher_set_client_cert (OstreeFetcher *self, GTlsCertificate *cert) diff --git a/src/libostree/ostree-fetcher.h b/src/libostree/ostree-fetcher.h index 8cceca51..ae20edaa 100644 --- a/src/libostree/ostree-fetcher.h +++ b/src/libostree/ostree-fetcher.h @@ -59,6 +59,9 @@ OstreeFetcher *_ostree_fetcher_new (int tmpdir_dfd, int _ostree_fetcher_get_dfd (OstreeFetcher *fetcher); +void _ostree_fetcher_set_cookie_jar (OstreeFetcher *self, + const char *jar_path); + void _ostree_fetcher_set_proxy (OstreeFetcher *fetcher, const char *proxy); diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c index 1f57b133..8facf8cb 100644 --- a/src/libostree/ostree-repo-pull.c +++ b/src/libostree/ostree-repo-pull.c @@ -1964,6 +1964,19 @@ _ostree_repo_remote_new_fetcher (OstreeRepo *self, _ostree_fetcher_set_proxy (fetcher, http_proxy); } + { + g_autofree char *jar_path = NULL; + g_autofree char *cookie_file = g_strdup_printf ("%s.cookies.txt", + remote_name); + + jar_path = g_build_filename (g_file_get_path (self->repodir), cookie_file, + NULL); + + if (g_file_test(jar_path, G_FILE_TEST_IS_REGULAR)) + _ostree_fetcher_set_cookie_jar (fetcher, jar_path); + + } + success = TRUE; out: