<?php
/**
 * VFM - veno file manager setup script
 *
 * PHP version >= 7.4
 *
 * @category  PHP
 * @package   VenoFileManager
 * @author    Nicola Franchini <info@veno.it>
 * @copyright 2013-2026 Nicola Franchini
 * @license   https://veno.es/shop/help Veno Commercial License
 * @link      http://filemanager.veno.it/
 */
define('VFM_APP', true);
require_once 'config.php';

$lockfile = '_content/install.lock';

// 1. Gestione Errori
if (isset($_CONFIG['debug_mode']) && $_CONFIG['debug_mode'] === true) {
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
} else {
    error_reporting(E_ALL ^ E_NOTICE);
}

require_once 'class/class.setup.php';
require_once 'class/class.gatekeeper.php';

$setUp = new setUp();
$gateKeeper = new GateKeeper();

$_USERS = $gateKeeper->getUsers();
$script_url = $setUp->getConfig('script_url');
$firstrun = $setUp->getConfig('firstrun');

/**
 * 2. BLOCCO DI SICUREZZA E REINDIRIZZAMENTO
 * Se il SuperAdmin ha una password e il sito ha un URL, l'app è già installata.
 */
if (isset($_USERS[0]['pass']) && strlen($_USERS[0]['pass']) > 0 && $script_url) {
    // Se manca il lock, crealo ora (auto-protezione per chi aggiorna)
    if (!file_exists($lockfile)) {
        @file_put_contents($lockfile, date('Y-m-d H:i:s'));
    }
    header('Location:'.$script_url);
    exit;
}

/**
 * 3. PROTEZIONE CONTRO ACCOUNT TAKEOVER
 * Se il config è rotto/vuoto ma il file lock esiste, l'attaccante ha tentato di resettare il sito.
 */
if (file_exists($lockfile)) {
    die('Security Alert: The configuration file (config.php) is missing or corrupted, but the system is already installed. Automatic setup is blocked to prevent unauthorized access. To fix this, please restore your vfm-admin/config.php from a backup. If you intended to perform a fresh installation, you must first manually delete vfm-admin/_content/install.lock via FTP.');
}

// --- Da qui in poi procede solo se è una PRIMA INSTALLAZIONE REALE ---

require_once 'class/class.utils.php';
require_once 'class/class.admin.php';
require_once 'class/class.updater.php';
$updater = new Updater();

$resetconfig = false;
$resetusr = false;

/**
 * Configurazione URL base
 */
if ($firstrun || !$script_url) {
    $actual_link = Admin::getAppUrl();
    $_CONFIG['script_url'] = $actual_link;
    $_CONFIG['firstrun'] = false;
    $resetconfig = true;
    $updater->updateUploadsDir();
}

/**
 * Generazione parametri essenziali se mancanti
 */
if (strlen($_CONFIG['session_name']) < 5) {
    $_CONFIG['session_name'] = "vfm_".strval(mt_rand());
    $resetconfig = true;
}

if (strlen($_CONFIG['salt']) < 5) {
    $_CONFIG['salt'] = md5(mt_rand());
    $resetusr = true;
}

/**
 * Reset / Creazione primo SuperAdmin
 */
if (strlen($_USERS[0]['pass']) < 1 || $resetusr === true) {
    $reset = password_hash($_CONFIG['salt'].urlencode('password'), PASSWORD_BCRYPT);
    $_USERS[0]['pass'] = $reset;
    Utils::writePhpData(dirname(__FILE__).'/_content/users/users.php', '$_USERS', $_USERS);
}

/**
 * Scrittura finale config.php e creazione Lock
 */
if ($resetusr === true || $resetconfig === true) {
    if (Utils::writePhpData(dirname(__FILE__).'/config.php', '$_CONFIG', $_CONFIG)) {
        // Creazione del lock finale
        @file_put_contents($lockfile, date('Y-m-d H:i:s'));
    } else {
        Utils::setError("Error writing on /config.php");
    }
}

$updater->updateHtaccess('./');

header('Location:'.$_CONFIG['script_url']);
exit;
