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

                                    
                            
                                              


                                              
 
                                          
                               

                                                                   
 

                                                                                                 
                                                                              

   

                
                                                                  
 
                                                                                
         
                                              
 






































































                                                                                                                                                            
                                                              


                                                                                
                                          
                                                                           
                                     
                                                                               
                                       
         



                                                           





                                                                                        





                                                                            
                         
                                                                                         
                               




                                                                                                 

























                                                                                                                 
 
package org.openslx.satellitedaemon;

import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Random;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.openslx.satellitedaemon.filetransfer.FileDownloadWorker;
import org.openslx.satellitedaemon.filetransfer.FileUploadWorker;

/***********************************************************************************************/
/**
 * Main class for uploading images from the HS-Server to the Satellite Server.
 * 
 */
public class App
{
	private static Logger log = Logger.getLogger( App.class );

	public static void main( String[] args ) throws NoSuchAlgorithmException
	{
		BasicConfigurator.configure();

		int i = 0;
		String arg;
		String organizationName;
		String modulus, privExp, pubExp;
		String ipAddress;
		
		// Check if there are arguments available and if they start with "--".
		if (i < args.length && args[i].startsWith( "--" )) {
			// Arguments available, take the first one.
			arg = args[i++];
			if (arg.equals( "--checkconfig" )) {
				if (checkConfig()) {
					System.exit( 0 );
				}
				System.exit( 2 );
			} else if (arg.equals( "--genid" )) {
				if (i < args.length) {
					organizationName = args[i++];
					if (genId(organizationName)) {
						System.exit( 0 );
					}
					else 
						System.exit( 2 );
				} else {
					log.error( "--genid requires an organization name" );
					System.exit( 2 );
				}
			} else if (arg.equals( "--import" )) {
				if ((i + 3) < args.length) {
					log.error( "Illelgal option: '--import' requires 4 arguments, <OrgName> <Modulus> <priv_Exponent> <pub_Exponent>" );
					System.exit( 2 );
				} else {
					organizationName = args[i++];
					modulus = args[i++];
					privExp = args[i++];
					pubExp = args[i++];
					if (importId(organizationName, modulus, privExp, pubExp)) {
						System.exit( 0 );
					} else
						System.exit( 2 );
				}
			} else if (arg.equals( "--submitkey")) {
				if (i < args.length) {
					ipAddress = args[i++];
					if (submitKey(ipAddress))
						System.exit( 0 );
					else 
						System.exit( 2 );
				} else {
					log.error( "--submitkey requires <IPADDRESS>" );
					System.exit( 2 );
				}
			} else if (arg.equals( "--updateaddress" )) {
				if (i < args.length) {
					ipAddress = args[i++];
					if (updateAddress(ipAddress)) {
						System.exit( 0 );
					} else 
						System.exit( 2 );
				} else {
					log.error( "--updateaddress requires <IPADDRESS>" );
					System.exit( 2 );
				}
			}
		} else if (args.length == 0) {
			// No Option choosed, try to load existing identity.
			if (!tryLoadIdentity()) {
				System.exit( 2 );
			}
		}
		
		if ( !Globals.masterServerSslContextInit() ) {
			log.error( "Problem with initializing the SSLContext" );
			System.exit( 1 );
		}
		// Start Up- and Download.
		Thread uploadWorker = new Thread( new FileUploadWorker() );
		uploadWorker.start();
		Thread downloadWorker = new Thread( new FileDownloadWorker() );
		downloadWorker.start();
	}
	
	private static boolean checkConfig() {
		if (Identity.getOrganizationName() == null)
			return false;
		// First check existing members (modulus, privExp, pubExp) of Identity.
		if (!Identity.checkMembers())
			return false;
		
		// Testing encryption and description with given public and private key.
		// Idea: creating random text for encrypting and decrypting again.
      Random rnd = new Random();
      if (Identity.keySize() != -1) {
	      int size = rnd.nextInt(Identity.keySize() - 1);
	      BigInteger text = new BigInteger(size,rnd);
	      RSAPublicKey pub = (RSAPublicKey) Identity.getPublicKey();
	      RSAPrivateKey priv = (RSAPrivateKey) Identity.getPrivateKey();
	      // Encrypt.
	      BigInteger cipher = text.modPow(pub.getPublicExponent(), pub.getModulus());
	      // Decrypt again.
	      BigInteger decrypted = cipher.modPow(priv.getPrivateExponent(), priv.getModulus());
	      boolean isPassed = text.equals(decrypted);
	      return isPassed;
      }
      return false;
	}
	
	private static boolean genId(String organizationName) {
		// TODO.
		return false;
	}
	
	private static boolean importId(String organizationName, String modulus, String privExp, String pubExp) {
		// TODO.
		return false;
	}
	
	private static boolean submitKey(String ipAddress) {
		// TODO.
		return false;
	}
	
	private static boolean updateAddress(String ipAddress) {
		// TODO.
		return false;
	}
	
	private static boolean tryLoadIdentity() {
		// TODO.
		return false;
	}
}