diff --git a/pom.xml b/pom.xml index 13baeb4..4cd5718 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,24 @@ ${commons-io.version} + + + + javax.servlet + servlet-api + 2.5 + provided + + + + + org.apache.guacamole + guacamole-common + 1.4.0 + compile + + + diff --git a/src/main/java/net/educoder/bridge/webssh/config/SimpleCORSFilter.java b/src/main/java/net/educoder/bridge/webssh/config/SimpleCORSFilter.java new file mode 100644 index 0000000..e3a3486 --- /dev/null +++ b/src/main/java/net/educoder/bridge/webssh/config/SimpleCORSFilter.java @@ -0,0 +1,34 @@ +package net.educoder.bridge.webssh.config; + +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +public class SimpleCORSFilter implements Filter { + + @Override + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { + HttpServletRequest reqs = (HttpServletRequest) req; + String curOrigin = reqs.getHeader("Origin"); + HttpServletResponse response = (HttpServletResponse) res; + response.setHeader("Access-Control-Allow-Origin", curOrigin == null ? "true" : curOrigin); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With"); + response.setHeader("Content-Type","application/octet-stream"); + chain.doFilter(req, res); + + } + + @Override + public void init(FilterConfig filterConfig) {} + + @Override + public void destroy() {} + +} \ No newline at end of file diff --git a/src/main/java/net/educoder/bridge/webssh/config/WebSocketAutoConfig.java b/src/main/java/net/educoder/bridge/webssh/config/WebSocketAutoConfig.java new file mode 100644 index 0000000..39da7b9 --- /dev/null +++ b/src/main/java/net/educoder/bridge/webssh/config/WebSocketAutoConfig.java @@ -0,0 +1,17 @@ +package net.educoder.bridge.webssh.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + + +@Configuration +public class WebSocketAutoConfig { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + + +} diff --git a/src/main/java/net/educoder/bridge/webssh/controller/WebSocketTunnel.java b/src/main/java/net/educoder/bridge/webssh/controller/WebSocketTunnel.java new file mode 100644 index 0000000..364371a --- /dev/null +++ b/src/main/java/net/educoder/bridge/webssh/controller/WebSocketTunnel.java @@ -0,0 +1,43 @@ +package net.educoder.bridge.webssh.controller; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.net.GuacamoleSocket; +import org.apache.guacamole.net.GuacamoleTunnel; +import org.apache.guacamole.net.InetGuacamoleSocket; +import org.apache.guacamole.net.SimpleGuacamoleTunnel; +import org.apache.guacamole.protocol.ConfiguredGuacamoleSocket; +import org.apache.guacamole.protocol.GuacamoleConfiguration; +import org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint; +import org.springframework.stereotype.Component; + +import javax.websocket.EndpointConfig; +import javax.websocket.Session; +import javax.websocket.server.ServerEndpoint; + +@ServerEndpoint(value = "/webSocket", subprotocols = "guacamole") +@Component +public class WebSocketTunnel extends GuacamoleWebSocketTunnelEndpoint { + @Override + protected GuacamoleTunnel createTunnel(Session session, EndpointConfig endpointConfig) throws GuacamoleException { + + String hostname = "121.40.224.66"; + int port = 54482; + + GuacamoleConfiguration config = new GuacamoleConfiguration(); + config.setProtocol("rdp"); + config.setParameter("hostname", "39.105.62.120"); + config.setParameter("port", "40045"); + config.setParameter("username", "Administrator"); + config.setParameter("password", "Edu_123123"); + config.setParameter("security", "nla"); + config.setParameter("ignore-cert", "true"); + + GuacamoleSocket socket = new ConfiguredGuacamoleSocket( + new InetGuacamoleSocket(hostname, port), + config + ); + + GuacamoleTunnel tunnel = new SimpleGuacamoleTunnel(socket); + return tunnel; + } +}