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 13:19:20 +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 2024-08-19 13:19:20 +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

Comincia ad essere utilizzabile ma con davvero molti problemi
  • Aggiungere il marker (visivo) al clic di inserimento marker [commit f611832592]
  • Al momento si possono aggiungere infiniti marker (temporanei), da fixare [commit 0fba9efe99]

ToDo per essere funzionale alla versione 0.2

Con davvero molti problemi ma con anche il plugin che cancella in automatico
  • Cancellare i marker creati > di 24h (sia record db che img) [commit 78d4b6b216]
  • Rimuovere pezzi di codice js per cancellare marker creati > di 24h. La funzione verrà implementata con degli script bash stile plugin, dato che non tutte le mappe saranno per il rusco, nel senso che potrebbero essere maker permanenti (es fontanelle d'acqua). Il codice da pulire dovrebbe essere solo quello del commit 78d4b6b216, ma non ne sono sicuro.
  • Scrivere script bash (delete_rusco.sh) che cancella tutti marker [commit c0c4ee99e9]
  • Scrivere script bash (pulisci_vecchio_rusco.sh) che cancella tutti marker più vecchi di 24h (automatico) [commit c0c4ee99e9]
  • Come 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) [commit c0c4ee99e9]
  • pushare e spostare script in cartella /script

ToDo per essere funzionale alla versione 0.3

  • 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)
  • Eliminare visualizzazione di eventuali marker temporanei aggiunti se viene cliccata la X rossa

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

Comincia ad avere un senso anche se con solo accesso anonimo può succedere un casino da un momento all'altro
  • 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 0.8

  • Creare form login per admin
  • Creare bottone per form/pagina "area riservata"/"accedi"
  • Creare Pannello Admin
  • Creare Ruolo Admin
    • Permessi: Visita mappa, Aggiungi marker, Accesso a pannello admin

ToDo per essere funzionale alla versione 1.0

Qui le funzioni di base per utilizzo di massa ci sono tutte
  • Implementare il pannelo per permettere all'admin di poter creare utenti (nomeutente/password, no mail o altro)
  • Creare (?) Ruolo Ospite. Permessi: Visita mappa
  • Creare Ruolo Utente. Permessi: Visita mappa, Aggiungi marker
  • Gestione autenticazione utenti con password
  • Implemtare nel pannello lo switch per on/off inserimento solo utenti e admin o anche ospiti.

oppure

  • Implementare il pannelo per permettere all'admin di poter creare utenti (nomeutente/password, no mail o altro)
  • Implemtare review per moderazione rusco inserito
  • Implemtare nel pannello lo switch per on/off moderazione


ToDo per essere funzionale alla versione 1.1

  • Feature da pannello admin: poter cancellare un utente

ToDo per essere funzionale alla versione 1.2

  • Feature da pannello admin: poter disabilitare un utente

ToDo per essere funzionale alla versione 1.3

  • Cancella Marker
    • Quando autenticati come admin mostrare un pulsante affianco/sopra/dentro al form dei dati del marker che ha la funzione di cancellare il marker corrispondente
    • Popup che chiede la conferma della cancellazione del marker

ToDo per essere funzionale alla versione 1.4

  • Implemtare review per moderazione rusco inserito
  • Implemtare nel pannello lo switch per on/off moderazione

ToDo per essere funzionale alla versione 1.5

  • Creare Ruolo Moderatore. Permessi : Visita mappa, Aggiungi marker

ToDo per essere funzionale alla versione 1.6

  • Feature da pannello admin: poter cambiare ruolo o un utente

ToDo per essere funzionale alla versione 1.7

Ok, ora si comincia a chiamare webapp
  • Feature da pannello admin: poter settare permessi personalizzati ai vari Ruoli (magari si vuole dare l'inserimento anche agli ospiti e/o la cancellazione dei marker agli user)

ToDo per essere funzionale alla versione 1.8

Ora vogliamo solo fare tanti soldi
  • Creare form registrazione con mail
  • Richiedere conferma mail via link spedito a l'indirizzo

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
  • Script di installazione ruscomap
  • Standardizzare gli script con controllo "myusername"
    • Standardizzare con le varialibili del default.json gli script
    • File config per popolare default.json e gli script
  • Creare 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_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 <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