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