diff options
Diffstat (limited to 'src/main/java/org/openslx/satellitedaemon/ftp/FtpDownloadWorker.java')
-rw-r--r-- | src/main/java/org/openslx/satellitedaemon/ftp/FtpDownloadWorker.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/satellitedaemon/ftp/FtpDownloadWorker.java b/src/main/java/org/openslx/satellitedaemon/ftp/FtpDownloadWorker.java new file mode 100644 index 0000000..bcf217f --- /dev/null +++ b/src/main/java/org/openslx/satellitedaemon/ftp/FtpDownloadWorker.java @@ -0,0 +1,93 @@ +package org.openslx.satellitedaemon.ftp; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.util.List; + +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; + +import org.apache.commons.net.ftp.FTP; +import org.apache.commons.net.ftp.FTPSClient; +import org.apache.log4j.Logger; +import org.openslx.imagemaster.thrift.iface.FtpCredentials; +import org.openslx.satellitedaemon.Globals; +import org.openslx.satellitedaemon.Globals.PropInt; +import org.openslx.satellitedaemon.Globals.PropString; +import org.openslx.satellitedaemon.db.DbImage; + +public class FtpDownloadWorker implements Runnable +{ + private static Logger log = Logger.getLogger( FtpUploadWorker.class ); + + @Override + public void run() + { + while ( true ) { + List<DbImage> imageList = DbImage.getAllMarkedForDownload(); + log.info( "FtpDownloadWorker: imageList Contains " + imageList.size() + " items." ); + for ( DbImage image : imageList ) { + + FtpCredentials ftpc = ThriftConnection.getFtpCredentials( image.guid ); + if ( ftpc == null ) { + log.error( "The FtpCredentials are null" ); + } + + try { + TrustManagerFactory trustManagerFactory = TrustManagerFactory + .getInstance( KeyManagerFactory.getDefaultAlgorithm() ); + KeyStore keystore = KeyStore.getInstance( Globals.getPropertyString( PropString.KEYSTORETYPE ) ); + keystore.load( new FileInputStream( new File( + Globals.getPropertyString( PropString.FTPSKEYSTOREPATH ) ) ), + Globals.getPropertyString( PropString.FTPSKEYSTOREPWD ).toCharArray() ); + trustManagerFactory.init( keystore ); + TrustManager trustManager = trustManagerFactory.getTrustManagers()[0]; + FTPSClient ftpClient = new FTPSClient( "SSL", true ); + ftpClient.setTrustManager( trustManager ); + try { + ftpClient.connect( Globals.getPropertyString( PropString.FTPSERVERIP ), Globals.getPropertyInt( PropInt.FTPPORT ) ); + if ( !ftpClient.login( ftpc.username, ftpc.password ) ) { + log.error( "FTP problem. Coundn't log in!" ); + } + File file = new File( "/tmp/" + image.guid + ".vmdk"); + ftpClient.setFileType( FTP.BINARY_FILE_TYPE ); + log.info( "FtpDownloadWorker: ftpc.filename: " + ftpc.filename ); + InputStream is = ftpClient.retrieveFileStream( ftpc.filename ); + FileOutputStream fos = new FileOutputStream( file ); + int b; + while ((b = is.read()) != -1) { + fos.write( b ); + } + is.close(); + fos.close(); + ThriftConnection.finishedDownload( ftpc.username); + + } catch (IOException e) { + log.error("FtpDownloadWorker: Error creating the FileInputStream"); + } + finally { + ftpClient.disconnect(); + log.info( "FtpDownloadWorker: ftpClient disconnected" ); + } + } catch ( NoSuchAlgorithmException | KeyStoreException | CertificateException | IOException e ) { + log.debug( "FtpDownloadWorker: Problem with Keystore ore FtpsClient creation." ); + } + } + try { + Thread.sleep( 5 * 60 * 1000 ); + } catch ( InterruptedException e ) { + log.error( "FtpUploadWorker: Sleep interrupted" ); + e.printStackTrace(); + } + } + + } +} |