From 59ce2c0e791585e6013cd7067395e0e30d968723 Mon Sep 17 00:00:00 2001 From: Christophe Leitienne Date: Thu, 7 Oct 2021 15:39:08 +0200 Subject: [PATCH] feat: ability to use custom storage for cookies --- www/cookie-handler.js | 10 ++++++++-- www/local-storage-store.js | 4 ++++ www/public-interface.js | 13 +++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/www/cookie-handler.js b/www/cookie-handler.js index f8dd24c5..c51a3c29 100644 --- a/www/cookie-handler.js +++ b/www/cookie-handler.js @@ -9,7 +9,8 @@ module.exports = function init(storage, ToughCookie, WebStorageCookieStore) { setCookie: setCookie, getCookieString: getCookieString, clearCookies: clearCookies, - removeCookies: removeCookies + removeCookies: removeCookies, + setStorageImpl: setStorageImpl }; function splitCookieString(cookieStr) { @@ -53,7 +54,7 @@ module.exports = function init(storage, ToughCookie, WebStorageCookieStore) { } function clearCookies() { - window.localStorage.removeItem(storeKey); + storage.removeItem(storeKey); } function removeCookies(url, cb) { @@ -67,4 +68,9 @@ module.exports = function init(storage, ToughCookie, WebStorageCookieStore) { cookieJar.store.removeCookies(domain, null, cb); }); } + + function setStorageImpl(_storage) { + store.setStorageImpl(_storage) + storage = _storage; + } }; diff --git a/www/local-storage-store.js b/www/local-storage-store.js index c25e41a0..e7cd848d 100644 --- a/www/local-storage-store.js +++ b/www/local-storage-store.js @@ -40,6 +40,10 @@ module.exports = function init(ToughCookie, _) { WebStorageCookieStore.prototype = Object.create(ToughCookie.Store); + WebStorageCookieStore.prototype.setStorageImpl = function (storage) { + this._storage = storage; + }; + WebStorageCookieStore.prototype.findCookie = function (domain, path, key, callback) { var store = this._readStore(); var cookie = _.get(store, [domain, path, key], null); diff --git a/www/public-interface.js b/www/public-interface.js index 66b52612..b4656056 100644 --- a/www/public-interface.js +++ b/www/public-interface.js @@ -6,6 +6,7 @@ module.exports = function init(exec, cookieHandler, urlUtil, helpers, globalConf setHeader: setHeader, getDataSerializer: getDataSerializer, setDataSerializer: setDataSerializer, + setCookieStorageImpl: setCookieStorageImpl, setCookie: setCookie, clearCookies: clearCookies, removeCookies: removeCookies, @@ -81,6 +82,18 @@ module.exports = function init(exec, cookieHandler, urlUtil, helpers, globalConf globalConfigs.serializer = helpers.checkSerializer(serializer); } + /** + * Provides a custom cookie storage, to override the default localStorage + * @param {Object} storage + * @param {(name: string, value: string) => void} storage.setItem + * @param {(name: string) => string} storage.getItem + * @param {(name: string) => void} storage.removeItem + */ + function setCookieStorageImpl(storage) + { + cookieHandler.setStorageImpl(storage); + } + function setCookie(url, cookie, options) { cookieHandler.setCookie(url, cookie, options); }