[Vimprobable-users] [PATCH RFC] Add command to load per-site cookie files
Vimprobable is a lean web browser optimised for full keyboard control
Brought to you by:
hanness
|
From: Serge E. H. <se...@ha...> - 2015-12-03 03:55:22
|
The default cookie site is ~/.config/vimprobable/cookies. With this patch,
you can do
:cookies gh
or
:cookies lp
to load a per-site cookiefile called ~/.config/vimprobable/cookies_gh or
cookies_lp (i.e. for github and launchpad). This allows you to segregate
cookies by sites, and more easily keep an eye on suspect sites.
Signed-off-by: Serge Hallyn <ser...@ub...>
---
config.h | 2 ++
main.c | 31 +++++++++++++++++++++++++------
vimprobable.h | 2 +-
3 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/config.h b/config.h
index e423f77..33ab743 100644
--- a/config.h
+++ b/config.h
@@ -83,6 +83,7 @@ static URIHandler uri_handlers[] = {
/* cookies */
#define ENABLE_COOKIE_SUPPORT
#define COOKIES_STORAGE_FILENAME "%s/vimprobable/cookies", client.config.config_base
+#define COOKIES_STORAGE_PATH "%s/vimprobable/cookies_%s", client.config.config_base
#define COOKIES_STORAGE_READONLY FALSE /* if TRUE new cookies will be lost if you quit */
SoupCookieJarAcceptPolicy CookiePolicy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY; /* by default, accept all cookies, but third party */
SoupCookieJarAcceptPolicy CookiePolicyLastOn = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY; /* tracking variable for private mode */
@@ -156,6 +157,7 @@ Command commands[COMMANDSIZE] = {
{ "tabopen", open_arg, {TargetNew} },
{ "print", print_frame, {0} },
{ "bma", bookmark, {0} },
+ { "cookies", switch_cookies, {0} },
{ "bookmark", bookmark, {0} },
{ "source", view_source, {0} },
{ "esource", edit_source, {0} },
diff --git a/main.c b/main.c
index d90c4c2..d72d0a1 100644
--- a/main.c
+++ b/main.c
@@ -66,6 +66,7 @@ static gboolean blank_cb(void);
/* functions */
static gboolean bookmark(const Arg *arg);
+static gboolean switch_cookies(const Arg *arg);
static gboolean browser_settings(const Arg *arg);
static gboolean commandhistoryfetch(const Arg *arg);
static gboolean complete(const Arg *arg);
@@ -135,7 +136,7 @@ static char **args;
/* Cookie support. */
#ifdef ENABLE_COOKIE_SUPPORT
-static void setup_cookies(void);
+static void setup_cookies(const char *);
static char *get_cookies(SoupURI *soup_uri);
static void load_all_cookies(void);
static void new_generic_request(SoupSession *soup_ses, SoupMessage *soup_msg, gpointer unused);
@@ -1765,6 +1766,24 @@ commandhistoryfetch(const Arg *arg) {
}
gboolean
+switch_cookies(const Arg *arg) {
+ if (!arg->s || !strlen(arg->s)) {
+ echo_message(Info, "No cookie file given");
+ return FALSE;
+ }
+
+ Network *net = &client.net;
+ if (net->file_cookie_jar)
+ g_object_unref(net->file_cookie_jar);
+ char *tmp = g_strdup_printf(COOKIES_STORAGE_PATH, arg->s);
+ setup_cookies(tmp);
+ g_free(tmp);
+
+ echo_message(Info, "Cookies loaded");
+ return TRUE;
+}
+
+gboolean
bookmark(const Arg *arg) {
FILE *f;
const char *filename;
@@ -2969,11 +2988,9 @@ scripts_run_user_file() {
#ifdef ENABLE_COOKIE_SUPPORT
void
-setup_cookies()
+setup_cookies(const char *cookiefile)
{
Network *net = &client.net;
- if (net->file_cookie_jar)
- g_object_unref(net->file_cookie_jar);
if (net->session_cookie_jar)
g_object_unref(net->session_cookie_jar);
@@ -2981,7 +2998,7 @@ setup_cookies()
net->session_cookie_jar = soup_cookie_jar_new();
soup_cookie_jar_set_accept_policy(net->session_cookie_jar, CookiePolicy);
- net->cookie_store = g_strdup_printf(COOKIES_STORAGE_FILENAME);
+ net->cookie_store = g_strdup(cookiefile);
load_all_cookies();
@@ -3181,7 +3198,9 @@ main(int argc, char *argv[]) {
make_keyslist();
setup_gui();
#ifdef ENABLE_COOKIE_SUPPORT
- setup_cookies();
+ char *tmp = g_strdup_printf(COOKIES_STORAGE_FILENAME);
+ setup_cookies(tmp);
+ g_free(tmp);
#endif
make_searchengines_list(searchengines, LENGTH(searchengines));
diff --git a/vimprobable.h b/vimprobable.h
index 5f6ee83..949eb14 100644
--- a/vimprobable.h
+++ b/vimprobable.h
@@ -193,7 +193,7 @@ enum ConfigFileError {
#define CLOSED_URL_FILENAME "%s/vimprobable/closed", client.config.config_base
/* Command size */
-#define COMMANDSIZE 49
+#define COMMANDSIZE 51
/* maximum size of internal string variable handled by :set
* if you set this to anything lower than 8, colour values
--
2.5.0
|