Skip to content
Snippets Groups Projects
Select Git revision
  • b07785e2ba099e57c721ec3cc356a4d0085f738d
  • master default protected
  • Legacy_Php7
3 results

check-config.php

Blame
  • check-config.php 4.82 KiB
    <?php
    /* ######################################################################
    
      IML DEPLOYMENT
    
      CONFIG CHECKER for new setups
    
      ---------------------------------------------------------------------
      2017-12-01  Axel <axel.hahn@iml.unibe.ch>
      ###################################################################### */
    
    
    
    // ----------------------------------------------------------------------
    // functions
    // ----------------------------------------------------------------------
    
    function drawbox($s, $sClass) {
        return '<div class="box ' . $sClass . '">' . $s . '</div>';
    }
    
    function showerror($s) {
        return drawbox($s, 'error');
    }
    
    function showok($s) {
        return drawbox($s, 'ok');
    }
    
    function checkdir($sDir, $sKey = false) {
        global $aErrors;
    
        echo 'check directory [' . $sDir . '] ';
        if (!is_dir($sDir)) {
            echo '<span class="error">does not exist</span><br>';
            $aErrors[] = "* \$aConfig['$sKey'] points to a non existing directory (" . $sDir . ").\n";
            return false;
        } else {
            if (!is_writable($sDir)) {
                echo '<span class="error">not writable</span><br>';
                $aErrors[] = "* \$aConfig['$sKey'] = " . $sDir . " is NOT writable.\n";
                return false;
            } else {
                echo '<span class="ok">OK</span> exists and is writable<br>';
                return true;
            }
        }
        return false;
    }
    
    function checkModule($aRequiredMods=array()){
        global $aErrors;
        $sReturn='';
        
        $aAllMods=get_loaded_extensions(false);
        asort($aAllMods);
        if(!count($aRequiredMods)){
            echo '<strong>List of all installes php modules</strong><br>';
            foreach($aAllMods as $sMod){
                echo $sMod.'<br>';
            }
        } else {
            foreach($aRequiredMods as $sMod){
                echo $sMod.' - ';
                if(!array_search($sMod, $aAllMods)===false){
                    echo  '<span class="ok">OK</span> installed';
                } else {
                    echo '<span class="error">does not exist</span>';
                    $aErrors[] = "* php module $sMod was not found.\n";
                }
                echo '<br>';
            }
        }
        return true;   
    }
    
    // ----------------------------------------------------------------------
    // 
    // main
    // 
    // ----------------------------------------------------------------------
    
    echo '
    <style>
        body{font-family: arial; background: #f8f8f8; color:#345;}
        .box{border: 2px solid rgba(0,0,0,0.2); padding: 1em; margin-bottom: 1em;}
        .ok{color:#383; background:#cfd;}
        .error{color:#833; background:#fdd;}
    </style>
    <h1>Config Checker</h1>
    ';
    
    $aErrors = array();
    include("../config/inc_projects_config.php");
    if (!isset($aConfig) || !is_array($aConfig)) {
        // echo showerror("\$aConfig does not exist. The config was not included before including " . __FILE__ . " in the request/ script.");
        $aErrors[] = "* \$aConfig does not exist. The config was not included before including " . __FILE__ . " in the request/ script.";
    } else {
        
        // ----------------------------------------------------------------------
        echo '<h2>Check keys with directories</h2>';
        foreach (array(
            'appRootDir',
            'configDir',
            'workDir',
            'dataDir',
            'buildDir',
            'buildDefaultsDir',
            'packageDir',
            'archiveDir',
        ) as $sKey) {
            checkdir($aConfig[$sKey], $sKey);
        }
        
        echo '<h2>Check subdirs of key dataDir</h2>';
        foreach (array(
                $aConfig['dataDir'] . '/database',
                $aConfig['dataDir'] . '/projects',
                $aConfig['dataDir'] . '/sshkeys',
            ) as $sDir2Check) {
            checkdir($sDir2Check, 'dataDir + [subdir]');
        }
        
        // ----------------------------------------------------------------------
        echo '<h2>Check keys</h2>';
        // check required keys in the config
        foreach (array(
        'auth',
         'hooks',
         'installPackages',
         'lang',
         'phases',
         'projects',
        ) as $sKey) {
            echo "Key [$sKey] ";
            if (!array_key_exists($sKey, $aConfig)) {
                echo '<span class="error">failed</span> missing key [$sKey] in config<br>';
                $aErrors[] = "* missing key [$sKey] in config\n";
            } else {
                echo '<span class="ok">OK</span> exists<br>';
            }
        }
    }
    
    echo '<h2>Check required PHP modules</h2>';
    echo 'PHP version: '.PHP_VERSION.'<br>'
            . '<br>';
    checkModule(array(
        'PDO','curl', 'json', 'ldap', 'pdo_sqlite'
    ));
    
    echo '<h2>Result</h2>';
    
    if (count($aErrors)) {
        echo showerror("FATAL ERROR in config.<br>" . implode("<br>\n", $aErrors));
    } else {
        echo showok('OK, check was successfully finished.');
    }
    
    // do not enable - it shows passwords...
    // echo 'DEBUG: <pre>' . print_r($aConfig, 1) . '</pre>';