diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js index ac6e516e..a0bd573c 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js @@ -162,8 +162,8 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { if (bf0app_update) headers += getServiceString('wtv-star', { "no_star_word": true }) + "\n"; else headers += getServiceString('wtv-star') + "\n"; - if (request_headers.query.reconnect && !ssid_sessions[socket.ssid].getSessionData("registered")) headers += getServiceString('wtv-register') + "\n"; - headers += getServiceString('wtv-flashrom') + "\n"; + if (request_headers.query.reconnect && !ssid_sessions[socket.ssid].getSessionData("registered") && !ssid_sessions[socket.ssid].lockdown) headers += getServiceString('wtv-register') + "\n"; + if (!ssid_sessions[socket.ssid].lockdown) headers += getServiceString('wtv-flashrom') + "\n"; if (bf0app_update) headers += "wtv-boot-url: " + gourl + "\n"; else { headers += "wtv-boot-url: wtv-head-waiter:/relogin?relogin=true"; diff --git a/zefie_wtvp_minisrv/ServiceDeps/TOS.html b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js similarity index 95% rename from zefie_wtvp_minisrv/ServiceDeps/TOS.html rename to zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js index 60aa8e72..7e3fe89d 100644 --- a/zefie_wtvp_minisrv/ServiceDeps/TOS.html +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/unauthorized.js @@ -1,4 +1,7 @@ - +headers = `200 OK +Content-type: text/html`; + +data = `
Reason: ${REASON}
+You are not authorized to use this service.Reason: ${ssid_sessions[socket.ssid].lockdownReason}
-This will take a while, and
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js
index c213f1a2..7f68428d 100644
--- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js
+++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-complete.js
@@ -64,7 +64,7 @@ Updating complete
The update is complete. Choose Connect Now if you Press the power button to switch Press the power button to switch Press the power button to switch off your unit.
+ Press the power button to switch off your ${ssid_sessions[socket.ssid].getBoxName()}.
then you can use your WebTV again.
+This will take a while, and
then you can use your ${ssid_sessions[socket.ssid].getBoxName()} again.
`;
if (flashrom_info.is_bootrom && flashrom_info.part_number == (flashrom_info.part_count - 1)) {
data += `
want to connect to ${minisrv_config.config.service_name}.
-
off your unit.
+
off your ${ssid_sessions[socket.ssid].getBoxName()}.
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js
index 703b8717..fba5eeb6 100644
--- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js
+++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/lc2-download-failed.js
@@ -93,7 +93,7 @@ data = `
We ran into a technical problem while updating
your unit. (Error: ${error})
Choose Try Again to try again now.
-
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/bad-disk.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/bad-disk.js
new file mode 100644
index 00000000..d6ec41c7
--- /dev/null
+++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/bad-disk.js
@@ -0,0 +1,63 @@
+var minisrv_service_file = true;
+
+ssid_sessions[socket.ssid].disableLockdown();
+
+data += `
+
+
+
+ 
+
+
+
+
+
+Please Call
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Your Internet terminal needs to be repaired
+or replaced before you can connect to WebTV.
+
+
+
+
+
+
+
+
+
+`;
\ No newline at end of file
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js
index b2bda080..7f8b0cd7 100644
--- a/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js
+++ b/zefie_wtvp_minisrv/ServiceVault/wtv-head-waiter/login-stage-two.js
@@ -53,7 +53,10 @@ Content-type: text/html`;
data = '';
}
else {
- if (request_headers.query.guest_login && minisrv_config.config.allow_guests) {
+ if (ssid_sessions[socket.ssid].lockdown) {
+ home_url = minisrv_config.config.unauthorized_url;
+ }
+ else if (request_headers.query.guest_login && minisrv_config.config.allow_guests) {
var namerand = Math.floor(Math.random() * 100000);
var nickname = (minisrv_config.config.service_name + '_' + namerand)
var human_name = nickname;
@@ -89,42 +92,66 @@ wtv-expire-all: client:closeallpanels
wtv-transition-override: off
wtv-force-lightweight-targets: webtv.net:/
wtv-smartcard-inserted-message: Contacting service
-wtv-bypass-proxy: false
+wtv-bypass-proxy: false`;
+ if (!ssid_sessions[socket.ssid].lockdown) {
+ headers += `
wtv-offline-user-list: ${offline_user_list}
wtv-messenger-authorized: ${messenger_authorized}
-wtv-messenger-enable: ${messenger_enabled}
+wtv-messenger-enable: ${messenger_enabled}`;
+ }
+ headers += `
wtv-noback-all: wtv-
wtv-service: reset
-`+ getServiceString('all', { "exceptions": ["wtv-register"] }) + `
+`;
+ if (!ssid_sessions[socket.ssid].lockdown) {
+ headers += getServiceString('all', { "exceptions": ["wtv-register"] });
+ } else {
+ headers += getServiceString('wtv-1800') + "\n";
+ headers += getServiceString('wtv-head-waiter') + "\n";
+ headers += getServiceString('wtv-star') + "\n";
+ }
+ headers += `
+wtv-ticket: ${wtvsec_login.ticket_b64}`;
+ if (!ssid_sessions[socket.ssid].lockdown) {
+ headers += `
user-id: ${userid}
wtv-human-name: ${human_name}
${ssid_sessions[socket.ssid].setIRCNick(nickname)}
-wtv-domain: wtv.zefie.com
-wtv-input-timeout: 14400
-wtv-ticket: ${wtvsec_login.ticket_b64}
+wtv-domain: ${minisrv_config.config.domain_name}
wtv-messagewatch-checktimeoffset: off
wtv-input-timeout: 14400
-wtv-connection-timeout: 90
-wtv-fader-timeout: 900
-wtv-smartcard-inserted-message: Contacting service
-wtv-inactive-timeout: 0
-wtv-connection-timeout: 90
-wtv-show-time-enabled: true
-wtv-fader-timeout: 900
-wtv-tourist-enabled: true`
+wtv-connection-timeout: 1440
+wtv-fader-timeout: 1440
+wtv-inactive-timeout: 1440`;
+ } else {
+ headers += `
+user-id: 0
+wtv-human-name: Unauthorized User
+wtv-domain: ${minisrv_config.config.domain_name}
+wtv-input-timeout: 30
+wtv-connection-timeout: 60
+wtv-fader-timeout: 60
+wtv-inactive-timeout: 60`;
+ }
+
headers += "\nwtv-relogin-url: wtv-head-waiter:/relogin?relogin=true";
if (request_headers.query.guest_login) headers += "&guest_login=true";
+
headers += "\nwtv-reconnect-url: wtv-head-waiter:/login-stage-two?reconnect=true";
if (request_headers.query.guest_login) headers += "&guest_login=true";
+
headers += "\nwtv-boot-url: wtv-head-waiter:/relogin?relogin=true";
if (request_headers.query.guest_login) headers += "&guest_login=true";
- headers += "\nwtv-allow-dsc: true";
- headers += "\nwtv-home-url: wtv-home:/home?";
- if (ssid_sessions[socket.ssid].get('wtv-need-upgrade') != 'true' && !request_headers.query.reconnect) {
+ if (!ssid_sessions[socket.ssid].lockdown) headers += "\nwtv-home-url: wtv-home:/home?";
+
+ if (ssid_sessions[socket.ssid].get('wtv-need-upgrade') != 'true' && !request_headers.query.reconnect && !ssid_sessions[socket.ssid].lockdown)
headers += "\nwtv-settings-url: wtv-setup:/get";
- }
+
headers += `
+wtv-show-time-enabled: true
+wtv-allow-dsc: true
+wtv-tourist-enabled: true
wtv-log-url: wtv-log:/log
wtv-ssl-log-url: wtv-log:/log
wtv-ssl-timeout: 240
diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get.js b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get.js
index b8c2fd1d..03bea6ce 100644
--- a/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get.js
+++ b/zefie_wtvp_minisrv/ServiceVault/wtv-setup/get.js
@@ -1,31 +1,41 @@
var minisrv_service_file = true;
-var settings_obj = ssid_sessions[socket.ssid].getSessionData("wtv-setup");
-if (settings_obj === null) settings_obj = {};
+if (ssid_sessions[socket.ssid].lockdown) {
+ headers = `200 OK
+wtv-printer-model: -1,-1
+wtv-printer-pen: 0,0,1,0
+wtv-printer-setup: 0,0,1,0
+wtv-language-header: en-US,en
+Content-Type: text/html`;
+ data = "";
+} else {
-settings_obj["from-server"] = 1;
+ var settings_obj = ssid_sessions[socket.ssid].getSessionData("wtv-setup");
+ if (settings_obj === null) settings_obj = {};
-// defaults
-if (!settings_obj["setup-advanced-options"]) settings_obj["setup-advanced-options"] = 0;
-if (!settings_obj["setup-play-bgm"]) settings_obj["setup-play-bgm"] = 0;
-if (!settings_obj["setup-bgm-tempo"]) settings_obj["setup-bgm-tempo"] = -1;
-if (!settings_obj["setup-bgm-volume"]) settings_obj["setup-bgm-volume"] = 100;
-if (!settings_obj["setup-background-color"]) settings_obj["setup-background-color"] = "c6c6c6";
-if (!settings_obj["setup-font-sizes"]) settings_obj["setup-font-sizes"] = "medium";
-if (!settings_obj["setup-in-stereo"]) settings_obj["setup-in-stereo"] = 1;
-if (!settings_obj["setup-keyboard"]) settings_obj["setup-keyboard"] = "alphabetical";
-if (!settings_obj["setup-link-color"]) settings_obj["setup-link-color"] = "2222bb";
-if (!settings_obj["setup-play-songs"]) settings_obj["setup-play-songs"] = 1;
-if (!settings_obj["setup-play-sounds"]) settings_obj["setup-play-sounds"] = 1;
-if (!settings_obj["setup-text-color"]) settings_obj["setup-text-color"] = 0;
-if (!settings_obj["setup-visited-color"]) settings_obj["setup-visited-color"] = "8822bb";
-if (!settings_obj["setup-japan-keyboard"]) settings_obj["setup-japan-keyboard"] = "roman";
-if (!settings_obj["setup-japan-softkeyboard"]) settings_obj["setup-japan-softkeyboard"] = "roman"
-if (!settings_obj["setup-chat-access-level"]) settings_obj["setup-chat-access-level"] = 0;
-if (!settings_obj["setup-chat-on-nontrusted-pages"]) settings_obj["setup-chat-on-nontrusted-pages"] = 1;
-if (!settings_obj["setup-tv-chat-level"]) settings_obj["setup-tv-chat-level"] = 2;
+ settings_obj["from-server"] = 1;
-headers = `200 OK
+ // defaults
+ if (!settings_obj["setup-advanced-options"]) settings_obj["setup-advanced-options"] = 0;
+ if (!settings_obj["setup-play-bgm"]) settings_obj["setup-play-bgm"] = 0;
+ if (!settings_obj["setup-bgm-tempo"]) settings_obj["setup-bgm-tempo"] = -1;
+ if (!settings_obj["setup-bgm-volume"]) settings_obj["setup-bgm-volume"] = 100;
+ if (!settings_obj["setup-background-color"]) settings_obj["setup-background-color"] = "c6c6c6";
+ if (!settings_obj["setup-font-sizes"]) settings_obj["setup-font-sizes"] = "medium";
+ if (!settings_obj["setup-in-stereo"]) settings_obj["setup-in-stereo"] = 1;
+ if (!settings_obj["setup-keyboard"]) settings_obj["setup-keyboard"] = "alphabetical";
+ if (!settings_obj["setup-link-color"]) settings_obj["setup-link-color"] = "2222bb";
+ if (!settings_obj["setup-play-songs"]) settings_obj["setup-play-songs"] = 1;
+ if (!settings_obj["setup-play-sounds"]) settings_obj["setup-play-sounds"] = 1;
+ if (!settings_obj["setup-text-color"]) settings_obj["setup-text-color"] = 0;
+ if (!settings_obj["setup-visited-color"]) settings_obj["setup-visited-color"] = "8822bb";
+ if (!settings_obj["setup-japan-keyboard"]) settings_obj["setup-japan-keyboard"] = "roman";
+ if (!settings_obj["setup-japan-softkeyboard"]) settings_obj["setup-japan-softkeyboard"] = "roman"
+ if (!settings_obj["setup-chat-access-level"]) settings_obj["setup-chat-access-level"] = 0;
+ if (!settings_obj["setup-chat-on-nontrusted-pages"]) settings_obj["setup-chat-on-nontrusted-pages"] = 1;
+ if (!settings_obj["setup-tv-chat-level"]) settings_obj["setup-tv-chat-level"] = 2;
+
+ headers = `200 OK
wtv-backgroundmusic-load-playlist: wtv-setup:/get-playlist
wtv-printer-model: -1,-1
wtv-printer-pen: 0,0,1,0
@@ -33,10 +43,11 @@ wtv-printer-setup: 0,0,1,0
wtv-language-header: en-US,en
Content-Type: text/html`;
-data = "";
+ data = "";
-Object.keys(settings_obj).forEach(function (k, v) {
- data += k + "=" + escape(settings_obj[k]) + "&";
-});
+ Object.keys(settings_obj).forEach(function (k, v) {
+ data += k + "=" + escape(settings_obj[k]) + "&";
+ });
-data = data.substring(0, (data.length - 1));
\ No newline at end of file
+ data = data.substring(0, (data.length - 1));
+}
\ No newline at end of file
diff --git a/zefie_wtvp_minisrv/WTVClientSessionData.js b/zefie_wtvp_minisrv/WTVClientSessionData.js
index cd522520..f3ca63ef 100644
--- a/zefie_wtvp_minisrv/WTVClientSessionData.js
+++ b/zefie_wtvp_minisrv/WTVClientSessionData.js
@@ -14,6 +14,10 @@ class WTVClientSessionData {
minisrv_config = [];
wtvshared = null;
wtvmime = null;
+ lockdown = null;
+ lockdownReason = null;
+ lockdownWhitelist = null;
+ clientAddress = null;
constructor(minisrv_config, ssid) {
if (!minisrv_config) throw ("minisrv_config required");
@@ -22,10 +26,19 @@ class WTVClientSessionData {
this.minisrv_config = minisrv_config;
this.wtvshared = new WTVShared(minisrv_config);
this.wtvmime = new WTVMime(minisrv_config);
-
+ this.lockdown = false;
this.ssid = ssid;
this.data_store = new Array();
this.session_store = {};
+ this.lockdownWhitelist = [
+ "wtv-1800:/preregister",
+ "wtv-head-waiter:/login",
+ "wtv-head-waiter:/relogin",
+ "wtv-head-waiter:/login-stage-two",
+ "wtv-head-waiter:/bad-disk",
+ "wtv-log:/log"
+ ];
+ this.lockdownWhitelist.push(minisrv_config.config.unauthorized_url);
}
/**
@@ -393,6 +406,159 @@ class WTVClientSessionData {
if (key === null) throw ("ClientSessionData.delete(): invalid key provided");
delete this.data_store[key];
}
+
+ getBoxName() {
+ switch (this.get("wtv-client-rom-type")) {
+ case "US-DTV-disk-0MB-16MB-softmodem-CPU5230":
+ case "US-DTV-disk-0MB-32MB-softmodem-CPU5230":
+ return "UltimateTV Satellite receiver";
+
+ case "US-WEBSTAR-disk-0MB-8MB-softmodem-CPU5230":
+ case "US-WEBSTAR-disk-0MB-16MB-softmodem-CPU5230":
+ return "WebTV Satellite receiver";
+
+ case "US-LC2-flashdisk-0MB-16MB-softmodem-CPU5230":
+ case "US-LC2-disk-0MB-8MB":
+ case "US-LC2-flash-2MB-8MB":
+ case "JP-LC2-disk-0MB-8MB":
+ case "JP-LC2-flash-2MB-8MB":
+ case "US-LC2-disk-0MB-8MB-softmodem-CPU5230":
+ case "US-LC2-flash-2MB-8MB-softmodem-CPU5230 ":
+ case "US-LC2-disk-0MB-8MB-CPU5230":
+ case "US-LC2-flash-2MB-8MB-CPU5230":
+ case "JP-LC2-disk-0MB-8MB-CPU5230":
+ case "JP-LC2-disk-0MB-16MB-CPU5230":
+ case "JP-LC2-flash-2MB-8MB-CPU5230":
+ return "WebTV Plus receiver";
+
+ default:
+ return "WebTV Internet receiver";
+ }
+ }
+
+ checkSecurity() {
+ var self = this;
+ var rejectReason = null;
+ var ip2long = function (ip) {
+ var components;
+
+ if (components = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) {
+ var iplong = 0;
+ var power = 1;
+ for (var i = 4; i >= 1; i -= 1) {
+ iplong += power * parseInt(components[i]);
+ power *= 256;
+ }
+ return iplong;
+ }
+ else return -1;
+ };
+
+ var isInSubnet = function (ip, subnet) {
+ var mask, base_ip, long_ip = ip2long(ip);
+ if ((mask = subnet.match(/^(.*?)\/(\d{1,2})$/)) && ((base_ip = ip2long(mask[1])) >= 0)) {
+ var freedom = Math.pow(2, 32 - parseInt(mask[2]));
+ return (long_ip > base_ip) && (long_ip < base_ip + freedom - 1);
+ }
+ else return false;
+ };
+
+ var rejectSSIDConnection = function (blacklist) {
+ if (blacklist) {
+ rejectReason = self.ssid + " is in the blacklist.";
+ console.log(" * Request from SSID", self.wtvshared.filterSSID(self.ssid), "(" + self.clientAddress + "), but that SSID is in the blacklist.");
+ } else {
+ rejectReason = self.ssid + " is not in the whitelist.";
+ console.log(" * Request from SSID", self.wtvshared.filterSSID(self.ssid), "(" + self.clientAddress + "), but that SSID is not in the whitelist.");
+ }
+ }
+
+ var checkSSIDIPWhitelist = function (ssid, blacklist) {
+ var ssid_access_list_ip_override = false;
+ if (self.minisrv_config.config.ssid_ip_allow_list) {
+ if (self.minisrv_config.config.ssid_ip_allow_list[self.ssid]) {
+ Object.keys(self.minisrv_config.config.ssid_ip_allow_list[self.ssid]).forEach(function (k) {
+ if (self.minisrv_config.config.ssid_ip_allow_list[self.ssid][k].indexOf('/') > 0) {
+ if (isInSubnet(self.clientAddress, self.minisrv_config.config.ssid_ip_allow_list[self.ssid][k])) {
+ // remoteAddr is in allowed subnet
+ ssid_access_list_ip_override = true;
+ }
+ } else {
+ if (self.clientAddress == self.minisrv_config.config.ssid_ip_allow_list[self.ssid][k]) {
+ // remoteAddr directly matches IP
+ ssid_access_list_ip_override = true;
+ }
+ }
+ });
+ if (!ssid_access_list_ip_override) rejectSSIDConnection(self.ssid, blacklist);
+ } else {
+ rejectSSIDConnection(blacklist);
+ }
+ } else {
+ rejectSSIDConnection(blacklist);
+ }
+ if (ssid_access_list_ip_override && self.minisrv_config.config.debug_flags.debug) console.log(" * Request from disallowed SSID", wtvshared.filterSSID(ssid), "was allowed due to IP address whitelist");
+ }
+
+ // process whitelist first
+ if (self.ssid && self.minisrv_config.config.ssid_allow_list) {
+ var ssid_is_in_whitelist = self.minisrv_config.config.ssid_allow_list.findIndex(element => element == self.ssid);
+ if (ssid_is_in_whitelist == -1) {
+ // no whitelist match, but lets see if the remoteAddress is allowed
+ checkSSIDIPWhitelist(self.ssid, false);
+ }
+ }
+
+ // now check blacklist
+ if (self.ssid && self.minisrv_config.config.ssid_block_list) {
+ var ssid_is_in_blacklist = self.minisrv_config.config.ssid_block_list.findIndex(element => element == self.ssid);
+ if (ssid_is_in_blacklist != -1) {
+ // blacklist match, but lets see if the remoteAddress is allowed
+ checkSSIDIPWhitelist(self.ssid, true);
+ }
+ }
+ if (rejectReason === null) {
+ // Passed Security
+ return true;
+ } else {
+ // Failed security
+ this.enableLockdown(rejectReason);
+ return false;
+ }
+ }
+
+
+ isAuthorized(url) {
+ // not in lockdown so just return true
+ if (!this.lockdown) return true;
+
+ // in lockdown, check whitelisted urls
+ var self = this;
+ var authorized = false;
+ Object.keys(this.lockdownWhitelist).forEach(function (k) {
+ if (self.lockdownWhitelist[k].substring(0, url.length) == url) authorized = true;
+ });
+ return authorized;
+ }
+
+ enableLockdown(reason) {
+ this.lockdown = true;
+ this.lockdownReason = reason;
+ }
+
+ disableLockdown() {
+ this.lockdown = false;
+ this.lockdownReason = null;
+ }
+
+ setClientAddress(addr) {
+ this.clientAddress = addr;
+ }
+
+ getClientAddress() {
+ return this.clientAddress;
+ }
+
}
module.exports = WTVClientSessionData;
\ No newline at end of file
diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js
index 6b1c3841..2e16041f 100644
--- a/zefie_wtvp_minisrv/app.js
+++ b/zefie_wtvp_minisrv/app.js
@@ -297,6 +297,7 @@ async function processURL(socket, request_headers) {
} else {
shortURL = unescape(request_headers.request_url);
}
+
if (request_headers['wtv-request-type']) socket_sessions[socket.id].wtv_request_type = request_headers['wtv-request-type'];
if (request_headers.post_data) {
@@ -361,6 +362,23 @@ async function processURL(socket, request_headers) {
}
}
}
+ // check security
+ if (!ssid_sessions[socket.ssid].isAuthorized(shortURL)) {
+ // lockdown mode and URL not authorized
+ //socket_sessions[socket.id].close_me = true;
+ headers = "300 Unauthorized\n";
+ headers += "Location: " + minisrv_config.config.unauthorized_url + "\n";
+ data = "";
+ sendToClient(socket, headers, data);
+ console.log(" * Lockdown rejected request for " + shortURL + " on socket ID", socket.id);
+ return;
+ }
+
+ if (ssid_sessions[socket.ssid].get("wtv-my-disk-sucks-sucks-sucks")) {
+ // psuedo lockdown, will unlock on the disk warning page, but prevents minisrv access until they read the error
+ ssid_sessions[socket.ssid].lockdown = true;
+ }
+
if (shortURL.indexOf(':/') >= 0 && shortURL.indexOf('://') < 0) {
var ssid = socket.ssid;
@@ -840,101 +858,6 @@ function moveObjectElement(currentKey, afterKey, obj) {
if (next !== -1) return result; else return obj;
}
-function checkSecurity(socket) {
- var out = null;
- var ip2long = function (ip) {
- var components;
-
- if (components = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) {
- var iplong = 0;
- var power = 1;
- for (var i = 4; i >= 1; i -= 1) {
- iplong += power * parseInt(components[i]);
- power *= 256;
- }
- return iplong;
- }
- else return -1;
- };
-
- var isInSubnet = function (ip, subnet) {
- var mask, base_ip, long_ip = ip2long(ip);
- if ((mask = subnet.match(/^(.*?)\/(\d{1,2})$/)) && ((base_ip = ip2long(mask[1])) >= 0)) {
- var freedom = Math.pow(2, 32 - parseInt(mask[2]));
- return (long_ip > base_ip) && (long_ip < base_ip + freedom - 1);
- }
- else return false;
- };
-
- var rejectSSIDConnection = function (ssid, blacklist) {
- var rejectReason = null;
- if (blacklist) {
- rejectReason = ssid + " is in the blacklist.";
- console.log(" * Request from SSID", wtvshared.filterSSID(ssid), "(" + socket.remoteAddress + "), but that SSID is in the blacklist, rejecting.");
- } else {
- rejectReason = ssid + " is not in the whitelist.";
- console.log(" * Request from SSID", wtvshared.filterSSID(socket.ssid), "(" + socket.remoteAddress + "), but that SSID is not in the whitelist, rejecting.");
- }
- if (fs.existsSync(__dirname + '/ServiceDeps/TOS.html')) {
- var tosErrorPage = fs.readFileSync(__dirname + '/ServiceDeps/TOS.html').toString();
- out = new Array(`200 Goodbye
-wtv-service: reset
-Connection: close
-Content-type: text/html`, tosErrorPage.replace('\$\{REASON\}', rejectReason));
- } else {
- var errpage = wtvshared.doErrorPage(401, "Access to this service is denied.");
- out = errpage;
- }
- }
-
- var checkSSIDIPWhitelist = function (ssid, blacklist) {
- var ssid_access_list_ip_override = false;
- if (minisrv_config.config.ssid_ip_allow_list) {
- if (minisrv_config.config.ssid_ip_allow_list[socket.ssid]) {
- Object.keys(minisrv_config.config.ssid_ip_allow_list[socket.ssid]).forEach(function (k) {
- if (minisrv_config.config.ssid_ip_allow_list[socket.ssid][k].indexOf('/') > 0) {
- if (isInSubnet(socket.remoteAddress, minisrv_config.config.ssid_ip_allow_list[socket.ssid][k])) {
- // remoteAddr is in allowed subnet
- ssid_access_list_ip_override = true;
- }
- } else {
- if (socket.remoteAddress == minisrv_config.config.ssid_ip_allow_list[socket.ssid][k]) {
- // remoteAddr directly matches IP
- ssid_access_list_ip_override = true;
- }
- }
- });
- if (!ssid_access_list_ip_override) rejectSSIDConnection(socket.ssid, blacklist);
- } else {
- rejectSSIDConnection(socket.ssid, blacklist);
- }
- } else {
- rejectSSIDConnection(socket.ssid, blacklist);
- }
- if (ssid_access_list_ip_override && minisrv_config.config.debug_flags.debug) console.log(" * Request from disallowed SSID", wtvshared.filterSSID(ssid), "was allowed due to IP address whitelist");
- }
-
- // process whitelist first
- if (socket.ssid && minisrv_config.config.ssid_allow_list) {
- var ssid_is_in_whitelist = minisrv_config.config.ssid_allow_list.findIndex(element => element == socket.ssid);
- if (ssid_is_in_whitelist == -1) {
- // no whitelist match, but lets see if the remoteAddress is allowed
- checkSSIDIPWhitelist(socket.ssid, false);
- }
- }
-
- // now check blacklist
- if (socket.ssid && minisrv_config.config.ssid_block_list) {
- var ssid_is_in_blacklist = minisrv_config.config.ssid_block_list.findIndex(element => element == socket.ssid);
- if (ssid_is_in_blacklist != -1) {
- // blacklist match, but lets see if the remoteAddress is allowed
- checkSSIDIPWhitelist(socket.ssid, true);
- }
- }
-
- // Passed Security
- return out;
-}
function isUnencryptedString(string, verbose = false) {
// a generic "isAscii" check is not sufficient, as the test will see the binary
@@ -1019,19 +942,12 @@ async function processRequest(socket, data_hex, skipSecure = false, encryptedReq
ssid_sessions[socket.ssid].SaveIfRegistered();
}
if (!ssid_sessions[socket.ssid].data_store.sockets) ssid_sessions[socket.ssid].data_store.sockets = new Set();
- ssid_sessions[socket.ssid].ssid = socket.ssid;
ssid_sessions[socket.ssid].data_store.sockets.add(socket);
}
}
- var failed_security = checkSecurity(socket);
- if (failed_security) {
- socket_sessions[socket.id].close_me = true;
- headers = failed_security[0];
- data = failed_security[1];
- sendToClient(socket, headers, data);
- return;
- }
+ if (!ssid_sessions[socket.ssid].getClientAddress()) ssid_sessions[socket.ssid].setClientAddress(socket.remoteAddress);
+ ssid_sessions[socket.ssid].checkSecurity();
if (headers["wtv-capability-flags"] != null) {
if (!ssid_sessions[socket.ssid]) {
diff --git a/zefie_wtvp_minisrv/config.json b/zefie_wtvp_minisrv/config.json
index 2cc09363..03540afa 100644
--- a/zefie_wtvp_minisrv/config.json
+++ b/zefie_wtvp_minisrv/config.json
@@ -24,7 +24,9 @@
"pc_server_hidden_service_enabled": false,
"show_detailed_splash": true,
"show_diskmap": false,
- "allow_guests": true
+ "unauthorized_url": "wtv-1800:/unauthorized?",
+ "allow_guests": true,
+ "domain_name": "wtv.zefie.com"
},
"services": {
"wtv-head-waiter": {
diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj
index 3ee4d12d..7fa8312b 100644
--- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj
+++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj
@@ -38,7 +38,6 @@
+
+
+