X-Git-Url: https://git.p6c8.net/jirafeau_project.git/blobdiff_plain/36e0d29e64f711ed170d431542cf62eeb42b96d7..7bff658ab883368c785f68a48f92cdfb1470be19:/docker/docker_config.php diff --git a/docker/docker_config.php b/docker/docker_config.php index 6500588..75c6fb8 100644 --- a/docker/docker_config.php +++ b/docker/docker_config.php @@ -1,7 +1,9 @@ + * Copyright (C) 2008 Julien "axolotl" BERNARD + * Copyright (C) 2015 Jerome Jutteau + * Copyright (C) 2024 Jirafeau project (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 @@ -23,17 +25,176 @@ require(JIRAFEAU_ROOT . 'lib/settings.php'); require(JIRAFEAU_ROOT . 'lib/functions.php'); require(JIRAFEAU_ROOT . 'lib/lang.php'); -function env_2_cfg_string($cfg, $config_name, $env_name) +function env_2_cfg_string(&$cfg, $config_name, $default = null) { - $r = getenv($env_name, true); + $env_name = strtoupper($config_name); + $r = getenv($env_name); + if ($r === false) { + if (is_null($default)) { + return false; + } else { + $r = $default; + } + } + echo("setting $config_name to '$r'\n"); + $cfg[$config_name] = $r; + return true; +} + +function env_2_cfg_bool(&$cfg, $config_name, $default = null) +{ + $env_name = strtoupper($config_name); + $r = getenv($env_name); + if ($r === false) { + if (is_null($default)) { + return false; + } else { + $r = $default; + } + } else { + $r = ($r == "1") ? true : false; + } + echo("setting $config_name to " . ($r ? "true" : "false") . "\n"); + $cfg[$config_name] = $r; + return true; +} + +function env_2_cfg_int(&$cfg, $config_name, $default = null) +{ + $env_name = strtoupper($config_name); + $r = getenv($env_name); + if ($r === false) { + if (is_null($default)) { + return false; + } else { + $r = $default; + } + } else { + $r = intval($r); + } + echo("setting $config_name to $r\n"); + $cfg[$config_name] = $r; + return true; +} + +function env_2_cfg_string_array(&$cfg, $config_name) +{ + $env_name = strtoupper($config_name); + $r = getenv($env_name); if ($r === false) { return; } - echo("setting up '" . $env_name . "' option\n"); + $r = explode(",", $r); + $c = count($r); + echo("setting $config_name array with $c value(s)n\n"); $cfg[$config_name] = $r; - jirafeau_export_cfg($cfg); + return true; +} + +function setup_admin_password(&$cfg) +{ + if (strlen($cfg['admin_password']) > 0) { + return true; + } + echo("setting up admin password\n"); + $p = getenv('ADMIN_PASSWORD'); + if ($p === false) { + $p = jirafeau_gen_random(20); + echo("auto-generated admin password: $p\n"); + } + $cfg['admin_password'] = hash('sha256', $p); + return true; +} + +function set_rights($path) +{ + $uid = getenv('USER_ID'); + if ($uid === false) { + $uid = 100; + } + $gid = getenv('GROUP_ID'); + if ($gid === false) { + $gid = 82; + } + if (!chown($path, $uid)) { + echo("setting up user $uid for $path: failed\n"); + return false; + } + if (!chgrp($path, $gid)) { + echo("setting up group $gid for $path: failed\n"); + return false; + } + if (!chmod($path, 0770)) { + echo("setting up permissions $path: failed\n"); + return false; + } + return true; +} + +function setup_var_folder(&$cfg) +{ + env_2_cfg_string($cfg, 'var_root', '/data/'); + $var_root = $cfg['var_root']; + if (!is_dir($var_root)) { + mkdir($var_root, 0770, true); + } + $err = jirafeau_check_var_dir($var_root); + if ($err['has_error']) { + echo("error: cannot create $var_root folder\n"); + return false; + } + return set_rights($var_root) && + set_rights($var_root . 'async') && + set_rights($var_root . 'files') && + set_rights($var_root . 'links'); +} + +function setup_webroot(&$cfg) +{ + if (!env_2_cfg_string($cfg, 'web_root')) { + echo("warning: you may want to have set WEB_ROOT to your website URL (like 'jirafeau.mydomain.tld/')\n"); + } +} + +function run_setup(&$cfg) +{ + $setup_ok = setup_admin_password($cfg) && + setup_var_folder($cfg); + setup_webroot($cfg); + env_2_cfg_string($cfg, 'file_hash'); + env_2_cfg_bool($cfg, 'preview'); + env_2_cfg_string($cfg, 'title', false); + env_2_cfg_string($cfg, 'organisation'); + env_2_cfg_string($cfg, 'contactperson'); + env_2_cfg_string($cfg, 'style'); + env_2_cfg_string($cfg, 'availability_default'); + env_2_cfg_string($cfg, 'dark_style'); + env_2_cfg_bool($cfg, 'one_time_download'); + env_2_cfg_bool($cfg, 'one_time_download_preselected'); + env_2_cfg_bool($cfg, 'enable_crypt'); + env_2_cfg_bool($cfg, 'debug'); + env_2_cfg_int($cfg, 'maximal_upload_size'); + env_2_cfg_string_array($cfg, 'upload_password'); + env_2_cfg_string_array($cfg, 'upload_ip'); + env_2_cfg_string_array($cfg, 'admin_ip'); + env_2_cfg_string_array($cfg, 'upload_ip_nopassword'); + env_2_cfg_string_array($cfg, 'proxy_ip'); + env_2_cfg_bool($cfg, 'store_uploader_ip'); + env_2_cfg_string($cfg, 'download_password_requirement'); + env_2_cfg_int($cfg, 'download_password_gen_len'); + env_2_cfg_string($cfg, 'download_password_gen_chars'); + env_2_cfg_string($cfg, 'download_password_policy'); + env_2_cfg_string($cfg, 'download_password_policy_regex'); + + if ($setup_ok) { + $cfg['installation_done'] = true; + jirafeau_export_cfg($cfg); + echo("You can now connect to your Jirafeau instance\n"); + exit(0); + } else { + echo("Some Jirafeau options failed"); + exit(1); + } } -// TODO: lots of other options to implement -env_2_cfg_string($cfg, 'file_hash', 'FILE_HASH'); -echo("docker config done\n"); +run_setup($cfg);