aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar uranther <jwheaton@purdue.edu>2009-07-14 15:45:37 -0400
committerGravatar uranther <jwheaton@purdue.edu>2009-07-14 15:45:37 -0400
commitfdac0d10e5fe9ba1c0fd8d48781fc5911200e267 (patch)
treed0019640b75e3e92706b25c4a9aa7fa09462a180
parent64d00b48f973dffe79f60f6e21093cacf273673e (diff)
parente4ec794daa2a27f4476f53aacbf947f57a27ce5c (diff)
Merge commit 'Dieterbe/experimental' into experimental
-rw-r--r--README7
-rwxr-xr-xexamples/data/uzbl/scripts/cookies.py94
-rwxr-xr-xexamples/data/uzbl/scripts/cookies.sh1
-rw-r--r--uzbl.c4
4 files changed, 29 insertions, 77 deletions
diff --git a/README b/README
index a5c3042..e2e30dc 100644
--- a/README
+++ b/README
@@ -290,9 +290,10 @@ The script specific arguments are this:
* cookie handler
$8 GET/PUT
- $9 request address host (if current page url is www.foo.com/somepage, this could be something else than foo, eg advertising from another host)
- $10 request address path
- $11 cookie (only with PUT requests)
+ $9 request address scheme (e.g. http or https)
+ $10 request address host (if current page url is www.foo.com/somepage, this could be something else than foo, eg advertising from another host)
+ $11 request address path
+ $12 cookie (only with PUT requests)
Custom, userdefined scripts (`spawn foo bar`) get first the arguments as specified in the config and then the above 7 are added at the end.
diff --git a/examples/data/uzbl/scripts/cookies.py b/examples/data/uzbl/scripts/cookies.py
index c8cf8c0..10f90fa 100755
--- a/examples/data/uzbl/scripts/cookies.py
+++ b/examples/data/uzbl/scripts/cookies.py
@@ -1,87 +1,37 @@
#!/usr/bin/env python
-import cookielib, sys, os, urllib2
-
-class FakeRequest:
- def __init__(self, argv):
- self.argv = argv
- self.cookies = None
- if len(self.argv) == 12:
- self.cookies = self.argv[11]
- def get_full_url(self):
- #TODO: this is a hack, fix in uzbl.c!
- u = self.get_host()+self.argv[10]
- if self.argv[6].startswith('https'):
- u = 'https://'+u
- else:
- u = 'http://'+u
- return u
- def get_host(self):
- return self.argv[9]
- def get_type(self):
- return self.get_full_url().split(':')[0]
- def is_unverifiable(self):
- return False
- def get_origin_req_host(self):
- return self.argv[9]
- def has_header(self, header):
- if header == 'Cookie':
- return self.cookies!=None
- def get_header(self, header_name, default=None):
- if header_name == 'Cookie' and self.cookies:
- return self.cookies
- else:
- return default
- def header_items(self):
- if self.cookies:
- return [('Cookie',self.cookies)]
- else:
- return []
- def add_unredirected_header(self, key, header):
- if key == 'Cookie':
- self.cookies = header
-
-class FakeHeaders:
- def __init__(self, argv):
- self.argv = argv
- def getallmatchingheaders(self, header):
- if header == 'Set-Cookie' and len(self.argv) == 12:
- return ['Set-Cookie: '+self.argv[11]]
- else:
- return []
- def getheaders(self, header):
- if header == 'Set-Cookie' and len(self.argv) == 12:
- return [self.argv[11]]
- else:
- return []
-class FakeResponse:
- def __init__(self, argv):
- self.argv = argv
- def info(self):
- return FakeHeaders(self.argv)
+import StringIO, cookielib, os, sys, urllib2
if __name__ == '__main__':
+ action = sys.argv[8]
+ uri = urllib2.urlparse.ParseResult(
+ scheme=sys.argv[9],
+ netloc=sys.argv[10],
+ path=sys.argv[11],
+ params='',
+ query='',
+ fragment='').geturl()
+ set_cookie = sys.argv[12] if len(sys.argv)>12 else None
+
if 'XDG_DATA_HOME' in os.environ.keys() and os.environ['XDG_DATA_HOME']:
- jar = cookielib.MozillaCookieJar(
- os.path.join(os.environ['XDG_DATA_HOME'],'uzbl/cookies.txt'))
+ f = os.path.join(os.environ['XDG_DATA_HOME'],'uzbl/cookies.txt')
else:
- jar = cookielib.MozillaCookieJar(
- os.path.join(os.environ['HOME'],'.local/share/uzbl/cookies.txt'))
+ f = os.path.join(os.environ['HOME'],'.local/share/uzbl/cookies.txt')
+ jar = cookielib.MozillaCookieJar(f)
+
try:
- jar.load()
+ jar.load(ignore_discard=True)
except:
pass
- req = FakeRequest(sys.argv)
-
- action = sys.argv[8]
+ req = urllib2.Request(uri)
if action == 'GET':
jar.add_cookie_header(req)
- if req.cookies:
- print req.cookies
+ if req.has_header('Cookie'):
+ print req.get_header('Cookie')
elif action == 'PUT':
- res = FakeResponse(sys.argv)
+ hdr = urllib2.httplib.HTTPMessage(StringIO.StringIO('Set-Cookie: %s' % set_cookie))
+ res = urllib2.addinfourl(StringIO.StringIO(), hdr, req.get_full_url())
jar.extract_cookies(res,req)
- jar.save(ignore_discard=True) # save session cookies too
- #jar.save() # save everything but session cookies
+ jar.save(ignore_discard=True)
diff --git a/examples/data/uzbl/scripts/cookies.sh b/examples/data/uzbl/scripts/cookies.sh
index 56b9c79..4398a03 100755
--- a/examples/data/uzbl/scripts/cookies.sh
+++ b/examples/data/uzbl/scripts/cookies.sh
@@ -48,6 +48,7 @@ which zenity &>/dev/null || exit 2
# uri=${uri/http:\/\/} # strip 'http://' part
# host=${uri/\/*/}
action=$8 # GET/PUT
+shift
host=$9
shift
path=$9
diff --git a/uzbl.c b/uzbl.c
index 6b6f7ac..77a403c 100644
--- a/uzbl.c
+++ b/uzbl.c
@@ -2550,7 +2550,7 @@ void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data)
soup_message_add_header_handler(msg, "got-headers", "Set-Cookie", G_CALLBACK(save_cookies), NULL);
GString *s = g_string_new ("");
SoupURI * soup_uri = soup_message_get_uri(msg);
- g_string_printf(s, "GET '%s' '%s'", soup_uri->host, soup_uri->path);
+ g_string_printf(s, "GET '%s' '%s' '%s'", soup_uri->scheme, soup_uri->host, soup_uri->path);
run_handler(uzbl.behave.cookie_handler, s->str);
if(uzbl.comm.sync_stdout && strcmp (uzbl.comm.sync_stdout, "") != 0) {
@@ -2573,7 +2573,7 @@ save_cookies (SoupMessage *msg, gpointer user_data){
cookie = soup_cookie_to_set_cookie_header(ck->data);
SoupURI * soup_uri = soup_message_get_uri(msg);
GString *s = g_string_new ("");
- g_string_printf(s, "PUT '%s' '%s' '%s'", soup_uri->host, soup_uri->path, cookie);
+ g_string_printf(s, "PUT '%s' '%s' '%s' '%s'", soup_uri->scheme, soup_uri->host, soup_uri->path, cookie);
run_handler(uzbl.behave.cookie_handler, s->str);
g_free (cookie);
g_string_free(s, TRUE);