<?php
/*
 *  Jirafeau, your web file repository
 *  Copyright (C) 2008  Julien "axolotl" BERNARD <axolotl@magieeternelle.org>
 *  Copyright (C) 2015  Jerome Jutteau <jerome@jutteau.fr>
 *  Copyright (C) 2024  Jirafeau project <https://gitlab.com/jirafeau> (see AUTHORS.md)
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as
 *  published by the Free Software Foundation, either version 3 of the
 *  License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

global $cfg;

// Read config files
require(JIRAFEAU_ROOT . 'lib/config.original.php');
if (file_exists(JIRAFEAU_ROOT . 'lib/config.local.php')) {
    // read local copy and merge with original values
    $cfgOriginal = $cfg;
    require(JIRAFEAU_ROOT . 'lib/config.local.php');
    $cfg = array_merge($cfgOriginal, $cfg);
    unset($cfgOriginal);
}

// Setup debug mode
if ($cfg['debug'] === true) {
    @error_reporting(E_ALL);
} else {
    @error_reporting(0);
}


// Set constants

/* Jirafeau package */
define('JIRAFEAU_PACKAGE', 'Jirafeau');
define('JIRAFEAU_VERSION', '4.6.x-dev');

define('JIRAFEAU_WEBSITE', 'https://gitlab.com/jirafeau/Jirafeau');

/* Directories. */
define('VAR_FILES', $cfg['var_root'] . 'files/');
define('VAR_LINKS', $cfg['var_root'] . 'links/');
define('VAR_ASYNC', $cfg['var_root'] . 'async/');

// helping variable to build absolute link to
// root of the domain without handling the URL scheme
$absPrefix = parse_url($cfg['web_root'], PHP_URL_PATH);
if (true === empty($absPrefix)) {
    // fallback if installation isn't done yet: relative links to same level on the current page
    $absPrefix = './';
}
define('JIRAFEAU_ABSPREFIX', $absPrefix);

/* Useful constants. */
if (!defined('NL')) {
    define('NL', "\n");
}
if (!defined('QUOTE')) {
    define('QUOTE', "'");
}

define('JIRAFEAU_INFINITY', -1);
define('JIRAFEAU_MINUTE', 60); // 60
define('JIRAFEAU_HOUR', 3600); // JIRAFEAU_MINUTE * 60
define('JIRAFEAU_DAY', 86400); // JIRAFEAU_HOUR * 24
define('JIRAFEAU_WEEK', 604800); // JIRAFEAU_DAY * 7
define('JIRAFEAU_FORTNIGHT', 1209600); // JIRAFEAU_WEEK * 2
define('JIRAFEAU_MONTH', 2592000); // JIRAFEAU_DAY * 30
define('JIRAFEAU_QUARTER', 7776000); // JIRAFEAU_DAY * 90
define('JIRAFEAU_YEAR', 31536000); // JIRAFEAU_DAY * 365

define('JIRAFEAU_USER_AUTH_BY_IP_NO_PASSWORD', 1);
define('JIRAFEAU_USER_AUTH_BY_PASSWORD', 2);

define('JIRAFEAU_SODIUM_CHUNKSIZE', 1024);

// Define some Sodium constants from newer PHP versions if they are not available

if (extension_loaded('sodium')) {
    if (!defined('SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES')) {
        define('SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES', 32);
    }

    if (!defined('SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES')) {
        define('SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES', 24);
    }

    if (!defined('SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES')) {
        define('SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES', 17);
    }
}

// set UTC as default timezone for all date/time functions
date_default_timezone_set('UTC');