diff --git a/domainManager/Domain/res/conf.json b/domainManager/Domain/res/conf.json
new file mode 100644
index 0000000000000000000000000000000000000000..39c39cfdef8780d5cd3746b9a0ef8872260c0ba9
--- /dev/null
+++ b/domainManager/Domain/res/conf.json
@@ -0,0 +1,10 @@
+{
+	"base-self-url": "http://localhost:3001",
+	"keycloak": {
+		"realm": "test00",
+		"base-server-url": "http://localhost:8080/"
+	},
+	"cloudapp": {
+		"base-server-url": "http://localhost:3002/"
+	}
+}
\ No newline at end of file
diff --git a/domainManager/Domain/src/code/DeleteHandler.java b/domainManager/Domain/src/code/DeleteHandler.java
index 8e5bb6056058dfae963f95190f970960b31bc84c..99b152a8944ebb89eda90e0adce0223206c8c278 100644
--- a/domainManager/Domain/src/code/DeleteHandler.java
+++ b/domainManager/Domain/src/code/DeleteHandler.java
@@ -1,12 +1,7 @@
 package code;
 
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
-import java.net.URL;
 import java.sql.SQLException;
 import java.util.ArrayList;
 
@@ -19,9 +14,7 @@ import com.sun.net.httpserver.HttpHandler;
 import db.DBC;
 import db.Dominio;
 
-
-public class DeleteHandler implements HttpHandler{
-
+public class DeleteHandler implements HttpHandler {
 
 	@Override
 	public void handle(HttpExchange he) throws IOException {
@@ -32,120 +25,109 @@ public class DeleteHandler implements HttpHandler{
 			return;
 		}
 
+		if (requestMethod.compareToIgnoreCase("POST") != 0) {
+			Helper.sendCors(he, 405);
+			return;
+		}
 		// String query = requestedUri.getRawQuery();
-		String body = readBody(he.getRequestBody());
+		String body = Helper.readBody(he.getRequestBody());
 
 		String user;
 
-		if((user = Helper.checkTokenGetUser(he)) == null) {
+		if ((user = Helper.checkTokenGetUser(he)) == null) {
 			Helper.sendCors(he, 401);
 			return;
 		}
 
-		if (requestMethod.compareToIgnoreCase("POST") == 0) {
-
-			try {
-				String dominio = new JSONObject(body).getString("domain");
-
-				Dominio d = DBC.getDom(dominio);
-				// String s = user + "-A";
-				/*
-				 * for(Dominio d : doms){ if( (d.getDomain() == dominio) &&
-				 * d.getUsers().contains(s)) //something here
-				 * System.out.println("OPERAZIONE NON IMPLEMENTATA");
-				 * he.sendResponseHeaders(401,response.length()); OutputStream os =
-				 * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close();
-				 * return; }
-				 */
-				if(d==null) {
-					Helper.sendCors(he, 404);
-					return;
-
-				}
-				ArrayList<String> ad= DBC.getDomainsAdmin(user);
-				if (!ad.contains(dominio)) {
-					Helper.sendCors(he, 401);
-					return;
-
-				}
-
-				DBC.delDom(dominio);
-			} catch (SQLException | JSONException e) {
-				e.printStackTrace();
-				return;
-			}
-
-
-
-
-
-			//effettuo chiamata a CloudAppManager
-			//preso da https://www.baeldung.com/java-http-request
-
-			//è una chiamata annidata nella risposta alla webapp
-			// -richiesta REST da webApp a /install
-			//   -prendo da DB e poi chiamo CloudAppMng su /install
-			//	 -attendo risposta da CloudAppMng e chiudo
-			// -rispondo a webApp e chiudo
-			// EZ
-
-			//
-			//standard per chiamata in slide
-			//https://www.dir.uniupo.it/pluginfile.php/948883/mod_resource/content/1/FrameworkProgetto5.pdf
-			//
-			//http://127.0.0.1:8080/install
-
-
-
-
 
+		try {
+			String dominio = new JSONObject(body).getString("domain");
+
+			Dominio d = DBC.getDom(dominio);
+			// String s = user + "-A";
+			/*
+			 * for(Dominio d : doms){ if( (d.getDomain() == dominio) &&
+			 * d.getUsers().contains(s)) //something here
+			 * System.out.println("OPERAZIONE NON IMPLEMENTATA");
+			 * he.sendResponseHeaders(401,response.length()); OutputStream os =
+			 * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close();
+			 * return; }
+			 */
+			if (d == null) {
+				Helper.sendCors(he, 404);
+				return;
 
+			}
+			ArrayList<String> ad = DBC.getDomainsAdmin(user);
+			if (!ad.contains(dominio)) {
+				Helper.sendCors(he, 401);
+				return;
 
-			URL url = new URL("http://127.0.0.1:3002/delete");//maybe, se CloudAppe è in localhost porta 8080
-			//aggiungere 3000/delete
-			HttpURLConnection con = (HttpURLConnection) url.openConnection();
-			con.setRequestMethod("POST");
-			con.setRequestProperty("Content-Type", "application/json");
-			con.setRequestProperty("Accept", "application/json");
-			con.setDoOutput(true);
-			con.setConnectTimeout(5000);
-			con.setReadTimeout(5000);
-
-			DataOutputStream out = new DataOutputStream(con.getOutputStream());//inserimento param in call
-			out.writeBytes(body);
-			out.flush();
-			out.close();
-
-			//con.setRequestProperty("Content-Type", "application/json");
-			//String contentType = con.getHeaderField("Content-Type");
-
-			//leggo risposta
-			int status = con.getResponseCode();
-
-			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
-			String inputLine;
-			StringBuffer content = new StringBuffer();
-			while ((inputLine = in.readLine()) != null)
-					content.append(inputLine);
-
-			in.close();
-			con.disconnect();
+			}
 
-			Helper.sendCors(he,status);
+			DBC.delDom(dominio);
+		} catch (SQLException | JSONException e) {
+			e.printStackTrace();
+			return;
 		}
 
-	}
+		// effettuo chiamata a CloudAppManager
+		// preso da https://www.baeldung.com/java-http-request
+
+		// è una chiamata annidata nella risposta alla webapp
+		// -richiesta REST da webApp a /install
+		// -prendo da DB e poi chiamo CloudAppMng su /install
+		// -attendo risposta da CloudAppMng e chiudo
+		// -rispondo a webApp e chiudo
+		// EZ
+
+		//
+		// standard per chiamata in slide
+		// https://www.dir.uniupo.it/pluginfile.php/948883/mod_resource/content/1/FrameworkProgetto5.pdf
+		//
+		// http://127.0.0.1:8080/install
+
+		/*
+		 * URL url = new URL(Helper.getCloudappURL()+"delete");//maybe, se CloudAppe è
+		 * in localhost porta 8080
+		 * //aggiungere 3000/delete
+		 * HttpURLConnection con = (HttpURLConnection) url.openConnection();
+		 * con.setRequestMethod("POST");
+		 * con.setRequestProperty("Content-Type", "application/json");
+		 * con.setRequestProperty("Accept", "application/json");
+		 * con.setDoOutput(true);
+		 * con.setConnectTimeout(5000);
+		 * con.setReadTimeout(5000);
+		 *
+		 * DataOutputStream out = new
+		 * DataOutputStream(con.getOutputStream());//inserimento param in call
+		 * out.writeBytes(body);
+		 * out.flush();
+		 * out.close();
+		 *
+		 * //con.setRequestProperty("Content-Type", "application/json");
+		 * //String contentType = con.getHeaderField("Content-Type");
+		 *
+		 * //leggo risposta
+		 * int status = con.getResponseCode();
+		 *
+		 * BufferedReader in = new BufferedReader(new
+		 * InputStreamReader(con.getInputStream()));
+		 * String inputLine;
+		 * StringBuffer content = new StringBuffer();
+		 * while ((inputLine = in.readLine()) != null)
+		 * content.append(inputLine);
+		 *
+		 * in.close();
+		 */
+		HttpURLConnection con = Helper.sendMessageToCloudapp("install", body);
+		int status = con.getResponseCode();
+		// FIXME serve avere anche il content?
+		String cloudappResponse = Helper.getResponseFromConnection(con);
+		con.disconnect();
+
+		Helper.sendCors(he, status);
 
-	private String readBody(InputStream requestBody) {
-		int req;
-		StringBuffer sb = new StringBuffer();
-		try {
-			while ((req = requestBody.read()) != -1)
-				sb.append(Character.toString((char) req));
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return sb.toString();
 	}
 
 }
diff --git a/domainManager/Domain/src/code/Domain.java b/domainManager/Domain/src/code/Domain.java
index d6d11b77e5874112762301cc4dcd06970a515005..1de147e89107a31b0a37e4951df7c0f7a3aee813 100644
--- a/domainManager/Domain/src/code/Domain.java
+++ b/domainManager/Domain/src/code/Domain.java
@@ -1,8 +1,6 @@
 package code;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.InetSocketAddress;
 import java.net.URL;
@@ -20,18 +18,18 @@ import db.DBC;
 
 public class Domain {
 
-	static public int port=3001;
+	// static public int port=3001;
 
 	public static void main(String[] args) throws IOException, JSONException {
-		if(args.length>1 && args[0].equals("-port")) try {
-			port = Integer.parseInt(args[1]);
-		}
-
-		catch (Exception e) {
-			e.printStackTrace();
-		}
+		/*if(args.length>1 && args[0].equals("-port")){
+			try {
+				port = Integer.parseInt(args[1]);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}*/
 		ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)Executors.newCachedThreadPool();////newFixedThreadPool(5)
-		HttpServer server=HttpServer.create(new InetSocketAddress(port),0);
+		HttpServer server=HttpServer.create(new InetSocketAddress(3001),0);//port connection set here
 
 		//Connect.connect();
 
@@ -42,12 +40,7 @@ public class Domain {
 		URL url = new URL("https://gitlab.di.unipmn.it/alfredo/iotlabgw.edu-al.unipmn.it/-/raw/main/index.json");
 		HttpURLConnection con = (HttpURLConnection) url.openConnection();
 		// 3000/install da inserire
-		con.setRequestMethod("GET");
-		con.setRequestProperty("Content-Type", "application/json");
-		con.setRequestProperty("Accept", "application/json");
-		con.setDoOutput(true);
-		con.setConnectTimeout(5000);
-		con.setReadTimeout(5000);
+		Helper.setConnectionSettings(con,"GET");
 
 //		DataOutputStream out = new DataOutputStream(con.getOutputStream());// inserimento param in call
 //		out.writeBytes(j.toString());// ParameterStringBuilder.getParamsString(parameters));
@@ -60,18 +53,19 @@ public class Domain {
 		// leggo risposta
 		int status = con.getResponseCode();
 
-		BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+		/*BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
 		String inputLine;
 		StringBuffer content = new StringBuffer();
 		while ((inputLine = in.readLine()) != null) {
 			content.append(inputLine);
 		}
-		in.close();
+		in.close();*/
+		String content = Helper.getResponseFromConnection(con);
 		con.disconnect();
 
 //		System.out.println(content);
 		//manipolazione per ottenere i campi dei moduli
-		JSONObject obj=new JSONObject(content.toString());
+		JSONObject obj=new JSONObject(content);
 //		System.out.println(obj.toString());
 		//String s=content.toString();
 		//ArrayList<String>arr=s.
@@ -105,7 +99,6 @@ public class Domain {
 						//inserimento modulo non arduino
 						DBC.fillModules(a, b, s1[i]);
 					} catch (SQLException | JSONException e) {
-						// TODO Auto-generated catch block
 						e.printStackTrace();
 					}
 				}
@@ -137,7 +130,8 @@ public class Domain {
 		server.createContext("/secured/priviledges", new PriviledgesHandler());
 
 		server.start();
-		System.out.println("Domain in ascolto su http://localhost:"+port);
+		Helper.getInstance();//to let the helper load the configuration
+		System.out.println("Domain in ascolto su "+Helper.getSelfURL());
 	}
 
 }
diff --git a/domainManager/Domain/src/code/Helper.java b/domainManager/Domain/src/code/Helper.java
index 8ba8ac3d63d843e8cd7d80c040174f49b54f3996..50b6a483718156bcbe8b91b9a3c6e3e6b7af3169 100644
--- a/domainManager/Domain/src/code/Helper.java
+++ b/domainManager/Domain/src/code/Helper.java
@@ -1,8 +1,16 @@
 package code;
 
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.net.URLDecoder;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
@@ -11,12 +19,90 @@ import java.util.List;
 import java.util.Map;
 
 import org.json.JSONException;
+import org.json.JSONObject;
 
 import com.sun.net.httpserver.Headers;
 import com.sun.net.httpserver.HttpExchange;
 
 public class Helper {
 
+	private static Helper instance = null;
+	private static JSONObject keycloak = null;
+	private static JSONObject cloudapp = null;
+	private static String selfURL = null;
+
+	private Helper(){
+		// read config file
+		try {
+			JSONObject conf = new JSONObject(leggiFile("../res/conf.json"));
+			Helper.keycloak = conf.getJSONObject("keycloak");
+			Helper.cloudapp = conf.getJSONObject("cloudapp");
+			Helper.selfURL = conf.getString("base-self-url");
+		} catch (JSONException | IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static Helper getInstance(){
+		if(instance==null){
+			instance=new Helper();
+		}
+		return instance;
+	}
+
+	private static String leggiFile(String path) throws IOException {
+		String line;
+		StringBuffer answer = new StringBuffer();
+		BufferedReader bufferedReader = null;
+		try {
+			bufferedReader = new BufferedReader(new FileReader(path));
+			while((line = bufferedReader.readLine()) != null) {
+				answer.append(line).append("\n");
+			}
+		} catch (FileNotFoundException ex) {
+			ex.printStackTrace();
+		} finally {
+			if(bufferedReader != null)
+				bufferedReader.close();
+		}
+		return answer.toString();
+	}
+
+	// public static JSONObject getKeycloak() {
+	// 	return keycloak;
+	// }
+
+	public static String getKeycloakRealm(){
+		try {
+			return keycloak.getString("realm");
+		} catch (JSONException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public static String getKeycloakURL(){
+		try {
+			return keycloak.getString("base-server-url");
+		} catch (JSONException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public static String getCloudappURL(){
+		try {
+			return cloudapp.getString("base-server-url");
+		} catch (JSONException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public static String getSelfURL(){
+		return selfURL;
+	}
+
 	public static void sendCors(HttpExchange exchange, int stato, String response) throws IOException {
 		Headers headers = exchange.getResponseHeaders();
 		headers.add("Access-Control-Allow-Origin", "*");// se non mettiamo *, viene errore CORS //http://localhost:3001/secured/domains
@@ -89,4 +175,47 @@ public class Helper {
 		return result;
 	}
 
+	public static String readBody(InputStream requestBody) {
+		int request;
+		StringBuffer response = new StringBuffer();
+		try {
+			while ((request = requestBody.read()) != -1)
+				response.append(Character.toString((char) request));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return response.toString();
+	}
+
+	public static HttpURLConnection sendMessageToCloudapp(String path, String message) throws IOException {
+		URL url = new URL(getCloudappURL() + (path.startsWith("/") ? path.substring(1) : path));
+		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+		setConnectionSettings(connection,"POST");
+		DataOutputStream outStream = new DataOutputStream(connection.getOutputStream());//inserimento param in call
+		outStream.writeBytes(message);
+		outStream.flush();
+		outStream.close();
+		return connection;
+	}
+
+	public static void setConnectionSettings(HttpURLConnection connection, String method) throws IOException{
+		connection.setRequestMethod(method);
+		connection.setRequestProperty("Content-Type", "application/json");
+		connection.setRequestProperty("Accept", "application/json");
+		connection.setDoOutput(true);
+		connection.setConnectTimeout(5000);
+		connection.setReadTimeout(5000);
+	}
+
+	public static String getResponseFromConnection(HttpURLConnection con) throws IOException {
+		BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
+		String inputLine;
+		StringBuffer content = new StringBuffer();
+		while ((inputLine = reader.readLine()) != null) {
+			content.append(inputLine);
+		}
+		reader.close();
+		return content.toString();
+	}
+
 }
diff --git a/domainManager/Domain/src/code/InstallHandler.java b/domainManager/Domain/src/code/InstallHandler.java
index 9caaaa23c99956b40388cebc9e6c3322b323c179..b04532351525ab9a4caf021e7669765ab7c737da 100644
--- a/domainManager/Domain/src/code/InstallHandler.java
+++ b/domainManager/Domain/src/code/InstallHandler.java
@@ -1,12 +1,7 @@
 package code;
 
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
-import java.net.URL;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -26,7 +21,6 @@ public class InstallHandler implements HttpHandler {
 	@Override
 	public void handle(HttpExchange he) throws IOException {
 
-		// URI requestedUri = he.getRequestURI();
 		String requestMethod = he.getRequestMethod();
 
 		if (requestMethod.compareToIgnoreCase("options") == 0) {
@@ -34,178 +28,173 @@ public class InstallHandler implements HttpHandler {
 			return;
 		}
 
-		// String response = "";
-
-		// String query = requestedUri.getRawQuery();
-		String body = readBody(he.getRequestBody());
-
-		// he.getRequestHeaders().get("user").get(0);
+		if (requestMethod.compareToIgnoreCase("POST") != 0) {
+			Helper.sendCors(he, 405);
+			return;
+		}
+		String body = Helper.readBody(he.getRequestBody());
 
 		String user;
 
-		if((user = Helper.checkTokenGetUser(he)) == null) {
+		if ((user = Helper.checkTokenGetUser(he)) == null) {
 			Helper.sendCors(he, 401);
 			return;
 		}
 
 		// verifica user
 
-		if (requestMethod.compareToIgnoreCase("POST") == 0) {
 
-			JSONObject j = null;
-			try {
-				j = new JSONObject(body);
-				String dm = j.getString("domain");
-
-				// try {
+		JSONObject j = null;
+		try {
+			j = new JSONObject(body);
+			String dm = j.getString("domain");
 
-				Dominio d = DBC.getDom(dm);
-				if (d != null) {
-					Helper.sendCors(he,403);
-					return;
-				}
+			// try {
 
-			} catch (JSONException | SQLException e) {
-				e.printStackTrace();
+			Dominio d = DBC.getDom(dm);
+			if (d != null) {
+				Helper.sendCors(he, 403);
 				return;
 			}
 
-			// inserisco i dati nel DB
-
-			// String s = user + "-A";
-			try {
-
-				// qui leggo e parsifico i json nel body, inserisco tutti i campi nel db
-
-				String domain = j.getString("domain");
-				DBC.insertDom(domain);
-				// questa chiamata serve ad assicurarsi che l'utente che ha effettuato la
-				// chiamata sia anche amministratore del dominio
-				DBC.insertAmministra(user, domain);
-
-				JSONArray arrUsers = j.getJSONArray("users");
-				for (int i = 0; i < arrUsers.length(); i++) {
-					JSONObject userObj = arrUsers.getJSONObject(i);
-					String usr = userObj.getString("user");
-					if (user.equals(usr))
-						continue;
-					if (userObj.getString("role").equals("A")) {
-						DBC.insertAmministra(usr, domain);
-					} else if (userObj.getString("role").equals("U")) {
-						DBC.insertUsa(usr, domain);
-					} else
-						System.err.println(userObj.toString());
-				}
+		} catch (JSONException | SQLException e) {
+			e.printStackTrace();
+			return;
+		}
 
-				JSONArray arrServ = j.getJSONArray("services");//array con solo il nome dei servizi da installare
-				ArrayList<String> moduleHosts = new ArrayList<String>();
-				for (int i = 0; i < arrServ.length(); i++) {
+		// inserisco i dati nel DB
 
-					// String modul=((JSONObject) arrUsers.get(i)).getString("service");
-					// String host=((JSONObject) arrUsers.get(i)).getString("host");
-					// DBC.insertService(domain,host,modul);
-					String modul = arrServ.getString(i);
-					moduleHosts.addAll(DBC.insertService(domain, modul));
-				}
-				// divido gli host in base al loro module
-				HashMap<String, ArrayList<String>> hostsMap = new HashMap<String, ArrayList<String>>();
-				for (String mh : moduleHosts) {
-					String[] mhSplit = mh.split("---");
-					String module = mhSplit[0];
-					String host = mhSplit[1];
-					ArrayList<String> hostsList;
-					if (hostsMap.containsKey(module)) {
-						hostsList = hostsMap.get(module);
-					} else {
-						hostsList = new ArrayList<String>();
-						hostsMap.put(module, hostsList);
-					}
-					hostsList.add(host);
-				}
-				// imposta correttamente l'array dei servizi
-				JSONArray arrServiziFinale = new JSONArray();
-				for(int i=0; i < arrServ.length(); i++) {
-					JSONObject row = new JSONObject();
-					String mod = arrServ.getString(i);
-					ArrayList<String> ho = hostsMap.get(mod);
-					for(String h : ho) {
-						row.put("host", h);
-						row.put("service", mod);
-						row.put("uri", DBC.getURI(mod));
-						arrServiziFinale.put(row);
-					}
-				}
-				j.put("services", arrServiziFinale);
-				// non ci sono controlli!!!!
-
-			} catch (SQLException | JSONException e) {
-				e.printStackTrace();
-			}
+		// String s = user + "-A";
+		try {
 
-			// ora bisogna fare la chiamata al CloudApp, non prima!
-			// effettuo chiamata a CloudAppManager
-			// preso da https://www.baeldung.com/java-http-request
-
-			// è una chiamata annidata nella risposta alla webapp
-			// -richiesta REST da webApp a /install
-			// -prendo da DB e poi chiamo CloudAppMng su /install
-			// -attendo risposta da CloudAppMng e chiudo
-			// -rispondo a webApp e chiudo
-			// EZ
-
-			//
-			// standard per chiamata in slide
-			// https://www.dir.uniupo.it/pluginfile.php/948883/mod_resource/content/1/FrameworkProgetto5.pdf
-			//
-			// http://127.0.0.1:8080/install
-
-			// 3002/install da inserire
-			URL url = new URL("http://127.0.0.1:3002/install");// maybe, se CloudAppe è in localhost porta 8080
-			HttpURLConnection con = (HttpURLConnection) url.openConnection();
-
-			con.setRequestMethod("POST");
-			con.setRequestProperty("Content-Type", "application/json");
-			con.setRequestProperty("Accept", "application/json");
-			con.setDoOutput(true);
-			con.setConnectTimeout(5000);
-			con.setReadTimeout(5000);
-			DataOutputStream outForCloudApp = new DataOutputStream(con.getOutputStream());// inserimento param
-																							// in call
-			outForCloudApp.writeBytes(j.toString());
-			outForCloudApp.flush();
-			outForCloudApp.close();
-
-			// con.setRequestProperty("Content-Type", "application/json");
-			// String contentType = con.getHeaderField("Content-Type");
-			// leggo risposta
-			int status = con.getResponseCode();
-			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
-			String inputLine;
-			StringBuffer content = new StringBuffer();
-			while ((inputLine = in.readLine()) != null) {
-				content.append(inputLine);
+			// qui leggo e parsifico i json nel body, inserisco tutti i campi nel db
+
+			String domain = j.getString("domain");
+			DBC.insertDom(domain);
+			// questa chiamata serve ad assicurarsi che l'utente che ha effettuato la
+			// chiamata sia anche amministratore del dominio
+			DBC.insertAmministra(user, domain);
+
+			JSONArray arrUsers = j.getJSONArray("users");
+			for (int i = 0; i < arrUsers.length(); i++) {
+				JSONObject userObj = arrUsers.getJSONObject(i);
+				String usr = userObj.getString("user");
+				if (user.equals(usr))
+					continue;
+				if (userObj.getString("role").equals("A")) {
+					DBC.insertAmministra(usr, domain);
+				} else if (userObj.getString("role").equals("U")) {
+					DBC.insertUsa(usr, domain);
+				} else
+					System.err.println(userObj.toString());
 			}
-			in.close();
-			con.disconnect();
 
-			// finita chiamata a CloudApp
+			JSONArray arrServ = j.getJSONArray("services");// array con solo il nome dei servizi da installare
+			ArrayList<String> moduleHosts = new ArrayList<String>();
+			for (int i = 0; i < arrServ.length(); i++) {
 
-			// f.close();
-			//risposta alla webapp
-			Helper.sendCors(he,status);
-		}
-	}
+				// String modul=((JSONObject) arrUsers.get(i)).getString("service");
+				// String host=((JSONObject) arrUsers.get(i)).getString("host");
+				// DBC.insertService(domain,host,modul);
+				String modul = arrServ.getString(i);
+				moduleHosts.addAll(DBC.insertService(domain, modul));
+			}
+			// divido gli host in base al loro module
+			HashMap<String, ArrayList<String>> hostsMap = new HashMap<String, ArrayList<String>>();
+			for (String mh : moduleHosts) {
+				String[] mhSplit = mh.split("---");
+				String module = mhSplit[0];
+				String host = mhSplit[1];
+				ArrayList<String> hostsList;
+				if (hostsMap.containsKey(module)) {
+					hostsList = hostsMap.get(module);
+				} else {
+					hostsList = new ArrayList<String>();
+					hostsMap.put(module, hostsList);
+				}
+				hostsList.add(host);
+			}
+			// imposta correttamente l'array dei servizi
+			JSONArray arrServiziFinale = new JSONArray();
+			for (int i = 0; i < arrServ.length(); i++) {
+				JSONObject row = new JSONObject();
+				String mod = arrServ.getString(i);
+				ArrayList<String> ho = hostsMap.get(mod);
+				for (String h : ho) {
+					row.put("host", h);
+					row.put("service", mod);
+					row.put("uri", DBC.getURI(mod));
+					arrServiziFinale.put(row);
+				}
+			}
+			j.put("services", arrServiziFinale);
+			// non ci sono controlli!!!!
 
-	private String readBody(InputStream requestBody) {
-		int req;
-		StringBuffer sb = new StringBuffer();
-		try {
-			while ((req = requestBody.read()) != -1)
-				sb.append(Character.toString((char) req));
-		} catch (IOException e) {
+		} catch (SQLException | JSONException e) {
 			e.printStackTrace();
 		}
-		return sb.toString();
+
+		// ora bisogna fare la chiamata al CloudApp, non prima!
+		// effettuo chiamata a CloudAppManager
+		// preso da https://www.baeldung.com/java-http-request
+
+		// è una chiamata annidata nella risposta alla webapp
+		// -richiesta REST da webApp a /install
+		// -prendo da DB e poi chiamo CloudAppMng su /install
+		// -attendo risposta da CloudAppMng e chiudo
+		// -rispondo a webApp e chiudo
+		// EZ
+
+		//
+		// standard per chiamata in slide
+		// https://www.dir.uniupo.it/pluginfile.php/948883/mod_resource/content/1/FrameworkProgetto5.pdf
+		//
+		// http://127.0.0.1:8080/install
+
+		// 3002/install da inserire
+		/*
+		 * URL url = new URL(Helper.getCloudappURL()+"install");// maybe, se CloudAppe è
+		 * in localhost porta 8080
+		 * HttpURLConnection con = (HttpURLConnection) url.openConnection();
+		 *
+		 * con.setRequestMethod("POST");
+		 * con.setRequestProperty("Content-Type", "application/json");
+		 * con.setRequestProperty("Accept", "application/json");
+		 * con.setDoOutput(true);
+		 * con.setConnectTimeout(5000);
+		 * con.setReadTimeout(5000);
+		 * DataOutputStream out = new DataOutputStream(con.getOutputStream());//
+		 * inserimento param
+		 * // in call
+		 * out.writeBytes(j.toString());
+		 * out.flush();
+		 * out.close();
+		 *
+		 * // con.setRequestProperty("Content-Type", "application/json");
+		 * // String contentType = con.getHeaderField("Content-Type");
+		 * // leggo risposta
+		 * int status = con.getResponseCode();
+		 * BufferedReader in = new BufferedReader(new
+		 * InputStreamReader(con.getInputStream()));
+		 * String inputLine;
+		 * StringBuffer content = new StringBuffer();
+		 * while ((inputLine = in.readLine()) != null) {
+		 * content.append(inputLine);
+		 * }
+		 * in.close();
+		 */
+		HttpURLConnection con = Helper.sendMessageToCloudapp("install", j.toString());
+		int status = con.getResponseCode();
+		// FIXME serve avere anche il content?
+		String cloudappResponse = Helper.getResponseFromConnection(con);
+		con.disconnect();
+
+		// finita chiamata a CloudApp
+
+		// f.close();
+		// risposta alla webapp
+		Helper.sendCors(he, status);
+
 	}
 
 }
diff --git a/domainManager/Domain/src/code/PriviledgesHandler.java b/domainManager/Domain/src/code/PriviledgesHandler.java
index d6ed661a2b79d674ea3eb10d9a52ef005076cec3..bde308c61793a554d6439b7b0036677146965b0e 100644
--- a/domainManager/Domain/src/code/PriviledgesHandler.java
+++ b/domainManager/Domain/src/code/PriviledgesHandler.java
@@ -22,17 +22,17 @@ public class PriviledgesHandler implements HttpHandler{
 			Helper.sendCors(he, 200);
 			return;
 		}
+		// exclude any request that isn't a get
+		if(requestMethod.compareToIgnoreCase("get") != 0) {
+			Helper.sendCors(he, 405);
+			return;
+		}
 		// check if the user is logged in
 		String user;
 		if((user = Helper.checkTokenGetUser(he)) == null) {
 			Helper.sendCors(he, 401);
 			return;
 		}
-		// exclude any request that isn't a get
-		if(requestMethod.compareToIgnoreCase("get") != 0) {
-			Helper.sendCors(he, 405);
-			return;
-		}
 		// get the query
 		String query = he.getRequestURI().getRawQuery();
 		if(query == null) {
diff --git a/domainManager/Domain/src/code/ServicesHandler.java b/domainManager/Domain/src/code/ServicesHandler.java
index 107459c8aea6a63232c1fd9903cabdce8e41e2c1..391b7630006d949cfd1c8f9dc02913c47d418c36 100644
--- a/domainManager/Domain/src/code/ServicesHandler.java
+++ b/domainManager/Domain/src/code/ServicesHandler.java
@@ -28,6 +28,10 @@ public class ServicesHandler implements HttpHandler{
 			return;
 		}
 
+		if (requestMethod.compareToIgnoreCase("GET") != 0) {
+			Helper.sendCors(he, 405);
+			return;
+		}
 
 		if(Helper.checkTokenGetUser(he) == null) {
 			Helper.sendCors(he, 401);
@@ -44,50 +48,47 @@ public class ServicesHandler implements HttpHandler{
 		}
 
 
-		if (requestMethod.compareToIgnoreCase("GET") == 0) {
-			JSONObject res = new JSONObject();
-			if(domain != null){
-				// I have to send only the services used by this domain
-
-				JSONArray rs =null;
+		JSONObject res = new JSONObject();
+		if(domain != null){
+			// I have to send only the services used by this domain
 
-				//ArrayList<String> modulesList;
-				try {
-					//modulesList = DBC.getModules();
+			JSONArray rs =null;
 
-					//for (String k : modulesList) {
-					//	rs.put(k);
-					rs= DBC.getServicesInUseByDomain(domain);
-					res.put("response", rs);
+			//ArrayList<String> modulesList;
+			try {
+				//modulesList = DBC.getModules();
 
-				} catch (SQLException | JSONException e) {
-					e.printStackTrace();
-				}
+				//for (String k : modulesList) {
+				//	rs.put(k);
+				rs= DBC.getServicesInUseByDomain(domain);
+				res.put("response", rs);
 
+			} catch (SQLException | JSONException e) {
+				e.printStackTrace();
+			}
 
 
-			} else {
-				// I have to send all available services
-				JSONArray rs = DBC.getAllServices();
-				try {
-					res.put("response",rs);
-				} catch (JSONException e) {
-					e.printStackTrace();
-				}
 
+		} else {
+			// I have to send all available services
+			JSONArray rs = DBC.getAllServices();
+			try {
+				res.put("response",rs);
+			} catch (JSONException e) {
+				e.printStackTrace();
 			}
-			response = res.toString();
 
-			// questa parte sopra serve anche qui, non solo quando si chiama con OPTIONS
-			Helper.sendCors(he, 200, response);
+		}
+		response = res.toString();
 
-			// JSONObject j=new JSONObject();
-			// j.append("User", DBC.getDomainsUser(user));
+		// questa parte sopra serve anche qui, non solo quando si chiama con OPTIONS
+		Helper.sendCors(he, 200, response);
 
-			// j=(""+":"+);
+		// JSONObject j=new JSONObject();
+		// j.append("User", DBC.getDomainsUser(user));
 
+		// j=(""+":"+);
 
-		}
 
 	}
 
diff --git a/domainManager/Domain/src/code/StartHandler.java b/domainManager/Domain/src/code/StartHandler.java
index ee8a5ac1f3de2b174f1dadbfb281ec78dfacf394..c2cc9afe0ce59c9b7783750fd77f5d937f52c83b 100644
--- a/domainManager/Domain/src/code/StartHandler.java
+++ b/domainManager/Domain/src/code/StartHandler.java
@@ -1,10 +1,7 @@
 package code;
 
-import java.io.DataOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.HttpURLConnection;
-import java.net.URL;
 import java.sql.SQLException;
 import java.util.ArrayList;
 
@@ -40,92 +37,91 @@ public class StartHandler implements HttpHandler {
 			Helper.sendCors(he, 200);
 			return;
 		}
+		if (requestMethod.compareToIgnoreCase("POST") != 0) {
+			Helper.sendCors(he, 405);
+			return;
+		}
 		// String query = requestedUri.getRawQuery();
-		String body = readBody(he.getRequestBody());
+		String body = Helper.readBody(he.getRequestBody());
 		String user;
 
-		if((user = Helper.checkTokenGetUser(he)) == null) {
+		if ((user = Helper.checkTokenGetUser(he)) == null) {
 			Helper.sendCors(he, 401);
 			return;
 		}
 
-		if (requestMethod.compareToIgnoreCase("POST") == 0) {
-			String domain;
-			try {
-				domain = new JSONObject(body).getString("domain");
-
-//				Dominio d = DBC.getDom(dominio);
-//				String s = user + "-A";
-				ArrayList<String> ad= DBC.getDomainsAdmin(user);
-				/*
-				 * for(Dominio d : doms){ if( (d.getDomain() == dominio) &&
-				 * d.getUsers().contains(s)) //something here
-				 * System.out.println("OPERAZIONE NON IMPLEMENTATA");
-				 * he.sendResponseHeaders(401,response.length()); OutputStream os =
-				 * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close();
-				 * return; }
-				 */
-				if (!ad.contains(domain)) {
-					Helper.sendCors(he, 401);
-					return;
-				}
-
-			} catch (SQLException|JSONException e) {
-				e.printStackTrace();
+		String domain;
+		try {
+			domain = new JSONObject(body).getString("domain");
+
+			// Dominio d = DBC.getDom(dominio);
+			// String s = user + "-A";
+			ArrayList<String> ad = DBC.getDomainsAdmin(user);
+			/*
+			 * for(Dominio d : doms){ if( (d.getDomain() == dominio) &&
+			 * d.getUsers().contains(s)) //something here
+			 * System.out.println("OPERAZIONE NON IMPLEMENTATA");
+			 * he.sendResponseHeaders(401,response.length()); OutputStream os =
+			 * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close();
+			 * return; }
+			 */
+			if (!ad.contains(domain)) {
+				Helper.sendCors(he, 401);
 				return;
 			}
 
-			URL url = new URL("http://localhost:3002/start");// maybe, se CloudApp è in localhost porta 8080
-			HttpURLConnection con = (HttpURLConnection) url.openConnection();
-			con.setRequestMethod("POST");
-			con.setRequestProperty("Content-Type", "application/json");
-			con.setRequestProperty("version", "1.0");
-
-			//Map<String, String> parameters = new HashMap<>();
-			// System.out.println("pino1");
-			// {“domain”:”nome_dominio”} check utente chiamante ha permessi su dominio
-			// chiamato, chi fa install è admin
-
-			// parameters.put("param1", "val");// fix parametri da mandare
-			//parameters.put("domain", dominio);
-
-			con.setDoOutput(true);
-			// System.out.println("pino2");
-			DataOutputStream out = new DataOutputStream(con.getOutputStream());// inserimento param in call
-			out.writeBytes(body.toString());//(ParameterStringBuilder.getParamsString(parameters));//j.toString();
-
-			out.flush();
-			out.close();
-			// System.out.println("pino3");
-
-			// con.setRequestProperty("Content-Type", "application/json");
-			// String contentType = con.getHeaderField("Content-Type");
-
-			con.setConnectTimeout(5000);
-			con.setReadTimeout(5000);
-			// System.out.println("pino4");
-
-			// leggo risposta
-			int status = con.getResponseCode();
-			con.disconnect();
-
-			Helper.sendCors(he,status);
-			// cambio lo stato nel DB
-			DBC.setStatoDomain(domain, 1);
+		} catch (SQLException | JSONException e) {
+			e.printStackTrace();
+			return;
 		}
 
-	}
+		/*
+		 * URL url = new URL(Helper.getCloudappURL()+"start");// maybe, se CloudApp è in
+		 * localhost porta 8080
+		 * HttpURLConnection con = (HttpURLConnection) url.openConnection();
+		 * con.setRequestMethod("POST");
+		 * con.setRequestProperty("Content-Type", "application/json");
+		 * con.setRequestProperty("version", "1.0");
+		 *
+		 * //Map<String, String> parameters = new HashMap<>();
+		 * // System.out.println("pino1");
+		 * // {“domain”:”nome_dominio”} check utente chiamante ha permessi su dominio
+		 * // chiamato, chi fa install è admin
+		 *
+		 * // parameters.put("param1", "val");// fix parametri da mandare
+		 * //parameters.put("domain", dominio);
+		 *
+		 * con.setDoOutput(true);
+		 * // System.out.println("pino2");
+		 * DataOutputStream out = new DataOutputStream(con.getOutputStream());//
+		 * inserimento param in call
+		 * out.writeBytes(body.toString());//(ParameterStringBuilder.getParamsString(
+		 * parameters));//j.toString();
+		 *
+		 * out.flush();
+		 * out.close();
+		 * // System.out.println("pino3");
+		 *
+		 * // con.setRequestProperty("Content-Type", "application/json");
+		 * // String contentType = con.getHeaderField("Content-Type");
+		 *
+		 * con.setConnectTimeout(5000);
+		 * con.setReadTimeout(5000);
+		 * // System.out.println("pino4");
+		 *
+		 * // leggo risposta
+		 * int status = con.getResponseCode();
+		 */
+		HttpURLConnection con = Helper.sendMessageToCloudapp("start", body);
+		int status = con.getResponseCode();
+		// FIXME serve avere anche il content?
+		String cloudappResponse = Helper.getResponseFromConnection(con);
+		con.disconnect();
+
+		Helper.sendCors(he, status);
+		// cambio lo stato nel DB
+		DBC.setStatoDomain(domain, 1);
 
-	private String readBody(InputStream requestBody) {
-		int req;
-		StringBuffer sb = new StringBuffer();
-		try {
-			while ((req = requestBody.read()) != -1)
-				sb.append(Character.toString((char) req));
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return sb.toString();
 	}
 
 }
\ No newline at end of file
diff --git a/domainManager/Domain/src/code/StopHandler.java b/domainManager/Domain/src/code/StopHandler.java
index 8acd5fcf5f5ed6bef8b9fcc6a342b99e7fceee68..7cb5dddac003ce347eb3896e7bccad1c1b23ba37 100644
--- a/domainManager/Domain/src/code/StopHandler.java
+++ b/domainManager/Domain/src/code/StopHandler.java
@@ -1,10 +1,7 @@
 package code;
 
-import java.io.DataOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.HttpURLConnection;
-import java.net.URL;
 import java.sql.SQLException;
 import java.util.ArrayList;
 
@@ -28,155 +25,148 @@ public class StopHandler implements HttpHandler {
 			Helper.sendCors(he, 200);
 			return;
 		}
-
-		String response = "";
+		if (requestMethod.compareToIgnoreCase("POST") != 0) {
+			Helper.sendCors(he, 405);
+			return;
+		}
 
 		// String requestMethod = he.getRequestMethod();
 		// String query = requestedUri.getRawQuery();
-		String body = readBody(he.getRequestBody());
-		String user;//he.getRequestHeaders().get("user").get(0);
+		String body = Helper.readBody(he.getRequestBody());
+		String user;// he.getRequestHeaders().get("user").get(0);
 
-		if((user = Helper.checkTokenGetUser(he)) == null) {
+		if ((user = Helper.checkTokenGetUser(he)) == null) {
 			Helper.sendCors(he, 401);
 			return;
 		}
 
-
-		if (requestMethod.compareToIgnoreCase("POST") == 0) {
-			String domain;
-			try {
-				domain = new JSONObject(body).getString("domain");
-
-//				Dominio d = DBC.getDom(dominio);
-//				String s = user + "-A";
-
-
-				ArrayList<String> ad= DBC.getDomainsAdmin(user);
-
-
-
-				/*
-				 * for(Dominio d : doms){ if( (d.getDomain() == dominio) &&
-				 * d.getUsers().contains(s)) //something here
-				 * System.out.println("OPERAZIONE NON IMPLEMENTATA");
-				 * he.sendResponseHeaders(401,response.length()); OutputStream os =
-				 * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close();
-				 * return; }
-				 */
-				if (!ad.contains(domain)) {
-					Helper.sendCors(he, 401);
-					return;
-				}
-
-			} catch (SQLException|JSONException  e) {
-				e.printStackTrace();
+		String domain;
+		try {
+			domain = new JSONObject(body).getString("domain");
+
+			// Dominio d = DBC.getDom(dominio);
+			// String s = user + "-A";
+
+			ArrayList<String> ad = DBC.getDomainsAdmin(user);
+
+			/*
+			 * for(Dominio d : doms){ if( (d.getDomain() == dominio) &&
+			 * d.getUsers().contains(s)) //something here
+			 * System.out.println("OPERAZIONE NON IMPLEMENTATA");
+			 * he.sendResponseHeaders(401,response.length()); OutputStream os =
+			 * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close();
+			 * return; }
+			 */
+			if (!ad.contains(domain)) {
+				Helper.sendCors(he, 401);
 				return;
 			}
-			// effettuo chiamata a CloudAppManager
-			// preso da https://www.baeldung.com/java-http-request
-
-			// è una chiamata annidata nella risposta alla webapp
-			// -richiesta REST da webApp a /install
-			// -prendo da DB e poi chiamo CloudAppMng su /install
-			// -attendo risposta da CloudAppMng e chiudo
-			// -rispondo a webApp e chiudo
-			// EZ
-
-			//
-			// standard per chiamata in slide
-			// https://www.dir.uniupo.it/pluginfile.php/948883/mod_resource/content/1/FrameworkProgetto5.pdf
-			//
-			// http://127.0.0.1:8080/install
-			URL url = new URL("http://127.0.0.1:3002/stop");// maybe, se CloudAppe è in localhost porta 8080
-			HttpURLConnection con = (HttpURLConnection) url.openConnection();
-			con.setRequestMethod("POST");
-			con.setRequestProperty("Content-Type", "application/json");
-			con.setRequestProperty("Accept", "application/json");
-
-			//Map<String, String> parameters = new HashMap<>();
-
-			// parameters.put("param1", "val");// fix parametri da mandare
-			// leggo da DB domini e riempio (magari famo .DAO??)
-			//parameters.put("domain", dominio);
-
-			con.setDoOutput(true);
-			DataOutputStream out = new DataOutputStream(con.getOutputStream());// inserimento param in call
-			//out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
-			out.writeBytes(body.toString());//era dominio
-			out.flush();
-			out.close();
-
-			// con.setRequestProperty("Content-Type", "application/json");
-			// String contentType = con.getHeaderField("Content-Type");
-
-			con.setConnectTimeout(5000);
-			con.setReadTimeout(5000);
-
-			// leggo risposta
-			int status = con.getResponseCode();
-
-			con.disconnect();
-
-//			if (status > 299) {
-//				System.out.println("pino5");
-//				streamReader = new InputStreamReader(con.getErrorStream());
-//				BufferedReader in = new BufferedReader(streamReader);
-//				String inputLine;
-//				StringBuffer content = new StringBuffer();
-//				while ((inputLine = in.readLine()) != null) {
-//					content.append(inputLine);
-//				}
-//				response = content.toString();
-//				in.close();
-//			} else {
-//				System.out.println("pino6");
-//				streamReader = new InputStreamReader(con.getInputStream());
-//				BufferedReader in = new BufferedReader(streamReader);
-//				String inputLine;
-//				StringBuffer content = new StringBuffer();
-//				while ((inputLine = in.readLine()) != null) {
-//					content.append(inputLine);
-//				}
-//				response = content.toString();
-//				in.close();
-//			}
-//
-//			BufferedReader in = new BufferedReader(
-//					  new InputStreamReader(con.getInputStream()));
-//			String inputLine;
-//			StringBuffer content = new StringBuffer();
-//			while ((inputLine = in.readLine()) != null) {
-//					content.append(inputLine);
-//					}
-//			in.close();
-//
-//			con.disconnect();
-
-			// finita chiamata a CloudApp
-			Helper.sendCors(he,status);
-			// cambio lo stato nel DB
-			DBC.setStatoDomain(domain, 0);
-		}
-//		else {
-//			System.out.println("OPERAZIONE NON IMPLEMENTATA");
-//			he.sendResponseHeaders(501, 0);
-//			OutputStream os = he.getResponseBody();
-//			os.write("OPERAZIONE NON IMPLEMENTATA".getBytes());
-//			os.close();
-//		}
 
-	}
-
-	private String readBody(InputStream requestBody) {
-		int req;
-		StringBuffer sb = new StringBuffer();
-		try {
-			while ((req = requestBody.read()) != -1)
-				sb.append(Character.toString((char) req));
-		} catch (IOException e) {
+		} catch (SQLException | JSONException e) {
 			e.printStackTrace();
+			return;
 		}
-		return sb.toString();
+		// effettuo chiamata a CloudAppManager
+		// preso da https://www.baeldung.com/java-http-request
+
+		// è una chiamata annidata nella risposta alla webapp
+		// -richiesta REST da webApp a /install
+		// -prendo da DB e poi chiamo CloudAppMng su /install
+		// -attendo risposta da CloudAppMng e chiudo
+		// -rispondo a webApp e chiudo
+		// EZ
+
+		//
+		// standard per chiamata in slide
+		// https://www.dir.uniupo.it/pluginfile.php/948883/mod_resource/content/1/FrameworkProgetto5.pdf
+		//
+		// http://127.0.0.1:8080/install
+		/*
+		 * URL url = new URL(Helper.getCloudappURL()+"stop");// maybe, se CloudAppe è in
+		 * localhost porta 8080
+		 * HttpURLConnection con = (HttpURLConnection) url.openConnection();
+		 * con.setRequestMethod("POST");
+		 * con.setRequestProperty("Content-Type", "application/json");
+		 * con.setRequestProperty("Accept", "application/json");
+		 *
+		 * //Map<String, String> parameters = new HashMap<>();
+		 *
+		 * // parameters.put("param1", "val");// fix parametri da mandare
+		 * // leggo da DB domini e riempio (magari famo .DAO??)
+		 * //parameters.put("domain", dominio);
+		 *
+		 * con.setDoOutput(true);
+		 * DataOutputStream out = new DataOutputStream(con.getOutputStream());//
+		 * inserimento param in call
+		 * //out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
+		 * out.writeBytes(body.toString());//era dominio
+		 * out.flush();
+		 * out.close();
+		 *
+		 * // con.setRequestProperty("Content-Type", "application/json");
+		 * // String contentType = con.getHeaderField("Content-Type");
+		 *
+		 * con.setConnectTimeout(5000);
+		 * con.setReadTimeout(5000);
+		 *
+		 * // leggo risposta
+		 * int status = con.getResponseCode();
+		 */
+
+		HttpURLConnection con = Helper.sendMessageToCloudapp("stop", body);
+		int status = con.getResponseCode();
+		// FIXME serve avere anche il content?
+		String cloudappResponse = Helper.getResponseFromConnection(con);
+		con.disconnect();
+
+		// if (status > 299) {
+		// System.out.println("pino5");
+		// streamReader = new InputStreamReader(con.getErrorStream());
+		// BufferedReader in = new BufferedReader(streamReader);
+		// String inputLine;
+		// StringBuffer content = new StringBuffer();
+		// while ((inputLine = in.readLine()) != null) {
+		// content.append(inputLine);
+		// }
+		// response = content.toString();
+		// in.close();
+		// } else {
+		// System.out.println("pino6");
+		// streamReader = new InputStreamReader(con.getInputStream());
+		// BufferedReader in = new BufferedReader(streamReader);
+		// String inputLine;
+		// StringBuffer content = new StringBuffer();
+		// while ((inputLine = in.readLine()) != null) {
+		// content.append(inputLine);
+		// }
+		// response = content.toString();
+		// in.close();
+		// }
+		//
+		// BufferedReader in = new BufferedReader(
+		// new InputStreamReader(con.getInputStream()));
+		// String inputLine;
+		// StringBuffer content = new StringBuffer();
+		// while ((inputLine = in.readLine()) != null) {
+		// content.append(inputLine);
+		// }
+		// in.close();
+		//
+		// con.disconnect();
+
+		// finita chiamata a CloudApp
+		Helper.sendCors(he, status);
+		// cambio lo stato nel DB
+		DBC.setStatoDomain(domain, 0);
+
+		// else {
+		// System.out.println("OPERAZIONE NON IMPLEMENTATA");
+		// he.sendResponseHeaders(501, 0);
+		// OutputStream os = he.getResponseBody();
+		// os.write("OPERAZIONE NON IMPLEMENTATA".getBytes());
+		// os.close();
+		// }
+
 	}
 
 }
diff --git a/domainManager/Domain/src/code/TokenHandler.java b/domainManager/Domain/src/code/TokenHandler.java
index 140e4d293e2e188282cd0d96a48b7cb81121d659..287e8ac00b927e006f4d2c645f0c6caf058410ab 100644
--- a/domainManager/Domain/src/code/TokenHandler.java
+++ b/domainManager/Domain/src/code/TokenHandler.java
@@ -26,7 +26,6 @@ import io.fusionauth.jwt.domain.Algorithm;
 import io.fusionauth.jwt.domain.JWT;
 import io.fusionauth.jwt.rsa.RSAVerifier;
 
-
 public class TokenHandler implements HttpHandler {
 
 	public void handle(HttpExchange he) throws IOException {
@@ -37,7 +36,14 @@ public class TokenHandler implements HttpHandler {
 			Helper.sendCors(he, 200);
 			return;
 		}
-
+		if (requestMethod.compareToIgnoreCase("GET") != 0) {
+			// send Method not allowed
+			// exchange.getResponseHeaders().remove("content-type");
+			// String response = "{\"message\":\"Method not allowed!\"}";
+			// Helper.sendCors(he,405,response);
+			Helper.sendCors(he, 405);
+			return;
+		}
 
 		// String query = requestedUri.getRawQuery();
 		// String body = readBody(he.getRequestBody());
@@ -45,161 +51,158 @@ public class TokenHandler implements HttpHandler {
 
 		// String user = he.getRequestHeaders().get("user").get(0);
 
-		// questo e' strano: headers dice { {} } mentre headers.get("Authorization") riporta il token correttamente
+		// questo e' strano: headers dice { {} } mentre headers.get("Authorization")
+		// riporta il token correttamente
 		// System.out.println("Headers: "+he.getRequestHeaders());
 		// System.out.println("Auth: "+he.getRequestHeaders().get("Authorization"));
 
 		// System.out.println("token: " + token);
 
-		if((user = Helper.checkTokenGetUser(he)) == null) {
+		if ((user = Helper.checkTokenGetUser(he)) == null) {
 			Helper.sendCors(he, 401);
 			return;
 		}
 
-		//System.out.println(body);
+		// System.out.println(body);
 
-		//JSONObject chiave = new JSONObject();
+		// JSONObject chiave = new JSONObject();
 		// chiamo http://localhost:8080/auth/realms/test00/protocol/openid-connect/certs
 		// //probabilmente https
 
-
-
-		//TOKEN____________________________________________________________________
-
-
-
-//		{
-//		    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJXZ2FCRjhidS05dVhhR0pNRzIxQWQtQTV3aW0xZ29oRnhNNXVvNTJrLWhJIn0.eyJleHAiOjE2NjIwMjQwMjgsImlhdCI6MTY2MjAyMzcyOCwiYXV0aF90aW1lIjoxNjYyMDIzNjYyLCJqdGkiOiIzMmUwODFmMi00MmZhLTQ2ZDEtOTliNy05OWY0MTRlNmM4MTciLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QwMCIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiI2MGE4MjdjMS0zZDM3LTQ4ODEtYjU3Ny0zODNlZDUxNjE3MjgiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJteWNsaWVudCIsIm5vbmNlIjoiYTgxZTFhODQtODg4NS00NzAyLWI4ZDEtZjZjNWEwZDFmYzRkIiwic2Vzc2lvbl9zdGF0ZSI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDozMDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsImRlZmF1bHQtcm9sZXMtdGVzdDAwIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIiwic2lkIjoiNTI5NDBhZjMtMzQyNy00NWRkLThhY2EtYTRkNjEyN2E0NDFkIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoiTWFyaW8gUm9zc2kiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJqb2huIiwiZ2l2ZW5fbmFtZSI6Ik1hcmlvIiwiZmFtaWx5X25hbWUiOiJSb3NzaSIsImVtYWlsIjoibWFyaW9AZ21haWwuY29tIn0.JQEmBY9zqVBelNorT3ZNyjXk6Bh0QbR1UO_1MTquS39njq8Fvd1h5ygan_v-YtlcTD9gz38O1OLhZEnK6QoUlUNfBybPrgM8GxcqTnmwYe2I5bJQ_7U6lqdWjgPJTBpLmy7faTj6_i2t0jVNKfTxJgzzbsTiYhJZZp-jvu05ZyMaQ3Q_wUYazb6VvbAkz9F2-8Uk04SxHVUsHjcinoyYd6jQP5TML3cVvwNk_eX2LavQk9o3XCQeBxsq9tUw7HsnSjtvPnuqHMe7S_Yg7_xp6QLVXdQAkOebFcvAMv8hMUMhXk0RV-RryhvQ85gF5NHgdvFhB6FPoXCO-T-SZpi6Qw",
-//		    "expires_in": 300,
-//		    "refresh_expires_in": 1800,
-//		    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJkZDIyM2U5NC1mMjUxLTQ4MDAtYTI3Zi1jYzQzZjZhZTQzODEifQ.eyJleHAiOjE2NjIwMjU1MjgsImlhdCI6MTY2MjAyMzcyOCwianRpIjoiOTEwNWViMGUtMGJmMS00ODRlLTk1M2UtOGRmMTRkMzkwMGI4IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0MDAiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QwMCIsInN1YiI6IjYwYTgyN2MxLTNkMzctNDg4MS1iNTc3LTM4M2VkNTE2MTcyOCIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJteWNsaWVudCIsIm5vbmNlIjoiYTgxZTFhODQtODg4NS00NzAyLWI4ZDEtZjZjNWEwZDFmYzRkIiwic2Vzc2lvbl9zdGF0ZSI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiI1Mjk0MGFmMy0zNDI3LTQ1ZGQtOGFjYS1hNGQ2MTI3YTQ0MWQifQ.ZqcOLMUwHPxQY2I0V9bPIy6TBTeUIcHEbxgnxhJrac0",
-//		    "token_type": "Bearer",
-//		    "id_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJXZ2FCRjhidS05dVhhR0pNRzIxQWQtQTV3aW0xZ29oRnhNNXVvNTJrLWhJIn0.eyJleHAiOjE2NjIwMjQwMjgsImlhdCI6MTY2MjAyMzcyOCwiYXV0aF90aW1lIjoxNjYyMDIzNjYyLCJqdGkiOiI5ZDEyYzUyZi1kZTdlLTQ4ZDctOTEzOC01Yjc5NGRjZjJmZDQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QwMCIsImF1ZCI6Im15Y2xpZW50Iiwic3ViIjoiNjBhODI3YzEtM2QzNy00ODgxLWI1NzctMzgzZWQ1MTYxNzI4IiwidHlwIjoiSUQiLCJhenAiOiJteWNsaWVudCIsIm5vbmNlIjoiYTgxZTFhODQtODg4NS00NzAyLWI4ZDEtZjZjNWEwZDFmYzRkIiwic2Vzc2lvbl9zdGF0ZSI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsImF0X2hhc2giOiJ5MGVaZGowZmZsbFBMN3U3SkxiSzFnIiwiYWNyIjoiMSIsInNpZCI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6Ik1hcmlvIFJvc3NpIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiam9obiIsImdpdmVuX25hbWUiOiJNYXJpbyIsImZhbWlseV9uYW1lIjoiUm9zc2kiLCJlbWFpbCI6Im1hcmlvQGdtYWlsLmNvbSJ9.SjyYBuj4bz7ugyqJibNubaUmwUvuyiocPXrr745PQ8f-AzhI_ITxjG3m7_i9lRw_UpcPQrlSwZTPxhDFUS2eK8YGG4Qg_MEELO6Pvez25x1aLrfDRw2qiT8Eu5t-6fa_N7ztQtWuyw9ThMxmpBdGx3PBDimjIY7m9CHrgSEymJf2LJsC2CF68WvczDEoVVzoUikwmvFbVS1LWCCAOd7b3s07fqP61kyj_XFtcyZv29EIOlUsodPKdQhNiplBNU1st-l0pLRocGEvIjRngSQDzTW4aHAL-jQENW2od0N23IXKtTrPCx33gElfeuA9hvyb6c4d8CNFrw6AHKH0YsoGqQ",
-//		    "not-before-policy": 0,
-//		    "session_state": "52940af3-3427-45dd-8aca-a4d6127a441d",
-//		    "scope": "openid profile email"
-//		}
-
-
-
-
-		//CHIAVE PUBBLICA________________________________________________________________
-//		{
-//			  "keys": [
-//			    {
-//			      "kid": "WgaBF8bu-9uXaGJMG21Ad-A5wim1gohFxM5uo52k-hI",
-//			      "kty": "RSA",
-//			      "alg": "RS256",
-//			      "use": "sig",
-//			      "n": "qoJMLXqIHoBKq5vE7EYVdvxpwqOjPkeTUSb1rdhJs8ZpfCOQk7PYlNu-ykl4PAjYS5sVs5gQSzEwtTZ3vz1y8Ry0V1Xa3c3wk77NzahMO9QnAXa0cqFWhaIr4l0oKhRy-57hNIthkiRuDDlWBREb5sqk8OWxarznEVRykaC4178ccQrv6T3T5VGzxV1lCcBDzQchx_c9_v-tcQVGeyBhdm9uFARbxGG-91kDxSv3MKQbjdwp9csr2QDwuFgcBSB4Ul-9oMCZiVDpgWuoCy_ZxsI22WYAPT8KyaYts-0v7B89hPPweR7TzbmQHEGMfl0U_qEBdQw0N9P2KRapol7RyQ",
-//			      "e": "AQAB",
-//			      "x5c": [
-//			        "MIICmzCCAYMCBgGCkqLMcTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZ0ZXN0MDAwHhcNMjIwODEyMTUxNjU4WhcNMzIwODEyMTUxODM4WjARMQ8wDQYDVQQDDAZ0ZXN0MDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgkwteogegEqrm8TsRhV2/GnCo6M+R5NRJvWt2Emzxml8I5CTs9iU277KSXg8CNhLmxWzmBBLMTC1Nne/PXLxHLRXVdrdzfCTvs3NqEw71CcBdrRyoVaFoiviXSgqFHL7nuE0i2GSJG4MOVYFERvmyqTw5bFqvOcRVHKRoLjXvxxxCu/pPdPlUbPFXWUJwEPNByHH9z3+/61xBUZ7IGF2b24UBFvEYb73WQPFK/cwpBuN3Cn1yyvZAPC4WBwFIHhSX72gwJmJUOmBa6gLL9nGwjbZZgA9PwrJpi2z7S/sHz2E8/B5HtPNuZAcQYx+XRT+oQF1DDQ30/YpFqmiXtHJAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHF8qo6bVlpt/44OxqnSFDY0wIxcunFIbA05ggox/5oAQvdoTD1LB8sfuLa3dtA/ysnnZDytk+vr8V4feYdSvAbtCWVq3yJgt7Dhe7ueP45v4WPJPcPqv8kMYtbkh0mivF2mYVLsEbZK46kBXN4Gkpv1oRDl2b04rfO7abv0dqb3eFs5QiJtKd1az1ckrTYFHdcB5TiiMaPq8/ikmInYKMvRW5H+NmjRvQf6dhKaSj1+cgcZ5xwVlOuubUyJHABKcK6dfnznwA/Ri3fzYXnG5p7mDazdeOQlNRHMK5SM2D6QRunmufg8ulmM+vhxg5ri8o1WqIkA03z+w44vQFy28Xo="
-//			      ],
-//			      "x5t": "ip8I56vsh3-VgNBfzigD3oiIwsg",
-//			      "x5t#S256": "1aZ1N3a_PeHLpZeLIbyfyqUjUKJ9NYWMP7-9H2arYWM"
-//			    },
-//			    {
-//			      "kid": "-0j9GoUrm6Fjs8sxcwaNe9R9mqr7bmgSRQ_nRp72iIs",
-//			      "kty": "RSA",
-//			      "alg": "RSA-OAEP",
-//			      "use": "enc",
-//			      "n": "kpxC6pFuQnQVq8KoO3uMaFrfKC00jBbHfkx8HYuCIblQGap3xjcLGfMbd2EP2Hz2c38dmWcCMS6GgxUU10rlnWc4HKZ5jYCVTEdjU4nkmArzVipG03HzVb-3Eftz1hb4z8Qyjw616tjwQtaQRCvtx9o_UhmxG6YIeJhauN_Zh9z6ZHJ8bY6N242vk_ryJmaTsQ-GyOmU5h16mMrGCjMJ_uMiy38dITySNFGKwnJHaKU8H6V25UuGVgNl-Wjpk5L2bAdSkDEblJ7SsvzoYLGYzCUeCHhztWbNOy_sc31awULdTWEgH8SKvOWf3qZY1siItHBqHLHlHo5lNIMzhowGrw",
-//			      "e": "AQAB",
-//			      "x5c": [
-//			        "MIICmzCCAYMCBgGCkqLNYTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZ0ZXN0MDAwHhcNMjIwODEyMTUxNjU5WhcNMzIwODEyMTUxODM5WjARMQ8wDQYDVQQDDAZ0ZXN0MDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCSnELqkW5CdBWrwqg7e4xoWt8oLTSMFsd+THwdi4IhuVAZqnfGNwsZ8xt3YQ/YfPZzfx2ZZwIxLoaDFRTXSuWdZzgcpnmNgJVMR2NTieSYCvNWKkbTcfNVv7cR+3PWFvjPxDKPDrXq2PBC1pBEK+3H2j9SGbEbpgh4mFq439mH3Ppkcnxtjo3bja+T+vImZpOxD4bI6ZTmHXqYysYKMwn+4yLLfx0hPJI0UYrCckdopTwfpXblS4ZWA2X5aOmTkvZsB1KQMRuUntKy/OhgsZjMJR4IeHO1Zs07L+xzfVrBQt1NYSAfxIq85Z/epljWyIi0cGocseUejmU0gzOGjAavAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAE9kzDnbCjywK6QXECR8citVNaqarf3QQYDzSNakWgrGTTjdStASwEsPJvYJJ5Q6tl6ndqv4gflKq8STrmlHd4Ly+QHnXDwzrzjuSydZDAjYVcacMpZ4PAOAci0R6AmXTynIzyxU92LOlOWiF3ChG7uMRq7yLCNWo1jZxUepGo5z9LyIRGO4Pb878nhWL5PvXC95/vnbx2hSN7T6Uft3j3/94+fgIP4rmO2IWsDuc6fza/J07fK42Mtysy6FqBwhrimDMq+3OnTmdhSRL4pVVrRPSpYO/Czw9ra8hgGoAhu4G4FhTKAr8K75QaMdTtShpBMVNrImOq9kHtOoZJCJW0g="
-//			      ],
-//			      "x5t": "AU5GWMxLtE_hFDiJevWYEql-n4A",
-//			      "x5t#S256": "43Rx3Dsp6j_NLNwVx__Pb6mz07KrCa8xzH0pKOoV06g"
-//			    }
-//			  ]
-//			}
-
-//		The x5c filed value is copied between —–BEGIN CERTIFICATE—–
-//
-//		—–END CERTIFICATE—– directives .
+		// TOKEN____________________________________________________________________
+
+		// {
+		// "access_token":
+		// "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJXZ2FCRjhidS05dVhhR0pNRzIxQWQtQTV3aW0xZ29oRnhNNXVvNTJrLWhJIn0.eyJleHAiOjE2NjIwMjQwMjgsImlhdCI6MTY2MjAyMzcyOCwiYXV0aF90aW1lIjoxNjYyMDIzNjYyLCJqdGkiOiIzMmUwODFmMi00MmZhLTQ2ZDEtOTliNy05OWY0MTRlNmM4MTciLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QwMCIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiI2MGE4MjdjMS0zZDM3LTQ4ODEtYjU3Ny0zODNlZDUxNjE3MjgiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJteWNsaWVudCIsIm5vbmNlIjoiYTgxZTFhODQtODg4NS00NzAyLWI4ZDEtZjZjNWEwZDFmYzRkIiwic2Vzc2lvbl9zdGF0ZSI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDozMDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsImRlZmF1bHQtcm9sZXMtdGVzdDAwIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIiwic2lkIjoiNTI5NDBhZjMtMzQyNy00NWRkLThhY2EtYTRkNjEyN2E0NDFkIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoiTWFyaW8gUm9zc2kiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJqb2huIiwiZ2l2ZW5fbmFtZSI6Ik1hcmlvIiwiZmFtaWx5X25hbWUiOiJSb3NzaSIsImVtYWlsIjoibWFyaW9AZ21haWwuY29tIn0.JQEmBY9zqVBelNorT3ZNyjXk6Bh0QbR1UO_1MTquS39njq8Fvd1h5ygan_v-YtlcTD9gz38O1OLhZEnK6QoUlUNfBybPrgM8GxcqTnmwYe2I5bJQ_7U6lqdWjgPJTBpLmy7faTj6_i2t0jVNKfTxJgzzbsTiYhJZZp-jvu05ZyMaQ3Q_wUYazb6VvbAkz9F2-8Uk04SxHVUsHjcinoyYd6jQP5TML3cVvwNk_eX2LavQk9o3XCQeBxsq9tUw7HsnSjtvPnuqHMe7S_Yg7_xp6QLVXdQAkOebFcvAMv8hMUMhXk0RV-RryhvQ85gF5NHgdvFhB6FPoXCO-T-SZpi6Qw",
+		// "expires_in": 300,
+		// "refresh_expires_in": 1800,
+		// "refresh_token":
+		// "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJkZDIyM2U5NC1mMjUxLTQ4MDAtYTI3Zi1jYzQzZjZhZTQzODEifQ.eyJleHAiOjE2NjIwMjU1MjgsImlhdCI6MTY2MjAyMzcyOCwianRpIjoiOTEwNWViMGUtMGJmMS00ODRlLTk1M2UtOGRmMTRkMzkwMGI4IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0MDAiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QwMCIsInN1YiI6IjYwYTgyN2MxLTNkMzctNDg4MS1iNTc3LTM4M2VkNTE2MTcyOCIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJteWNsaWVudCIsIm5vbmNlIjoiYTgxZTFhODQtODg4NS00NzAyLWI4ZDEtZjZjNWEwZDFmYzRkIiwic2Vzc2lvbl9zdGF0ZSI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiI1Mjk0MGFmMy0zNDI3LTQ1ZGQtOGFjYS1hNGQ2MTI3YTQ0MWQifQ.ZqcOLMUwHPxQY2I0V9bPIy6TBTeUIcHEbxgnxhJrac0",
+		// "token_type": "Bearer",
+		// "id_token":
+		// "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJXZ2FCRjhidS05dVhhR0pNRzIxQWQtQTV3aW0xZ29oRnhNNXVvNTJrLWhJIn0.eyJleHAiOjE2NjIwMjQwMjgsImlhdCI6MTY2MjAyMzcyOCwiYXV0aF90aW1lIjoxNjYyMDIzNjYyLCJqdGkiOiI5ZDEyYzUyZi1kZTdlLTQ4ZDctOTEzOC01Yjc5NGRjZjJmZDQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QwMCIsImF1ZCI6Im15Y2xpZW50Iiwic3ViIjoiNjBhODI3YzEtM2QzNy00ODgxLWI1NzctMzgzZWQ1MTYxNzI4IiwidHlwIjoiSUQiLCJhenAiOiJteWNsaWVudCIsIm5vbmNlIjoiYTgxZTFhODQtODg4NS00NzAyLWI4ZDEtZjZjNWEwZDFmYzRkIiwic2Vzc2lvbl9zdGF0ZSI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsImF0X2hhc2giOiJ5MGVaZGowZmZsbFBMN3U3SkxiSzFnIiwiYWNyIjoiMSIsInNpZCI6IjUyOTQwYWYzLTM0MjctNDVkZC04YWNhLWE0ZDYxMjdhNDQxZCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6Ik1hcmlvIFJvc3NpIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiam9obiIsImdpdmVuX25hbWUiOiJNYXJpbyIsImZhbWlseV9uYW1lIjoiUm9zc2kiLCJlbWFpbCI6Im1hcmlvQGdtYWlsLmNvbSJ9.SjyYBuj4bz7ugyqJibNubaUmwUvuyiocPXrr745PQ8f-AzhI_ITxjG3m7_i9lRw_UpcPQrlSwZTPxhDFUS2eK8YGG4Qg_MEELO6Pvez25x1aLrfDRw2qiT8Eu5t-6fa_N7ztQtWuyw9ThMxmpBdGx3PBDimjIY7m9CHrgSEymJf2LJsC2CF68WvczDEoVVzoUikwmvFbVS1LWCCAOd7b3s07fqP61kyj_XFtcyZv29EIOlUsodPKdQhNiplBNU1st-l0pLRocGEvIjRngSQDzTW4aHAL-jQENW2od0N23IXKtTrPCx33gElfeuA9hvyb6c4d8CNFrw6AHKH0YsoGqQ",
+		// "not-before-policy": 0,
+		// "session_state": "52940af3-3427-45dd-8aca-a4d6127a441d",
+		// "scope": "openid profile email"
+		// }
+
+		// CHIAVE
+		// PUBBLICA________________________________________________________________
+		// {
+		// "keys": [
+		// {
+		// "kid": "WgaBF8bu-9uXaGJMG21Ad-A5wim1gohFxM5uo52k-hI",
+		// "kty": "RSA",
+		// "alg": "RS256",
+		// "use": "sig",
+		// "n":
+		// "qoJMLXqIHoBKq5vE7EYVdvxpwqOjPkeTUSb1rdhJs8ZpfCOQk7PYlNu-ykl4PAjYS5sVs5gQSzEwtTZ3vz1y8Ry0V1Xa3c3wk77NzahMO9QnAXa0cqFWhaIr4l0oKhRy-57hNIthkiRuDDlWBREb5sqk8OWxarznEVRykaC4178ccQrv6T3T5VGzxV1lCcBDzQchx_c9_v-tcQVGeyBhdm9uFARbxGG-91kDxSv3MKQbjdwp9csr2QDwuFgcBSB4Ul-9oMCZiVDpgWuoCy_ZxsI22WYAPT8KyaYts-0v7B89hPPweR7TzbmQHEGMfl0U_qEBdQw0N9P2KRapol7RyQ",
+		// "e": "AQAB",
+		// "x5c": [
+		// "MIICmzCCAYMCBgGCkqLMcTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZ0ZXN0MDAwHhcNMjIwODEyMTUxNjU4WhcNMzIwODEyMTUxODM4WjARMQ8wDQYDVQQDDAZ0ZXN0MDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgkwteogegEqrm8TsRhV2/GnCo6M+R5NRJvWt2Emzxml8I5CTs9iU277KSXg8CNhLmxWzmBBLMTC1Nne/PXLxHLRXVdrdzfCTvs3NqEw71CcBdrRyoVaFoiviXSgqFHL7nuE0i2GSJG4MOVYFERvmyqTw5bFqvOcRVHKRoLjXvxxxCu/pPdPlUbPFXWUJwEPNByHH9z3+/61xBUZ7IGF2b24UBFvEYb73WQPFK/cwpBuN3Cn1yyvZAPC4WBwFIHhSX72gwJmJUOmBa6gLL9nGwjbZZgA9PwrJpi2z7S/sHz2E8/B5HtPNuZAcQYx+XRT+oQF1DDQ30/YpFqmiXtHJAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHF8qo6bVlpt/44OxqnSFDY0wIxcunFIbA05ggox/5oAQvdoTD1LB8sfuLa3dtA/ysnnZDytk+vr8V4feYdSvAbtCWVq3yJgt7Dhe7ueP45v4WPJPcPqv8kMYtbkh0mivF2mYVLsEbZK46kBXN4Gkpv1oRDl2b04rfO7abv0dqb3eFs5QiJtKd1az1ckrTYFHdcB5TiiMaPq8/ikmInYKMvRW5H+NmjRvQf6dhKaSj1+cgcZ5xwVlOuubUyJHABKcK6dfnznwA/Ri3fzYXnG5p7mDazdeOQlNRHMK5SM2D6QRunmufg8ulmM+vhxg5ri8o1WqIkA03z+w44vQFy28Xo="
+		// ],
+		// "x5t": "ip8I56vsh3-VgNBfzigD3oiIwsg",
+		// "x5t#S256": "1aZ1N3a_PeHLpZeLIbyfyqUjUKJ9NYWMP7-9H2arYWM"
+		// },
+		// {
+		// "kid": "-0j9GoUrm6Fjs8sxcwaNe9R9mqr7bmgSRQ_nRp72iIs",
+		// "kty": "RSA",
+		// "alg": "RSA-OAEP",
+		// "use": "enc",
+		// "n":
+		// "kpxC6pFuQnQVq8KoO3uMaFrfKC00jBbHfkx8HYuCIblQGap3xjcLGfMbd2EP2Hz2c38dmWcCMS6GgxUU10rlnWc4HKZ5jYCVTEdjU4nkmArzVipG03HzVb-3Eftz1hb4z8Qyjw616tjwQtaQRCvtx9o_UhmxG6YIeJhauN_Zh9z6ZHJ8bY6N242vk_ryJmaTsQ-GyOmU5h16mMrGCjMJ_uMiy38dITySNFGKwnJHaKU8H6V25UuGVgNl-Wjpk5L2bAdSkDEblJ7SsvzoYLGYzCUeCHhztWbNOy_sc31awULdTWEgH8SKvOWf3qZY1siItHBqHLHlHo5lNIMzhowGrw",
+		// "e": "AQAB",
+		// "x5c": [
+		// "MIICmzCCAYMCBgGCkqLNYTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZ0ZXN0MDAwHhcNMjIwODEyMTUxNjU5WhcNMzIwODEyMTUxODM5WjARMQ8wDQYDVQQDDAZ0ZXN0MDAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCSnELqkW5CdBWrwqg7e4xoWt8oLTSMFsd+THwdi4IhuVAZqnfGNwsZ8xt3YQ/YfPZzfx2ZZwIxLoaDFRTXSuWdZzgcpnmNgJVMR2NTieSYCvNWKkbTcfNVv7cR+3PWFvjPxDKPDrXq2PBC1pBEK+3H2j9SGbEbpgh4mFq439mH3Ppkcnxtjo3bja+T+vImZpOxD4bI6ZTmHXqYysYKMwn+4yLLfx0hPJI0UYrCckdopTwfpXblS4ZWA2X5aOmTkvZsB1KQMRuUntKy/OhgsZjMJR4IeHO1Zs07L+xzfVrBQt1NYSAfxIq85Z/epljWyIi0cGocseUejmU0gzOGjAavAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAE9kzDnbCjywK6QXECR8citVNaqarf3QQYDzSNakWgrGTTjdStASwEsPJvYJJ5Q6tl6ndqv4gflKq8STrmlHd4Ly+QHnXDwzrzjuSydZDAjYVcacMpZ4PAOAci0R6AmXTynIzyxU92LOlOWiF3ChG7uMRq7yLCNWo1jZxUepGo5z9LyIRGO4Pb878nhWL5PvXC95/vnbx2hSN7T6Uft3j3/94+fgIP4rmO2IWsDuc6fza/J07fK42Mtysy6FqBwhrimDMq+3OnTmdhSRL4pVVrRPSpYO/Czw9ra8hgGoAhu4G4FhTKAr8K75QaMdTtShpBMVNrImOq9kHtOoZJCJW0g="
+		// ],
+		// "x5t": "AU5GWMxLtE_hFDiJevWYEql-n4A",
+		// "x5t#S256": "43Rx3Dsp6j_NLNwVx__Pb6mz07KrCa8xzH0pKOoV06g"
+		// }
+		// ]
+		// }
+
+		// The x5c filed value is copied between —–BEGIN CERTIFICATE—–
+		//
+		// —–END CERTIFICATE—– directives .
 
 		// Build an EC verifier using an EC Public Key. A verifier may also be built
 		// using the PublicKey object.
-//		Verifier verifier = ECVerifier.newVerifier(Paths.get("public_key.pem"));
-//
-//		// Verify and decode the encoded string JWT to a rich object
-//		JWT jwt = JWT.getDecoder().decode(encodedJWT, verifier);
-//
-//		// Assert the subject of the JWT is as expected
-//		assertEquals(jwt.subject, "f1e33ab3-027f-47c5-bb07-8dd8ab37a2d3");
+		// Verifier verifier = ECVerifier.newVerifier(Paths.get("public_key.pem"));
+		//
+		// // Verify and decode the encoded string JWT to a rich object
+		// JWT jwt = JWT.getDecoder().decode(encodedJWT, verifier);
+		//
+		// // Assert the subject of the JWT is as expected
+		// assertEquals(jwt.subject, "f1e33ab3-027f-47c5-bb07-8dd8ab37a2d3");
 		// verifica token
 		// if token !ok return
 
-//		try {
-//			verificaToken(token,signature);
-//		} catch (NoSuchAlgorithmException | IOException | JSONException e1) {
-//			e1.printStackTrace();
-//		}
-
-		 // ricavo da token
+		// try {
+		// verificaToken(token,signature);
+		// } catch (NoSuchAlgorithmException | IOException | JSONException e1) {
+		// e1.printStackTrace();
+		// }
 
-		if (requestMethod.compareToIgnoreCase("GET") == 0) {
+		// ricavo da token
 
-			JSONObject res = new JSONObject();
-			JSONArray rs = new JSONArray();
 
-			ArrayList<String> domList;
-			try {
-				domList = DBC.getDomainsUser(user);
+		JSONObject res = new JSONObject();
+		JSONArray rs = new JSONArray();
 
-				for (String k : domList) {
-					JSONObject ogg = new JSONObject();
-					ogg.put("nome", k);
+		ArrayList<String> domList;
+		try {
+			domList = DBC.getDomainsUser(user);
 
-					Dominio d = DBC.getDomain(k);
-					ogg.put("stato", d.getStatus());
-					ogg.put("admin", false);
+			for (String k : domList) {
+				JSONObject ogg = new JSONObject();
+				ogg.put("nome", k);
 
-					rs.put(ogg);
-				}
-				domList.clear();
-				domList = DBC.getDomainsAdmin(user);
-				for (String k : domList) {
-					JSONObject ogg = new JSONObject();
-					ogg.put("nome", k);// domain
+				Dominio d = DBC.getDomain(k);
+				ogg.put("stato", d.getStatus());
+				ogg.put("admin", false);
 
-					Dominio d = DBC.getDomain(k);
-					ogg.put("stato", d.getStatus());
-					ogg.put("admin", true);
+				rs.put(ogg);
+			}
+			domList.clear();
+			domList = DBC.getDomainsAdmin(user);
+			for (String k : domList) {
+				JSONObject ogg = new JSONObject();
+				ogg.put("nome", k);// domain
 
-					rs.put(ogg);
+				Dominio d = DBC.getDomain(k);
+				ogg.put("stato", d.getStatus());
+				ogg.put("admin", true);
 
-				}
+				rs.put(ogg);
 
-				res.put("response", rs);
-			} catch (SQLException | JSONException e) {
-				e.printStackTrace();
-				return;
 			}
 
-			String response = res.toString();
-			Helper.sendCors(he,200,response);
-
-			// JSONObject j=new JSONObject();
-			// j.append("User", DBC.getDomainsUser(user));
+			res.put("response", rs);
+		} catch (SQLException | JSONException e) {
+			e.printStackTrace();
+			return;
+		}
 
-			// j=(""+":"+);
+		String response = res.toString();
+		Helper.sendCors(he, 200, response);
 
-		} else {
-			// send Method not allowed
-			// exchange.getResponseHeaders().remove("content-type");
-			String response = "{\"message\":\"Method not allowed!\"}";
-			Helper.sendCors(he,405,response);
-		}
+		// JSONObject j=new JSONObject();
+		// j.append("User", DBC.getDomainsUser(user));
 
+		// j=(""+":"+);
 	}
 
-	public static String verificaToken(String encodedJWT,String signature) throws IOException, JSONException, NoSuchAlgorithmException {
-
-		URL url = new URL("http://localhost:8080/realms/test00/protocol/openid-connect/certs");// maybe, se
-																									// CloudAppe è i																				// localhost porta
-																									// 8080
+	public static String verificaToken(String encodedJWT, String signature)
+			throws IOException, JSONException, NoSuchAlgorithmException {
+
+		URL url = new URL(
+				Helper.getKeycloakURL() + "realms/" + Helper.getKeycloakRealm() + "/protocol/openid-connect/certs");// maybe,
+																													// se
+																													// CloudAppe
+																													// è
+																													// localhost
+																													// porta
+																													// 8080
 		HttpURLConnection con = (HttpURLConnection) url.openConnection();
 		// 3000/install da inserire
 		con.setRequestMethod("GET");
@@ -209,11 +212,12 @@ public class TokenHandler implements HttpHandler {
 		con.setConnectTimeout(5000);
 		con.setReadTimeout(5000);
 
-
-//	DataOutputStream out = new DataOutputStream(con.getOutputStream());// inserimento param in call
-//	out.writeBytes(j.toString());// ParameterStringBuilder.getParamsString(parameters));
-//	out.flush();
-//	out.close();
+		// DataOutputStream out = new DataOutputStream(con.getOutputStream());//
+		// inserimento param in call
+		// out.writeBytes(j.toString());//
+		// ParameterStringBuilder.getParamsString(parameters));
+		// out.flush();
+		// out.close();
 
 		// con.setRequestProperty("Content-Type", "application/json");
 		// String contentType = con.getHeaderField("Content-Type");
@@ -234,14 +238,14 @@ public class TokenHandler implements HttpHandler {
 		JSONArray arr = j.getJSONArray("keys");
 		JSONObject ogg = arr.getJSONObject(0);
 		String chiave = ogg.getJSONArray("x5c").get(0).toString();
-		String cert = "-----BEGIN CERTIFICATE-----\n" + chiave +"\n-----END CERTIFICATE-----";
+		String cert = "-----BEGIN CERTIFICATE-----\n" + chiave + "\n-----END CERTIFICATE-----";
 
 		Verifier verifier = RSAVerifier.newVerifier(cert);
 		try {
 			int index = encodedJWT.lastIndexOf('.');
 			byte[] message = encodedJWT.substring(0, index).getBytes(StandardCharsets.UTF_8);
 			// message = token.header + token.body (tokSplit[0]+"."+tokSplit[1])
-			byte[] signatureBytes = Base64.getUrlDecoder().decode(signature);//signature = tokSplit[2]
+			byte[] signatureBytes = Base64.getUrlDecoder().decode(signature);// signature = tokSplit[2]
 			verifier.verify(Algorithm.RS256, message, signatureBytes);
 		} catch (InvalidJWTSignatureException e) {
 			return null;
@@ -249,40 +253,39 @@ public class TokenHandler implements HttpHandler {
 		// Verify and decode the encoded string JWT to a rich object
 		JWT jwt = JWT.getDecoder().decode(encodedJWT, verifier);
 		/*
-		{
-			"aud" : "account",
-			"exp" : 1662288513,
-			"iat" : 1662288213,
-			"iss" : "http://localhost:8080/realms/test00",
-			"sub" : "60a827c1-3d37-4881-b577-383ed5161728",
-			"jti" : "719379f0-0b22-40fd-ae35-0f523ffd9d4e",
-			"auth_time" : 1662285948,
-			"typ" : "Bearer",
-			"azp" : "myclient",
-			"nonce" : "a81e1a84-8885-4702-b8d1-f6c5a0d1fc4d",
-			"session_state" : "969cdd2d-07db-4366-8180-d1ff15ddce20",
-			"acr" : "0",
-			"allowed-origins" : [ "http://localhost:3000" ],
-			"realm_access" : {
-				"roles" : [ "offline_access", "default-roles-test00", "uma_authorization" ]
-			},
-			"resource_access" : {
-				"account" : {
-				"roles" : [ "manage-account", "manage-account-links", "view-profile" ]
-				}
-			},
-			"scope" : "openid profile email",
-			"sid" : "969cdd2d-07db-4366-8180-d1ff15ddce20",
-			"email_verified" : false,
-			"name" : "Mario Rossi",
-			"preferred_username" : "john",
-			"given_name" : "Mario",
-			"family_name" : "Rossi",
-			"email" : "mario@gmail.com"
-		}
-		*/
+		 * {
+		 * "aud" : "account",
+		 * "exp" : 1662288513,
+		 * "iat" : 1662288213,
+		 * "iss" : "http://localhost:8080/realms/test00",
+		 * "sub" : "60a827c1-3d37-4881-b577-383ed5161728",
+		 * "jti" : "719379f0-0b22-40fd-ae35-0f523ffd9d4e",
+		 * "auth_time" : 1662285948,
+		 * "typ" : "Bearer",
+		 * "azp" : "myclient",
+		 * "nonce" : "a81e1a84-8885-4702-b8d1-f6c5a0d1fc4d",
+		 * "session_state" : "969cdd2d-07db-4366-8180-d1ff15ddce20",
+		 * "acr" : "0",
+		 * "allowed-origins" : [ "http://localhost:3000" ],
+		 * "realm_access" : {
+		 * "roles" : [ "offline_access", "default-roles-test00", "uma_authorization" ]
+		 * },
+		 * "resource_access" : {
+		 * "account" : {
+		 * "roles" : [ "manage-account", "manage-account-links", "view-profile" ]
+		 * }
+		 * },
+		 * "scope" : "openid profile email",
+		 * "sid" : "969cdd2d-07db-4366-8180-d1ff15ddce20",
+		 * "email_verified" : false,
+		 * "name" : "Mario Rossi",
+		 * "preferred_username" : "john",
+		 * "given_name" : "Mario",
+		 * "family_name" : "Rossi",
+		 * "email" : "mario@gmail.com"
+		 * }
+		 */
 		return jwt.getString("preferred_username");
 	}
 
-
 }
\ No newline at end of file