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.io.Reader; 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.Iterator; import java.util.List; import java.util.Map; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import db.DbStart; import db.Dominio; public class StartHandler implements HttpHandler { @Override public void handle(HttpExchange he) throws IOException { URI requestedUri = he.getRequestURI(); System.out.println(requestedUri.toString()); /* if(he.getRequestHeaders().get("version")==null) { he.sendResponseHeaders(426, "VERSIONE NON PRESENTE. (USARE -H version:1.0)".length()); OutputStream os = he.getResponseBody(); os.write("VERSIONE NON PRESENTE. (USARE -H version:1.0)".getBytes()); os.close(); return; } else if(he.getRequestHeaders().get("version").get(0).compareTo("1.0")!=0) { he.sendResponseHeaders(426, "CAMBIA VERSIONE. (USARE -H version:1.0)".length()); OutputStream os = he.getResponseBody(); os.write("CAMBIA VERSIONE. (USARE -H version:1.0)".getBytes()); os.close(); return; } */ String requestMethod = he.getRequestMethod(); String query = requestedUri.getRawQuery(); String body = readBody(he.getRequestBody()); String response = "AYYYYY"; String user= he.getRequestHeaders().get("user").get(0); //se dominio del body ha admin chi fa chiamata allora continua if(requestMethod.compareToIgnoreCase("POST")==0) { String dominio=body.substring(7); System.out.println(requestMethod+"\n"+query+"\n"+body+"\n"+response+"\n"+user+"\n"+dominio+"\n"); try { System.out.println("PreDB"); //ArrayList<Dominio> doms=DbStart.domainsGet(); System.out.println("PostDB"); Dominio d= DbStart.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.getUsers().contains(s)) { //he.sendResponseHeaders(401,0 ); System.out.println("NON AUTORIZZATO"); response="NON AUTORIZZATO"; he.sendResponseHeaders(401,response.length()); OutputStream os = he.getResponseBody(); os.write(response.getBytes()); os.close(); //System.out.println("OPERAZIONE NON IMPLEMENTATA"); //he.sendResponseHeaders(501,0); //OutputStream os = he.getResponseBody(); //os.write("OPERAZIONE NON IMPLEMENTATA".getBytes()); //os.close(); return; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } URL url = new URL("http://localhost:3000/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 //leggo da DB domini e riempio (magari famo .DAO??) con.setDoOutput(true); //System.out.println("pino2"); DataOutputStream out = new DataOutputStream(con.getOutputStream());//inserimento param in call out.writeBytes(ParameterStringBuilder.getParamsString(parameters)); 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(); Reader streamReader = null; 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(); } con.disconnect(); he.sendResponseHeaders(status, response.length()); OutputStream os = he.getResponseBody(); os.write(response.getBytes()); os.close(); } 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) { e.printStackTrace(); } return sb.toString(); } }