From 5d169b9bbe56a641050583d689e519d53911b743 Mon Sep 17 00:00:00 2001
From: ree <>
Date: Sun, 3 Jul 2011 00:32:08 +0000
Subject: [PATCH] Combined the two policy servers

---
 exec/flashpolicyserver.js | 92 +++++++++++++++++----------------------
 1 file changed, 39 insertions(+), 53 deletions(-)

diff --git a/exec/flashpolicyserver.js b/exec/flashpolicyserver.js
index c35ebeb7c1..9ff0ce3229 100644
--- a/exec/flashpolicyserver.js
+++ b/exec/flashpolicyserver.js
@@ -6,10 +6,14 @@ Flash Policy Server
 by Shawn Rapp
 
 This is a service javascript addon that adds a Flash Policy Server to Synchronet BBS version 3 and later.
-This script was designed to support FlashTerm hosted on a Synchronet Website.
+This script was designed to support FlashTerm hosted on a Synchronet Website.  It will also support fTelnet,
+which is now available in the sbbs/web/root/ftelnet directory.
 
 Copy the file flashpolicyserver.js to your Synchronet's exec directory (example C:\sbbs\exec)
-Put the flashpolicy.xml to the ctrl directory (example C:\sbbs\ctrl)
+
+The server will allow flash clients to connect to the Telnet, RLogin (if enabled) and SSH (if enabled) ports.  
+If you want to allow additional ports, edit ctrl\modopts.ini and add them to the extra_ports line in the
+[flashpolicyserver] section.
 
 Now edit ctrl\services.ini 
 Goto Services->Configure and than click the button "Edit Services Configuration File"
@@ -24,67 +28,49 @@ Than add the bellow
 
 Restart Synchronet's Services server.
 
-Download http://www.flashterm.com/files/flashterm_full.zip
-Extract the files in a new directory web\html\flashterm (example C:\sbbs\web\html\flashterm)
+If you want to use FlashTerm instead of the fTelnet, download http://www.flashterm.com/files/flashterm_full.zip
+Extract the files in a new directory web\root\flashterm (example C:\sbbs\web\root\flashterm)
 Edit settings.xml to your settings.
 Now open a browser to your Synchronet's website and goto the \flashterm directory.
 Example http://thedhbbs.com/flashterm/
 
 ***/
 
-// Write a string to the client socket
-function write(str)
-{
-	client.socket.send(str);
-}
-
-function read_policy()
-{
-	f = new File("../ctrl/flashpolicy.xml");
-	if(!f.open("r")) 
-		return;
-	var txt = f.readAll().toString();
-	// txt.replace(/(\r|\n|\t|,)/g, ''); // Need commas to state multiple nonconsecutive to-ports. -echicken
-	txt = txt.replace(/(\r|\n|\t)/g, ''); // <-- echicken's modified version of above.
-	txt = txt.replace(/>,/g, '>'); // Commas between XML tags can be removed, though. -echicken
-	f.close();
-	return(txt);
-}
+load("ftelnethelper.js");
+var options = load("modopts.js", "flashpolicyserver");
 
+var InString = "";
+var ValidRequest = "<policy-file-request/>";
+var StartTime = time();
 
-terminator = false;
-request = "";
-//<policy-file-request/>
-
-while(client.socket.is_connected && !terminator)
-{
-	inByte = client.socket.recvBin(1);
-	inChar = String.fromCharCode(inByte);
-	// if((inByte == 0) || (inChar == " ") // Doesn't trap the null byte as sent by all flash clients (lightIRC in particular)
-	if((inByte == 0) || (inChar == " ") || inChar == String.fromCharCode(000)) // <-- echicken's modified version of above.
-	{
-		terminator = true;
-	}
-	else
-	{
-		request = request + inChar;
+while ((client.socket.is_connected) && (InString.indexOf(ValidRequest) === -1) && ((time() - StartTime) <= 5)) {
+	var Bytes = client.socket.poll(time() - StartTime);
+	if (Bytes > 0) {
+		InString += client.socket.recv(Bytes).replace(/\s/ig, ''); // In case they send <policy-file-request />
 	}
 }
-if(client.socket.is_connected == false)
-{
-	exit();
-}
 
-//request = client.socket.recv(22);
-
-request = truncsp(request);
-log(LOG_DEBUG, "client request: " + request);
-
-if(request == "<policy-file-request/>")
-{
-	policy = read_policy();
-	write(policy);
-	exit();
+if (InString.indexOf(ValidRequest) === -1) {
+	log(LOG_DEBUG, "Ignoring invalid socket policy file request: '" + InString + "'");
 } else {
-	exit();
+	log(LOG_DEBUG, "Answering valid socket policy file request");
+	if (client.socket.is_connected) {
+		client.socket.send('<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">');
+		client.socket.send('<cross-domain-policy>');
+		client.socket.send('<site-control permitted-cross-domain-policies="master-only"/>');
+		client.socket.send('<allow-access-from domain="*" to-ports="' + GetToPorts() + '" />');
+		client.socket.send('</cross-domain-policy>');
+	}
 }
+
+
+function GetToPorts() {
+	var Ports = GetTerminalServerPorts();
+	if (options.extra_ports !== undefined) {
+		var ExtraPorts = options.extra_ports.replace(/\s/ig, ''); // Flash doesn't seem to like spaces in the to-ports
+		if (ExtraPorts !== "") {
+			Ports += "," + ExtraPorts
+		}
+	}
+	return Ports;
+}
\ No newline at end of file
-- 
GitLab