From 171cb0a694a7f076974544c6751092a026cacd31 Mon Sep 17 00:00:00 2001 From: Elisa <20030784@studenti.uniupo.it> Date: Thu, 13 Oct 2022 20:01:37 +0200 Subject: [PATCH] update elisa --- antifurtoMicroservizio/res/stato.json | 2 +- .../src/code/Antifurto.java | 72 +------------------ .../src/code/Esecutore.java | 18 +++-- .../src/code/SubscribeCallback.java | 1 - webserver/public/domains.html | 62 ---------------- .../js/authentication/requests-to-domain.js | 4 +- webserver/public/js/authentication/script.js | 4 +- webserver/public/redirect.html | 24 +------ 8 files changed, 21 insertions(+), 166 deletions(-) diff --git a/antifurtoMicroservizio/res/stato.json b/antifurtoMicroservizio/res/stato.json index cceb6f1..02a79cd 100644 --- a/antifurtoMicroservizio/res/stato.json +++ b/antifurtoMicroservizio/res/stato.json @@ -1 +1 @@ -{"soglia":30,"stato":0,"valore":1,"tempoAllarme":"2022-09-29T10:48:55.183695"} \ No newline at end of file +{"soglia":30,"stato":0,"valore":0,"tempoAllarme":"2022-10-13T17:47:23.624881"} \ No newline at end of file diff --git a/antifurtoMicroservizio/src/code/Antifurto.java b/antifurtoMicroservizio/src/code/Antifurto.java index 80122cb..de6eadb 100644 --- a/antifurtoMicroservizio/src/code/Antifurto.java +++ b/antifurtoMicroservizio/src/code/Antifurto.java @@ -132,7 +132,7 @@ public class Antifurto { SubscribeCallback subCall = new SubscribeCallback(this, publisher, esec, automa); mqttClient.setCallback(subCall); - + mqttClient.connect(options); for(String t: topicsSub) @@ -154,76 +154,6 @@ public class Antifurto { - - /* - * Abbiamo 3 tipi di eventi: - * to Command Events - mi viene richiesto di eseguire un comando --> sottoscrivo - * from Status Events - io annuncio un cambiamento di stato - * (inviato a tutti i client che hanno sottoscritto il topic su cui faccio la publish) - * rpc Query Events - richiesta di inviare uno stato a un client (o microservizio). --> sottoscrivo - * Query implementati come coppia di eventi: <query event, status event> - * RICORDIAMO COME ABBIAMO IMPLEMENTATO LA RPC SU MQTT - * - * - * - * Il cuore della nostra business logic e' un metodo in cui mi metto in attesa su mqtt e: - * se arriva un comando, chiamo il metodo responsabile per eseguire quel comando; - * se arriva un evento di stato, chiamo il metodo responsabile per gestire quell'evento di stato; - * se arriva una remote procedure call, attivo la risposta sulla remote procedure call - * - * - * - * Capire come gestire sistema a regole (vedi slide "Esempio" in "Applicazioni IoT "Cloud Based"") - * - * - * - * Sicurezza gestita con TLS - * - * - * - * FILE DA FARE per un servizio: (?) - * file che contiene le informazioni per connettersi al mosquitto locale - * file che dice qual'e' la porta che lui deve esporre - * file che mi dice tutte le cose che lo configurano, ad esempio quanti device deve guardare - * ... - * - * I file di configurazione sono in JSON o in XML - * I dati persistiti si troveranno nella sottodirectory (chiamata con il nome del servizio) di Home - * - * - * Nella fase di configurazione potremo ancora modificare i file di configurazione (ad esempio aggiungendo device, - * regole). Dopodiche' quando si fa partire il servizio si iniziera' a usare l'altra parte di file system (ovvero il Local - * Dynamic File System) dove si andranno a salvare gli stati per renderli persistenti. - * - * - * - * Ho un processo principale che come unico compito ha quello di fare una fork() e creare un processo figlio. - * Sara' questo processo figlio a eseguire effettivamente il programma. Se il processo figlio termina (PER UN QUALCHE - * PROBLEMA), allora il processo padre se ne accorge e fa ripartire un nuovo processo figlio. - * - * - * Devo avere una thread di configurazione che obbedisce ai miei comandi (dati sulla HAT interface andando su - * 192.168.0.101:9001/configure.html (dove 192.168.0.101 e' l'indirizzo della beaglebone) - * - * - * Ho una classe che implementa l'automa a stati finiti - * - * - * - * - * NOTA: - * All'avvio, leggo il file stato e mi imposto di conseguenza. Poi interrogo la beaglebone per sapere SOLO lo stato - * dell'antifurto (luce rossa), ovvero se l'antifurto e' on o off. Lo stato del sensore di suono, non mi interessa: poiche' - * sono solo io a impostarlo (la web app si comporta in conseguenza dei miei messaggi). - * Mi serve interrogare la beaglebone per lo stato dell'antifurto perche' puo' succedere che l'antifurto abbia avuto - * dei problemi e quindi non abbia funzionato per un po' e nel mentre l'utente ha attivato l'antifurto dagli scenari. - * Quindi proprio perche' sia il mio antifurto sia gli scenari comandano lo stesso antifurto, devo fare questa richiesta - * alla beaglebone. - * Dopo aver chiesto lo stato dell'antifurto alla beaglebone, so esattamente lo stato in cui devo essere --> mi imposto - * di conseguenza! - */ - - public static void main(String args[]) throws JSONException, IOException { boolean exc = true; System.out.println("antifurto started"); diff --git a/antifurtoMicroservizio/src/code/Esecutore.java b/antifurtoMicroservizio/src/code/Esecutore.java index 77fc65c..4ee93ea 100644 --- a/antifurtoMicroservizio/src/code/Esecutore.java +++ b/antifurtoMicroservizio/src/code/Esecutore.java @@ -69,9 +69,10 @@ public class Esecutore extends Thread { } else { if(automa.allarme()) { - LocalDateTime tempoAttuale = LocalDateTime.now(); - long durata = Math.abs(Duration.between(tempoAllarme, tempoAttuale).toMinutes()); - if(valore < soglia || durata >= DURATA_SUONO || !automa.antifurtoAttivo() ) { + LocalDateTime tempoAttuale = LocalDateTime.now(); + Long durata = null; + if(tempoAllarme != null) durata = Math.abs(Duration.between(tempoAllarme, tempoAttuale).toMinutes()); + if(valore < soglia || (durata != null && durata >= DURATA_SUONO) || !automa.antifurtoAttivo() ) { publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+antifurto.getNomeOutputSuono(), "{cmd:0}"); // l'allarme viene disattivato } } @@ -88,7 +89,11 @@ public class Esecutore extends Thread { } if(!automa.antifurtoAttivo()) { - reset(); + try { + reset(); + } catch (JSONException | IOException e) { + e.printStackTrace(); + } } } } @@ -98,9 +103,12 @@ public class Esecutore extends Thread { codaVal.send(n); } - public void reset() { + public void reset() throws JSONException, IOException { valore = 0; codaVal.removeAll(); + JSONObject js = new JSONObject(Helper.leggiFile(Automa.FILE_STATO)); + js.put("valore", valore); + Helper.scriviFile(js, Automa.FILE_STATO); } public static int getSoglia() { diff --git a/antifurtoMicroservizio/src/code/SubscribeCallback.java b/antifurtoMicroservizio/src/code/SubscribeCallback.java index 71faef1..820a4f9 100644 --- a/antifurtoMicroservizio/src/code/SubscribeCallback.java +++ b/antifurtoMicroservizio/src/code/SubscribeCallback.java @@ -395,5 +395,4 @@ public class SubscribeCallback implements MqttCallback { } - // to/gruppo2/luci/antifurto/luceAntifurto } diff --git a/webserver/public/domains.html b/webserver/public/domains.html index 4712c9a..75a7932 100644 --- a/webserver/public/domains.html +++ b/webserver/public/domains.html @@ -26,28 +26,11 @@ <body id="body-id"> <div id="alert-message" role="alert" class="alert invisible"> - <!-- <div class="d-flex justify-content-around container-fluid"> - <i class="fa-solid fa-exclamation-circle fa-4x" aria-hidden="true"></i> - <div> - <h4 class="alert-heading">Attenzione</h4> - <p>Stai registrando uno scenario, termina la registrazione per attivare l'antifurto.</p> - </div> - </div> --> <!-- any error or confirmation goes here (updated by JS) --> <!-- alert-danger --> <!-- alert-success --> </div> <h1>Pissir SmartHome</h1> - <!-- <a href="http://$DOMAIN/realms/$REALM/protocol/openid-connect/auth? - response_type=code& - code_challenge=$MY_CODE_CHALLENGE& - code_challenge_method=S256& - client_id=myclient& - redirect_uri=$MY_REDIRECT_URI& - scope=openid& - nonce=a81e1a84-8885-4702-b8d1-f6c5a0d1fc4d& - response_mode=fragment& - state=$MY_STATE" id="my-link">I'm the best at logging in :p</a> --> <div class="container-fluid table-responsive"> <table class="table table-striped"> @@ -116,51 +99,6 @@ <div id="valid-domainName" class="valid-feedback"></div> <div id="invalid-domainName" class="invalid-feedback"></div> - <!--<div class="form-check"> - <input class="form-check-input" type="checkbox" value="" id="${nomeServizio}"/> - <label class="form-check-label" for="#${nomeServizio}"> - ${nomeServizio} - </label> - </div>--> - - <!--<fieldset class="is-invalid"> - <legend>Scegli uno o piu' servizi</legend> - <div class="form-check"> - <input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio}"/> - <label class="form-check-label" for="#${nomeServizio}"> - ${nomeServizio} - </label> - </div> - <div class="form-check"> - <input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio2}"/> - <label class="form-check-label" for="#${nomeServizio2}"> - ${nomeServizio} - </label> - </div> - <div class="form-check"> - <input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio3}"/> - <label class="form-check-label" for="#${nomeServizio3}"> - ${nomeServizio} - </label> - </div> - <div class="form-check"> - <input class="form-check-input" type="checkbox" value="${nomeServizio}" id="${nomeServizio4}"/> - <label class="form-check-label" for="#${nomeServizio4}"> - ${nomeServizio} - </label> - </div> - </fieldset> --> - - <!--<div id="utente0"> - <label for="#nuovoUtente" class="form-label">Nuovo utente</label> - <input type="text" class="form-control" id="nuovoUtente" aria-describedby="#nuovoUtenteHelp"> - <div id="nuovoUtenteHelp" class="form-text">Inserisci il nome del nuovo utente.</div> - - <label for="#passwordUtente" class="form-label">Password utente</label> - <input type="text" class="form-control" id="passwordUtente" aria-describedby="#passwordUtenteHelp"> - <div id="passwordUtenteHelp" class="form-text">Inserisci la password del nuovo utente.</div> - </div>--> - </div> <div class="modal-footer justify-content-around"> <button type="button" class="btn btn-dark" id="add-user-button">Aggiungi utente</button> diff --git a/webserver/public/js/authentication/requests-to-domain.js b/webserver/public/js/authentication/requests-to-domain.js index cd51cbb..c18e8d3 100644 --- a/webserver/public/js/authentication/requests-to-domain.js +++ b/webserver/public/js/authentication/requests-to-domain.js @@ -11,7 +11,7 @@ class RequestToDomain { * sui domini dell'utente che ha effettuato il login */ static async getMyDomains() { - const responseDomain = await fetch(`${getDomainURL()}secured/domains/`, { // DA FARE: controllare che l'uri che ho specificato qui coincida con quello specificato dal domain manager + const responseDomain = await fetch(`${getDomainURL()}secured/domains/`, { method: 'GET', headers: { 'Authorization': `Bearer ${await getToken()}` @@ -58,7 +58,7 @@ class RequestToDomain { * disponibili. */ static async getAllServices() { - const responseDomain = await fetch(`${getDomainURL()}secured/services`, { // DA FARE: controllare che l'uri che ho specificato qui coincida con quello specificato dal domain manager + const responseDomain = await fetch(`${getDomainURL()}secured/services`, { method: 'GET', headers: { 'Authorization': `Bearer ${await getToken()}` diff --git a/webserver/public/js/authentication/script.js b/webserver/public/js/authentication/script.js index 181700f..a04dd0d 100644 --- a/webserver/public/js/authentication/script.js +++ b/webserver/public/js/authentication/script.js @@ -140,11 +140,13 @@ function timeoutRefresh() { clearTimeout(oldTimeout); return setTimeout(async () => { + console.log("fired!",{alreadyRefreshed}) if(!alreadyRefreshed) { await requestUsingRefreshToken(); alreadyRefreshed = false; + console.log("refreshed!") } - }, 10000);//(token.refresh_expires_in*1000)-5000); + }, (token.expires_in*1000)-5000); // richiedo il nuovo token 5 secondi prima che il token scada } diff --git a/webserver/public/redirect.html b/webserver/public/redirect.html index 19cbdc2..2b7468b 100644 --- a/webserver/public/redirect.html +++ b/webserver/public/redirect.html @@ -4,34 +4,12 @@ <head> <meta charset="utf-8"> <title id="title">SmartHome</title> - <!--<link rel="icon" href="res/favicon.png">--> - <!-- link all other useful scripts --> - - <!-- link bootstrap --> - <!--<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" - integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> - <script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" - integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" - crossorigin="anonymous"></script>--> - <!-- link fontawesome (for icons)--> - <!-- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" - integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> --> - <!-- <script defer src="https://kit.fontawesome.com/a1635545b7.js" crossorigin="anonymous"></script> --> - <!-- link my scripts and styles --> - <!-- <link rel="stylesheet" href="css/style.css" type="text/css"> - <link rel="stylesheet" href="css/buttons.css" type="text/css"> --> - <!-- <script defer src="https://github.com/nodejs/node/blob/v18.8.0/lib/crypto.js" type="text/javascript"></script> --> - <!-- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script> --> - <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script> --> <script defer src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script> - <!-- <script defer src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> - <script defer src="js/authentication/axios.min.js"></script> --> <script defer src="js/authentication/moment.min.js"></script> <script defer src="js/authentication/script.js" type="module"></script> </head> <body> - <!--<h1>Pissir SmartHome</h1>--> <a href="http://$DOMAIN/realms/$REALM/protocol/openid-connect/auth? response_type=code& code_challenge=$MY_CODE_CHALLENGE& @@ -41,6 +19,6 @@ scope=openid& nonce=a81e1a84-8885-4702-b8d1-f6c5a0d1fc4d& response_mode=fragment& - state=$MY_STATE" id="my-link" style="visibility: hidden">I'm the best at logging in :p</a> + state=$MY_STATE" id="my-link" style="visibility: hidden"></a> </body> </html> \ No newline at end of file -- GitLab