forked from shaba/openuds
* Passed credential stuff to a simple HTTP request to UDS to get connection properties.
This commit is contained in:
parent
6aa67c80a3
commit
a319f82e64
@ -1,67 +0,0 @@
|
|||||||
package org.openuds.guacamole;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
|
||||||
import javax.servlet.http.HttpServlet;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import org.openuds.guacamole.creds.Credentials;
|
|
||||||
|
|
||||||
public class CredentialsServlet extends HttpServlet {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 8321644141165009209L;
|
|
||||||
private static final String UUID_ERROR = "ERROR: Invalid UUID";
|
|
||||||
private static final String PARAMS_ERROR = "ERROR: Invalid Credentials Parameters";
|
|
||||||
private static final String OK = "OK";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
|
|
||||||
throws ServletException, IOException {
|
|
||||||
processCredentials(req, resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
|
|
||||||
throws ServletException, IOException {
|
|
||||||
processCredentials(req, resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processCredentials(HttpServletRequest req, HttpServletResponse resp)
|
|
||||||
throws ServletException, IOException {
|
|
||||||
|
|
||||||
resp.setContentType("text/plain");
|
|
||||||
PrintWriter out = resp.getWriter();
|
|
||||||
|
|
||||||
String uuid = req.getParameter("uuid");
|
|
||||||
String cred = req.getParameter("credential");
|
|
||||||
String data = req.getParameter("data");
|
|
||||||
|
|
||||||
if( req.getParameter("test") != null && uuid != null ) {
|
|
||||||
if( Credentials.test(uuid) == false )
|
|
||||||
out.println(UUID_ERROR);
|
|
||||||
else
|
|
||||||
out.println(OK);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( uuid == null || cred == null || data == null ) {
|
|
||||||
out.println(PARAMS_ERROR);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test url:
|
|
||||||
// /creds?uuid=f070f721-15ea-44a9-8df1-b9480991989c&credential=12345&data=protocol%09rdp%0ahostname%09w7adolfo%0ausername%09admin%0apassword%09temporal
|
|
||||||
|
|
||||||
if( Credentials.put(uuid, cred, data) == false )
|
|
||||||
out.println(UUID_ERROR);
|
|
||||||
else
|
|
||||||
out.println(OK);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -2,6 +2,7 @@ package org.openuds.guacamole;
|
|||||||
|
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
@ -22,6 +23,24 @@ public class TunnelServlet
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 2010742981126080080L;
|
private static final long serialVersionUID = 2010742981126080080L;
|
||||||
|
private static final String UDS_PATH = "/guacamole/";
|
||||||
|
|
||||||
|
|
||||||
|
private static Properties config = null;
|
||||||
|
|
||||||
|
private String getConfigValue(String value) throws GuacamoleException {
|
||||||
|
if( config == null ) {
|
||||||
|
try {
|
||||||
|
config = new Properties();
|
||||||
|
config.load(getServletContext().getResourceAsStream("/WEB-INF/tunnel.properties"));
|
||||||
|
} catch( Exception e ) {
|
||||||
|
throw new GuacamoleException(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return config.getProperty(value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected GuacamoleTunnel doConnect(HttpServletRequest request)
|
protected GuacamoleTunnel doConnect(HttpServletRequest request)
|
||||||
@ -34,7 +53,8 @@ public class TunnelServlet
|
|||||||
if( data == null || width == null || height == null)
|
if( data == null || width == null || height == null)
|
||||||
throw new GuacamoleException("Can't read required parameters");
|
throw new GuacamoleException("Can't read required parameters");
|
||||||
|
|
||||||
Hashtable<String,String> params = Util.readParameters(data);
|
|
||||||
|
Hashtable<String,String> params = Util.readParameters( getConfigValue("uds") + UDS_PATH + data);
|
||||||
|
|
||||||
if( params == null ) {
|
if( params == null ) {
|
||||||
System.out.println("Invalid credentials");
|
System.out.println("Invalid credentials");
|
||||||
|
@ -1,17 +1,22 @@
|
|||||||
package org.openuds.guacamole;
|
package org.openuds.guacamole;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import org.openuds.guacamole.creds.Credentials;
|
|
||||||
|
|
||||||
public class Util {
|
public class Util {
|
||||||
|
|
||||||
//
|
//
|
||||||
public static Hashtable<String,String> readParameters(String data) {
|
public static Hashtable<String,String> readParameters(String url) {
|
||||||
//String url = unscramble(data);
|
//String url = unscramble(data);
|
||||||
//String params = getUrl(url);
|
//String params = getUrl(url);
|
||||||
//return parseParams(params);
|
//return parseParams(params);
|
||||||
String params = Credentials.getAndRemove(data);
|
//String params = Credentials.getAndRemove(data);
|
||||||
if( params == null )
|
String params = getUrl(url);
|
||||||
|
if( params == null || params.equals("ERROR"))
|
||||||
return null;
|
return null;
|
||||||
return parseParams(params);
|
return parseParams(params);
|
||||||
}
|
}
|
||||||
@ -30,4 +35,67 @@ public class Util {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean download(String baseUrl, String id, String outputFileName)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
java.net.URL u = new java.net.URL(baseUrl + id);
|
||||||
|
java.net.URLConnection uc = u.openConnection();
|
||||||
|
String contentType = uc.getContentType();
|
||||||
|
int contentLength = uc.getContentLength();
|
||||||
|
if (contentType.startsWith("text/") || contentLength == -1) {
|
||||||
|
throw new IOException("This is not a binary file.");
|
||||||
|
}
|
||||||
|
InputStream raw = uc.getInputStream();
|
||||||
|
InputStream in = new BufferedInputStream(raw);
|
||||||
|
byte[] data = new byte[contentLength];
|
||||||
|
int bytesRead = 0;
|
||||||
|
int offset = 0;
|
||||||
|
while (offset < contentLength) {
|
||||||
|
bytesRead = in.read(data, offset, data.length - offset);
|
||||||
|
if (bytesRead == -1)
|
||||||
|
break;
|
||||||
|
offset += bytesRead;
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
|
||||||
|
if (offset != contentLength) {
|
||||||
|
throw new IOException("Only read " + offset + " bytes; Expected " + contentLength + " bytes");
|
||||||
|
}
|
||||||
|
|
||||||
|
java.io.FileOutputStream out = new java.io.FileOutputStream(outputFileName);
|
||||||
|
out.write(data);
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
} catch(Exception e) {
|
||||||
|
System.out.println("Unable to download file, already present or network error? " + e.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String getUrl(String url) {
|
||||||
|
try {
|
||||||
|
java.net.URL u = new java.net.URL(url);
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(u.openStream()));
|
||||||
|
StringBuilder data = new StringBuilder();
|
||||||
|
|
||||||
|
String inputLine;
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
data.append(inputLine);
|
||||||
|
data.append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
return data.toString();
|
||||||
|
|
||||||
|
} catch(Exception e) {
|
||||||
|
System.out.println("Unable to get url. Network error? " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,45 +0,0 @@
|
|||||||
package org.openuds.guacamole.creds;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
|
|
||||||
public class Credentials {
|
|
||||||
|
|
||||||
private static CredentialsMap creds = new CredentialsMap();
|
|
||||||
|
|
||||||
public static boolean put(String uuid, String credential, String value) {
|
|
||||||
synchronized (creds) {
|
|
||||||
if( uuid.equals(creds.uniqueId) ) {
|
|
||||||
creds.put(credential, value);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String get(String credential) {
|
|
||||||
synchronized (creds) {
|
|
||||||
return creds.get(credential);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getAndRemove(String credential) {
|
|
||||||
synchronized (creds) {
|
|
||||||
String cred = creds.get(credential);
|
|
||||||
creds.put(credential, null);
|
|
||||||
return cred;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean test(String uuid) {
|
|
||||||
synchronized (creds) {
|
|
||||||
if( uuid.equals(creds.uniqueId) )
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
package org.openuds.guacamole.creds;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
|
|
||||||
public class CredentialsMap extends LinkedHashMap<String, String> {
|
|
||||||
|
|
||||||
private static final int MAX_CREDENTIALS = 1024;
|
|
||||||
public String uniqueId;
|
|
||||||
|
|
||||||
public CredentialsMap() {
|
|
||||||
super(MAX_CREDENTIALS);
|
|
||||||
try {
|
|
||||||
FileInputStream fi = new FileInputStream("/etc/uniqueid.cfg");
|
|
||||||
DataInputStream in = new DataInputStream(fi);
|
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(in));
|
|
||||||
uniqueId = br.readLine();
|
|
||||||
in.close();
|
|
||||||
} catch(Exception e) {
|
|
||||||
uniqueId = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean removeEldestEntry(
|
|
||||||
java.util.Map.Entry<String, String> eldest) {
|
|
||||||
return size() >= MAX_CREDENTIALS;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1 @@
|
|||||||
|
uds=http://172.27.0.1:8000
|
Loading…
Reference in New Issue
Block a user