cookie-handler.js 1.8 KB
Newer Older
Chok's avatar
Chok committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
module.exports = function init(storage, ToughCookie, WebStorageCookieStore) {
  var storeKey = '__advancedHttpCookieStore__';

  var store = new WebStorageCookieStore(storage, storeKey);
  var cookieJar = new ToughCookie.CookieJar(store);

  return {
    setCookieFromString: setCookieFromString,
    setCookie: setCookie,
    getCookieString: getCookieString,
    clearCookies: clearCookies,
    removeCookies: removeCookies
  };

  function splitCookieString(cookieStr) {
    var cookieParts = cookieStr.split(',');
    var splitCookies = [];
    var processedCookie = null;

    for (var i = 0; i < cookieParts.length; ++i) {
      if (cookieParts[i].substr(-11, 8).toLowerCase() === 'expires=') {
        processedCookie = cookieParts[i] + ',' + cookieParts[i + 1];
        i++;
      } else {
        processedCookie = cookieParts[i];
      }

      processedCookie = processedCookie.trim();
      splitCookies.push(processedCookie);
    }

    return splitCookies;
  }

  function setCookieFromString(url, cookieStr) {
    if (!cookieStr) return;

    var cookies = splitCookieString(cookieStr);

    for (var i = 0; i < cookies.length; ++i) {
      cookieJar.setCookieSync(cookies[i], url, { ignoreError: true });
    }
  }

  function setCookie(url, cookie, options) {
    options = options || {};
    options.ignoreError = false;
    cookieJar.setCookieSync(cookie, url, options);
  }

  function getCookieString(url) {
    return cookieJar.getCookieStringSync(url);
  }

  function clearCookies() {
    window.localStorage.removeItem(storeKey);
  }

  function removeCookies(url, cb) {
    cookieJar.getCookies(url, function (error, cookies) {
      if (!cookies || cookies.length === 0) {
        return cb(null, []);
      }

      var domain = cookies[0].domain;

      cookieJar.store.removeCookies(domain, null, cb);
    });
  }
};