]> git.p6c8.net - jirafeau.git/blobdiff - docker/docker_config.php
[TASK] import weblate the hard way
[jirafeau.git] / docker / docker_config.php
index 65005881d0525a3b98624832fdc5f2ea61066d9e..6a03b7360aebd63308c0ac8ea49cde3f85e612f1 100644 (file)
@@ -23,17 +23,168 @@ 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_bool($cfg, 'title');
+    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_bool($cfg, 'one_time_download');
+    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, 'upload_ip_nopassword');
+    env_2_cfg_string_array($cfg, 'proxy_ip');
+    env_2_cfg_bool($cfg, 'store_uploader_ip');
+
+    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);

patrick-canterino.de