Repository navigation
Expand file tree
/
Copy pathcookie.js
More file actions
127 lines (104 loc) · 2.45 KB
/
Copy pathcookie.js
File metadata and controls
127 lines (104 loc) · 2.45 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
* Cookie data
*/
import Base64 from './base64';
import topDomain from '@segment/top-domain';
import utils from './utils';
var _options = {
expirationDays: undefined,
domain: undefined
};
var reset = function() {
_options = {
expirationDays: undefined,
domain: undefined
};
};
var options = function(opts) {
if (arguments.length === 0) {
return _options;
}
opts = opts || {};
_options.expirationDays = opts.expirationDays;
var domain = (!utils.isEmptyString(opts.domain)) ? opts.domain : '.' + topDomain(window.location.href);
var token = Math.random();
_options.domain = domain;
set('amplitude_test', token);
var stored = get('amplitude_test');
if (!stored || stored !== token) {
domain = null;
}
remove('amplitude_test');
_options.domain = domain;
};
var _domainSpecific = function(name) {
// differentiate between cookies on different domains
var suffix = '';
if (_options.domain) {
suffix = _options.domain.charAt(0) === '.' ? _options.domain.substring(1) : _options.domain;
}
return name + suffix;
};
var get = function(name) {
try {
var nameEq = _domainSpecific(name) + '=';
var ca = document.cookie.split(';');
var value = null;
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEq) === 0) {
value = c.substring(nameEq.length, c.length);
break;
}
}
if (value) {
return JSON.parse(Base64.decode(value));
}
return null;
} catch (e) {
return null;
}
};
var set = function(name, value) {
try {
_set(_domainSpecific(name), Base64.encode(JSON.stringify(value)), _options);
return true;
} catch (e) {
return false;
}
};
var _set = function(name, value, opts) {
var expires = value !== null ? opts.expirationDays : -1 ;
if (expires) {
var date = new Date();
date.setTime(date.getTime() + (expires * 24 * 60 * 60 * 1000));
expires = date;
}
var str = name + '=' + value;
if (expires) {
str += '; expires=' + expires.toUTCString();
}
str += '; path=/';
if (opts.domain) {
str += '; domain=' + opts.domain;
}
document.cookie = str;
};
var remove = function(name) {
try {
_set(_domainSpecific(name), null, _options);
return true;
} catch (e) {
return false;
}
};
export default {
reset: reset,
options: options,
get: get,
set: set,
remove: remove
};