diff --git a/WebServer/.idea/sonarlint/issuestore/5/0/50f8adb69a1d742a704b1c91a7b427f86f4f8908 b/WebServer/.idea/sonarlint/issuestore/5/0/50f8adb69a1d742a704b1c91a7b427f86f4f8908 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/WebServer/.idea/sonarlint/issuestore/5/e/5e32bc0de23cbe8c60b38438ef2145d6849d9bf9 b/WebServer/.idea/sonarlint/issuestore/5/e/5e32bc0de23cbe8c60b38438ef2145d6849d9bf9 new file mode 100644 index 0000000000000000000000000000000000000000..1d60d448a61f10f12bf1efa1946b998ae836f0ab --- /dev/null +++ b/WebServer/.idea/sonarlint/issuestore/5/e/5e32bc0de23cbe8c60b38438ef2145d6849d9bf9 @@ -0,0 +1,4 @@ + +R +java:S1191 "5Use classes from the Java API instead of Sun classes.(üÕÙä8î˜0 +Z java:S106%"9Replace this use of System.out or System.err by a logger.(ÉÒá†úÿÿÿÿ8”說˜0 \ No newline at end of file diff --git a/WebServer/.idea/sonarlint/issuestore/b/2/b235fa934a9d102f9daeefa97a7d4e112fdac917 b/WebServer/.idea/sonarlint/issuestore/b/2/b235fa934a9d102f9daeefa97a7d4e112fdac917 new file mode 100644 index 0000000000000000000000000000000000000000..5ee544694340f2e366e84f62b0593745b197ec5b --- /dev/null +++ b/WebServer/.idea/sonarlint/issuestore/b/2/b235fa934a9d102f9daeefa97a7d4e112fdac917 @@ -0,0 +1,11 @@ + +K +java:S1191"5Use classes from the Java API instead of Sun classes.(‡–õ +S java:S106"9Replace this use of System.out or System.err by a logger.(¾ü‡“þÿÿÿÿ +X java:S125Q"<This block of commented-out lines of code should be removed.(Ÿ¾Î£8–Ýœ¯˜0 +N java:S106Z"9Replace this use of System.out or System.err by a logger.(Ýáü÷ +[ java:S106€"9Replace this use of System.out or System.err by a logger.(‹•åÿÿÿÿÿ8Îúß®˜0 +[ java:S106ƒ"9Replace this use of System.out or System.err by a logger.(ïí¼¦ýÿÿÿÿ8Ïúß®˜0 +V java:S106Š"9Replace this use of System.out or System.err by a logger.(ŸÃèé8Ðúß®˜0 +L +java:S2093w"*Change this "try" to a try-with-resources.(¡»¢üùÿÿÿÿ8Ðúß®˜0 \ No newline at end of file diff --git a/WebServer/.idea/sonarlint/issuestore/index.pb b/WebServer/.idea/sonarlint/issuestore/index.pb index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..631b09f43617462419a38e9475fc53bca460d128 100644 --- a/WebServer/.idea/sonarlint/issuestore/index.pb +++ b/WebServer/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,7 @@ + += + WebServer.iml,5/0/50f8adb69a1d742a704b1c91a7b427f86f4f8908 +B +src/code/Home.java,5/e/5e32bc0de23cbe8c60b38438ef2145d6849d9bf9 +D +src/code/Server.java,b/2/b235fa934a9d102f9daeefa97a7d4e112fdac917 \ No newline at end of file diff --git a/WebServer/src/code/Home.java b/WebServer/src/code/Home.java index e5cdf506c0ee61a9062718b6e73dfbc76a84f255..836fc4df5b84587869ce6f9ee51bbfbf2d8198ca 100644 --- a/WebServer/src/code/Home.java +++ b/WebServer/src/code/Home.java @@ -17,6 +17,7 @@ public class Home implements HttpHandler { @Override public void handle(HttpExchange exchange) throws IOException { URI requestURI = exchange.getRequestURI(); + System.out.println(requestURI.toASCIIString()); if(requestURI.compareTo(URI.create("/")) != 0) { String error = "Invalid URI"; OutputStream os = exchange.getResponseBody(); diff --git a/WebServer/src/code/ImageRes.java b/WebServer/src/code/ImageRes.java new file mode 100644 index 0000000000000000000000000000000000000000..2d0cb2f59c0d5c572a1bc4abd0f01207c42772a9 --- /dev/null +++ b/WebServer/src/code/ImageRes.java @@ -0,0 +1,57 @@ +package code; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import javax.imageio.ImageIO; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; + +public class ImageRes implements HttpHandler { + + @Override + public void handle(HttpExchange exchange) throws IOException { + URI requestURI = exchange.getRequestURI(); + System.out.println(requestURI.toASCIIString()); + + String requestMethod = exchange.getRequestMethod(); + if (Helper.compareText(requestMethod, "GET")) { + BufferedImage image = getLocalImage(requestURI.toASCIIString()); + if (image == null) + Helper.pageNotFound(exchange); + List<String> strlist = new ArrayList<>(); + strlist.add("image/png"); + OutputStream os = exchange.getResponseBody(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(image, "png", baos); + baos.flush(); + byte[] imageInByte = baos.toByteArray(); + exchange.getResponseHeaders().put("content-type", strlist); + exchange.sendResponseHeaders(200, imageInByte.length); + os.write(imageInByte); + os.close(); + } else { + Helper.methodNotAllowed(exchange); + } + } + + private BufferedImage getLocalImage(String uri) { + String page = Server.CLIENT_PATH + uri; + try { + File f = new File(page); + BufferedImage image = ImageIO.read(f); + return image; + } catch (IOException e) { + System.out.println("Error reading file '" + page + "'"); + return null; + } + } + +} diff --git a/WebServer/src/code/Resources.java b/WebServer/src/code/Resources.java new file mode 100644 index 0000000000000000000000000000000000000000..10f1f051c71083691922fc8cfc0dff6ae0e49e4d --- /dev/null +++ b/WebServer/src/code/Resources.java @@ -0,0 +1,94 @@ +package code; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; + +public class Resources implements HttpHandler { + + + @Override + public void handle(HttpExchange exchange) throws IOException { + URI requestURI = exchange.getRequestURI(); + System.out.println(requestURI.toASCIIString()); + + String requestMethod = exchange.getRequestMethod(); + if (Helper.compareText(requestMethod, "GET")) { + String response = getLocalPage(requestURI.toASCIIString()); + List<String> strlist = new ArrayList<>(); + System.out.println(requestURI.toASCIIString().substring(1, 4)); + switch (requestURI.toASCIIString().substring(1, 4)) { + case "js/" -> strlist.add("text/javascript"); + case "css" -> strlist.add("text/css"); + default -> strlist.add("text"); + } + exchange.getResponseHeaders().put("content-type", strlist); + exchange.sendResponseHeaders(200, response.getBytes().length); + OutputStream os = exchange.getResponseBody(); + os.write(response.getBytes()); + os.close(); + } else { + Helper.methodNotAllowed(exchange); + } + } + + private static String getLocalPage(String uri) { + String page = Server.CLIENT_PATH+uri; + StringBuilder answer = new StringBuilder(); + BufferedReader bufferedReader = null; + + try { + FileReader fileReader = new FileReader(page); + + bufferedReader = new BufferedReader(fileReader); + boolean isComment = false; + String line; + while ((line = bufferedReader.readLine()) != null) { + line = line.trim(); + if(line.startsWith("/*") && line.endsWith("*/")) { + isComment = false; + continue; + } + if(line.startsWith("//")) { + isComment = false; + continue; + } + if(line.startsWith("/*")) { + isComment = true; + continue; + } + if(line.endsWith("*/")) { + isComment = false; + continue; + } + if(!isComment && line.length()>0) + answer.append(line).append("\n"); + } + } catch (FileNotFoundException ex) { + System.out.println("Unable to open file '" + page + "'"); + return "fail"; + } catch (IOException ex) { + System.out.println("Error reading file '" + page + "'"); + return "fail"; + } finally { + try{ + if(bufferedReader != null) + bufferedReader.close(); + } catch (IOException ex){ + System.out.println("Error closing bufferedReader"); + } + } + return answer.substring(0,answer.length()-1); + } + + + +} diff --git a/WebServer/src/code/Server.java b/WebServer/src/code/Server.java index cbb3538e17c93e8b3371def9262471efbf156562..cbeb7735ef2b366228d3a96ce5b08818580b6d19 100644 --- a/WebServer/src/code/Server.java +++ b/WebServer/src/code/Server.java @@ -15,10 +15,13 @@ import javax.net.ssl.TrustManagerFactory; import com.sun.net.httpserver.HttpsConfigurator; import com.sun.net.httpserver.HttpsParameters; import com.sun.net.httpserver.HttpsServer; +import com.sun.net.httpserver.HttpServer; public class Server { - private static int port = 443; +// private static int port = 443; + private static int port = 3000; + public static String CLIENT_PATH = "./../webapp/public"; public static void main(String[] args) throws IOException { if (args.length > 1 && args[0].equals("-port")) @@ -27,11 +30,11 @@ public class Server { } catch (Exception e) { e.printStackTrace(); } - HttpsServer server = HttpsServer.create(new InetSocketAddress(port), 0); - +// HttpsServer server = HttpsServer.create(new InetSocketAddress(port), 0); + HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); // initialise the HTTPS server - try { + /*try { SSLContext sslContext = SSLContext.getInstance("TLS"); // initialise the keystore @@ -71,19 +74,7 @@ public class Server { } }); - //API del server - server.createContext("/luci/",new Luci());//post, get [put, delete] {luogo e stato di tutte luci} - server.createContext("/luci/stato/",new Luci());//put {aggiorna lo stato di una luce} - server.createContext("/scenari/",new Scenari());//get {nome e data di tutti gli scenari} - server.createContext("/scenari/attiva/",new Scenari());//put {attiva/disattiva} - server.createContext("/scenari/registra/",new Scenari());//put {registra/termina} - server.createContext("/scenari/registra/conferma/",new Scenari());//post {conferma salvataggio; altrimenti cancella} - server.createContext("/antifurto/",new Antifurto());//get {stato, allarme, attenzione, soglia, sensori} - server.createContext("/antifurto/stato/",new Antifurto());//get, put {se l'antifurto e' attivo + aggiornamento} - server.createContext("/antifurto/allarme/",new Antifurto());//get, put {se l'allarme sta suonando + aggiornamento} - server.createContext("/antifurto/attenzione/",new Antifurto());//put {valore della progress bar} - server.createContext("/antifurto/soglia/",new Antifurto());//put {valore scelto dall'utente per la soglia} - server.createContext("/",new Home()); + //API del server qui // server.setExecutor(Executors.newFixedThreadPool(11)); server.setExecutor(Executors.newCachedThreadPool()); @@ -92,7 +83,26 @@ public class Server { } catch (Exception e) { System.out.println("Failed to create HTTPS server on port " + port + " of localhost"); e.printStackTrace(); - } + }*/ + //API del server + server.createContext("/luci/",new Luci());//post, get [put, delete] {luogo e stato di tutte luci} + server.createContext("/luci/stato/",new Luci());//put {aggiorna lo stato di una luce} + server.createContext("/scenari/",new Scenari());//get {nome e data di tutti gli scenari} + server.createContext("/scenari/attiva/",new Scenari());//put {attiva/disattiva} + server.createContext("/scenari/registra/",new Scenari());//put {registra/termina} + server.createContext("/scenari/registra/conferma/",new Scenari());//post {conferma salvataggio; altrimenti cancella} + server.createContext("/antifurto/",new Antifurto());//get {stato, allarme, attenzione, soglia, sensori} + server.createContext("/antifurto/stato/",new Antifurto());//get, put {se l'antifurto e' attivo + aggiornamento} + server.createContext("/antifurto/allarme/",new Antifurto());//get, put {se l'allarme sta suonando + aggiornamento} + server.createContext("/antifurto/attenzione/",new Antifurto());//put {valore della progress bar} + server.createContext("/antifurto/soglia/",new Antifurto());//put {valore scelto dall'utente per la soglia} + server.createContext("/js/",new Resources()); + server.createContext("/css/",new Resources()); + server.createContext("/res/",new ImageRes()); + server.createContext("/",new Home()); + server.setExecutor(Executors.newCachedThreadPool()); + server.start(); + System.out.println("webserver running on localhost:"+port); } } diff --git a/webapp/public/css/style.css b/webapp/public/css/style.css index 471e0aef42d16fe333e98b418a6fe7ce75f25c70..b9a9114184fd8ed5a703b5ecea6fbb5b434f1d01 100644 --- a/webapp/public/css/style.css +++ b/webapp/public/css/style.css @@ -1,5 +1,3 @@ - - /* switch toggle */ .switch-container { position: relative; diff --git a/webapp/public/js/antifurto.js b/webapp/public/js/antifurto.js index 882c776e927934a34812b4db37536732571cf3f6..4571a3d5018e01dbbc6eb5a3042ea5706812db23 100644 --- a/webapp/public/js/antifurto.js +++ b/webapp/public/js/antifurto.js @@ -247,9 +247,9 @@ class Antifurto { */ static timer() { setInterval(() => { - Antifurto.changeProgressBar(-5); + if(Antifurto.status) + Antifurto.changeProgressBar(-5); }, 60000); - //FIXME test to remove the following lines const github = document.getElementById('boost-progressbar'); github.addEventListener('click', () => { Antifurto.changeProgressBar(3); diff --git a/webapp/public/js/luci.js b/webapp/public/js/luci.js index 0cbc0c03a675999eddabdb870c75b5c2839ecdf5..3d7055ed60584b9816987e516e38f961c028c002 100644 --- a/webapp/public/js/luci.js +++ b/webapp/public/js/luci.js @@ -103,7 +103,7 @@ class Luci { // TODO server send stanza // add stanza to table - const luceJSON = Luci.createLight(); + const luceJSON = Luci.createLight(stanza,false); Luci.showNewLight(luceJSON); // close modal