diff --git a/domainManager/Domain/.classpath b/domainManager/Domain/.classpath index e8e6ce422054821049a8359bfb81c1052d406a0d..386982aa99021cecb8a77606941eca46b5533f62 100644 --- a/domainManager/Domain/.classpath +++ b/domainManager/Domain/.classpath @@ -12,5 +12,10 @@ <attribute name="javadoc_location" value="jar:file:/home/ale/Scrivania/ProgettoPissir/pissirsmarthome/domainManager/Domain/org.json-chargebee-1.0-javadoc.jar!/"/> </attributes> </classpathentry> + <classpathentry kind="lib" path="fusionauth-jwt-4.2.0.jar"> + <attributes> + <attribute name="javadoc_location" value="jar:platform:/resource/Domain/fusionauth-jwt-4.2.0-javadoc.jar!/"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/domainManager/Domain/.settings/org.eclipse.jdt.core.prefs b/domainManager/Domain/.settings/org.eclipse.jdt.core.prefs index f2525a8b92227620edba3ac50006e8c33c8ff2c6..a58ebdcad300d0a088dcbd63941d2c89e78a4f98 100644 --- a/domainManager/Domain/.settings/org.eclipse.jdt.core.prefs +++ b/domainManager/Domain/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,6 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=11 diff --git a/domainManager/Domain/DBPissirDomain.db b/domainManager/Domain/DBPissirDomain.db index 135b5921790a218a4bf40dabda4f8e01063cf318..369ec3bcc73db5386bf2d475840aab8109e1f528 100644 Binary files a/domainManager/Domain/DBPissirDomain.db and b/domainManager/Domain/DBPissirDomain.db differ diff --git a/domainManager/Domain/bin/.gitignore b/domainManager/Domain/bin/.gitignore deleted file mode 100644 index d4d38c0b1dae9673434faa16a34b33fcaa070682..0000000000000000000000000000000000000000 --- a/domainManager/Domain/bin/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/code/ -/db/ diff --git a/domainManager/Domain/bin/code/DeleteHandler.class b/domainManager/Domain/bin/code/DeleteHandler.class index 99bb56d94c1951fdb5a5693015bafab4dad1453b..12f2f29fb32bcca9452e02220bcd62429cfb0234 100644 Binary files a/domainManager/Domain/bin/code/DeleteHandler.class and b/domainManager/Domain/bin/code/DeleteHandler.class differ diff --git a/domainManager/Domain/bin/code/InstallHandler.class b/domainManager/Domain/bin/code/InstallHandler.class index d14727bb3c464139c9cc7bbda616f3c47962e478..d95098195748d4c9333e993fe833d90ce54be383 100644 Binary files a/domainManager/Domain/bin/code/InstallHandler.class and b/domainManager/Domain/bin/code/InstallHandler.class differ diff --git a/domainManager/Domain/bin/code/StartHandler.class b/domainManager/Domain/bin/code/StartHandler.class index a18fda9c95907507aec0bc67daffea562b1f8f07..48d0496e4b75648e2ed1ea2939ce931b9c6a0854 100644 Binary files a/domainManager/Domain/bin/code/StartHandler.class and b/domainManager/Domain/bin/code/StartHandler.class differ diff --git a/domainManager/Domain/bin/code/StopHandler.class b/domainManager/Domain/bin/code/StopHandler.class index 5ceb70a050b1e442bca98250db20f871689402ac..e6d051fe271ef629dee4e3b7fc2aedcc3296326d 100644 Binary files a/domainManager/Domain/bin/code/StopHandler.class and b/domainManager/Domain/bin/code/StopHandler.class differ diff --git a/domainManager/Domain/fusionauth-jwt-4.2.0-javadoc.jar b/domainManager/Domain/fusionauth-jwt-4.2.0-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..b267e75e6a75d661fa7723086acdd37431e91f9c Binary files /dev/null and b/domainManager/Domain/fusionauth-jwt-4.2.0-javadoc.jar differ diff --git a/domainManager/Domain/fusionauth-jwt-4.2.0.jar b/domainManager/Domain/fusionauth-jwt-4.2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..6a8726acf3567e418ab4c83557c44b4b2a6057d2 Binary files /dev/null and b/domainManager/Domain/fusionauth-jwt-4.2.0.jar differ diff --git a/domainManager/Domain/src/code/DeleteHandler.java b/domainManager/Domain/src/code/DeleteHandler.java index 3a5a78467327a62af117a71ab85f879a8f6a78f9..679f789f4ad1d0cf63a99b0889bf4329c20efbcb 100644 --- a/domainManager/Domain/src/code/DeleteHandler.java +++ b/domainManager/Domain/src/code/DeleteHandler.java @@ -133,6 +133,7 @@ public class DeleteHandler implements HttpHandler{ URL url = new URL("http://127.0.0.1:3000");//maybe, se CloudAppe è in localhost porta 8080 + //aggiungere 3000/delete HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json"); diff --git a/domainManager/Domain/src/code/Domain.java b/domainManager/Domain/src/code/Domain.java index 5ba15cae669b6ae0297e2343136aa4a6ce5872ab..5be7f00b4db2866a6bc72656e0ecd2481a23484d 100644 --- a/domainManager/Domain/src/code/Domain.java +++ b/domainManager/Domain/src/code/Domain.java @@ -1,15 +1,25 @@ package code; +import java.io.BufferedReader; +import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; import java.net.InetSocketAddress; +import java.net.URL; +import java.sql.SQLException; import com.sun.net.httpserver.HttpServer; import db.Connect; +import db.DBC; +import java.util.ArrayList; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; +import org.json.JSONException; + public class Domain { static public int port=3001; @@ -26,6 +36,96 @@ public class Domain { HttpServer server=HttpServer.create(new InetSocketAddress(port),0); //Connect.connect(); + + + //chiamata per popolare moduli a + + + 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); + +// 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"); + + // 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(); + System.out.println(in); + + String s=in.toString(); + //ArrayList<String>arr=s. + + String []s1=s.split(","); + //ArrayList<String> arr= new ArrayList<String>(); + for(int i=0;i<s1.length;i++) { + String remZip=s1[i].substring(0, s1[i].length()-4); + //arr.add(s1[i]); + //String[] curr=s1[i].split("-"); + String[] curr=remZip.split("-"); + for(int j=0;j<curr.length;j++) { + if(curr[j].length()>1) { + String a=curr[0]; + String b=curr[1]; + try { + DBC.fillModules(a, b, s1[i]); + } catch (SQLException | JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + else { + String a=curr[0]; + try { + DBC.fillModules(a,"Arduino1", s1[i]); + } catch (SQLException | JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + } + } + + + + + + + + + + + + + + + + + + + + + @@ -39,6 +139,8 @@ public class Domain { server.createContext("/start/", new StartHandler()); server.createContext("/stop/", new StopHandler()); server.createContext("/delete/", new DeleteHandler()); + server.createContext("/secured/domains/", new TokenHandler()); + server.createContext("/secured/services/", new ServicesHandler()); server.start(); } diff --git a/domainManager/Domain/src/code/InstallHandler.java b/domainManager/Domain/src/code/InstallHandler.java index 507c5b4e4a36cd73b0cae027db16b9a2f428f374..5c2913999e112b57258c093c5165e6a9d20ef447 100644 --- a/domainManager/Domain/src/code/InstallHandler.java +++ b/domainManager/Domain/src/code/InstallHandler.java @@ -1,18 +1,16 @@ package code; - import java.net.HttpURLConnection; import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpServer; -//import StuffHandler.CustomObject; - import db.DBC; import db.Dominio; import java.nio.file.Files; import java.nio.file.Path; +import java.security.NoSuchAlgorithmException; import java.sql.SQLException; import com.sun.net.httpserver.HttpExchange; @@ -33,39 +31,64 @@ import java.net.URI; import java.net.URL; import java.net.URLDecoder; +public class InstallHandler implements HttpHandler { - -public class InstallHandler implements HttpHandler{ - @Override public void handle(HttpExchange he) throws IOException { - + URI requestedUri = he.getRequestURI(); String requestMethod = he.getRequestMethod(); - + String response = "ayyyyNstall\n"; - - + String query = requestedUri.getRawQuery(); String body = readBody(he.getRequestBody()); + + //he.getRequestHeaders().get("user").get(0); - String user = he.getRequestHeaders().get("user").get(0); - System.out.println(body); + String token=he.getRequestHeaders().get("Authorization").get(0).substring(7); + String user =""; - if (requestMethod.compareTo("POST") == 0 || requestMethod.compareTo("post") == 0) { - - + + + try { + //JSONObject tok=new JSONObject(token); + //String accessToken=tok.getString("access_token"); + String[] tokSplit=token.split("."); + if(tokSplit.length!=3)return;//controllo che il token abbia header,body e signature(abbia 2 punti :s) + //int scnddot=accessToken.lastIndexOf(".");//dopo questo indice è tutta signature + String signature=tokSplit[2]; + user=TokenHandler.verificaToken(token,signature); + + if(user.equals(""))return; + + + } catch (NoSuchAlgorithmException | IOException | JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + + + + + //verifica user + + System.out.println(body); + + if (requestMethod.compareToIgnoreCase("POST") == 0) {// || requestMethod.compareTo("post") == 0) { + + JSONObject j = null; try { - JSONObject j=new JSONObject(body); + j = new JSONObject(body); System.out.println(j.toString()); - String dm= j.getString("domain"); + String dm = j.getString("domain"); System.out.println( requestMethod + "\n" + query + "\n" + body + "\n" + response + "\n" + user + "\n" + dm + "\n"); - - try { + + //try { Dominio d = DBC.getDom(dm); - if (d!=null) { + if (d != null) { System.out.println("DOMINIO GIA' IN USO"); response = "DOMINIO GIA' IN USO"; he.sendResponseHeaders(401, response.length()); @@ -74,112 +97,111 @@ public class InstallHandler implements HttpHandler{ os.write(response.getBytes()); os.close(); return; - }else { - String s = user + "-A"; - - JSONArray arr=j.toJSONArray(j.names()); - String usrs= arr.get(3).toString(); - usrs=usrs.concat(","+s); - j.put("users", usrs); - //JSONObject person = jsonArray.getJSONObject(0).getJSONObject("person"); - //person.put("name", "Sammie"); - - System.out.println("kek"+j); - DBC.insertDom(j); - - - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - - } catch (JSONException e1) { + } catch (JSONException | SQLException e) { // TODO Auto-generated catch block - e1.printStackTrace(); + e.printStackTrace(); } - - - - - - - - - - - //effettuo chiamata a CloudAppManager - //preso da https://www.baeldung.com/java-http-request - - //è una chiamata annidata nella risposta alla webapp + // 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 + // -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 + // 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:3000");//maybe, se CloudAppe è in localhost porta 8080 + // http://127.0.0.1:8080/install + URL url = new URL("http://127.0.0.1:3000");// maybe, se CloudAppe è in localhost porta 8080 HttpURLConnection con = (HttpURLConnection) url.openConnection(); + // 3000/install da inserire 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??) - con.setDoOutput(true); - DataOutputStream out = new DataOutputStream(con.getOutputStream());//inserimento param in call - out.writeBytes(ParameterStringBuilder.getParamsString(parameters)); - out.flush(); - out.close(); - - //con.setRequestProperty("Content-Type", "application/json"); - //String contentType = con.getHeaderField("Content-Type"); - con.setConnectTimeout(5000); con.setReadTimeout(5000); - //leggo risposta + 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"); + + // 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); - } + content.append(inputLine); + } in.close(); - con.disconnect(); - - //finita chiamata a CloudApp - - //f.close(); + // finita chiamata a CloudApp + + // f.close(); OutputStream os = he.getResponseBody(); - - he.sendResponseHeaders(status, response.length());//status - os.write(response.getBytes()); + he.sendResponseHeaders(status, content.length()); + os.write(content.toString().getBytes()); + // he.sendResponseHeaders(status, response.length());//status + // os.write(response.getBytes()); os.close(); + + if (status==200) { + + //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); + DBC.insertAmministra(user, domain); + + JSONArray arrUsers = j.getJSONArray("users"); + for(int i=0;i<arrUsers.length();i++) { + if(((JSONObject) arrUsers.get(i)).getString("role").equals("A")) { + String usr=((JSONObject) arrUsers.get(i)).getString("user"); + DBC.insertAmministra(usr, domain); + } + else if(((JSONObject) arrUsers.get(i)).getString("role").equals("U")) { + String usr=((JSONObject) arrUsers.get(i)).getString("user"); + DBC.insertUsa(usr, domain); + } + } + JSONArray arrServ = j.getJSONArray("services"); + for(int i=0;i<arrServ.length();i++) { + String modul=((JSONObject) arrUsers.get(i)).getString("service"); + String host=((JSONObject) arrUsers.get(i)).getString("host"); + DBC.insertService(domain,host,modul); + } + + //non ci sono controlli!!!! + + + } catch (SQLException | JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } - } - + private String readBody(InputStream requestBody) { int req; StringBuffer sb = new StringBuffer(); @@ -191,26 +213,5 @@ public class InstallHandler implements HttpHandler{ } return sb.toString(); } - - - - - - - - - - - - - - - - - - - - - } diff --git a/domainManager/Domain/src/code/ServicesHandler.java b/domainManager/Domain/src/code/ServicesHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..2faba2dbf0084600ece9ff4154238ad91d17e068 --- /dev/null +++ b/domainManager/Domain/src/code/ServicesHandler.java @@ -0,0 +1,169 @@ +package code; + + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.security.KeyFactory; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.spec.X509EncodedKeySpec; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Base64; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; + +import db.DBC; +import db.Dominio; +import io.fusionauth.jwt.Verifier; +import io.fusionauth.jwt.domain.JWT; +import io.fusionauth.jwt.ec.ECVerifier; + + +public class ServicesHandler implements HttpHandler{ + + + public void handle(HttpExchange he) throws IOException { + + URI requestedUri = he.getRequestURI(); + String requestMethod = he.getRequestMethod(); + + String response = ""; + + String query = requestedUri.getRawQuery(); + String body = readBody(he.getRequestBody()); + String user=""; + + // String user = he.getRequestHeaders().get("user").get(0); + String token = he.getRequestHeaders().get("Authorization").get(0).substring(7);// taglio bearer + try { + //JSONObject tok=new JSONObject(token); + //String accessToken=tok.getString("access_token"); + String[] tokSplit=token.split("."); + if(tokSplit.length!=3)return;//controllo che il token abbia header,body e signature(abbia 2 punti :s) + //int scnddot=accessToken.lastIndexOf(".");//dopo questo indice è tutta signature + String signature=tokSplit[2]; + user=TokenHandler.verificaToken(token,signature); + + if(user.equals(""))return; + + + } catch (NoSuchAlgorithmException | IOException | JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + + + + if (requestMethod.compareToIgnoreCase("GET") == 0) { + + JSONObject res = new JSONObject(); + JSONArray rs = new JSONArray(); + + ArrayList<String> modulesList; + try { + modulesList = DBC.getModules(); + + for (String k : modulesList) { + rs.put(k); + } + + } catch (SQLException | JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + res.put("response", rs); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + int status = 200; + + OutputStream os = he.getResponseBody(); + he.sendResponseHeaders(status, res.length()); + os.write(res.toString().getBytes()); + // he.sendResponseHeaders(status, response.length());//status + // os.write(response.getBytes()); + os.close(); + + // JSONObject j=new JSONObject(); + // j.append("User", DBC.getDomainsUser(user)); + + // j=(""+":"+); + + } + + } + + 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/StartHandler.java b/domainManager/Domain/src/code/StartHandler.java index df172450433ac18729f5ed99a0491f53c9c3ce33..40436e6dd568d49c480a2cfba88c1c1387a0a1f4 100644 --- a/domainManager/Domain/src/code/StartHandler.java +++ b/domainManager/Domain/src/code/StartHandler.java @@ -17,6 +17,8 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.json.JSONException; + import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; @@ -47,7 +49,9 @@ public class StartHandler implements HttpHandler { String query = requestedUri.getRawQuery(); String body = readBody(he.getRequestBody()); String response = "AYYYYY"; - String user = he.getRequestHeaders().get("user").get(0); + //String user = he.getRequestHeaders().get("user").get(0); + String token=he.getRequestHeaders().get("Authorization").get(0).substring(7); + String user = ""; // se dominio del body ha admin chi fa chiamata allora continua @@ -58,8 +62,9 @@ public class StartHandler implements HttpHandler { try { - Dominio d = DBC.getDom(dominio); - String s = user + "-A"; +// Dominio d = DBC.getDom(dominio); +// String s = user + "-A"; + ArrayList<String> ad= DBC.getDomainsAdmin(dominio); /* * for(Dominio d : doms){ if( (d.getDomain() == dominio) && * d.getUsers().contains(s)) //something here @@ -68,7 +73,7 @@ public class StartHandler implements HttpHandler { * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close(); * return; } */ - if (!d.getUsers().contains(s)) { + if (!ad.contains(user)) {//if (!d.getUsers().contains(s)) { // he.sendResponseHeaders(401,0 ); System.out.println("NON AUTORIZZATO"); response = "NON AUTORIZZATO"; @@ -87,7 +92,7 @@ public class StartHandler implements HttpHandler { return; } - } catch (SQLException e) { + } catch (SQLException|JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -109,7 +114,7 @@ public class StartHandler implements HttpHandler { con.setDoOutput(true); // System.out.println("pino2"); DataOutputStream out = new DataOutputStream(con.getOutputStream());// inserimento param in call - out.writeBytes(ParameterStringBuilder.getParamsString(parameters)); + out.writeBytes(body.toString());//(ParameterStringBuilder.getParamsString(parameters));//j.toString(); out.flush(); out.close(); diff --git a/domainManager/Domain/src/code/StopHandler.java b/domainManager/Domain/src/code/StopHandler.java index e0040212857526b2ada5436d86ac909f14c35ccd..57d7f11e47a1d9c757af8265772560b47f1b5d0e 100644 --- a/domainManager/Domain/src/code/StopHandler.java +++ b/domainManager/Domain/src/code/StopHandler.java @@ -11,9 +11,12 @@ import java.net.HttpURLConnection; import java.net.URI; import java.net.URL; import java.sql.SQLException; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import org.json.JSONException; + import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; @@ -34,8 +37,11 @@ public class StopHandler implements HttpHandler { String query = requestedUri.getRawQuery(); String body = readBody(he.getRequestBody()); // String response = "AYYYYY"; - String user = he.getRequestHeaders().get("user").get(0); - + String token=he.getRequestHeaders().get("Authorization").get(0).substring(7); + String user = "";//he.getRequestHeaders().get("user").get(0); + //verifica user keycloak + + if (requestMethod.compareTo("POST") == 0 || requestMethod.compareTo("post") == 0) { String dominio = body.substring(7); @@ -44,8 +50,14 @@ public class StopHandler implements HttpHandler { try { - Dominio d = DBC.getDom(dominio); - String s = user + "-A"; +// Dominio d = DBC.getDom(dominio); +// String s = user + "-A"; + + + ArrayList<String> ad= DBC.getDomainsAdmin(dominio); + + + /* * for(Dominio d : doms){ if( (d.getDomain() == dominio) && * d.getUsers().contains(s)) //something here @@ -54,7 +66,7 @@ public class StopHandler implements HttpHandler { * he.getResponseBody(); os.write("NON AUTORIZZATO".getBytes()); os.close(); * return; } */ - if (!d.getUsers().contains(s)) { + if (!ad.contains(user)) { // he.sendResponseHeaders(401,0 ); System.out.println("NON AUTORIZZATO"); response = "NON AUTORIZZATO"; @@ -73,11 +85,10 @@ public class StopHandler implements HttpHandler { return; } - } catch (SQLException e) { + } catch (SQLException|JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); - } - + } // effettuo chiamata a CloudAppManager // preso da https://www.baeldung.com/java-http-request diff --git a/domainManager/Domain/src/code/TokenHandler.java b/domainManager/Domain/src/code/TokenHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..217160d4cd414fb88c2779f6bd731d31fb96da0d --- /dev/null +++ b/domainManager/Domain/src/code/TokenHandler.java @@ -0,0 +1,300 @@ +package code; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.security.KeyFactory; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.spec.X509EncodedKeySpec; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Base64; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; + +import db.DBC; +import db.Dominio; +import io.fusionauth.jwt.Verifier; +import io.fusionauth.jwt.domain.JWT; +import io.fusionauth.jwt.ec.ECVerifier; + + +public class TokenHandler implements HttpHandler { + + public void handle(HttpExchange he) throws IOException { + + URI requestedUri = he.getRequestURI(); + String requestMethod = he.getRequestMethod(); + + String response = ""; + + String query = requestedUri.getRawQuery(); + String body = readBody(he.getRequestBody()); + String user=""; + + // String user = he.getRequestHeaders().get("user").get(0); + String token = he.getRequestHeaders().get("Authorization").get(0).substring(7);// taglio bearer + try { + //JSONObject tok=new JSONObject(token); + //String accessToken=tok.getString("access_token"); + String[] tokSplit=token.split("."); + if(tokSplit.length!=3)return;//controllo che il token abbia header,body e signature(abbia 2 punti :s) + //int scnddot=accessToken.lastIndexOf(".");//dopo questo indice è tutta signature + String signature=tokSplit[2]; + user=verificaToken(token,signature); + + if(user.equals(""))return; + + + } catch (NoSuchAlgorithmException | IOException | JSONException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + + //System.out.println(body); + + //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 . + + // 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"); + // verifica token + // if token !ok return + +// try { +// verificaToken(token,signature); +// } catch (NoSuchAlgorithmException | IOException | JSONException e1) { +// // TODO Auto-generated catch block +// e1.printStackTrace(); +// } + + // ricavo da token + + if (requestMethod.compareToIgnoreCase("GET") == 0) { + + JSONObject res = new JSONObject(); + JSONArray rs = new JSONArray(); + + ArrayList<String> domList; + try { + domList = DBC.getDomainsUser(user); + + for (String k : domList) { + JSONObject ogg = new JSONObject(); + ogg.put("nome", k); + + Dominio d = DBC.getDomain(k); + ogg.put("stato", d.getStatus()); + ogg.put("admin", false); + + 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", true); + + rs.put(ogg); + + } + + } catch (SQLException | JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + res.put("response", rs); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + int status = 200; + + OutputStream os = he.getResponseBody(); + he.sendResponseHeaders(status, res.length()); + os.write(res.toString().getBytes()); + // he.sendResponseHeaders(status, response.length());//status + // os.write(response.getBytes()); + os.close(); + + // JSONObject j=new JSONObject(); + // j.append("User", DBC.getDomainsUser(user)); + + // j=(""+":"+); + + } + + } + + 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(); + } + + + + + + + public static String verificaToken(String encodedJWT,String signature) throws IOException, JSONException, NoSuchAlgorithmException { + + URL url = new URL("http://localhost:8080/auth/realms/test00/protocol/openid-connect/certs");// maybe, se + // CloudAppe è i // localhost porta + // 8080 + 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); + +// 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"); + + // 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(); + + JSONObject j = new JSONObject(content); + JSONArray arr = j.getJSONArray("Keys"); + JSONObject ogg = arr.getJSONObject(0); + String chiave = ogg.getString("x5c"); + String cert = "—–BEGIN CERTIFICATE—–\n" + chiave + "\n" + "—–END CERTIFICATE—–"; + + + + Verifier verifier = ECVerifier.newVerifier(cert); + + //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); + String nome=jwt.getString("name"); + System.out.println("_________________"+nome); + //jwt.subject.equals(j) + // Assert the subject of the JWT is as expected + if(!jwt.subject.equals( signature)) { + System.out.println("ERRORE TOKEN"); + return ""; + } + return nome;//"f1e33ab3-027f-47c5-bb07-8dd8ab37a2d3" + // verifica token + + + + + + + } + +} \ No newline at end of file diff --git a/domainManager/Domain/src/db/DBC.java b/domainManager/Domain/src/db/DBC.java index 3bc1509960b579f515c4b13e5ddd809e9da3cddf..ed711067d111ba9184b0d4dc7b57f90f7191eb91 100644 --- a/domainManager/Domain/src/db/DBC.java +++ b/domainManager/Domain/src/db/DBC.java @@ -9,9 +9,11 @@ import java.sql.Statement; import java.util.ArrayList; import java.util.Arrays; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import code.Domain; import db.Connect; /** @@ -36,69 +38,69 @@ public class DBC { * conn.close(); } } catch (SQLException ex) { * System.out.println(ex.getMessage()); } } } */ - public static ArrayList<Dominio> domainsGet() throws SQLException { - // connect(); - - /** - * Connect to a sample database - */ - // public static Connection conn = null; - - Connection conn = null; - try { - // db parameters - String url = "jdbc:sqlite:DBPissirDomain.db"; - // create a connection to the database - conn = DriverManager.getConnection(url); - - System.out.println("Connection to SQLite has been established."); - /* - * String sql= "SELECT * FROM Utenti"; Statement statement - * =conn.createStatement(); ResultSet result =statement.executeQuery(sql); while - * (result.next()) { String name=result.getString("User"); - * - * String desc=result.getString("Desc"); System.out.println(name+desc); } - */ - - String sql = "SELECT * FROM Domini"; - Statement statement = conn.createStatement(); - ResultSet result = statement.executeQuery(sql); - System.out.println("57"); - ArrayList<Dominio> res = new ArrayList<Dominio>(); - while (result.next()) { - System.out.println("60"); - String dom = result.getString("Domain"); - String desc = result.getString("Desc"); - - // String users=result.getString("Users"); - ArrayList<String> users = new ArrayList<String>(Arrays.asList(result.getString("Users").split(","))); - ArrayList<String> reso = new ArrayList<String>(Arrays.asList(result.getString("Resources").split(","))); - // String reso=result.getString("Resources"); - - String state = result.getString("State"); - ArrayList<String> serv = new ArrayList<String>(Arrays.asList(result.getString("Services").split(","))); - // String serv=result.getString("Services"); - Dominio d = new Dominio(dom, desc, users, reso, state, serv); - res.add(d); - System.out.println("74"); - - } - return res; - - } catch (SQLException e) { - System.out.println(e.getMessage()); - } finally { - try { - if (conn != null) { - conn.close(); - } - } catch (SQLException ex) { - System.out.println(ex.getMessage()); - } - } - return null; - - } +// public static ArrayList<Dominio> domainsGet() throws SQLException { +// // connect(); +// +// /** +// * Connect to a sample database +// */ +// // public static Connection conn = null; +// +// Connection conn = null; +// try { +// // db parameters +// String url = "jdbc:sqlite:DBPissirDomain.db"; +// // create a connection to the database +// conn = DriverManager.getConnection(url); +// +// System.out.println("Connection to SQLite has been established."); +// /* +// * String sql= "SELECT * FROM Utenti"; Statement statement +// * =conn.createStatement(); ResultSet result =statement.executeQuery(sql); while +// * (result.next()) { String name=result.getString("User"); +// * +// * String desc=result.getString("Desc"); System.out.println(name+desc); } +// */ +// +// String sql = "SELECT * FROM Domini"; +// Statement statement = conn.createStatement(); +// ResultSet result = statement.executeQuery(sql); +// System.out.println("57"); +// ArrayList<Dominio> res = new ArrayList<Dominio>(); +// while (result.next()) { +// System.out.println("60"); +// String dom = result.getString("Domain"); +// String desc = result.getString("Desc"); +// +// // String users=result.getString("Users"); +// ArrayList<String> users = new ArrayList<String>(Arrays.asList(result.getString("Users").split(","))); +// ArrayList<String> reso = new ArrayList<String>(Arrays.asList(result.getString("Resources").split(","))); +// // String reso=result.getString("Resources"); +// +// String state = result.getString("State"); +// ArrayList<String> serv = new ArrayList<String>(Arrays.asList(result.getString("Services").split(","))); +// // String serv=result.getString("Services"); +// Dominio d = new Dominio(dom, desc, users, reso, state, serv); +// res.add(d); +// System.out.println("74"); +// +// } +// return res; +// +// } catch (SQLException e) { +// System.out.println(e.getMessage()); +// } finally { +// try { +// if (conn != null) { +// conn.close(); +// } +// } catch (SQLException ex) { +// System.out.println(ex.getMessage()); +// } +// } +// return null; +// +// } public static Dominio getDom(String dm) throws SQLException { // connect(); @@ -137,14 +139,14 @@ public class DBC { String desc = result.getString("Desc"); // String users=result.getString("Users"); - ArrayList<String> users = new ArrayList<String>(Arrays.asList(result.getString("Users").split(","))); - ArrayList<String> reso = new ArrayList<String>(Arrays.asList(result.getString("Resources").split(","))); + //ArrayList<String> users = new ArrayList<String>(Arrays.asList(result.getString("Users").split(","))); + //ArrayList<String> reso = new ArrayList<String>(Arrays.asList(result.getString("Resources").split(","))); // String reso=result.getString("Resources"); - String state = result.getString("State"); - ArrayList<String> serv = new ArrayList<String>(Arrays.asList(result.getString("Services").split(","))); + Integer state = result.getInt("State"); + //ArrayList<String> serv = new ArrayList<String>(Arrays.asList(result.getString("Services").split(","))); // String serv=result.getString("Services"); - Dominio d = new Dominio(dom, desc, users, reso, state, serv); + Dominio d = new Dominio(dom, desc, state);//users, reso,, serv // res.add(d); System.out.println(d.toString()); return d; @@ -197,7 +199,7 @@ public class DBC { } - public static void insertDom(JSONObject j) throws SQLException, JSONException { + public static void insertDom(String j) throws SQLException, JSONException { // connect(); // Statement statement =conn.createStatement(); @@ -229,21 +231,21 @@ public class DBC { */ - PreparedStatement prepared = conn.prepareStatement("INSERT INTO Domini (Domain, Desc, Users, Resources, State, Services) VALUES (?1,?2,?3,?4,?5,?6)"); + PreparedStatement prepared = conn.prepareStatement("INSERT INTO Domini (Domain, State) VALUES (?1,?2)"); + // Users, Resources, , Services ,?4,?5,?6 +// System.out.println(j.getString("domain")); +// System.out.println(j.getString("desc")); + //System.out.println(j.getString("users")); + //System.out.println(j.getString("services")); + //System.out.println(j.getString("resources")); - System.out.println(j.getString("domain")); - System.out.println(j.getString("desc")); - System.out.println(j.getString("users")); - System.out.println(j.getString("services")); - System.out.println(j.getString("resources")); - - prepared.setString(1, j.getString("domain").toString().trim()); - prepared.setString(2, j.getString("desc").toString().trim()); - prepared.setString(3, j.getString("users").toString().trim()); - prepared.setString(4, j.getString("resources").toString().trim()); - prepared.setString(5, "N/A".toString()); - prepared.setString(6, j.getString("services").toString().trim()); + prepared.setString(1, j); + prepared.setInt(2, 0); + //prepared.setString(3, j.getString("users").toString().trim()); + //prepared.setString(4, j.getString("resources").toString().trim()); + //prepared.setInt(3, 0); + //prepared.setString(6, j.getString("services").toString().trim()); int result = prepared.executeUpdate(); //System.out.println(result.toString()); @@ -288,7 +290,372 @@ public class DBC { } + + + public static ArrayList<String> getDomainsAdmin(String user) throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + + System.out.println("Connection to SQLite has been established: getDomains"); + + PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Amministra WHERE User = ?"); + prepared.setString(1, user); + ResultSet result = prepared.executeQuery(); + System.out.println("DOMSADMIN1"); + + ArrayList<String> res=new ArrayList<String>(); + JSONArray jsnarr=new JSONArray(); + while (result.next()) { + System.out.println("DOMSADMIN12"); + String dom = result.getString("Domain"); +// String desc= result.getString("Desc"); +// Integer state = result.getInt("State"); +// +// JSONObject j=new JSONObject("{"+dom+":"+state+"}"); +// jsnarr.put(j); +// +// Dominio d=new Dominio(dom,desc,state); + res.add(dom); + + } + //return jsnarr; + return res; + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + return null; + + } + + + + + public static ArrayList<String> getDomainsUser(String user) throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + + System.out.println("Connection to SQLite has been established: getDomains"); + + PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Usa WHERE User = ?"); + prepared.setString(1, user); + ResultSet result = prepared.executeQuery(); + System.out.println("DOMSADMIN1"); + + ArrayList<String> res=new ArrayList<String>(); + JSONArray jsnarr=new JSONArray(); + while (result.next()) { + System.out.println("DOMSADMIN12"); + String dom = result.getString("Domain"); +// String desc= result.getString("Desc"); +// Integer state = result.getInt("State"); +// +// JSONObject j=new JSONObject("{"+dom+":"+state+"}"); +// jsnarr.put(j); +// +// Dominio d=new Dominio(dom,desc,state); + res.add(dom); + + } + //return jsnarr; + return res; + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + return null; + + } + + public static Dominio getDomain(String domain) throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + + System.out.println("Connection to SQLite has been established: getDomains"); + + PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Domini WHERE Domain = ?"); + prepared.setString(1, domain); + ResultSet result = prepared.executeQuery(); + System.out.println("DOMSADMIN1"); + + //ArrayList<String> res=new ArrayList<String>(); + //JSONArray jsnarr=new JSONArray(); + while (result.next()) { + System.out.println("DOMSADMIN12"); + String dom = result.getString("Domain"); + String desc= result.getString("Desc"); + Integer state = result.getInt("State"); +// +// JSONObject j=new JSONObject("{"+dom+":"+state+"}"); +// jsnarr.put(j); +// + Dominio d=new Dominio(dom,desc,state); + //res.add(dom); + return d; + } + //return jsnarr; + + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + return null; + + } + + + + + + + public static void fillModules(String a, String b, String c) throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + + System.out.println("Connection to SQLite has been established: ---fillModules---"); + + PreparedStatement prepared = conn.prepareStatement("INSERT INTO Moduli (Module, Requirements, Path) VALUES (?1,?2,?3)"); + // Users, Resources, , Services ,?4,?5,?6 + //System.out.println(j.getString("domain")); + //System.out.println(j.getString("desc")); + //System.out.println(j.getString("users")); + //System.out.println(j.getString("services")); + //System.out.println(j.getString("resources")); + + + prepared.setString(1, a); + prepared.setString(2, b); + //prepared.setString(3, j.getString("users").toString().trim()); + //prepared.setString(4, j.getString("resources").toString().trim()); + prepared.setString(3, c); + //prepared.setString(6, j.getString("services").toString().trim()); + int result = prepared.executeUpdate(); + + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + //return null; + + } + + public static ArrayList<String> getModules() throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + + System.out.println("Connection to SQLite has been established: getDomains"); + + PreparedStatement prepared = conn.prepareStatement("SELECT * FROM Moduli"); + //prepared.setString(1, user); + ResultSet result = prepared.executeQuery(); + System.out.println("DOMSADMIN1"); + + ArrayList<String> res=new ArrayList<String>(); + JSONArray jsnarr=new JSONArray(); + while (result.next()) { + System.out.println("GETMODULI2"); + String mod = result.getString("Module"); + //String req= result.getString("Requirements"); + +// Integer state = result.getInt("State"); +// +// JSONObject j=new JSONObject("{"+dom+":"+state+"}"); +// jsnarr.put(j); +// +// Dominio d=new Dominio(dom,desc,state); + res.add(mod); + + } + //return jsnarr; + return res; + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + return null; + + } + + public static void insertAmministra(String user, String dom) throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + System.out.println("Connection to SQLite has been established."); + PreparedStatement prepared = conn.prepareStatement("INSERT INTO Amministra (User, Domain) VALUES (?1,?2)"); + prepared.setString(1, user); + prepared.setString(2, dom); + //prepared.setString(6, j.getString("services").toString().trim()); + int result = prepared.executeUpdate(); + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + } + + public static void insertUsa(String user, String dom) throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + System.out.println("Connection to SQLite has been established."); + PreparedStatement prepared = conn.prepareStatement("INSERT INTO Usa (User, Domain) VALUES (?1,?2)"); + prepared.setString(1, user); + prepared.setString(2, dom); + //prepared.setString(6, j.getString("services").toString().trim()); + int result = prepared.executeUpdate(); + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + } + + + + public static void insertService(String a, String b, String c) throws SQLException, JSONException { + // connect(); + // Statement statement =conn.createStatement(); + + Connection conn = null; + try { + // db parameters + String url = "jdbc:sqlite:DBPissirDomain.db"; + // create a connection to the database + conn = DriverManager.getConnection(url); + + System.out.println("Connection to SQLite has been established: ---fillModules---"); + + PreparedStatement prepared = conn.prepareStatement("INSERT INTO Servizi (Domain, Resource, Module) VALUES (?1,?2,?3)"); + // Users, Resources, , Services ,?4,?5,?6 + //System.out.println(j.getString("domain")); + //System.out.println(j.getString("desc")); + //System.out.println(j.getString("users")); + //System.out.println(j.getString("services")); + //System.out.println(j.getString("resources")); + + + prepared.setString(1, a); + prepared.setString(2, b); + //prepared.setString(3, j.getString("users").toString().trim()); + //prepared.setString(4, j.getString("resources").toString().trim()); + prepared.setString(3, c); + //prepared.setString(6, j.getString("services").toString().trim()); + int result = prepared.executeUpdate(); + + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } finally { + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + } + //return null; + + } /** * @param args the command line arguments diff --git a/domainManager/Domain/src/db/Dominio.java b/domainManager/Domain/src/db/Dominio.java index 4ff619e2789aaec58f42e49bc6db6573619d99af..f19070be29aab0b510729b019b87aa975868dbf8 100644 --- a/domainManager/Domain/src/db/Dominio.java +++ b/domainManager/Domain/src/db/Dominio.java @@ -3,29 +3,38 @@ package db; import java.util.ArrayList; public class Dominio { - - String domain; - public String desc; - ArrayList<String> users; - public ArrayList<String> resources; - public String state; - public ArrayList<String> services; - - public Dominio(String dom, String de, ArrayList<String> u, ArrayList<String> res, String st, ArrayList<String> ser) { - domain=dom; - desc=de; - users=new ArrayList<String>(u); - resources=new ArrayList<String>(res); - state=st; - services=new ArrayList<String>(ser); + + private String domain; + private String desc; +// ArrayList<String> users; +// public ArrayList<String> resources; + private Integer state; +// public ArrayList<String> services; + + public Dominio(String dom, String de, Integer st) {//ArrayList<String> u, ArrayList<String> res, , + //ArrayList<String> ser + domain = dom; + desc = de; +// users = new ArrayList<String>(u); +// resources = new ArrayList<String>(res); + state = st; +// services = new ArrayList<String>(ser); } - + public String getDomain() { return domain; } - public ArrayList<String> getUsers(){ - return users; + public Integer getStatus() { + return state; + } + + public String getDesc() { + return desc; } +// public ArrayList<String> getUsers() { +// return users; +// } + }