| | |
| | | <?php |
| | | |
| | | /* |
| | | /** |
| | | +-----------------------------------------------------------------------+ |
| | | | rcmail_install.php | |
| | | | | |
| | |
| | | +-----------------------------------------------------------------------+ |
| | | */ |
| | | |
| | | |
| | | /** |
| | | * Class to control the installation process of the Roundcube Webmail package |
| | | * |
| | | * @category Install |
| | | * @package Roundcube |
| | | * @author Thomas Bruederli |
| | | * @author Thomas Bruederli |
| | | */ |
| | | class rcmail_install |
| | | { |
| | |
| | | $value = $this->config[$name]; |
| | | |
| | | if ($name == 'des_key' && !$this->configured && !isset($_REQUEST["_$name"])) |
| | | $value = self::random_key(24); |
| | | $value = rcube_utils::random_bytes(24); |
| | | |
| | | return $value !== null && $value !== '' ? $value : $default; |
| | | } |
| | |
| | | |
| | | // generate new encryption key, never use the default value |
| | | if ($prop == 'des_key' && $value == $this->defaults[$prop]) |
| | | $value = $this->random_key(24); |
| | | $value = rcube_utils::random_bytes(24); |
| | | |
| | | // convert some form data |
| | | if ($prop == 'debug_level' && !$is_default) { |
| | |
| | | else if (is_numeric($value)) { |
| | | $value = intval($value); |
| | | } |
| | | else if ($prop == 'plugins') { |
| | | else if ($prop == 'plugins' && !empty($_POST['submit'])) { |
| | | $value = array(); |
| | | foreach(array_keys($_POST) as $key) |
| | | { |
| | | foreach (array_keys($_POST) as $key) { |
| | | if (preg_match('/^_plugins_*/', $key)) |
| | | array_push($value, $_POST[$key]); |
| | | } |
| | |
| | | |
| | | foreach ($default_hosts as $key => $name) { |
| | | if (!empty($name)) |
| | | $out[] = rcube_parse_host(is_numeric($key) ? $name : $key); |
| | | $out[] = rcube_utils::parse_host(is_numeric($key) ? $name : $key); |
| | | } |
| | | |
| | | return $out; |
| | |
| | | foreach (glob($plugin_dir . '*') as $path) |
| | | { |
| | | |
| | | if (is_dir($path) && file_exists($path.'/composer.json')) |
| | | if (is_dir($path) && is_readable($path.'/composer.json')) |
| | | { |
| | | $file_json = json_decode(file_get_contents($path.'/composer.json')); |
| | | $plugin_desc = $file_json->description; |
| | | $plugin_desc = $file_json->description ?: 'N/A'; |
| | | } |
| | | else |
| | | { |
| | | $plugin_desc = 'N/A'; |
| | | } |
| | | |
| | | $plugins[] = array('name' => substr($path, strlen($plugin_dir)), 'desc' => $plugin_desc); |
| | | $name = substr($path, strlen($plugin_dir)); |
| | | $plugins[] = array('name' => $name, 'desc' => $plugin_desc, 'enabled' => in_array($name, $this->config['plugins'])); |
| | | } |
| | | |
| | | return $plugins; |
| | |
| | | */ |
| | | function pass($name, $message = '') |
| | | { |
| | | echo Q($name) . ': <span class="success">OK</span>'; |
| | | echo rcube::Q($name) . ': <span class="success">OK</span>'; |
| | | $this->_showhint($message); |
| | | } |
| | | |
| | |
| | | $this->failures++; |
| | | } |
| | | |
| | | echo Q($name) . ': <span class="fail">NOT OK</span>'; |
| | | echo rcube::Q($name) . ': <span class="fail">NOT OK</span>'; |
| | | $this->_showhint($message, $url); |
| | | } |
| | | |
| | |
| | | */ |
| | | function optfail($name, $message = '', $url = '') |
| | | { |
| | | echo Q($name) . ': <span class="na">NOT OK</span>'; |
| | | echo rcube::Q($name) . ': <span class="na">NOT OK</span>'; |
| | | $this->_showhint($message, $url); |
| | | } |
| | | |
| | |
| | | */ |
| | | function na($name, $message = '', $url = '') |
| | | { |
| | | echo Q($name) . ': <span class="na">NOT AVAILABLE</span>'; |
| | | echo rcube::Q($name) . ': <span class="na">NOT AVAILABLE</span>'; |
| | | $this->_showhint($message, $url); |
| | | } |
| | | |
| | | |
| | | function _showhint($message, $url = '') |
| | | { |
| | | $hint = Q($message); |
| | | $hint = rcube::Q($message); |
| | | |
| | | if ($url) |
| | | $hint .= ($hint ? '; ' : '') . 'See <a href="' . Q($url) . '" target="_blank">' . Q($url) . '</a>'; |
| | | $hint .= ($hint ? '; ' : '') . 'See <a href="' . rcube::Q($url) . '" target="_blank">' . rcube::Q($url) . '</a>'; |
| | | |
| | | if ($hint) |
| | | echo '<span class="indent">(' . $hint . ')</span>'; |
| | |
| | | */ |
| | | function update_db($version) |
| | | { |
| | | system(INSTALL_PATH . "bin/updatedb.sh --package=roundcube" |
| | | . " --version=" . escapeshellarg($version) |
| | | . " --dir=" . INSTALL_PATH . "SQL" |
| | | . " 2>&1", $result); |
| | | |
| | | return !$result; |
| | | return rcmail_utils::db_update(INSTALL_PATH . 'SQL', 'roundcube', $version, |
| | | array('quiet' => true)); |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | $this->last_error = $p; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Generarte a ramdom string to be used as encryption key |
| | | * |
| | | * @param int Key length |
| | | * @return string The generated random string |
| | | * @static |
| | | */ |
| | | function random_key($length) |
| | | { |
| | | $alpha = 'ABCDEFGHIJKLMNOPQERSTUVXYZabcdefghijklmnopqrtsuvwxyz0123456789+*%&?!$-_='; |
| | | $out = ''; |
| | | |
| | | for ($i=0; $i < $length; $i++) |
| | | $out .= $alpha{rand(0, strlen($alpha)-1)}; |
| | | |
| | | return $out; |
| | | } |
| | | |
| | | } |
| | | |