tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ascii_pac_utils.js (6026B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 /* global dnsResolve */
      6 
      7 function dnsDomainIs(host, domain) {
      8  return (
      9    host.length >= domain.length &&
     10    host.substring(host.length - domain.length) == domain
     11  );
     12 }
     13 
     14 function dnsDomainLevels(host) {
     15  return host.split(".").length - 1;
     16 }
     17 
     18 function isValidIpAddress(ipchars) {
     19  var matches = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(ipchars);
     20  if (matches == null) {
     21    return false;
     22  } else if (
     23    matches[1] > 255 ||
     24    matches[2] > 255 ||
     25    matches[3] > 255 ||
     26    matches[4] > 255
     27  ) {
     28    return false;
     29  }
     30  return true;
     31 }
     32 
     33 function convert_addr(ipchars) {
     34  var bytes = ipchars.split(".");
     35  var result =
     36    ((bytes[0] & 0xff) << 24) |
     37    ((bytes[1] & 0xff) << 16) |
     38    ((bytes[2] & 0xff) << 8) |
     39    (bytes[3] & 0xff);
     40  return result;
     41 }
     42 
     43 function isInNet(ipaddr, pattern, maskstr) {
     44  if (!isValidIpAddress(pattern) || !isValidIpAddress(maskstr)) {
     45    return false;
     46  }
     47  if (!isValidIpAddress(ipaddr)) {
     48    ipaddr = dnsResolve(ipaddr);
     49    if (ipaddr == null) {
     50      return false;
     51    }
     52  }
     53  var host = convert_addr(ipaddr);
     54  var pat = convert_addr(pattern);
     55  var mask = convert_addr(maskstr);
     56  return (host & mask) == (pat & mask);
     57 }
     58 
     59 function isPlainHostName(host) {
     60  return host.search("(\\.)|:") == -1;
     61 }
     62 
     63 function isResolvable(host) {
     64  var ip = dnsResolve(host);
     65  return ip != null;
     66 }
     67 
     68 function localHostOrDomainIs(host, hostdom) {
     69  return host == hostdom || hostdom.lastIndexOf(host + ".", 0) == 0;
     70 }
     71 
     72 function shExpMatch(url, pattern) {
     73  pattern = pattern.replace(/\./g, "\\.");
     74  pattern = pattern.replace(/\*/g, ".*");
     75  pattern = pattern.replace(/\?/g, ".");
     76  var newRe = new RegExp("^" + pattern + "$");
     77  return newRe.test(url);
     78 }
     79 
     80 var wdays = { SUN: 0, MON: 1, TUE: 2, WED: 3, THU: 4, FRI: 5, SAT: 6 };
     81 var months = {
     82  JAN: 0,
     83  FEB: 1,
     84  MAR: 2,
     85  APR: 3,
     86  MAY: 4,
     87  JUN: 5,
     88  JUL: 6,
     89  AUG: 7,
     90  SEP: 8,
     91  OCT: 9,
     92  NOV: 10,
     93  DEC: 11,
     94 };
     95 
     96 function weekdayRange() {
     97  function getDay(weekday) {
     98    if (weekday in wdays) {
     99      return wdays[weekday];
    100    }
    101    return -1;
    102  }
    103  var date = new Date();
    104  var argc = arguments.length;
    105  var wday;
    106  if (argc < 1) {
    107    return false;
    108  }
    109  if (arguments[argc - 1] == "GMT") {
    110    argc--;
    111    wday = date.getUTCDay();
    112  } else {
    113    wday = date.getDay();
    114  }
    115  var wd1 = getDay(arguments[0]);
    116  var wd2 = argc == 2 ? getDay(arguments[1]) : wd1;
    117  if (wd1 == -1 || wd2 == -1) {
    118    return false;
    119  }
    120 
    121  if (wd1 <= wd2) {
    122    return wd1 <= wday && wday <= wd2;
    123  }
    124 
    125  return wd2 >= wday || wday >= wd1;
    126 }
    127 
    128 function dateRange() {
    129  function getMonth(name) {
    130    if (name in months) {
    131      return months[name];
    132    }
    133    return -1;
    134  }
    135  var date = new Date();
    136  var argc = arguments.length;
    137  if (argc < 1) {
    138    return false;
    139  }
    140  var isGMT = arguments[argc - 1] == "GMT";
    141 
    142  if (isGMT) {
    143    argc--;
    144  }
    145  // function will work even without explict handling of this case
    146  if (argc == 1) {
    147    let tmp = parseInt(arguments[0]);
    148    if (isNaN(tmp)) {
    149      return (
    150        (isGMT ? date.getUTCMonth() : date.getMonth()) == getMonth(arguments[0])
    151      );
    152    } else if (tmp < 32) {
    153      return (isGMT ? date.getUTCDate() : date.getDate()) == tmp;
    154    }
    155    return (isGMT ? date.getUTCFullYear() : date.getFullYear()) == tmp;
    156  }
    157  var year = date.getFullYear();
    158  var date1, date2;
    159  date1 = new Date(year, 0, 1, 0, 0, 0);
    160  date2 = new Date(year, 11, 31, 23, 59, 59);
    161  var adjustMonth = false;
    162  for (let i = 0; i < argc >> 1; i++) {
    163    let tmp = parseInt(arguments[i]);
    164    if (isNaN(tmp)) {
    165      let mon = getMonth(arguments[i]);
    166      date1.setMonth(mon);
    167    } else if (tmp < 32) {
    168      adjustMonth = argc <= 2;
    169      date1.setDate(tmp);
    170    } else {
    171      date1.setFullYear(tmp);
    172    }
    173  }
    174  for (let i = argc >> 1; i < argc; i++) {
    175    let tmp = parseInt(arguments[i]);
    176    if (isNaN(tmp)) {
    177      let mon = getMonth(arguments[i]);
    178      date2.setMonth(mon);
    179    } else if (tmp < 32) {
    180      date2.setDate(tmp);
    181    } else {
    182      date2.setFullYear(tmp);
    183    }
    184  }
    185  if (adjustMonth) {
    186    date1.setMonth(date.getMonth());
    187    date2.setMonth(date.getMonth());
    188  }
    189  if (isGMT) {
    190    let tmp = date;
    191    tmp.setFullYear(date.getUTCFullYear());
    192    tmp.setMonth(date.getUTCMonth());
    193    tmp.setDate(date.getUTCDate());
    194    tmp.setHours(date.getUTCHours());
    195    tmp.setMinutes(date.getUTCMinutes());
    196    tmp.setSeconds(date.getUTCSeconds());
    197    date = tmp;
    198  }
    199  return date1 <= date2
    200    ? date1 <= date && date <= date2
    201    : date2 >= date || date >= date1;
    202 }
    203 
    204 function timeRange() {
    205  var argc = arguments.length;
    206  var date = new Date();
    207  var isGMT = false;
    208  if (argc < 1) {
    209    return false;
    210  }
    211  if (arguments[argc - 1] == "GMT") {
    212    isGMT = true;
    213    argc--;
    214  }
    215 
    216  var hour = isGMT ? date.getUTCHours() : date.getHours();
    217  var date1, date2;
    218  date1 = new Date();
    219  date2 = new Date();
    220 
    221  if (argc == 1) {
    222    return hour == arguments[0];
    223  } else if (argc == 2) {
    224    return arguments[0] <= hour && hour <= arguments[1];
    225  }
    226  switch (argc) {
    227    case 6:
    228      date1.setSeconds(arguments[2]);
    229      date2.setSeconds(arguments[5]);
    230    // falls through
    231    case 4:
    232      var middle = argc >> 1;
    233      date1.setHours(arguments[0]);
    234      date1.setMinutes(arguments[1]);
    235      date2.setHours(arguments[middle]);
    236      date2.setMinutes(arguments[middle + 1]);
    237      if (middle == 2) {
    238        date2.setSeconds(59);
    239      }
    240      break;
    241    default:
    242      throw new Error("timeRange: bad number of arguments");
    243  }
    244 
    245  if (isGMT) {
    246    date.setFullYear(date.getUTCFullYear());
    247    date.setMonth(date.getUTCMonth());
    248    date.setDate(date.getUTCDate());
    249    date.setHours(date.getUTCHours());
    250    date.setMinutes(date.getUTCMinutes());
    251    date.setSeconds(date.getUTCSeconds());
    252  }
    253  return date1 <= date2
    254    ? date1 <= date && date <= date2
    255    : date2 >= date || date >= date1;
    256 }