|
// ==UserScript== |
|
// @name Cookie Editor |
|
// @namespace http://tampermonkey.net/ |
|
// @version 1.0 |
|
// @description This script allows you to control cookies from the console. |
|
// @author alexgurrola <github.com/alexgurrola> |
|
// @match *://*/* |
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=github.com |
|
// @grant none |
|
// ==/UserScript== |
|
|
|
(function() { |
|
'use strict'; |
|
|
|
// seconds conversions |
|
function seconds(str) { |
|
if (typeof str === 'number') { |
|
return str; |
|
} |
|
if (typeof str !== 'string') { |
|
return null; |
|
} |
|
const timePairs = str.match(/([\d+.]*[\d+])(?=[sSmMhHdDwWyY]+)([sSmMhHdDwWyY]+)/gi); |
|
if (!timePairs) { |
|
return null; |
|
} |
|
const digest = /([\d+.]*[\d+])(?=[sSmMhHdDwWyY]+)([sSmMhHdDwWyY]+)/i; |
|
let time; |
|
let unit; |
|
let value; |
|
let data = 0; |
|
timePairs.forEach((timePair) => { |
|
time = digest.exec(timePair); |
|
value = parseFloat(time[1]); |
|
unit = time[2]; |
|
if (isNaN(value)) { |
|
return; |
|
} |
|
switch (time[2]) { |
|
case 's': |
|
unit = 1; |
|
break; |
|
case 'm': |
|
unit = 60; |
|
break; |
|
case 'h': |
|
unit = 3.6e+3; |
|
break; |
|
case 'd': |
|
unit = 8.64e+4; |
|
break; |
|
case 'w': |
|
unit = 6.048e+5; |
|
break; |
|
case 'y': |
|
unit = 3.1558149504e+7; |
|
break; |
|
default: |
|
unit = 0; |
|
} |
|
data += value * unit; |
|
}); |
|
return data; |
|
} |
|
|
|
// cookie |
|
function cookie(name, value, expires, path, domain, secure, sameSite) { |
|
const request = { |
|
name, |
|
value, |
|
expires, |
|
path: path || '/', |
|
domain, |
|
secure, |
|
sameSite |
|
}; |
|
let data; |
|
if (typeof request.value === 'undefined') { |
|
const search = new RegExp('(?:^' + request.name + '|;\\s*' + request.name + ')=(.*?)(?:;|$)', 'g'); |
|
data = search.exec(document.cookie); |
|
return null === data ? null : data[1]; |
|
} |
|
data = request.name + '=' + escape(request.value) + ';'; |
|
if (request.expires) { |
|
if (request.expires instanceof Date) { |
|
if (isNaN(request.expires.getTime())) { |
|
request.expires = new Date(); |
|
} |
|
} |
|
else { |
|
request.expires = new Date(new Date().getTime() + conversion_1.seconds(request.expires) * 1000); |
|
} |
|
data += 'expires=' + request.expires.toUTCString() + ';'; |
|
} |
|
if (request.path) { |
|
data += 'path=' + request.path + ';'; |
|
} |
|
if (request.domain) { |
|
data += 'domain=' + request.domain + ';'; |
|
} |
|
data += `secure=${request.secure === false ? 'false' : 'true'};`; |
|
data += `sameSite=${request.sameSite || 'Lax'};`; |
|
console.log('new cookie:', data); |
|
document.cookie = data; |
|
} |
|
|
|
// hoist to window |
|
window.cookie = cookie |
|
|
|
// write to console: |
|
console.log('cookie functions are now available!') |
|
})(); |