summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-advanced-http/www/local-storage-store.js
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-advanced-http/www/local-storage-store.js')
-rw-r--r--StoneIsland/plugins/cordova-plugin-advanced-http/www/local-storage-store.js181
1 files changed, 181 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-advanced-http/www/local-storage-store.js b/StoneIsland/plugins/cordova-plugin-advanced-http/www/local-storage-store.js
new file mode 100644
index 00000000..c25e41a0
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-advanced-http/www/local-storage-store.js
@@ -0,0 +1,181 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2016 Exponent
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Based on "tough-cookie-web-storage-store" v1.0.0
+ * Thanks James Ide: https://github.com/exponentjs/tough-cookie-web-storage-store
+ *
+ * Modified by Sefa Ilkimen for cordova plugin integration
+ *
+ */
+
+'use strict';
+
+module.exports = function init(ToughCookie, _) {
+ function WebStorageCookieStore(storage, storeKey) {
+ ToughCookie.Store.call(this);
+ this._storage = storage;
+ this._storeKey = storeKey || '__cookieStore__';
+ this.synchronous = true;
+ }
+
+ WebStorageCookieStore.prototype = Object.create(ToughCookie.Store);
+
+ WebStorageCookieStore.prototype.findCookie = function (domain, path, key, callback) {
+ var store = this._readStore();
+ var cookie = _.get(store, [domain, path, key], null);
+
+ callback(null, ToughCookie.Cookie.fromJSON(cookie));
+ };
+
+ WebStorageCookieStore.prototype.findCookies = function (domain, path, callback) {
+ if (!domain) {
+ callback(null, []);
+ return;
+ }
+
+ var that = this;
+ var cookies = [];
+ var store = this._readStore();
+ var domains = ToughCookie.permuteDomain(domain) || [domain];
+
+ domains.forEach(function (domain) {
+ if (!store[domain]) {
+ return;
+ }
+
+ var matchingPaths = Object.keys(store[domain]);
+
+ if (path != null) {
+ matchingPaths = matchingPaths.filter(function (cookiePath) {
+ return that._isOnPath(cookiePath, path);
+ });
+ }
+
+ matchingPaths.forEach(function (path) {
+ Array.prototype.push.apply(cookies, _.values(store[domain][path]));
+ });
+ });
+
+ cookies = cookies.map(function (cookie) {
+ return ToughCookie.Cookie.fromJSON(cookie);
+ });
+
+ callback(null, cookies);
+ };
+
+ /**
+ * Returns whether `cookiePath` is on the given `urlPath`
+ */
+ WebStorageCookieStore.prototype._isOnPath = function (cookiePath, urlPath) {
+ if (!cookiePath) {
+ return false;
+ }
+
+ if (cookiePath === urlPath) {
+ return true;
+ }
+
+ if (urlPath.indexOf(cookiePath) !== 0) {
+ return false;
+ }
+
+ if (cookiePath[cookiePath.length - 1] !== '/' && urlPath[cookiePath.length] !== '/') {
+ return false;
+ }
+
+ return true;
+ };
+
+ WebStorageCookieStore.prototype.putCookie = function (cookie, callback) {
+ var store = this._readStore();
+
+ _.set(store, [cookie.domain, cookie.path, cookie.key], cookie);
+ this._writeStore(store);
+ callback(null);
+ };
+
+ WebStorageCookieStore.prototype.updateCookie = function (oldCookie, newCookie, callback) {
+ this.putCookie(newCookie, callback);
+ };
+
+
+ WebStorageCookieStore.prototype.removeCookie = function (domain, path, key, callback) {
+ var store = this._readStore();
+
+ _.unset(store, [domain, path, key]);
+ this._writeStore(store);
+ callback(null);
+ };
+
+ WebStorageCookieStore.prototype.removeCookies = function (domain, path, callback) {
+ var store = this._readStore();
+
+ if (path == null) {
+ _.unset(store, [domain]);
+ } else {
+ _.unset(store, [domain, path]);
+ }
+
+ this._writeStore(store);
+ callback(null);
+ };
+
+ WebStorageCookieStore.prototype.getAllCookies = function (callback) {
+ var cookies = [];
+ var store = this._readStore();
+
+ Object.keys(store).forEach(function (domain) {
+ Object.keys(store[domain]).forEach(function (path) {
+ Array.prototype.push.apply(cookies, _.values(store[domain][path]));
+ });
+ });
+
+ cookies = cookies.map(function (cookie) {
+ return ToughCookie.Cookie.fromJSON(cookie);
+ });
+
+ cookies.sort(function (c1, c2) {
+ return (c1.creationIndex || 0) - (c2.creationIndex || 0);
+ });
+
+ callback(null, cookies);
+ };
+
+ WebStorageCookieStore.prototype._readStore = function () {
+ var json = this._storage.getItem(this._storeKey);
+
+ if (json !== null) {
+ try {
+ return JSON.parse(json);
+ } catch (e) { }
+ }
+
+ return {};
+ };
+
+ WebStorageCookieStore.prototype._writeStore = function (store) {
+ this._storage.setItem(this._storeKey, JSON.stringify(store));
+ };
+
+ return WebStorageCookieStore;
+};