summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/satellitedaemon/ftp/ThriftConnection.java
blob: 810a4966279864e9e66f99b3c2fd5cd1feafd38a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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;
	}
}