Skip to content
Snippets Groups Projects
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();
	}











}