mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 21:27:40 +00:00
Renamed InstructionStream -> Outbound, using single unified tunnel package, removed XMLGuacamoleServlet
This commit is contained in:
@@ -1,132 +0,0 @@
|
|||||||
|
|
||||||
package net.sourceforge.guacamole.net;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Guacamole - Clientless Remote Desktop
|
|
||||||
* Copyright (C) 2010 Michael Jumper
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import javax.servlet.ServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import javax.xml.transform.OutputKeys;
|
|
||||||
import javax.xml.transform.Transformer;
|
|
||||||
import javax.xml.transform.TransformerConfigurationException;
|
|
||||||
import javax.xml.transform.TransformerException;
|
|
||||||
import javax.xml.transform.TransformerFactory;
|
|
||||||
import javax.xml.transform.dom.DOMSource;
|
|
||||||
import javax.xml.transform.stream.StreamResult;
|
|
||||||
import net.sourceforge.guacamole.Client;
|
|
||||||
import net.sourceforge.guacamole.GuacamoleException;
|
|
||||||
import org.w3c.dom.Document;
|
|
||||||
import org.w3c.dom.Element;
|
|
||||||
|
|
||||||
public abstract class XMLGuacamoleServlet extends GuacamoleServlet {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected final void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
|
|
||||||
|
|
||||||
response.setContentType("text/xml");
|
|
||||||
response.setHeader("Cache-Control", "no-store");
|
|
||||||
response.setHeader("Pragma", "no-cache");
|
|
||||||
response.setDateHeader("Expires", 0);
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
// Create document
|
|
||||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
|
||||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
|
||||||
Document document = documentBuilder.newDocument();
|
|
||||||
|
|
||||||
// Root element
|
|
||||||
Element root = document.createElement("guacamole");
|
|
||||||
document.appendChild(root);
|
|
||||||
|
|
||||||
try {
|
|
||||||
handleRequest(session, request, root);
|
|
||||||
}
|
|
||||||
catch (Throwable t) {
|
|
||||||
addFatalError(root, t.getMessage());
|
|
||||||
|
|
||||||
// FATAL error ... try to disconnect
|
|
||||||
if (session != null) {
|
|
||||||
Client client = session.getClient();
|
|
||||||
try {
|
|
||||||
if (client != null)
|
|
||||||
client.disconnect();
|
|
||||||
}
|
|
||||||
catch (GuacamoleException e) {
|
|
||||||
addFatalError(root, e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set up transformer
|
|
||||||
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
|
||||||
Transformer transformer = transformerFactory.newTransformer();
|
|
||||||
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
|
||||||
//transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
|
|
||||||
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
|
|
||||||
|
|
||||||
// Write XML using transformer
|
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
||||||
StreamResult result = new StreamResult(bos);
|
|
||||||
DOMSource source = new DOMSource(document);
|
|
||||||
transformer.transform(source, result);
|
|
||||||
|
|
||||||
|
|
||||||
bos.flush();
|
|
||||||
|
|
||||||
byte[] xmlData = bos.toByteArray();
|
|
||||||
response.setContentLength(xmlData.length);
|
|
||||||
OutputStream outputStream = response.getOutputStream();
|
|
||||||
outputStream.write(xmlData);
|
|
||||||
|
|
||||||
// Close stream
|
|
||||||
outputStream.close();
|
|
||||||
}
|
|
||||||
catch (ParserConfigurationException e) {
|
|
||||||
throw new GuacamoleException(e);
|
|
||||||
}
|
|
||||||
catch (TransformerConfigurationException e) {
|
|
||||||
throw new GuacamoleException(e);
|
|
||||||
}
|
|
||||||
catch (TransformerException e) {
|
|
||||||
throw new GuacamoleException(e);
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
throw new GuacamoleException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addFatalError(Element root, String message) {
|
|
||||||
Element error = root.getOwnerDocument().createElement("error");
|
|
||||||
error.setAttribute("type", "fatal");
|
|
||||||
error.setTextContent(message);
|
|
||||||
root.appendChild(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract void handleRequest(GuacamoleSession session, ServletRequest request, Element root) throws GuacamoleException;
|
|
||||||
|
|
||||||
}
|
|
@@ -1,4 +1,4 @@
|
|||||||
package net.sourceforge.guacamole.net.input;
|
package net.sourceforge.guacamole.net.tunnel;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Guacamole - Clientless Remote Desktop
|
* Guacamole - Clientless Remote Desktop
|
||||||
@@ -18,24 +18,24 @@ package net.sourceforge.guacamole.net.input;
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import javax.servlet.ServletRequest;
|
|
||||||
import net.sourceforge.guacamole.GuacamoleException;
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
import org.w3c.dom.Element;
|
|
||||||
|
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import net.sourceforge.guacamole.net.GuacamoleServlet;
|
||||||
|
|
||||||
import net.sourceforge.guacamole.net.GuacamoleSession;
|
import net.sourceforge.guacamole.net.GuacamoleSession;
|
||||||
import net.sourceforge.guacamole.net.XMLGuacamoleServlet;
|
|
||||||
|
|
||||||
public class Inbound extends XMLGuacamoleServlet {
|
public class Inbound extends GuacamoleServlet {
|
||||||
|
|
||||||
protected boolean shouldCreateSession() {
|
protected boolean shouldCreateSession() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleRequest(GuacamoleSession session, ServletRequest request, Element root) throws GuacamoleException {
|
protected void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
|
||||||
|
|
||||||
if (!session.isConnected())
|
if (!session.isConnected())
|
||||||
session.connect();
|
session.connect();
|
@@ -1,4 +1,4 @@
|
|||||||
package net.sourceforge.guacamole.net.output;
|
package net.sourceforge.guacamole.net.tunnel;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Guacamole - Clientless Remote Desktop
|
* Guacamole - Clientless Remote Desktop
|
||||||
@@ -30,7 +30,7 @@ import net.sourceforge.guacamole.GuacamoleException;
|
|||||||
import net.sourceforge.guacamole.net.GuacamoleSession;
|
import net.sourceforge.guacamole.net.GuacamoleSession;
|
||||||
|
|
||||||
|
|
||||||
public class InstructionStream extends GuacamoleServlet {
|
public class Outbound extends GuacamoleServlet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
|
protected void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
|
2
guacamole/web-client/web/META-INF/context.xml
Normal file
2
guacamole/web-client/web/META-INF/context.xml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Context antiJARLocking="true" path=""/>
|
@@ -17,52 +17,39 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
-->
|
-->
|
||||||
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
|
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
|
||||||
|
|
||||||
<!-- Basic config -->
|
<!-- Basic config -->
|
||||||
|
|
||||||
<welcome-file-list>
|
<welcome-file-list>
|
||||||
<welcome-file>index.html</welcome-file>
|
<welcome-file>index.html</welcome-file>
|
||||||
</welcome-file-list>
|
</welcome-file-list>
|
||||||
|
|
||||||
<session-config>
|
<session-config>
|
||||||
<session-timeout>
|
<session-timeout>
|
||||||
30
|
30
|
||||||
</session-timeout>
|
</session-timeout>
|
||||||
</session-config>
|
</session-config>
|
||||||
|
|
||||||
<!-- Servlets -->
|
<!-- Servlets -->
|
||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
<description>Instruction stream servlet.</description>
|
<description>Outbound servlet.</description>
|
||||||
<servlet-name>InstructionStream</servlet-name>
|
<servlet-name>Outbound</servlet-name>
|
||||||
<servlet-class>net.sourceforge.guacamole.net.output.InstructionStream</servlet-class>
|
<servlet-class>net.sourceforge.guacamole.net.tunnel.Outbound</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>InstructionStream</servlet-name>
|
<servlet-name>Outbound</servlet-name>
|
||||||
<url-pattern>/instructions</url-pattern>
|
<url-pattern>/outbound</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
<description>Input servlet.</description>
|
<description>Input servlet.</description>
|
||||||
<servlet-name>Inbound</servlet-name>
|
<servlet-name>Inbound</servlet-name>
|
||||||
<servlet-class>net.sourceforge.guacamole.net.input.Inbound</servlet-class>
|
<servlet-class>net.sourceforge.guacamole.net.tunnel.Inbound</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>Inbound</servlet-name>
|
<servlet-name>Inbound</servlet-name>
|
||||||
<url-pattern>/inbound</url-pattern>
|
<url-pattern>/inbound</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
<security-constraint>
|
|
||||||
<display-name>Guacamole Access Restrictions</display-name>
|
|
||||||
<web-resource-collection>
|
|
||||||
<web-resource-name>Guacamole</web-resource-name>
|
|
||||||
<description>All servlets/pages within Guacamole.</description>
|
|
||||||
<url-pattern>/*</url-pattern>
|
|
||||||
</web-resource-collection>
|
|
||||||
<auth-constraint>
|
|
||||||
<description>Only allow Guacamole users access.</description>
|
|
||||||
<role-name>guacamole</role-name>
|
|
||||||
</auth-constraint>
|
|
||||||
</security-constraint>
|
|
||||||
<login-config>
|
|
||||||
<auth-method>BASIC</auth-method>
|
|
||||||
<realm-name>Guacamole</realm-name>
|
|
||||||
</login-config>
|
|
||||||
<security-role>
|
|
||||||
<description>Guacamole</description>
|
|
||||||
<role-name>guacamole</role-name>
|
|
||||||
</security-role>
|
|
||||||
</web-app>
|
</web-app>
|
||||||
|
@@ -380,7 +380,7 @@ function GuacamoleClient(display) {
|
|||||||
|
|
||||||
// Download self
|
// Download self
|
||||||
var xmlhttprequest = new XMLHttpRequest();
|
var xmlhttprequest = new XMLHttpRequest();
|
||||||
xmlhttprequest.open("POST", "instructions");
|
xmlhttprequest.open("POST", "outbound");
|
||||||
xmlhttprequest.send(null);
|
xmlhttprequest.send(null);
|
||||||
|
|
||||||
return xmlhttprequest;
|
return xmlhttprequest;
|
||||||
|
Reference in New Issue
Block a user