Skip to content
Snippets Groups Projects
DeleteHandler.java 5.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • A C's avatar
    A C committed
    package code;
    
    
    
    import java.net.HttpURLConnection;
    
    import java.net.InetSocketAddress;
    
    import com.sun.net.httpserver.HttpServer;
    //import StuffHandler.CustomObject;
    
    
    A C's avatar
    A C committed
    import db.DBC;
    
    A C's avatar
    A C committed
    import db.Dominio;
    
    
    A C's avatar
    A C committed
    import java.nio.file.Files;
    import java.nio.file.Path;
    
    A C's avatar
    A C committed
    import java.sql.SQLException;
    
    A C's avatar
    A C committed
    
    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.*;
    
    A C's avatar
    A C committed
    
    import org.json.JSONException;
    
    
    A C's avatar
    A C committed
    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();
    		
    		String response = "ayyyyDeletto\n";
    		
    
    A C's avatar
    A C committed
    		
    		String query = requestedUri.getRawQuery();
    		String body = readBody(he.getRequestBody());
    		
    		String user = he.getRequestHeaders().get("user").get(0);
    		
    
    A C's avatar
    A C committed
    		if (requestMethod.compareTo("POST") == 0 || requestMethod.compareTo("post") == 0) {
    			
    			
    
    A C's avatar
    A C committed
    			String dominio = body.substring(7);
    			System.out.println(
    					"1"+requestMethod + "\n" + query + "\n" + body + "\n" + response + "\n" + user + "\n" + "A"+dominio + "\n");
    
    			try {
    
    
    A C's avatar
    A C committed
    				Dominio d = DBC.getDom(dominio);
    
    A C's avatar
    A C committed
    				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();
    
    					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;
    					
    				}
    
    A C's avatar
    A C committed
    				ArrayList<String> ad= DBC.getDomainsAdmin(dominio);
    				if (!ad.contains(user)) {
    
    A C's avatar
    A C committed
    					// 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;
    					
    
    A C's avatar
    A C committed
    				}else{DBC.delDom(dominio);
    
    A C's avatar
    A C committed
    				//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
    
    A C's avatar
    A C committed
     catch (JSONException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    			
    			
    			
    			
    			//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
    
    A C's avatar
    A C committed
    			URL url = new URL("http://127.0.0.1:3002");//maybe, se CloudAppe è in localhost porta 8080
    
    A C's avatar
    A C committed
    			//aggiungere 3000/delete
    
    A C's avatar
    A C committed
    			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();
    			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
    			os.write(response.getBytes());
    			os.close();
    
    A C's avatar
    A C committed
    			
    
    A C's avatar
    A C committed
    		}
    		
    	}
    	
    	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();
    	}
    	
    	
    	
    	
    	
    	
    	
    	
    	
    
    
    }