Una mappa della propria città dove utenti in anonimo possono inserire dei marker con nome, descrizione e foto dell'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" https://ruscomap.accol.li
Find a file
2024-08-19 02:21:17 +02:00
.vscode add: tutt'cos' 2024-06-30 22:56:19 +02:00
config utile commento di commit. 2024-07-17 12:00:34 +02:00
node_modules up 2024-08-18 16:47:06 +02:00
public button css 2024-08-18 23:55:27 +02:00
ruscoapp/.vscode refine 2024-07-22 19:18:27 +02:00
.gitignore aggiunto supporto db 2024-07-16 17:04:32 +02:00
.nvmrc refine 2024-07-22 19:18:27 +02:00
dbHandler.js add: timer con node-schedule per rm dei marker, css cursore all'inserimento del marker, css form 2024-08-17 19:07:38 +02:00
index.js add: timer con node-schedule per rm dei marker, css cursore all'inserimento del marker, css form 2024-08-17 19:07:38 +02:00
initDb.sql refine 2024-07-22 19:18:27 +02:00
package-lock.json up 2024-08-18 16:47:06 +02:00
package.json add: timer con node-schedule per rm dei marker, css cursore all'inserimento del marker, css form 2024-08-17 19:07:38 +02:00
README.md up script 2024-08-19 02:21:17 +02:00
ruscodb add: tutt'cos' 2024-06-30 22:56:19 +02:00

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

  • Aggiungere il marker (visivo) al clic di inserimento marker [commit f611832592]
  • Al momento si possono aggiungere infiniti marker (temporanei), da fixare [commit 0fba9efe99]
  • Cancellare i marker creati > di 24h (sia record db che img) [commit 78d4b6b216]
  • Rimuovere pezzi di codice js per cancellare marker creati > di 24h. Dovrebbe essere solo il commit 78d4b6b216
  • Scrivere script bash (delete_rusco.sh) che cancella tutti marker
  • Scrivere script bash (pulisci_vecchio_rusco.sh) che cancella tutti marker più vecchi di 24h (automatico)
  • Come per mettere nel cron del server lo script che cancella i marker più vecchi di 24h
  • Scrivere script bash (pulisci_manualmente_vecchio_rusco.sh) che cancella tutti marker più vecchi di 24h (manuale)
  • pushare e spostare script in cartella /script

ToDo per essere funzionale alla versione 0.2

  • 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]
  • 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.3

  • 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.4

  • Riformattare visualizzazione form inserimento marker per mobile
  • Milgiorare css del form inserimento dati marker

ToDo per essere funzionale alla versione 0.5

  • Creare form per ricercare tra i titoli/descrizioni dei marker esistenti (query esempio: "divano")

ToDo per essere funzionale alla versione 0.6

  • 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 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
  • 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
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=<utente_del_config/default.json>
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
<VirtualHost ruscomap.myserver.it:80>

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

</VirtualHost>
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_manuale_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 <utente_del_config/default.json> -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" <<EOF
USE ruscomap;
TRUNCATE TABLE markers;
EOF