Skip to content
Snippets Groups Projects
Domain.java 4.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    package code;
    
    
    A C's avatar
    A C committed
    import java.io.FileInputStream;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    import java.io.IOException;
    import java.net.InetSocketAddress;
    
    A C's avatar
    A C committed
    import java.net.URL;
    
    A C's avatar
    A C committed
    import java.security.KeyStore;
    
    A C's avatar
    A C committed
    import java.sql.SQLException;
    
    alfredo's avatar
    alfredo committed
    import java.util.ArrayList;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    import java.util.concurrent.Executors;
    import java.util.concurrent.ThreadPoolExecutor;
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    import javax.net.ssl.HttpsURLConnection;
    
    A C's avatar
    A C committed
    import javax.net.ssl.KeyManagerFactory;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLEngine;
    import javax.net.ssl.SSLParameters;
    import javax.net.ssl.TrustManagerFactory;
    
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    import org.json.JSONArray;
    
    A C's avatar
    A C committed
    import org.json.JSONException;
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    import org.json.JSONObject;
    
    A C's avatar
    A C committed
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    import com.sun.net.httpserver.HttpsConfigurator;
    import com.sun.net.httpserver.HttpsParameters;
    import com.sun.net.httpserver.HttpsServer;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    
    import db.DBC;
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    public class Domain {
    
    A C's avatar
    A C committed
    	static public int port = 3001;
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    	public static void main(String[] args) throws IOException, JSONException {
    
    A C's avatar
    A C committed
    
    		ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
    
    		HttpsServer server = HttpsServer.create(new InetSocketAddress(port), 0);// port gets set here
    
    		// initialise the HTTPS server
    		try {
    			SSLContext sslContext = SSLContext.getInstance("TLS");
    
    			// initialise the keystore
    			char[] password = "miapasswd".toCharArray();
    			KeyStore ks = KeyStore.getInstance("JKS");
    			FileInputStream fis = new FileInputStream("../lig.keystore");
    			ks.load(fis, password);
    
    			// setup the key manager factory
    			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    			kmf.init(ks, password);
    
    			// setup the trust manager factory
    			TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
    			tmf.init(ks);
    
    			// setup the HTTPS context and parameters
    			sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
    			server.setHttpsConfigurator(new HttpsConfigurator(sslContext) {
    				@Override
    				public void configure(HttpsParameters params) {
    					try {
    						// initialise the SSL context
    						SSLContext context = getSSLContext();
    						SSLEngine engine = context.createSSLEngine();
    						params.setNeedClientAuth(false);
    						params.setCipherSuites(engine.getEnabledCipherSuites());
    						params.setProtocols(engine.getEnabledProtocols());
    
    						// Set the SSL parameters
    						SSLParameters sslParameters = context.getSupportedSSLParameters();
    						params.setSSLParameters(sslParameters);
    
    					} catch (Exception ex) {
    						System.out.println("Failed to create HTTPS port");
    						ex.printStackTrace();
    					}
    				}
    			});
    
    			// chiamata per popolare moduli
    
    			URL url = new URL("https://gitlab.di.unipmn.it/alfredo/iotlabgw.edu-al.unipmn.it/-/raw/main/index.json");
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    			HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
    
    A C's avatar
    A C committed
    
    			Helper.setConnectionSettings(con, "GET");
    
    			// leggo risposta
    
    alfredo's avatar
    alfredo committed
    			// int status = con.getResponseCode(); //da problemi e non viene usato
    
    A C's avatar
    A C committed
    			// controllare ToDo
    			String content = Helper.getResponseFromConnection(con);
    			con.disconnect();
    
    			// manipolazione per ottenere i campi dei moduli
    			riempiModuli(content);
    
    			server.setExecutor(threadPoolExecutor);
    
    			// API del server
    
    			server.createContext("/install/", new InstallHandler());
    			server.createContext("/start/", new StartHandler());
    			server.createContext("/stop/", new StopHandler());
    			server.createContext("/delete/", new DeleteHandler());
    			server.createContext("/secured/domains/", new TokenHandler());
    			server.createContext("/secured/services", new ServicesHandler());
    			server.createContext("/secured/priviledges", new PriviledgesHandler());
    
    			server.start();
    
    			System.out.println("domain running on " + Helper.getSelfURL());
    
    A C's avatar
    A C committed
    
    		} catch (Exception e) {
    
    alfredo's avatar
    alfredo committed
    			System.out.println("Failed to create HTTPS server on " + Helper.getSelfURL());
    
    A C's avatar
    A C committed
    			e.printStackTrace();
    		}
    
    
    A C's avatar
    A C committed
    	}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	private static void riempiModuli(String content) throws JSONException {
    
    A C's avatar
    A C committed
    
    		JSONObject obj = new JSONObject(content);
    
    A C's avatar
    A C committed
    		JSONArray jr = obj.getJSONArray("response");
    
    A C's avatar
    A C committed
    		String[] s1 = new String[jr.length()];
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    		for (int i = 0; i < jr.length(); i++) {
    			s1[i] = jr.getString(i);
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    		}
    
    A C's avatar
    A C committed
    		for (int i = 0; i < s1.length; i++) {
    
    alfredo's avatar
    alfredo committed
    			String remZip = s1[i].substring(0, s1[i].length() - 4).toLowerCase();
    
    alfredo's avatar
    alfredo committed
    			String a = null;
    
    alfredo's avatar
    alfredo committed
    			String b = null;
    			if(remZip.contains("-debian9-bb") && remZip.contains("_arduino1wifi")){
    				// find which one comes first
    				int index1 = remZip.indexOf("-debian9-bb");
    				int index2 = remZip.indexOf("_arduino1wifi");
    				if(index1 < index2)
    					a = remZip.substring(0, index1);
    				else
    					a = remZip.substring(0, index2);
    
    alfredo's avatar
    alfredo committed
    				b = "debian9, Arduino1";
    
    alfredo's avatar
    alfredo committed
    			else if(remZip.contains("-debian9-bb")){
    				a = remZip.substring(0, remZip.indexOf("-debian9-bb"));
    
    alfredo's avatar
    alfredo committed
    				b = "debian9";
    
    alfredo's avatar
    alfredo committed
    			}
    
    alfredo's avatar
    alfredo committed
    			else if(remZip.contains("_arduino1wifi")){
    				a = remZip.substring(0, remZip.indexOf("_arduino1wifi"));
    				b = "Arduino1";
    			}
    			else continue;
    
    
    alfredo's avatar
    alfredo committed
    			if(a != null)
    
    alfredo's avatar
    alfredo committed
    					// inserimento moduli debian9, Arduino1
    					DBC.fillModules(a, b, s1[i]);
    
    				} catch (SQLException | JSONException e) {
    					e.printStackTrace();
    
    A C's avatar
    A C committed
    				}
    
    A C's avatar
    A C committed
    		}
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    	}
    
    A C's avatar
    A C committed
    }