Source: utility/domains.js

'use strict';

/** Support comparison of current location to known locations
 * @module domains
 */

import {host} from './host';
import hashCode from './hash-code';

/** Set DEBUG variable from environmental variable */
window.DEBUG = process.env.DEBUG === 'true'; // eslint-disable-line no-process-env

// NOTE: Unit tests use the exported class, while Site.js uses the exported instance

//
// Exports
//

/** An object that knows how to interpret the hostname of the current site.
 *
 * We serve our website on multiple domains, and sometimes we do things
 * differently based on which domain.
 */
export class Domains {
  /** A list of domains (uses hash references for security by obfuscation)
   * Primary domain must be first in the array.
   * @type {array.<string>}
   * @private
   * @see [Domains](https://confluence.ad.datafoundry.com/x/SICoAw)
   */
  _domainHashes = [
    /* eslint-disable no-magic-numbers, capitalized-comments */
    2132732992,  // goldenfrog.com
    -774515750,  // goldenfrog.website
    -1048367172, // goldenfrog.company
    2132731858,  // goldenfrog.biz
    -2009412154, // goldenfrog.ch
    1140055860,  // goldenfrog.online
    1606025698,  // vyprvpn.com
    -2025777710, // vypr-accelerator.net
    -2025787978, // vypr-accelerator.com
    -1209649860, // waiguoaccelerator.com
    -1209639592, // waiguoaccelerator.net
    -1519882327, // acceleratorcn.com
    -1519872059, // acceleratorcn.net
    -360599621,  // fanqiangchina.com
    -360589353,  // fanqiangchina.net
    1879149894,  // gf-app.com
    1798951468,  // gf-official.com
    106728242,   // jinwa-official.com
    1650151320,  // fanqiang-cn.net
    -1519883461, // acceleratorcn.biz
    -1321475586, // vypr-accelerator.online
    403994334,   // escapewall.com
    1625259801,  // vypr-accelerator.info
    -360588002,   // fanqiangchina.org
    128465798,    // acceleratorcn.info
    -425610071,   // acceleraorcn.net
    1752086852,   // acceleratorcn.co
    -1519870708,  // acceleratorcn.org
    -412255549,   // acceleratorcn.website
    -926468309,   // acceleratorcn.online
    1874314647,   // vypr-accelerator.co
    -567400999,   // fanqiangchina.online
    2128896469,   // fanqiangchina.website
    -704368910,   // fanqiangchina.co
    -316115631,   // waiguoaccelerator.co
    -1209638241,  // waiguoaccelerator.org
    -1560664904,  // waiguoaccelerator.online
    1402486486,   // waiguoaccelerator.website
    1607519536,   // fanqiangcn.org
    1607518185,   // fanqiangcn.net
    725705863,    // fanqiangcn.online
    -734463769,   // fanqiangcn.website
    1575875744,   // fanqiangcn.co
    1650141052,   // fanqiang-cn.com
    1671019043,   // vyprfq.com
    -963337945,   // vyprfanqiang.com
    -2027748829,  // vyprescapewall.com
    -1520878322,  // vyprescapewallcn.com
    -715277810,   // vyprcnescapewall.com
    1927897668,   // vypracceleratorcn.com
    -421313970,   // vyprcnaccelerator.com
    1403050709,   // vyproverthewall.com
    -860020662,   // vyprcnoverthewall.com
    1237561664,   // vyproverthewallcn.com
    1830391804,   // vyprtizi.com
    282767521,    // vyprtizichina.com
    -404506457,   // vyprtizicn.com
    1671029311,   // vyprfq.net
    -963327677,   // vyprfanqiang.net
    -2027738561,  // vyprescapewall.net
    -1520868054,  // vyprescapewallcn.net
    -715267542,   // vyprcnescapewall.net
    1927907936,   // vypracceleratorcn.net
    -421303702,   // vyprcnaccelerator.net
    1403060977,   // vyproverthewall.net
    -860010394,   // vyprcnoverthewall.net
    1237571932,   // vyproverthewallcn.net
    1830402072,   // vyprtizi.net
    282777789,    // vyprtizichina.net
    -404496189,   // vyprtizicn.net
    1671030662,   // vyprfq.org
    -963326326,   // vyprfanqiang.org
    -2027737210,  // vyprescapewall.org
    -1520866703,  // vyprescapewallcn.org
    -715266191,   // vyprcnescapewall.org
    1927909287,   // vypracceleratorcn.org
    -421302351,   // vyprcnaccelerator.org
    1403062328,   // vyproverthewall.org
    -860009043,   // vyprcnoverthewall.org
    1237573283,   // vyproverthewallcn.org
    1830403423,   // vyprtizi.org
    282779140,    // vyprtizichina.org
    -404494838,   // vyprtizicn.org
    -498405378,   // getvyprcn1.com
    -497481857,   // getvyprcn2.com
    -496558336,   // getvyprcn3.com
    1624615400,   // getvyprchina1.com
    1625538921,   // getvyprchina2.com
    1626462442,   // getvyprchina3.com
    98592553,     // vyprescapewallcn1.com
    99516074,     // vyprescapewallcn2.com
    100439595,    // vyprescapewallcn3.com
    101363116,    // vyprescapewallcn4.com
    103210158,    // vyprescapewallcn6.com
    2125409691,   // unblockwallcn1.com
    2126333212,   // unblockwallcn2.com
    2127256733,   // unblockwallcn3.com
    908751355,    // vyprtizi1.com
    909674876,    // vyprtizi2.com
    910598397,    // vyprtizi3.com
    346382000,    // vyprtizicn1.com
    347305521,    // vyprtizicn2.com
    102286637,    // vyprescapewallcn5.com
    1022565535,   // getvyprcn-vkh.com
    -836811113,   // getvyprcn-omi.com
    824603166,    // getvyprcn-qij.com
    751645007,    // getvyprcn-qfx.com
    -838392384,   // getvyprcn-ewf.com
    308354927,    // getvyprcn-pvi.com
    -271021615,   // getvyprcn-kga.com
    1664412630,   // getvyprcn-wbu.com
    1351224695,   // getvyprchina-dgx.com
    302167943,    // getvyprchina-qrf.com
    -87292148,    // getvyprchina-gnq.com
    -1648638822,  // getchinavypr-zui.com
    504949046,    // getchinavypr-nrn.com
    -145475509,   // getchinavypr-wpx.com
    -1531148988,  // getchinavypr-bsi.com
    335678932,    // getchinavypr-xbr.com
    -1982750757,  // getchinavypr-bcp.com
    1446109661,   // unblockwallcn-tsm.com
    -874103966,   // unblockwallcn-mek.com
    1467350644,   // unblockwallcn-tte.com
    -244920394,   // unblockwallcn-dfi.com
    -1510675706,  // unblockwallcn-vde.com
    -583209360,   // unblockwall-xfz.com
    -183324767,   // unblockwall-xty.com
    1888664378,   // unblockwall-gtc.com
    526142028,    // unblockwall-aho.com
    -1488651919,  // unblockwall-czd.com
    -56802390,    // unblockwall-xyg.com
    -1158006496,  // unblockcnwall-hzc.com
    1050397986,   // unblockcnwall-atf.com
    1362282313,   // unblockcnwall-kud.com
    -883063009,   // unblockcnwall-ryw.com
    -1747149790,  // unblockcnwall-vur.com
    -968090045,   // unblockcnwall-dfv.com
    -490071692,   // unblockchinawall-ukw.com
    -605772043,   // takebackyourinternet.com
    -605761775,   // takebackyourinternet.net
    -605760424,   // takebackyourinternet.org
    134247926,    // bondwidth.com
    -1522139144,  // killstreak.io
    872426206,    // realclearprivacy.biz
    -941687949,   // realclearprivacy.us
    -1990649791,  // dtruck.info
    -1172587279,  // dtruck.org
    -824933949,   // cloudfront.net
    -1213134776,  // netrule.net
    -255563400,   // accelerator-vy.com
    -255551781,   // accelerator-vy.org
    -52700926,    // app-vy.com
    2103838973,   // buy-vy.com
    218728952,    // buyvy.net
    2103850592,   // buy-vy.org
    87533741,     // choosevy.com
    -1962894260,  // choose-vy.com
    87544009,     // choosevy.net
    -1962883992,  // choose-vy.net
    -1962882641,  // choose-vy.org
    -148345299,   // get-vy.com
    1808645832,   // getvy.net
    -148333680,   // get-vy.org
    1697647353,   // gotovy.com
    1697657621,   // gotovy.net
    350344451,    // gpnservice.com
    -641520293,   // join-vypr.com
    -641510025,   // join-vypr.net
    1609159884,   // phmgmt.com
    -1722621929,  // purchasevy.com
    2051822114,   // purchase-vy.com
    -1722610310,  // purchasevy.org
    2051833733,   // purchase-vy.org
    -306008024,   // try-vy.com
    1110823277,   // tryvy.net
    -305996405,   // try-vy.org
    475964445,    // usevy.com
    475976064,    // usevy.org
    1719232701,   // vipervpn.com
    -770619167,   // visitvy.com
    1499136664,   // visit-vy.com
    -770608899,   // visitvy.net
    1499148283,   // visit-vy.org
    -1050449110,  // vy-app.com
    150176242,    // vyprapp.org
    1914942626,   // vypr-china.com
    2107687457,   // vyprchina.net
    -773967741,   // vyprofficial.com
    -773957473,   // vyprofficial.net
    -195539846,   // vyprofficialchina.com
    -195529578,   // vyprofficialchina.net
    -195528227,   // vyprofficialchina.org
    619877439,    // vysupport.com
    /* eslint-enable */
  ];

  /** An instance of the host utility class
   * @type {module:host.Host}
   * @private
   */
  _host;

  /** Store private reference to the provided host
   * @param {module:host.Host} _host - An instance of the host utility class
   */
  constructor(_host) {
    this._host = _host;
  }

  /** Whether the hostname is in one of our known domains
   * @param {external:Location.hostname} hostname - URL domain
   * @return {boolean}
  */
  isOurDomain(hostname) {
    const domain = hostname.split('.').splice(-2).join('.').toLowerCase();
    // FE-2673/FE-2674: Use `includes`, instead of `indexOf`.
    //                  - Add `!String.includes` to list in `…/templates-hidden/_site.js.html`.
    const isOurDomain = (this._domainHashes.indexOf(hashCode(domain)) > -1);
    // This is for testing hash code
    DEBUG && domain && console.log('Utility: Domains.isAlternateDomain(\"' + domain + '\")', isOurDomain); // eslint-disable-line

    return isOurDomain;
  }
}

/** Instance of the class of this module
 * @type {module:domains.Domains}
 */
export const domains = new Domains(host);