From f593a42eae01cbec9c64c1a497205b3b74749438 Mon Sep 17 00:00:00 2001 From: Michael Petretti Date: Mon, 19 May 2014 17:33:17 +0200 Subject: Added the new FtpUploadWorker-Class --- .../satellitedaemon/ftp/ThriftConnection.java | 123 +++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java (limited to 'src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java') diff --git a/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java b/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java new file mode 100644 index 0000000..810a496 --- /dev/null +++ b/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java @@ -0,0 +1,123 @@ +package org.openslx.satellitedaemon.ftp; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.security.InvalidKeyException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.SignatureException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; + +import org.apache.thrift.TException; +import org.apache.thrift.protocol.TBinaryProtocol; +import org.apache.thrift.protocol.TProtocol; +import org.apache.thrift.transport.TSocket; +import org.apache.thrift.transport.TTransport; +import org.openslx.imagemaster.thrift.iface.FtpCredentials; +import org.openslx.imagemaster.thrift.iface.ImageData; +import org.openslx.imagemaster.thrift.iface.ImageServer; +import org.openslx.imagemaster.thrift.iface.ServerAuthenticationException; +import org.openslx.imagemaster.thrift.iface.ServerSessionData; +import org.openslx.satellitedaemon.util.EncryptWithServerIdPublicKey; +import org.openslx.satellitedaemon.util.Util; + +/** + * Handles the authentication with the Satellite Server and sends the FtpCredentials, which + * are necessary for the upload of the image. + */ +public class ThriftConnection +{ + private static ImageServer.Client client = null; + private static ServerSessionData sSD = null; + // TODO: All of the Strings and int's should not fall from sky. + static String nilsIp = "132.230.4.23"; + static int thriftPort = 9090; + + private static ImageServer.Client getConnection() + throws ServerAuthenticationException, TException, UnrecoverableKeyException, NoSuchAlgorithmException, CertificateException, FileNotFoundException, KeyStoreException, + IOException, InvalidKeyException, SignatureException + { + ImageServer.Client theClient = null; + if ( client == null ) { + theClient = newClient(); + } else { + theClient = client; + } + boolean isAuthenticated = false; + try { + isAuthenticated = theClient.ping(); + } catch ( TException x ) { + theClient = newClient(); + if ( theClient == null ) { + return null; + } + } + if ( !isAuthenticated ) { + String toEncrypt = client.startServerAuthentication( "uni-freiburg.de" ); + // System.out.println( toEncrypt ); + EncryptWithServerIdPublicKey rse = new EncryptWithServerIdPublicKey( "serverid", "password", + "/home/michael/satellite-daemon/config/serverid.jks" ); + byte[] byteArray = rse.encryptString( toEncrypt ); + sSD = client.serverAuthenticate( + "uni-freiburg.de", ByteBuffer.wrap( byteArray ) ); + } + return theClient; + } + + private static ImageServer.Client newClient() + { + ImageServer.Client newClient = null; + try { + TTransport transport; + transport = new TSocket( nilsIp, thriftPort ); // Nils IP + transport.open(); + TProtocol protocol = new TBinaryProtocol( transport ); + newClient = new ImageServer.Client( protocol ); + } catch ( TException x ) { + x.printStackTrace(); + return null; + } + return newClient; + } + + public static FtpCredentials getFtpCredentials(ImageData imDat) + + { + try { + client = getConnection(); + Util.notNullFatal( client, "Client is null. Maybe a Network error." ); + + return client.submitImage( sSD.sessionId, imDat ); + } catch ( TException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( UnrecoverableKeyException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( InvalidKeyException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( NoSuchAlgorithmException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( CertificateException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( FileNotFoundException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( KeyStoreException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( SignatureException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch ( IOException e ) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } +} -- cgit v1.2.3-55-g7522