static void migrate_cookies () { const char *cookies_file_sqlite = "cookies.sqlite"; const char *cookies_file_txt = "cookies.txt"; char *src_sqlite = NULL, *src_txt = NULL, *dest = NULL; dest = g_build_filename (ephy_dot_dir (), cookies_file_sqlite, NULL); /* If we already have a cookies.sqlite file, do nothing */ if (g_file_test (dest, G_FILE_TEST_EXISTS)) goto out; src_sqlite = g_build_filename (ephy_dot_dir (), "mozilla", "epiphany", cookies_file_sqlite, NULL); src_txt = g_build_filename (ephy_dot_dir (), "mozilla", "epiphany", cookies_file_txt, NULL); /* First check if we have a cookies.sqlite file in Mozilla */ if (g_file_test (src_sqlite, G_FILE_TEST_EXISTS)) { GFile *gsrc, *gdest; /* Copy the file */ gsrc = g_file_new_for_path (src_sqlite); gdest = g_file_new_for_path (dest); if (!g_file_copy (gsrc, gdest, 0, NULL, NULL, NULL, NULL)) g_warning (_("Failed to copy cookies file from Mozilla.")); g_object_unref (gsrc); g_object_unref (gdest); } else if (g_file_test (src_txt, G_FILE_TEST_EXISTS)) { /* Create a SoupCookieJarSQLite with the contents of the txt file */ GSList *cookies, *p; SoupCookieJar *txt, *sqlite; txt = soup_cookie_jar_text_new (src_txt, TRUE); sqlite = soup_cookie_jar_sqlite_new (dest, FALSE); cookies = soup_cookie_jar_all_cookies (txt); for (p = cookies; p; p = p->next) { SoupCookie *cookie = (SoupCookie*)p->data; /* Cookie is stolen, so we won't free it */ soup_cookie_jar_add_cookie (sqlite, cookie); } g_slist_free (cookies); g_object_unref (txt); g_object_unref (sqlite); } out: g_free (src_sqlite); g_free (src_txt); g_free (dest); }
void spike_setup_webkit_globals(char * web_database_path, char * cookie_jar_path) { //eg. /tmp/spike.webkit.db webkit_set_web_database_directory_path(web_database_path); SoupSession * ses = webkit_get_default_session(); //eg. /tmp/spike.webkit.cookie.db SoupCookieJar * jar = soup_cookie_jar_sqlite_new(cookie_jar_path, 0); soup_session_add_feature( ses, SOUP_SESSION_FEATURE (jar)); }
OssiferSession * ossifer_session_initialize (const gchar *cookie_db_path, OssiferSessionCookieJarChanged cookie_jar_changed_callback) { static OssiferSession *session_instance = NULL; SoupSession *session; SoupCookieJar *cookie_jar; gchar *path; if (session_instance != NULL) { return session_instance; } session_instance = g_new0 (OssiferSession, 1); session_instance->cookie_jar_changed = cookie_jar_changed_callback; session = webkit_get_default_session (); #ifdef HAVE_LIBSOUP_2_38 g_object_set (session, SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE, NULL); #endif #ifdef HAVE_LIBSOUP_2_38 g_object_set (session, SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE, NULL); #endif #ifdef HAVE_LIBSOUP_GNOME path = g_strdup_printf ("%s.sqlite", cookie_db_path); cookie_jar = soup_cookie_jar_sqlite_new (path, FALSE); #else path = g_strdup_printf ("%s.txt", cookie_db_path); cookie_jar = soup_cookie_jar_text_new (path, FALSE); #endif soup_session_add_feature (session, SOUP_SESSION_FEATURE (cookie_jar)); g_object_unref (cookie_jar); g_free (path); g_signal_connect (cookie_jar, "changed", G_CALLBACK (ossifer_session_cookie_jar_changed), session_instance); #ifdef HAVE_LIBSOUP_GNOME soup_session_add_feature_by_type (session, SOUP_TYPE_PROXY_RESOLVER_GNOME); #endif return session_instance; }
static SoupCookieJar *get_current_cookie_jar () { char *filename; SoupCookieJar *jar; /* FIXME: There's no API in WebKit2 to get all cookies, so we create a * temp read-only jar for the current cookies to read from it. * It would be better to have an API in WebKit to get the cookies instead. */ filename = g_build_filename (ephy_dot_dir (), "cookies.sqlite", NULL); jar = (SoupCookieJar*)soup_cookie_jar_sqlite_new (filename, TRUE); g_free (filename); return jar; }
static void create_cookie_jar_for_domain (const char *address, const char *directory) { GSList *cookies, *p; SoupCookieJar *current_jar, *new_jar; char *domain, *filename; SoupURI *uri; /* Create the new cookie jar */ filename = g_build_filename (directory, "cookies.sqlite", NULL); new_jar = (SoupCookieJar*)soup_cookie_jar_sqlite_new (filename, FALSE); g_free (filename); /* The app domain for the current view */ uri = soup_uri_new (address); domain = uri->host; /* The current cookies */ current_jar = get_current_cookie_jar (); if (!current_jar) { soup_uri_free (uri); return; } cookies = soup_cookie_jar_all_cookies (current_jar); for (p = cookies; p; p = p->next) { SoupCookie *cookie = (SoupCookie*)p->data; if (soup_cookie_domain_matches (cookie, domain)) soup_cookie_jar_add_cookie (new_jar, cookie); else soup_cookie_free (cookie); } soup_uri_free (uri); g_slist_free (cookies); g_object_unref (current_jar); g_object_unref (new_jar); }