diff --git a/xtrn/wttr.in/locator.js b/xtrn/wttr.in/locator.js index 0390fe0e82cf90ee05d73f59e147a01366fb8d8f..1de3c6088c46086a3400b89df5b05c5143bcf583 100644 --- a/xtrn/wttr.in/locator.js +++ b/xtrn/wttr.in/locator.js @@ -2,105 +2,19 @@ * Just IP address lookup for now * wttr.in does the geoip for us (albeit inaccurately) * To do: do something with user.location / zipcode as an alternative? - * - * IP address lookup stuff adapted from syncWXremix - * (Contributed by echicken) - * https://github.com/KenDB3/syncWXremix - * Copyright (c) 2015, Kenny DiBattista <kendb3@bbs.kd3.us> - * - * ISC License - * - * Copyright (c) 2022 Zaidhaan Hussain - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. */ -// To do: I think this is only good for IPv4 -function wstsGetIPAddress() { - const ip = []; - const data = []; - - try { - console.lock_input(true); - console.telnet_cmd(253, 28); // DO TTYLOC - - const stime = system.timer; - while (system.timer - stime < 1) { - if (!client.socket.data_waiting) continue; - data.push(client.socket.recvBin(1)); - if (data.length >= 14 && data[data.length - 3] !== 255 && data[data.length - 2] === 255 && data[data.length - 1] === 240) break; - } - - // Check for a valid reply - if (data.length < 14 || // Minimum response length - // Should start like this - data[0] !== 255 || // IAC - data[1] !== 250 || // SB - data[2] !== 28 || // TTYLOC - data[3] !== 0 || // FORMAT - // Should end like this - data[data.length - 2] !== 255 || // IAC - data[data.length - 1] !== 240 // SE - ) { - throw 'Invalid reply to TTYLOC command.'; - } - - for (var d = 4; d < data.length - 2; d++) { - ip.push(data[d]); - if (data[d] === 255) d++; - } - if (ip.length !== 8) throw 'Invalid reply to TTYLOC command.'; - } catch (err) { - log(LOG_DEBUG, err); - } finally { - console.lock_input(false); - if (ip.length !== 8) return; - return ip.slice(0, 4).join('.'); - } -} +function getAddress() { + const addrRe = /(^0\.0\.0\.0$)|(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^169\.254\.)|(^::1$)|(^[fF][cCdD])/; + if (client.ip_address.search(addrRe) < 0) return client.ip_address; -// for webv4 ... I think -function wsrsGetIPAddress() { - var fn = format('%suser/%04d.web', system.data_dir, user.number); - if (!file_exists(fn)) return; - var f = new File(fn); + const f = new File(system.temp_path + 'sbbs-ws-' + client.socket.remote_port + '.ip'); + if (!f.exists) return; if (!f.open('r')) return; - var session = f.iniGetObject(); + const addr = f.read(); f.close(); - if (typeof session.ip_address === 'undefined') return; - return session.ip_address; -} -function getAddress() { - log(LOG_DEBUG, 'client.ip_address is ' + client.ip_address); - const addrRe = /(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^169\.254\.)|(^::1$)|(^[fF][cCdD])/; - if (client.ip_address.search(addrRe) > -1) { - var addr; - if (client.protocol === 'Telnet' || client.protocol === 'SSH') { - log(LOG_DEBUG, 'Trying wsts method'); - addr = wstsGetIPAddress(); - log(LOG_DEBUG, 'wsts result: ' + addr); - } else if (bbs.sys_status&SS_RLOGIN) { - log(LOG_DEBUG, 'Trying wsrs method'); - addr = wsrsGetIPAddress(); - log(LOG_DEBUG, 'wsrs result: ' + addr); - } - if (addr === undefined || addr.search(addrRe) > -1) return; - log(LOG_DEBUG, 'returning: ' + addr); - return addr; - } - log(LOG_DEBUG, 'returning: ' + client.ip_address); - return client.ip_address; + if (addr.search(addrRe) < 0) return addr; } this; \ No newline at end of file