package grith.jgrith;
import grisu.jcommons.configuration.CommonGridProperties;
import grisu.jcommons.constants.GridEnvironment;
import grisu.jcommons.dependencies.BouncyCastleTool;
import grisu.jcommons.utils.DefaultGridSecurityProvider;
import grisu.jcommons.utils.EnvironmentVariableHelpers;
import grisu.jcommons.utils.HttpProxyManager;
import grisu.jcommons.utils.JythonHelpers;
import grisu.jcommons.utils.UncaughtExceptionHandler;
import grith.jgrith.utils.CertificateFiles;
import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.globus.gsi.gssapi.auth.AuthorizationException;
import org.globus.myproxy.MyProxy;
import org.globus.myproxy.MyProxyServerAuthorization;
import org.ietf.jgss.GSSContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Environment {
static final Logger myLogger = LoggerFactory.getLogger(Environment.class
.getName());
private static MyProxy myproxy = null;
public static volatile boolean environmentInitialized = false;
public static synchronized boolean initEnvironment() {
if (!environmentInitialized) {
EnvironmentVariableHelpers.loadEnvironmentVariablesToSystemProperties();
HttpProxyManager.setDefaultHttpProxy();
// make sure tmp dir exists
String tmpdir = System.getProperty("java.io.tmpdir");
if (tmpdir.startsWith("~")) {
tmpdir = tmpdir.replaceFirst("~",
System.getProperty("user.home"));
System.setProperty("java.io.tmpdir", tmpdir);
}
File tmp = new File(tmpdir);
if (!tmp.exists()) {
myLogger.debug("Creating tmpdir: {}", tmpdir);
tmp.mkdirs();
if (!tmp.exists()) {
myLogger.error("Could not create tmp dir {}.", tmpdir);
}
}
java.util.logging.LogManager.getLogManager().reset();
// LoggerFactory.getLogger("root").setLevel(Level.OFF);
JythonHelpers.setJythonCachedir();
final String debug = CommonGridProperties
.getDefault()
.getGridProperty(
CommonGridProperties.Property.DEBUG_UNCAUGHT_EXCEPTIONS);
if ("true".equalsIgnoreCase(debug)) {
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler());
}
java.security.Security
.addProvider(new DefaultGridSecurityProvider());
java.security.Security
.setProperty("ssl.TrustManagerFactory.algorithm",
"TrustAllCertificates");
try {
BouncyCastleTool.initBouncyCastle();
} catch (final Exception e) {
myLogger.error(e.getLocalizedMessage(), e);
}
environmentInitialized = true;
try {
CertificateFiles.copyCACerts(false);
} catch (Exception e) {
myLogger.error("Problem copying root certificates.", e);
}
return true;
} else {
return false;
}
}
public static MyProxy getARCSMyProxy() {
myLogger.debug("Using default ARCS myproxy...");
if (myproxy == null) {
int port = 7512;
String server = "myproxy.arcs.org.au";
myLogger.debug("Creating default MyProxy object: " + server + " / "
+ port);
try {
server = InetAddress.getByName(server).getHostAddress();
} catch (final UnknownHostException e1) {
myLogger.error(e1.getLocalizedMessage());
}
myproxy = new MyProxy(server, port);
myproxy.setAuthorization(new MyProxyServerAuthorization() {
@Override
public void authorize(GSSContext context, String host)
throws AuthorizationException {
myLogger.debug("actual host: " + host);
try {
// TODO make this configurable?
InetAddress addr = InetAddress.getByName(host);
String hostname = addr.getHostName();
if (!"myproxy.arcs.org.au".equals(hostname)
&& !"myproxy2.arcs.org.au".equals(hostname)
&& !"202.158.218.205".equals(hostname)) {
throw new AuthorizationException(context
.getDelegCred().getName().toString());
}
} catch (UnknownHostException ex) {
throw new AuthorizationException("DNS lookup failed");
} catch (org.ietf.jgss.GSSException ex) {
throw new AuthorizationException("hmm ");
}
}
});
}
return myproxy;
}
public static MyProxy getDefaultMyProxy() {
MyProxy mp = new MyProxy(GridEnvironment.getDefaultMyProxyServer(),
GridEnvironment.getDefaultMyProxyPort());
return mp;
}
}