diff options
Diffstat (limited to 'src/main/java/org/openslx/satellitedaemon')
3 files changed, 194 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/satellitedaemon/App.java b/src/main/java/org/openslx/satellitedaemon/App.java new file mode 100644 index 0000000..9eb1cd6 --- /dev/null +++ b/src/main/java/org/openslx/satellitedaemon/App.java @@ -0,0 +1,56 @@ +package org.openslx.satellitedaemon; + +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 java.util.UUID; + +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.ServerSessionData; +import org.openslx.satellitedaemon.util.RndStringEncrypt; + +/** + * HS Server. + * + */ +public class App { + public static void main(String[] args) throws UnrecoverableKeyException, NoSuchAlgorithmException, CertificateException, FileNotFoundException, KeyStoreException, IOException, InvalidKeyException, SignatureException { + try { + TTransport transport; + + transport = new TSocket("132.230.4.23", 9090); //Nils IP + transport.open(); + + TProtocol protocol = new TBinaryProtocol(transport); + ImageServer.Client client = new ImageServer.Client( + protocol); + + String rnd = client.startServerAuthentication("uni-freiburg.de"); + System.out.println(rnd); + + RndStringEncrypt rse = new RndStringEncrypt("serverid", "password", "/home/michael/satellite-daemon/config/serverid.jks"); + byte[] byteArray = rse.encryptRndString(rnd); + ServerSessionData sSD = client.serverAuthenticate("uni-freiburg.de", ByteBuffer.wrap(byteArray)); + System.out.println(sSD.sessionId); + ImageData imDat = new ImageData(UUID.randomUUID().toString(), 113, "TestImage", 100, 105, "me", "anyThing", true, false, "theBest", "theVeryBest", 1024 ); + FtpCredentials ftpc = client.submitImage(sSD.sessionId, imDat); + + transport.close(); + } catch (TException x) { + x.printStackTrace(); + } + } +} diff --git a/src/main/java/org/openslx/satellitedaemon/ftp/FtpUpDownUtil.java b/src/main/java/org/openslx/satellitedaemon/ftp/FtpUpDownUtil.java new file mode 100644 index 0000000..d83c0ea --- /dev/null +++ b/src/main/java/org/openslx/satellitedaemon/ftp/FtpUpDownUtil.java @@ -0,0 +1,88 @@ +package org.openslx.satellitedaemon.ftp; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import org.apache.commons.net.ftp.FTPClient; + +public class FtpUpDownUtil { + /** + * FTP-Dateienliste. + * @return String-Array der Dateinamen auf dem FTP-Server + */ + public static String[] list( String host, int port, String usr, String pwd ) throws IOException + { + FTPClient ftpClient = new FTPClient(); + String[] filenameList; + + try { + ftpClient.connect( host, port ); + ftpClient.login( usr, pwd ); + filenameList = ftpClient.listNames(); + ftpClient.logout(); + } finally { + ftpClient.disconnect(); + } + + return filenameList; + } + + /** + * FTP-Client-Download. + * @return true falls ok + */ + public static boolean download( String localResultFile, String remoteSourceFile, + String host, int port, String usr, String pwd, boolean showMessages ) throws IOException + { + FTPClient ftpClient = new FTPClient(); + FileOutputStream fos = null; + boolean resultOk = true; + + try { + ftpClient.connect( host, port ); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + resultOk &= ftpClient.login( usr, pwd ); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + fos = new FileOutputStream( localResultFile ); + resultOk &= ftpClient.retrieveFile( remoteSourceFile, fos ); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + resultOk &= ftpClient.logout(); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + } finally { + try { if( fos != null ) { fos.close(); } } catch( IOException e ) {/* nothing to do */} + ftpClient.disconnect(); + } + + return resultOk; + } + + /** + * FTP-Client-Upload. + * @return true falls ok + */ + public static boolean upload( String localSourceFile, String remoteResultFile, + String host, int port, String usr, String pwd, boolean showMessages ) throws IOException + { + FTPClient ftpClient = new FTPClient(); + FileInputStream fis = null; + boolean resultOk = true; + + try { + ftpClient.connect( host, port ); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + resultOk &= ftpClient.login( usr, pwd ); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + fis = new FileInputStream( localSourceFile ); + resultOk &= ftpClient.storeFile( remoteResultFile, fis ); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + resultOk &= ftpClient.logout(); + if( showMessages ) { System.out.println( ftpClient.getReplyString() ); } + } finally { + try { if( fis != null ) { fis.close(); } } catch( IOException e ) {/* nothing to do */} + ftpClient.disconnect(); + } + + return resultOk; + } +} diff --git a/src/main/java/org/openslx/satellitedaemon/util/RndStringEncrypt.java b/src/main/java/org/openslx/satellitedaemon/util/RndStringEncrypt.java new file mode 100644 index 0000000..c99a768 --- /dev/null +++ b/src/main/java/org/openslx/satellitedaemon/util/RndStringEncrypt.java @@ -0,0 +1,50 @@ +package org.openslx.satellitedaemon.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.KeyPair; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import java.security.SignatureException; +import java.security.UnrecoverableKeyException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; + +public class RndStringEncrypt { + + KeyPair pair; + + public RndStringEncrypt(String alias, String password, String file) + throws NoSuchAlgorithmException, CertificateException, + FileNotFoundException, IOException, KeyStoreException, + UnrecoverableKeyException { + KeyStore keystore = KeyStore.getInstance("JKS"); + keystore.load(new FileInputStream(new File(file)), + password.toCharArray()); + Certificate cert = null; + + Key key = keystore.getKey(alias, password.toCharArray()); + + if (key instanceof PrivateKey) { + cert = keystore.getCertificate(alias); + PublicKey publicKey = cert.getPublicKey(); + pair = new KeyPair(publicKey, (PrivateKey) key); + } + } + + public byte[] encryptRndString(String message) throws NoSuchAlgorithmException, + InvalidKeyException, SignatureException { + Signature signature = Signature.getInstance("SHA256WITHRSA"); + signature.initSign(pair.getPrivate()); + signature.update(message.getBytes()); + return signature.sign(); + } +} |