'use strict';
/** Set `reffering_site` cookie (filter certain domains)
* @module referringSite
*/
// FE-2453: This line should not be necessary
export const n = DEBUG ? 'ReferringSite' : undefined; // eslint-disable-line no-undef, no-undefined, id-length
// FE-2673: The `locationTools` is not used, do we want to use it (add method to it)?
// Mike Doug may know; he is the original author of this file and that file.
// import {locationTools} from '../../utility/location-tools';
import {domains} from '../../../utility/domains';
//
// Definitions
//
/** List of domains that are ignored when determining referring site
* @type {array.<string>}
*/
const ignoredDomains = [
'paypal.com',
'jobvite.com',
'gcsip.nl', // Ingenico ePayments Staging
'gcsip.com', // Ingenico ePayments Production
'alipaydev.com', // Alipay Staging
'alipay.com', // Alipay Production
];
//
// Exports
//
/**
* Logic for needing to inject the cookie here for testability
*
* @param {Document.referrer} referrer - The referring site
* @param {module:domains.Domains} _domains - An instance of {@link module:domains.Domains}
* @return {boolean}
*/
export function _needsCookie(referrer, {_domains = domains} = {}) {
// FE-2673: Avoid URL regex;
// use [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL).
// When lines with `m` are less obtuse,
// remove `// eslint-disable-line …` on the lines.
const m = (referrer || '').match(/^[a-z]+:\/\/([^\/:]*)/i); // eslint-disable-line no-useless-escape, id-length
DEBUG && console.log(m); /* FE-2856 */// eslint-disable-line
const referrerHost = (m !== null) ? m[1] : ''; // eslint-disable-line no-negated-condition
DEBUG && console.log(referrerHost); /* FE-2856 */// eslint-disable-line
const referrerDomain = referrerHost.split('.').splice(-2).join('.');
DEBUG && console.log(referrerDomain); /* FE-2856 */// eslint-disable-line
// FE-2673: What is the significance of `hasReferrerHost`?
// Name the variable after that significance, not its logic,
// because we want to know why we care about the value.
const hasReferrerHost = (referrerHost !== '');
// FE-2673: Use `includes`, instead of `indexOf`.
// - Add `!String.includes` to list in `…/templates-hidden/_site.js.html`.
const isRelevantReferrer = (ignoredDomains.indexOf(referrerDomain) === -1);
const isThirdPartyReferrer = !_domains.isOurDomain(referrerDomain);
return (hasReferrerHost && isRelevantReferrer && isThirdPartyReferrer);
}
/* eslint-enable */
/** If our referrer is not us and not one of the above ignored domains, set the `referring_site` cookie.
*
* Expiration is unset (expires when browser is closed)
* because this was a "session" based cookie originally in Scala.
*/
export default function referringSite() {
DEBUG && console.log('ReferringSite'); /* FE-2856 */// eslint-disable-line
// This is for testing hash code
DEBUG && domains.isOurDomain(window.location.hostname); // eslint-disable-line
if (_needsCookie(document.referrer)) {
DEBUG && console.log('Setting `referring_site` cookie to : ' + document.referrer); /* FE-2856 */// eslint-disable-line
window.jsCookies.set('referring_site', document.referrer);
}
}