# RuscoMap _Una mappa della propria città dove utenti in anonimo possono inserire dei marker con nome, descrizione e foto del'oggetto abbandonato, segnalandolo a tutti i visitatori della mappa._
Sulla falsa riga del "_te lo regalo se vieni a prenderlo_", questo è più il "_segnalo che c'è sta roba lì, è tua se te la vai a prendere_" ### ToDo per essere funzionale alla versione 0.1 - [x] Aggiungere il marker (visivo) al clic di inserimento marker [[commit f611832592](https://git.lattuga.net/scossa/ruscomap/commit/f6118325925ba91173cf5bcc0a206b85fa3ef1a3)] - [x] Al momento si possono aggiungere infiniti marker (temporanei), da fixare [[commit 0fba9efe99](https://git.lattuga.net/scossa/ruscomap/commit/0fba9efe99057119ef5eedec078987482a193fea)] ### ToDo per essere funzionale alla versione 0.2 - [ ] ~~Cancellare i marker creati > di 24h (sia record db che img)~~ [[commit 78d4b6b216](https://git.lattuga.net/scossa/ruscomap/commit/78d4b6b2169d43550aa3af800ac2f946ebeb9743)] - [ ] Rimuovere pezzi di codice js per cancellare marker creati > di 24h. Dovrebbe essere solo il [commit 78d4b6b216](https://git.lattuga.net/scossa/ruscomap/commit/78d4b6b2169d43550aa3af800ac2f946ebeb9743) - [x] Scrivere script bash (delete_rusco.sh) che cancella tutti marker [[commit c0c4ee99e9](https://git.lattuga.net/scossa/ruscomap/commit/c0c4ee99e9262624ca86a1501429a85890452478)] - [x] Scrivere script bash (pulisci_vecchio_rusco.sh) che cancella tutti marker più vecchi di 24h (automatico) [[commit c0c4ee99e9](https://git.lattuga.net/scossa/ruscomap/commit/c0c4ee99e9262624ca86a1501429a85890452478)] - [ ] Come per mettere nel cron del server lo script che cancella i marker più vecchi di 24h - [x] Scrivere script bash (pulisci_manualmente_vecchio_rusco.sh) che cancella tutti marker più vecchi di 24h (manuale) [[commit c0c4ee99e9](https://git.lattuga.net/scossa/ruscomap/commit/c0c4ee99e9262624ca86a1501429a85890452478)] - [ ] pushare e spostare script in cartella /script ### ToDo per essere funzionale alla versione 0.3 - [x] Implementare il bottone in alto a dx: quando premuto per passare alla modalità inserimento diventa una _X rossa_ che se premuta annulla l'inserimento marker [[commit fa82dc221e](https://git.lattuga.net/scossa/ruscomap/commit/fa82dc221e2e8d1648c78534c0320bd099f897f0)] - [ ] A marker aggiunto con successo come icona del bottone in alto a dx rimane la X rossa (in modalità inserimento marker) invece di ritornare l'icona del marker (ovvero passare in modalità normale/visualizzazione) ### ToDo per essere funzionale alla versione 0.4 - [ ] Mostrare data/ora pubblicazione del marker per far capire al visitatore quanto tempo fa è stato avvistato il rusco - [ ] Al momento sul marker temporaneo si vede l'immagine rotta. fixare: sul temporaneo non bisogna mostrare nulla ### ToDo per essere funzionale alla versione 0.5 - [ ] Riformattare visualizzazione form inserimento marker per mobile - [ ] Milgiorare css del form inserimento dati marker ### ToDo per essere funzionale alla versione 0.6 - [ ] Creare form per ricercare tra i titoli/descrizioni dei marker esistenti (query esempio: "divano") ### ToDo per essere funzionale alla versione 0.7 - [ ] Pop-Up all'apertura di ruscomap con descrizione breve - [ ] Scrivere il tutorial utente di ruscomap - [ ] Creare pagina tutorial - [ ] Link alla pagina del tutorial nel PopUp iniziale ### ToDo per essere funzionale alla versione 1.0 - [ ] Creare form login/registrazione - [ ] Abilitare (solo lato admin) creazione di nomeutente/password (no mail/altro) - [ ] Gestione autenticazione utenti con password - [ ] Ruolo Ospite. Permessi: Visita mappa - [ ] Ruolo Utente. Permessi: Visita mappa, Aggiungi marker - [ ] Ruolo Admin. Permessi: Visita mappa, Aggiungi marker, Cancella Marker - [ ] Mostrare un pulsante affianco/sopra/dentro al form dei dati del marker quando autenticati come admin che ha la funzione di cancellare il marker corrispondente - [ ] Chiedere la conferma della cancellazione del marker ## Possibili altre implementazioni - [ ] Scatta la foto del marker da uploadare direttamente in app (su alcuni smartphone gia lo fa) - [ ] Inserire la posizione del marker tramite il gps dello smartphone - [ ] Possibilità di aggiungere piu di una foto per un marker - [x] Standardizzare gli script con controllo "myusername" - [ ] Standardizzare con le varialibili del default.json gli script - [ ] File config per popolare default.json e gli script - [ ] Logo RuscoMap
---

# ISTRUZIONI INSTALLAZIONE ## Installazione dipendenze #### Installa mariadb sudo apt update && sudo apt install mariadb #### Installa node e nvm Curl da sito ufficiale [qui](https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script)
_trobleshooting: cerca nvm in .bashrc_ ## Installazione ruscomap #### Clona il git ``` # crea la cartella mkdir /var/www/html/leaflet/; cd /var/www/html/leaflet/; # clona il repo git clone https://git.lattuga.net/scossa/ruscomap.git ``` #### Personalizza il file di configurazione db nano /var/www/html/leaflet/ruscomap/config/default.json #### Inizializza db ``` # usa la versione node spcificata nel file .nvmrc cd /var/www/html/leaflet/ruscomap/; nvm use # sempre da cartella git cd /var/www/html/leaflet/ruscomap/; # inzializza Db mysql < intDb.sql ``` #### Apri porta sul firewall sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT #### Crea il servzio nano /etc/systemd/system/ruscomap.service ``` [Unit] Description=Ruscomap Service After=network.target [Service] User= WorkingDirectory=/var/www/html/leaflet/ruscomap/ ExecStart=/bin/bash -c "node index.js" Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ``` ##### avvialo e abilitalo a startarsi in automatico ``` sudo systemctl start ruscomap.service sudo systemctl enable ruscomap.service ``` #### Crea il file conf di apache nano /etc/apache2/site-enabled/ruscomap.conf ``` #PORT 80 RUSCOMAP DocumentRoot /var/www/html/leaflet/ruscomap/public ServerName ruscomap.myserver.it ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ RewriteEngine on RewriteCond %{HTTP:Upgrade} =websocket RewriteRule /(.*) ws://localhost:3000/$1 [P,L] ErrorLog ${APACHE_LOG_DIR}/ruscomap.log CustomLog ${APACHE_LOG_DIR}/ruscomap-access.log combined ``` ##### restarta apache ``` sudo systemctl restart apache2.service ```
# ISTRUZIONI ADMIN ## Script per cancellare tutti i record della table "markers" più vecchi di 24h (automatico) nano /var/www/html/leaflet/ruscomap/pulisci_vecchio_rusco.sh ``` #!/bin/bash # Database credentials DB_USER="myusername" DB_PASS="mypassword" DB_NAME="ruscomap" TABLE_NAME="markers" # Controlla se DB_USER è "myusername" if [ "$DB_USER" == "myusername" ]; then echo -e "\nDevi impostare nome utente e password per usare lo script" echo -e "editalo con nano pulisci_vecchio_rusco.sh" exit 0 fi # Prendi l'ora e data meno 24 ore TIME_THRESHOLD=$(date -d '24 hours ago' '+%Y-%m-%d %H:%M:%S') # comando sql che cancella i record piu vecchi di 24h SQL_COMMAND="DELETE FROM $TABLE_NAME WHERE ts < '$TIME_THRESHOLD';" esegue il comando Execute the SQL command mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "$SQL_COMMAND" # check del comando if [ $? -eq 0 ]; then echo "Rusco più vecchi di 24h cancellato." else echo "\ERRORE!\n" ``` #### Imposta lo script su cron per essere eseguito ogni 24h ``` ``` ## Script per cancellare tutti i record della table "markers" più vecchi di 24h (manuale) nano /var/www/html/leaflet/ruscomap/pulisci_manualmente_vecchio_rusco.sh ``` #!/bin/bash # Database credentials DB_USER="myusername" DB_PASS="mypassword" DB_NAME="ruscomap" TABLE_NAME="markers" # Controlla se DB_USER è "myusername" if [ "$DB_USER" == "myusername" ]; then echo -e "1nDevi impostare nome utente e password per usare lo script" echo -e "editalo con nano pulisci_vecchio_rusco.sh" exit 0 fi # Mostra dati impostati echo -e "\nDati impostati:" echo -e "$DB_USER" echo -e "$DB_PASS" echo -e "$DB_NAME" echo -e "$TABLE_NAME"\n # Chiedi all'utente se i dati sono giusti read -p "I dati sono giusti? Vuoi continuare? (y/yes/s/si): " user_input # Converti l'input in minuscolo user_input_lower=$(echo "$user_input" | tr '[:upper:]' '[:lower:]') # Controlla se l'input è uno dei valori accettabili if [[ "$user_input_lower" == "y" || "$user_input_lower" == "yes" || "$user_input_lower" == "s" || "$user_input_lower" == "si" ]]; then echo -e "Cancello la table $TABLE_NAME..." # Prendi l'ora e data meno 24 ore TIME_THRESHOLD=$(date -d '24 hours ago' '+%Y-%m-%d %H:%M:%S') # comando sql che cancella i record piu vecchi di 24h SQL_COMMAND="DELETE FROM $TABLE_NAME WHERE ts < '$TIME_THRESHOLD';" esegue il comando Execute the SQL command mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "$SQL_COMMAND" # check del comando if [ $? -eq 0 ]; then echo "Rusco più vecchi di 24h cancellato." else echo "\nErrore!\n" fi ``` ## Cancella un record del db ``` mariadb -u -p show databases; use ruscomap; show tables; select * from markers; DELETE FROM markers WHERE filename = '0a9f02167f85c845db2d4b81bbeef9d5'; ``` ## Script per aggiornare ruscomap nano /var/www/html/leaflet/ruscomap/AggiornaRuscoMap.sh ``` echo -e "Stoppo ruscomap..." systemctl stop ruscomap.service sleep 1 cd /var/www/html/leaflet/ruscomap echo -e "\nEseguo git pull..." git pull sleep 1 echo -e "Do permessi www-data..." chown -R www-data:www-data /var/www/html/leaflet/ruscomap/public echo -e "restarto apache e ruscmap"... systemctl restart apache2.service systemctl start ruscomap.service echo -e "Aggiornamento completato!\n" ``` ## Script per cancellare tutti i record della table "markers" nano /var/www/html/leaflet/ruscomap/delete_rusco.sh ``` #!/bin/bash # Define database credentials DB_USER="myuser" DB_PASS="mypassword" # Connect to MariaDB and execute commands mariadb -u "$DB_USER" -p"$DB_PASS" <