package org.openslx.satellitedaemon; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.cert.CertificateException; import java.util.Properties; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import org.apache.log4j.Logger; import org.openslx.satellitedaemon.util.Util; public class Globals { private static Logger log = Logger.getLogger( Globals.class ); private static final Properties properties = new Properties(); private static SSLContext context = null; public static final int BLOCKSIZE = 16 * 1024 * 1024; // 16 MB blocksize /***********************************************************************************************/ /** * A call of Globals.getXXXXXX() returns the corresponding entry in config/global.properties */ // * Properties *// public static String getMasterserverHost() { return properties.getProperty( "MASTERSERVER_HOST" ); } public static String getTruststorePath() { return properties.getProperty( "TRUSTSTORE_PATH" ); } public static String getImageFolder() { return properties.getProperty( "IMAGE_FOLDER" ); } // Integers // public static int getThriftPort() { return tryToParseInt( properties.getProperty( "THRIFT_PORT" ) ); } /** * Load properties */ static { InputStreamReader stream = null; try { // Load all entries of the config file into properties stream = new InputStreamReader( new FileInputStream( "config/global.properties" ), StandardCharsets.UTF_8 ); properties.load( stream ); stream.close(); } catch ( IOException e ) { log.error( "Could not load global.properties. Exiting." ); System.exit( 2 ); } finally { Util.streamClose( stream ); } Util.notNullOrEmptyFatal( getMasterserverHost(), "Masterserver Host must not be empty!" ); Util.notNullOrEmptyFatal( getImageFolder(), "Image Folder must not be empty!" ); } /***********************************************************************************************/ /** * Initialize the ssl context used everywhere for outgoing connections. * * @return true on success, false on error */ public static boolean masterServerSslContextInit() { if ( context != null ) return true; if ( getTruststorePath() == null || getTruststorePath().isEmpty() ) { try { context = SSLContext.getDefault(); } catch ( NoSuchAlgorithmException e ) { log.error( "could not load system default ssl context.", e ); return false; } return true; } KeyStore keystore; try { keystore = KeyStore.getInstance( "JKS" ); keystore.load( new FileInputStream( getTruststorePath() ), null ); TrustManagerFactory tmf = TrustManagerFactory .getInstance( TrustManagerFactory.getDefaultAlgorithm() ); tmf.init( keystore ); context = SSLContext.getInstance( "SSLv3" ); TrustManager[] trustManagers = tmf.getTrustManagers(); context.init( null, trustManagers, null ); } catch ( FileNotFoundException e ) { log.error( "Could not find the keystore for the filetransfer. Path was '" + getTruststorePath() + "'" ); return false; } catch ( Exception e ) { log.error( "Could not initialize SSL context.", e ); return false; } return true; } public static SSLContext getMasterServerSslContext() { return context; } /** * Tries to parse an int. Returns 0 on error. * * @param s * The strig to parse * @return The parsed int or 0 on error */ public static int tryToParseInt( String s ) { try { return Integer.parseInt( s ); } catch ( NumberFormatException e ) { return 0; } } }