# Guida Completa - NexusGrab

**NexusGrab** è un'applicazione web leggera in PHP per la condivisione, catalogazione e download di file digitali con interfaccia moderna e pannello di amministrazione protetto.

---

## 📋 Indice
1. [Requisiti di Sistema](#1-requisiti-di-sistema)
2. [Installazione e Configurazione](#2-installazione-e-configurazione)
3. [Struttura delle Cartelle](#3-struttura-delle-cartelle)
4. [Come Funziona l'Applicazione](#4-come-funziona-lapplicazione)
   - [Area Pubblica (Utenti / Visitatori)](#area-pubblica-utenti--visitatori)
   - [Pannello di Amministrazione (Admin)](#pannello-di-amministrazione-admin)
5. [Gestione e Cambio Password Admin](#5-gestione-e-cambio-password-admin)
6. [Sicurezza e Best Practices](#6-sicurezza-e-best-practices)

---

## 1. Requisiti di Sistema

- **Server Web:** Apache, Nginx o LiteSpeed
- **Versione PHP:** PHP 7.4 o superiore (consigliato PHP 8.x)
- **Estensioni PHP:** `json`, `session`, `fileinfo` (abilitate di default nella quasi totalità degli hosting)
- **Database SQL:** **NON necessario** (l'applicazione utilizza archiviazione su file system e dati in formato JSON)

---

## 2. Installazione e Configurazione

### Passaggio 1: Caricamento dei file
Carica l'intera cartella (es. `scarica/`) sul tuo server web nella root pubblica (es. `public_html/` o `htdocs/`) oppure in una sottocartella desiderata.

### Passaggio 2: Permessi di scrittura (Chmod)
Assicurati che il server web abbia i permessi di lettura e scrittura sulle seguenti cartelle e file:
- Cartella `uploads/` (permessi **755** o **775**)
- Cartella `data/` e il file `data/files.json` (permessi **755** / **664**)
- File `config/config.php` (permessi di scrittura se si desidera cambiare la password direttamente dal pannello web)

### Passaggio 3: Accesso iniziale
Apri il browser e naviga all'indirizzo dell'applicazione:
- **Homepage:** `https://tuodominio.it/scarica/`
- **Login Admin:** `https://tuodominio.it/scarica/admin/login.php`

---

## 3. Struttura delle Cartelle

```text
scarica/
│
├── admin/                    # Pannello di amministrazione
│   ├── index.php             # Dashboard admin (upload, gestione cartelle/file)
│   ├── login.php             # Pagina di autenticazione
│   ├── logout.php            # Chiusura sessione admin
│   └── password.php          # Interfaccia cambio password
│
├── assets/                   # Risorse statiche
│   └── css/
│       └── style.css         # Foglio di stile personalizzato
│
├── config/
│   └── config.php            # Configurazione percorsi e credenziali
│
├── data/
│   └── files.json            # Database JSON (statistiche download, metadati file)
│
├── includes/
│   ├── header.php            # Barra di navigazione superiore
│   └── footer.php            # Piè di pagina, statistiche dinamiche e cookie banner
│
├── uploads/                  # Cartella di memorizzazione fisica dei file caricati
│
├── browse.php                # Navigazione sfoglia-cartelle per i visitatori
├── download.php              # Gestore sicuro del download e incremento statistiche
├── index.php                 # Homepage con ricerca e cartelle principali
├── info.php                  # Informazioni sul software e contatti
├── privacy-policy.php        # Informativa sulla privacy GDPR
├── termini-servizio.php      # Termini e condizioni del servizio
└── cookie-policy.php         # Informativa estesa sui cookie
```

---

## 4. Come Funziona l'Applicazione

### Area Pubblica (Utenti / Visitatori)
- **Nessuna registrazione richiesta:** i visitatori non devono creare account né fornire dati personali.
- **Esplorazione e Ricerca:**
  - Dalla **Homepage** (`index.php`) è possibile cercare file per nome in tempo reale.
  - Dalla pagina **Esplora File** (`browse.php`) è possibile navigare all'interno delle varie categorie e sottocartelle tramite un comodo percorso di navigazione (Breadcrumb).
- **Download File:**
  - Cliccando su **Scarica**, la richiesta passa per `download.php`, che invia il file al client e incrementa automaticamente il contatore dei download in `data/files.json`.

### Pannello di Amministrazione (Admin)
- Accessibile da `/admin/`.
- Permette all'amministratore autenticato di:
  1. **Creare nuove cartelle e sottocartelle**.
  2. **Caricare nuovi file** assegnandoli alla categoria/cartella desiderata.
  3. **Rinominare file o cartelle** esistenti.
  4. **Eliminare file o cartelle** in modo sicuro.
  5. Monitorare il numero esatto di download per ogni singolo elemento.

---

## 5. Gestione e Cambio Password Admin

Le credenziali predefinite sono:
- **Username:** `admin`
- **Password predefinita:** `admin123`

### Opzione A: Cambio Password dal Pannello Web (Consigliato)
1. Esegui il login su `admin/login.php`.
2. Nel pannello di amministrazione, clicca sul pulsante **"Cambia Password"** in alto a destra (oppure naviga a `admin/password.php`).
3. Inserisci la **password attuale**.
4. Inserisci la **nuova password** (minimo 8 caratteri) e confermala.
5. Clicca su **"Aggiorna Password"**. Il sistema calcolerà l'hash cifrato **BCrypt** e aggiornerà automaticamente il file `config/config.php`.

### Opzione B: Modifica Manuale del File `config.php`
Se desideri reimpostare la password direttamente modificando il file:
1. Apri il file `scarica/config/config.php`.
2. Modifica la costante `ADMIN_PASSWORD` incollando l'hash crittografato generato con `password_hash()`:
   ```php
   // Esempio per impostare la password su: admin123
   define('ADMIN_PASSWORD', '$2y$10$e0MYzXyjpJS7Pd0RVvHwHeFvjZg9iE0bE4Y.07gVqgN4e5gPqVvy6');
   ```
3. Salva il file.

---

## 6. Sicurezza e Best Practices

1. **Password Forte:** Imposta una password complessa contenente lettere maiuscole, minuscole, numeri e simboli.
2. **Protezione della cartella `data/`:**
   Se utilizzi Apache, è consigliabile verificare che i file `.json` non siano scaricabili direttamente via browser creando un file `.htaccess` all'interno di `data/`:
   ```apache
   # data/.htaccess
   Deny from all
   ```
3. **Limite Dimensioni Upload:**
   Se devi caricare file di grandi dimensioni, verifica i parametri nel file `php.ini` del tuo server:
   - `upload_max_filesize = 64M` (o superiore)
   - `post_max_size = 64M` (o superiore)
   - `max_execution_time = 300`

ricordati di cancellare il file setup_password.php 