* @class Evercookie * @param {Object} options * @param {Boolean} options.history CSS history knocking or not .. can be network intensive * @param {Boolean} options.java Java applet on/off... may prompt users for permission to run. * @param {Number} options.tests * @param {Boolean} opt
(options)
| 288 | * @param {Array} options.hsts_domains The domains used for the hsts cookie. 1 Domain = one bit (8 domains => 8 bit => values up to 255) |
| 289 | */ |
| 290 | function Evercookie(options) { |
| 291 | options = options || {}; |
| 292 | var opts = {}; |
| 293 | for (var key in defaultOptionMap) { |
| 294 | var optValue = options[key]; |
| 295 | if(typeof optValue !== 'undefined') { |
| 296 | opts[key] = optValue |
| 297 | } else { |
| 298 | opts[key] = defaultOptionMap[key]; |
| 299 | } |
| 300 | } |
| 301 | if(typeof opts.domain === 'function'){ |
| 302 | opts.domain = opts.domain(window); |
| 303 | } |
| 304 | var _ec_history = opts.history, |
| 305 | _ec_java = opts.java, |
| 306 | _ec_tests = opts.tests, |
| 307 | _ec_baseurl = opts.baseurl, |
| 308 | _ec_asseturi = opts.asseturi, |
| 309 | _ec_phpuri = opts.phpuri, |
| 310 | _ec_domain = opts.domain, |
| 311 | _ec_swf_file_name = opts.swfFileName, |
| 312 | _ec_xap_file_name = opts.xapFileName, |
| 313 | _ec_jnlp_file_name = opts.jnlpFileName, |
| 314 | _ec_hsts = opts.hsts; |
| 315 | |
| 316 | // private property |
| 317 | var self = this; |
| 318 | this._ec = {}; |
| 319 | if (_ec_hsts){ |
| 320 | if(opts.hsts_domains.length <= 8){ |
| 321 | // TODO: warn on some more prominent place ? |
| 322 | console.log('HSTS cookie with '+opts.hsts_domains.length+' can only save values up to ' + Math.pow(2, opts.hsts_domains.length) - 1); |
| 323 | } |
| 324 | this.hsts_cookie = HSTS_Cookie(opts.hsts_domains); |
| 325 | } |
| 326 | |
| 327 | this.get = function (name, cb, dont_reset) { |
| 328 | self._evercookie(name, cb, undefined, undefined, dont_reset); |
| 329 | }; |
| 330 | |
| 331 | this.set = function (name, value) { |
| 332 | self._evercookie(name, function () {}, value); |
| 333 | }; |
| 334 | |
| 335 | this._evercookie = function (name, cb, value, i, dont_reset) { |
| 336 | if (self._evercookie === undefined) { |
| 337 | self = this; |
| 338 | } |
| 339 | if (i === undefined) { |
| 340 | i = 0; |
| 341 | } |
| 342 | // first run |
| 343 | if (i === 0) { |
| 344 | if (opts.db) { |
| 345 | self.evercookie_database_storage(name, value); |
| 346 | } |
| 347 | if (opts.idb) { |
nothing calls this directly
no test coverage detected