-
Alfredo Chissotti authoredAlfredo Chissotti authored
DeleteHandler.java 7.39 KiB
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.sql.SQLException;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpPrincipal;
import java.io.*;
import java.util.*;
import org.json.JSONException;
import java.net.URI;
import java.net.URL;
import java.net.URLDecoder;
public class DeleteHandler implements HttpHandler{
@Override
public void handle(HttpExchange he) throws IOException {
URI requestedUri = he.getRequestURI();
String requestMethod = he.getRequestMethod();
if (requestMethod.compareToIgnoreCase("options") == 0) {
System.out.println("OPTIONS");
he.getResponseHeaders().add("Access-Control-Allow-Origin", "*");// se non mettiamo *, viene errore CORS //http://localhost:3001/secured/domains
he.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
he.getResponseHeaders().add("Access-Control-Allow-Headers", "Content-Type,Authorization");
he.sendResponseHeaders(200, -1);
return;
}
String response = "ayyyyDeletto\n";
// String query = requestedUri.getRawQuery();
String body = readBody(he.getRequestBody());
String user = he.getRequestHeaders().get("user").get(0);
if (requestMethod.compareTo("POST") == 0 || requestMethod.compareTo("post") == 0) {
String dominio = body.substring(7);
System.out.println(
"1"+requestMethod + "\n" + body + "\n" + response + "\n" + user + "\n" + "A"+dominio + "\n");
try {
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) {
System.out.println("Dominio inesistente");
response = "Dominio inesistente";
he.sendResponseHeaders(404, response.length());
OutputStream os = he.getResponseBody();
he.getResponseHeaders().add("Access-Control-Allow-Origin", "*");//http://localhost:3001/secured/domains
he.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");//non c'era POST
he.getResponseHeaders().add("Access-Control-Allow-Headers", "Content-Type,Authorization");
// questa parte sopra serve anche qui, non solo quando si chiama con OPTIONS
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;
}
ArrayList<String> ad= DBC.getDomainsAdmin(dominio);
if (!ad.contains(user)) {
// he.sendResponseHeaders(401,0 );
System.out.println("NON AUTORIZZATO");
response = "NON AUTORIZZATO";
he.sendResponseHeaders(401, response.length());
OutputStream os = he.getResponseBody();
he.getResponseHeaders().add("Access-Control-Allow-Origin", "*");//http://localhost:3001/secured/domains
he.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");//non c'era POST
he.getResponseHeaders().add("Access-Control-Allow-Headers", "Content-Type,Authorization");
// questa parte sopra serve anche qui, non solo quando si chiama con OPTIONS
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;
}else{DBC.delDom(dominio);
//return;//per comunicare al cloudAppMng togliere il return e modificare opportunamente
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //finally {return;}idem qui
catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//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");//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");
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();
he.getResponseHeaders().add("Access-Control-Allow-Origin", "*");//http://localhost:3001/secured/domains
he.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");//non c'era POST
he.getResponseHeaders().add("Access-Control-Allow-Headers", "Content-Type,Authorization");
// questa parte sopra serve anche qui, non solo quando si chiama con OPTIONS
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();
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
//f.close();
OutputStream os = he.getResponseBody();
he.sendResponseHeaders(status, response.length());//status
he.getResponseHeaders().add("Access-Control-Allow-Origin", "*");//http://localhost:3001/secured/domains
he.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");//non c'era POST
he.getResponseHeaders().add("Access-Control-Allow-Headers", "Content-Type,Authorization");
// questa parte sopra serve anche qui, non solo quando si chiama con OPTIONS
os.write(response.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();
}
}