summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/satellitedaemon/Globals.java
blob: 8b0d182058750adad5b0efd5bcbbdb8c844fcb73 (plain) (tree)
1
2
3
4
5
6
7
8

                                    
                               
                                     
                           

                                         
                                



                                              
                                
                                               

                            





                                         


                                                                      
                                                                      
                                                 
 

                                                                                



                                                                                                         
 


                           


                                                                     

         
                                                

                                                                              
         
 


                                                                     
         
 


                                                                
         

                      
 


                                                                                

         
           
                          
           


                                                                              
                                                                         

                                                                                                                    
                                       


                                                                           
                 

                                                                                                     
                                                                                                      
                                                                                           
         
 

                                                                                                         


                  

                                                          

                                  
                                                                 
                                                                                          
                                                                     


                                                                                                  
                                                                              
                                                                  
                                                     
                                                                                                                                
                                     

                                                                            



                                     
 

                                                            


                                       
           
                                                     
           
                   
                                       
                                               
           

                                                   
                     

                                                     



                                 






                                                                                      
                 
         








                                                                                 
         

 
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;

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 *//

	// Strings //
	public static String getMasterserverHost()
	{
		return properties.getProperty( "MASTERSERVER_HOST" );
	}

	public static String getTruststorePath()
	{
		return properties.getProperty( "FILETRANSFER_KEYSTORE_PATH" );
	}

	public static String getOrganizationName()
	{
		return properties.getProperty( "ORGANIZATION_NAME" );
	}

	public static String getImageFolder()
	{
		return properties.getProperty( "IMAGE_FOLDER" );
	}

	// Integers //

	public static int getThriftPort()
	{
		return tryToParseInt( properties.getProperty( "THRIFT_PORT" ) );
	}

	/**
	 * Load properties
	 */
	static {
		try {
			// Load all entries of the config file into properties
			InputStreamReader stream = new InputStreamReader(
					new FileInputStream( "config/global.properties" ), StandardCharsets.UTF_8 );
			properties.load( stream );
			stream.close();
		} catch ( IOException e ) {
			log.error( "Could not load properties. Exiting." );
			System.exit( 2 );
		}

		notNullOrEmptyFatal( getMasterserverHost(), "Masterserver Host must not be empty!" );
		notNullOrEmptyFatal( getOrganizationName(), "Organiziation Name must not be empty!" );
		notNullOrEmptyFatal( getImageFolder(), "Image Folder must not be empty!" );
	}

	/***********************************************************************************************/
	/**
	 * 
	 * @return
	 */
	public static boolean masterServerSslContextInit()
	{
		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 Globals.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;
		}
	}

	public static void notNullOrEmptyFatal( String something, String message )
	{
		if ( something == null || something.isEmpty() ) {
			if ( message != null )
				log.fatal( "[NOTNULL] " + message );
			log.warn( Thread.currentThread().getStackTrace().toString() );
			System.exit( 2 );
		}
	}

	/**
	 * Get private key for this server. If none exists yet, create a new one.
	 * 
	 * @return
	 */
	public static PrivateKey getPrivateKey()
	{
		return AsymKeyHolder.getPrivateKey();
	}

}