From 33190614ae3aae095dff07143d255a5738f2a319 Mon Sep 17 00:00:00 2001 From: Vincent Ardisson Date: Thu, 23 Feb 2017 12:14:05 +0100 Subject: [PATCH] weboob.browser: add a export_session method and a webextension This method can be used to continue the same session in a GUI browser, using contrib/webextension-session-importer for Firefox and Chromium. --- contrib/webextension-session-importer/README | 28 ++++ contrib/webextension-session-importer/bg.png | Bin 0 -> 10206 bytes .../webextension-session-importer/logo.png | 1 + .../manifest.json | 25 ++++ .../webextension-session-importer/popup.html | 27 ++++ .../webextension-session-importer/popup.js | 121 ++++++++++++++++++ weboob/browser/browsers.py | 15 +++ 7 files changed, 217 insertions(+) create mode 100644 contrib/webextension-session-importer/README create mode 100644 contrib/webextension-session-importer/bg.png create mode 120000 contrib/webextension-session-importer/logo.png create mode 100644 contrib/webextension-session-importer/manifest.json create mode 100644 contrib/webextension-session-importer/popup.html create mode 100644 contrib/webextension-session-importer/popup.js diff --git a/contrib/webextension-session-importer/README b/contrib/webextension-session-importer/README new file mode 100644 index 0000000000..aa43c33fa9 --- /dev/null +++ b/contrib/webextension-session-importer/README @@ -0,0 +1,28 @@ +Weboob session importer +======================= + +This is a webextension to export a weboob session URL and cookies and load it in +a real browser. + +Build +----- + +The extension can be temporarily loaded by loading "manifest.json" in +about:debugging in Firefox and chrome://extensions/ in Chromium. + +To build a package, `web-ext build` can be used. +(See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext) + +Use +--- + +To export the session with weboob-debug for example: + +>>> print(json.dumps(browser.export_session())) + +Copy the JSON output (sample): + +{"url": "https://example.com/foo", "cookies": [{"name": "foo", "value": "bar"}]} + +Then click on the Weboob toolbar button of your browser and paste the JSON. +The browser will set the cookies from weboob and go to the same URL. diff --git a/contrib/webextension-session-importer/bg.png b/contrib/webextension-session-importer/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..7c380ffaa9034ee1254c3a6f569977a829f1696e GIT binary patch literal 10206 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", + "cookies", + "tabs" + ], + + "browser_action": { + "browser_style": true, + "default_icon": "logo.png", + "default_title": "Import Weboob session", + "default_popup": "popup.html" + } +} diff --git a/contrib/webextension-session-importer/popup.html b/contrib/webextension-session-importer/popup.html new file mode 100644 index 0000000000..867e75bb6f --- /dev/null +++ b/contrib/webextension-session-importer/popup.html @@ -0,0 +1,27 @@ + + + + + + + + + +
+ + + + + + diff --git a/contrib/webextension-session-importer/popup.js b/contrib/webextension-session-importer/popup.js new file mode 100644 index 0000000000..61f4d03078 --- /dev/null +++ b/contrib/webextension-session-importer/popup.js @@ -0,0 +1,121 @@ +var makePromise; + +if (navigator.userAgent.indexOf('Firefox') > -1) { + makePromise = function() { + var args = Array.prototype.slice.call(arguments); + var f = args.shift(); + var self = args.shift(); + + return f.apply(self, args); + } +} else { /* In chrome, navigator is an empty object, wtf? */ + browser = chrome; + + /* chrome APIs don't return Promise objects */ + makePromise = function() { + var args = Array.prototype.slice.call(arguments); + var f = args.shift(); + var self = args.shift(); + + return new Promise(function(resolve, reject) { + args.push(function() { + resolve.apply(null, arguments); + }); + f.apply(self, args); + }); + } +} + +function loadCookies() { + var onGetCookies = function(url, cookies) { + var objs = cookies.map(function(cookie) { + return { + name: cookie.name, + value: cookie.value, + domain: cookie.domain, + path: cookie.path, + secure: cookie.secure, + httpOnly: cookie.httpOnly, + expirationDate: cookie.expirationDate, + storeId: cookie.storeId + }; + }); + var ret = { + url: url, + cookies: objs + }; + + document.getElementById('data').placeholder = JSON.stringify(ret, null, 2); + }; + + var onGetActive = function(tabs) { + makePromise(browser.cookies.getAll, browser.cookies, { + url: tabs[0].url + }).then(function(cookies) { onGetCookies(tabs[0].url, cookies); }); + }; + + makePromise(browser.tabs.query, browser.tabs, { + active: true, + currentWindow: true + }).then(onGetActive); +} + +function clearCookies(cookieStoreId, url) { + return new Promise(function(resolve, reject) { + var onGetCookie = function(cookies) { + var promises = cookies.map(function(cookie) { + return makePromise(browser.cookies.remove, browser.cookies, { + url: url, + name: cookie.name, + storeId: cookie.storeId + }); + }); + Promise.all(promises).then(function() { resolve(); }); + }; + + makePromise(browser.cookies.getAll, browser.cookies, { + url: url + /* TODO when FF 52 is out: use cookieStoreId to support private browsing */ + }).then(onGetCookie); + }); +} + +function setCookies(cookieStoreId, url, objs) { + return new Promise(function(resolve, reject) { + var promises = objs.map(function(obj) { + obj.url = url; + /* FF52: use cookieStoreId */ + return makePromise(browser.cookies.set, browser.cookies, obj); + }); + + Promise.all(promises).then(function() { resolve(); }); + }); +} + +function setState() { + var data = JSON.parse(document.getElementById('data').value); + var objs = data.cookies; + var url = data.url; + + var onGetActive = function(tabs) { + clearCookies(tabs[0].cookieStoreId, url).then(function() { + setCookies(tabs[0].cookieStoreId, url, objs).then(function() { + makePromise(browser.tabs.update, browser.tabs, tabs[0].id, { + url: url + }).then(function() { + window.close(); + }); + }); + }); + }; + + makePromise(browser.tabs.query, browser.tabs, { + active: true, + currentWindow: true + }).then(onGetActive); +} + +window.addEventListener('load', loadCookies); +window.addEventListener('load', function() { + document.getElementById('submit').addEventListener('click', setState); +}); diff --git a/weboob/browser/browsers.py b/weboob/browser/browsers.py index 05e366fa0a..8e8781fd74 100644 --- a/weboob/browser/browsers.py +++ b/weboob/browser/browsers.py @@ -479,6 +479,21 @@ def get_referrer(self, oldurl, newurl): return return oldurl + def export_session(self): + def make_cookie(c): + d = { + k: getattr(c, k) for k in ['name', 'value', 'domain', 'path', 'secure'] + } + #d['session'] = c.discard + d['httpOnly'] = 'httponly' in [k.lower() for k in c._rest.keys()] + d['expirationDate'] = getattr(c, 'expires', None) + return d + + return { + 'url': self.url, + 'cookies': [make_cookie(c) for c in self.session.cookies], + } + class UrlNotAllowed(Exception): """ -- GitLab