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 }