mirror of
https://github.com/cytopia/devilbox.git
synced 2025-04-12 21:33:02 +00:00
Merge pull request #944 from cytopia/release/v3.0.0-beta-0.3
Release/v3.0.0 beta 0.3
This commit is contained in:
commit
10b20c0745
@ -13,8 +13,8 @@ error_reporting(-1);
|
||||
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
|
||||
|
||||
|
||||
$DEVILBOX_VERSION = 'v3.0.0-beta-0.2';
|
||||
$DEVILBOX_DATE = '2022-12-27';
|
||||
$DEVILBOX_VERSION = 'v3.0.0-beta-0.3';
|
||||
$DEVILBOX_DATE = '2023-01-02';
|
||||
$DEVILBOX_API_PAGE = 'devilbox-api/status.json';
|
||||
|
||||
//
|
||||
|
@ -150,6 +150,11 @@ if (loadClass('Helper')->isLoggedIn()) {
|
||||
$_GET['software'] => (($version = loadClass('Php')->getWpcliVersion()) !== false) ? $version : $no
|
||||
));
|
||||
}
|
||||
else if ($_GET['software'] == 'wscat') {
|
||||
echo json_encode(array(
|
||||
$_GET['software'] => (($version = loadClass('Php')->getWscatVersion()) !== false) ? $version : $no
|
||||
));
|
||||
}
|
||||
else if ($_GET['software'] == 'yarn') {
|
||||
echo json_encode(array(
|
||||
$_GET['software'] => (($version = loadClass('Php')->getYarnVersion()) !== false) ? $version : $no
|
||||
|
@ -65,7 +65,7 @@ function run_supervisor_command($command) {
|
||||
);
|
||||
?>
|
||||
<h3>Daemon overview</h3><br/>
|
||||
<p>If you made a change to any vhost settings, you can trigger a manual reload here.</p>
|
||||
<p>If you made any changes to vhost settings (vhost-gen templates or backend configuration) or to the webserver configuration itself, you can trigger a manual reload of <code>watcherd</code> here to apply them. No need to restart the Docker Compose stack.</p>
|
||||
<table class="table table-striped">
|
||||
<thead class="thead-inverse">
|
||||
<tr>
|
||||
|
@ -345,7 +345,7 @@ $HEALTH_PERCENT = 100 - ceil(100 * $HEALTH_FAILS / $HEALTH_TOTAL);
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Angular Cli</th>
|
||||
<th style="width: 50%;">Angular Cli</th>
|
||||
<td id="app_angular_cli"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -428,6 +428,10 @@ $HEALTH_PERCENT = 100 - ceil(100 * $HEALTH_FAILS / $HEALTH_TOTAL);
|
||||
<th>Wordpress Cli</th>
|
||||
<td id="app_wpcli"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Wscat</th>
|
||||
<td id="app_wscat"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Yarn</th>
|
||||
<td id="app_yarn"></td>
|
||||
@ -970,6 +974,7 @@ $HEALTH_PERCENT = 100 - ceil(100 * $HEALTH_FAILS / $HEALTH_TOTAL);
|
||||
updateVersions('vue_cli');
|
||||
updateVersions('webpack_cli');
|
||||
updateVersions('wpcli');
|
||||
updateVersions('wscat');
|
||||
updateVersions('yarn');
|
||||
})();
|
||||
</script>
|
||||
|
@ -1,66 +0,0 @@
|
||||
<?php require '../config.php'; ?>
|
||||
<?php loadClass('Helper')->authPage(); ?>
|
||||
<?php
|
||||
if (!isset($_GET['name'])) {
|
||||
loadClass('Helper')->redirect('/vhosts.php');
|
||||
}
|
||||
if (!strlen($_GET['name'])) {
|
||||
loadClass('Helper')->redirect('/vhosts.php');
|
||||
}
|
||||
$vhost = $_GET['name'];
|
||||
$found = false;
|
||||
$vhosts = loadClass('Httpd')->getVirtualHosts();
|
||||
foreach ($vhosts as $v) {
|
||||
if ($vhost == $v['name']) {
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Be safe before using outputs
|
||||
$vhost = htmlentities($vhost);
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<?php echo loadClass('Html')->getHead(true); ?>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<?php echo loadClass('Html')->getNavbar(); ?>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<h1>vhost-gen: <?php echo $vhost;?></h1>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<?php if (!$found): ?>
|
||||
<p>The Virtual Host "<?php echo $vhost; ?>" does not exist.</p>
|
||||
<?php else: ?>
|
||||
<?php $tpl = loadClass('Httpd')->getVhostgenTemplatePath($vhost); ?>
|
||||
<?php if (!$tpl): ?>
|
||||
<p>No custom vhost-gen configuration found for "<?php echo $vhost; ?>".</p>
|
||||
<?php else: ?>
|
||||
<p>Note: If the resulting virtual host config does not reflect the vhost-gen template changes, you will need to restart the Devilbox.</p>
|
||||
<a href="/vhosts.php"><i class="fa fa-chevron-left" aria-hidden="true"></i> Overview</a><br/>
|
||||
<br/><h3>virtual host config</h3><br/>
|
||||
<a title="Virtual host: <?php echo $vhost;?>.conf" target="_blank" href="/vhost.d/<?php echo $vhost;?>.conf">
|
||||
<i class="fa fa-external-link" aria-hidden="true"></i> <?php echo $vhost;?>.conf
|
||||
</a>
|
||||
<br/><br/><h3>vhost-gen config</h3><br/>
|
||||
<code><?php echo $tpl; ?></code><br/><br/>
|
||||
<?php $lines = file($tpl); ?>
|
||||
<pre style="border: 1px solid black; padding:5px;"><code><?php foreach ($lines as $line): ?><?php echo $line; ?><?php endforeach; ?></code></pre>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- /.container -->
|
||||
|
||||
<?php echo loadClass('Html')->getFooter(); ?>
|
||||
</body>
|
||||
</html>
|
@ -66,6 +66,10 @@
|
||||
<td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/devilbox/docker-php-fpm-8.2">docker-php-fpm-8.2</a></td>
|
||||
<td>PHP 8.2 base images (<code>amd64</code> and <code>arm64</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/devilbox/docker-php-fpm-8.3">docker-php-fpm-8.3</a></td>
|
||||
<td>PHP 8.3 base images (<code>amd64</code> and <code>arm64</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/devilbox/docker-php-fpm">docker-php-fpm</a></td>
|
||||
<td>PHP-FPM Devilbox images (<code>amd64</code> and <code>arm64</code>)</td>
|
||||
|
@ -26,8 +26,8 @@
|
||||
<th>DocumentRoot</th>
|
||||
<th>Backend</th>
|
||||
<th>Config</th>
|
||||
<th>Valid</th>
|
||||
<th>URL</th>
|
||||
<th style="width:60px;">Valid</th>
|
||||
<th style="width:260px;">URL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -37,15 +37,82 @@
|
||||
<td><?php echo loadClass('Helper')->getEnv('HOST_PATH_HTTPD_DATADIR');?>/<?php echo $vHost['name'];?>/<?php echo loadClass('Helper')->getEnv('HTTPD_DOCROOT_DIR');?></td>
|
||||
<td><?php echo loadClass('Httpd')->getVhostBackend($vHost['name']); ?></td>
|
||||
<td>
|
||||
<a title="Virtual host: <?php echo $vHost['name'];?>.conf" target="_blank" href="/vhost.d/<?php echo $vHost['name'];?>.conf"><i class="fa fa-cog" aria-hidden="true"></i></a>
|
||||
<?php if (($vhostGen = loadClass('Httpd')->getVhostgenTemplatePath($vHost['name'])) !== false): ?>
|
||||
<a title="vhost-gen: <?php echo basename($vhostGen);?> for <?php echo $vHost['name'];?>" href="/info_vhostgen.php?name=<?php echo $vHost['name'];?>">
|
||||
<i class="fa fa-filter" aria-hidden="true"></i>
|
||||
</a>
|
||||
<?php $id_vhost_httpd = str_replace('=', '', base64_encode('vhost_httpd_conf_' . $vHost['name'])); ?>
|
||||
<?php $id_vhost_vhostgen = str_replace('=', '', base64_encode('vhost_vhost_gen_' . $vHost['name'])); ?>
|
||||
|
||||
<!-- [httpd.conf] Button trigger modal -->
|
||||
<a href="#"><i class="fa fa-cog" aria-hidden="true" data-toggle="modal" data-target="#<?php echo $id_vhost_httpd;?>"></i></a>
|
||||
<!-- [httpd.conf] Modal -->
|
||||
<div class="modal" id="<?php echo $id_vhost_httpd;?>" tabindex="-1" role="dialog" aria-labelledby="<?php echo $id_vhost_httpd;?>Label" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="<?php echo $id_vhost_httpd;?>Label"><?php echo '<strong>httpd.conf: </strong><code>'.$vHost['name'].'.'.loadClass('Httpd')->getTldSuffix(). '</code>'; ?></h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<?php $url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]"; ?>
|
||||
<?php $src = file_get_contents($url.'/vhost.d/' . $vHost['name'] . '.conf'); ?>
|
||||
<?php //$src = htmlentities($src); ?>
|
||||
<?php $src = str_replace('<', '<', $src); ?>
|
||||
<?php $src = str_replace('>', '>', $src); ?>
|
||||
<?php $src = preg_replace('/<(\/?.*)>/m', '<strong><\1></strong>', $src); // Apache directives ?>
|
||||
<?php $src = preg_replace('/(.*{\s*)$/m', '<strong>\1</strong>', $src); // Nginx directives ?>
|
||||
<?php $src = preg_replace('/^(\s*}\s*)$/m', '<strong>\1</strong>', $src); // Nginx directives ?>
|
||||
<?php //$src = preg_replace('/"(.+)"/m', '<span style="color: blue;">"\1"</span>', $src); ?>
|
||||
<?php $src = preg_replace('/^(\s*(?!<#)[^#"]*)"(.*)"/m', '\1<span style="color: blue;">"\2"</span>', $src); // double quotes?>
|
||||
<?php $src = preg_replace("/^(\s*(?!<#)[^#']*)'(.*)'/m", '\1<span style="color: blue;">"\2"</span>', $src); // single quotes ?>
|
||||
<?php $src = preg_replace('/^(\s*#)(.*)$/m', '<span style="color: gray;">\1\2</span>', $src); // comments ?>
|
||||
<?php echo '<pre><code>' . $src . '</code></pre>';?>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if (($vhostGenPath = loadClass('Httpd')->getVhostgenTemplatePath($vHost['name'])) !== false): ?>
|
||||
<!-- [vhost-gen] Button trigger modal -->
|
||||
<a href="#"><i class="fa fa-filter" aria-hidden="true" data-toggle="modal" data-target="#<?php echo $id_vhost_vhostgen;?>"></i></a>
|
||||
<!-- [vhost-gen] Modal -->
|
||||
<div class="modal" id="<?php echo $id_vhost_vhostgen;?>" tabindex="-1" role="dialog" aria-labelledby="<?php echo $id_vhost_vhostgen;?>Label" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="<?php echo $id_vhost_vhostgen;?>Label"><?php echo '<code>'.$vhostGenPath.'</code>'; ?></h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<?php $src = file_get_contents($vhostGenPath); ?>
|
||||
<?php //$src = htmlentities($src); ?>
|
||||
<?php $src = str_replace('<', '<', $src); ?>
|
||||
<?php $src = str_replace('>', '>', $src); ?>
|
||||
<?php $src = preg_replace('/<(\/?.*)>/m', '<strong><\1></strong>', $src); // Apache directives ?>
|
||||
<?php $src = preg_replace('/(.*{\s*)$/m', '<strong>\1</strong>', $src); // Nginx directives ?>
|
||||
<?php $src = preg_replace('/^(\s*}\s*)$/m', '<strong>\1</strong>', $src); // Nginx directives ?>
|
||||
<?php //$src = preg_replace('/"(.+)"/m', '<span style="color: blue;">"\1"</span>', $src); ?>
|
||||
<?php //$src = preg_replace("/'(.+)'/m", '<span style="color: blue;">'."'".'\1'."'".'</span>', $src); ?>
|
||||
<?php $src = preg_replace('/^(\s*(?!<#)[^#"]*)"(.*)"/m', '\1<span style="color: blue;">"\2"</span>', $src); // double quotes ?>
|
||||
<?php $src = preg_replace("/^(\s*(?!<#)[^#']*)'(.*)'/m", '\1<span style="color: blue;">"\2"</span>', $src); // single quotes ?>
|
||||
<?php $src = preg_replace('/^(\s*#)(.*)$/m', '<span style="color: gray;">\1\2</span>', $src); // comments ?>
|
||||
<?php $src = preg_replace('/^(\s*[_a-z]+):/m', '<span style="color: green;"><strong>\1</strong></span>:', $src); // yaml keys ?>
|
||||
<?php $src = preg_replace('/(__[_A-Z]+__)/m', '<span style="color: red;">\1</span>', $src); // variables ?>
|
||||
<?php echo '<pre><code>' . $src . '</code></pre>';?>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td style="min-width:60px;" class="text-xs-center text-xs-small" id="valid-<?php echo $vHost['name'];?>"></td>
|
||||
<td style="min-width:260px;" id="href-<?php echo $vHost['name'];?>"></td>
|
||||
<td class="text-xs-center text-xs-small" id="valid-<?php echo $vHost['name'];?>"></td>
|
||||
<td id="href-<?php echo $vHost['name'];?>"></td>
|
||||
</tr>
|
||||
<input type="hidden" name="vhost[]" class="vhost" value="<?php echo $vHost['name'];?>" />
|
||||
<?php endforeach; ?>
|
||||
|
@ -140,6 +140,11 @@ class Php extends BaseClass implements BaseInterface
|
||||
$output = loadClass('Helper')->exec('wp --version 2>/dev/null | grep -i ^WP', $output);
|
||||
return loadClass('Helper')->egrep('/[0-9.]+/', $output);
|
||||
}
|
||||
public function getWscatVersion()
|
||||
{
|
||||
$output = loadClass('Helper')->exec('wscat --version 2>/dev/null | head -1', $output);
|
||||
return loadClass('Helper')->egrep('/[0-9.]+/', $output);
|
||||
}
|
||||
public function getYarnVersion()
|
||||
{
|
||||
$output = loadClass('Helper')->exec('yarn --version 2>/dev/null', $output);
|
||||
|
104
.devilbox/www/include/vendor/Mail/mimeDecode.php
vendored
104
.devilbox/www/include/vendor/Mail/mimeDecode.php
vendored
@ -28,8 +28,8 @@
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* - Neither the name of the authors, nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* - Neither the name of the authors, nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
@ -142,11 +142,11 @@ class Mail_mimeDecode extends PEAR
|
||||
/**
|
||||
* Flag to determine whether to decode headers
|
||||
* (set to UTF8 to iconv convert headers)
|
||||
* @var mixed
|
||||
* @var mixed
|
||||
* @access private
|
||||
*/
|
||||
var $_decode_headers;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Flag to determine whether to include attached messages
|
||||
@ -182,7 +182,7 @@ class Mail_mimeDecode extends PEAR
|
||||
{
|
||||
$this->__construct($input);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Begins the decoding process. If called statically
|
||||
@ -197,7 +197,7 @@ class Mail_mimeDecode extends PEAR
|
||||
* of the parts. (Transfer encoding)
|
||||
* decode_headers - Whether to decode headers,
|
||||
* - use "UTF8//IGNORE" to convert charset.
|
||||
*
|
||||
*
|
||||
* input - If called statically, this will be treated
|
||||
* as the input
|
||||
* @return object Decoded results
|
||||
@ -229,17 +229,17 @@ class Mail_mimeDecode extends PEAR
|
||||
$params['decode_headers'] : false;
|
||||
$this->_rfc822_bodies = isset($params['rfc_822bodies']) ?
|
||||
$params['rfc_822bodies'] : false;
|
||||
|
||||
|
||||
if (is_string($this->_decode_headers) && !function_exists('iconv')) {
|
||||
PEAR::raiseError('header decode conversion requested, however iconv is missing');
|
||||
}
|
||||
|
||||
|
||||
$structure = $this->_decode($this->_header, $this->_body);
|
||||
if ($structure === false) {
|
||||
$structure = $this->raiseError($this->_error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $structure;
|
||||
}
|
||||
|
||||
@ -320,10 +320,10 @@ class Mail_mimeDecode extends PEAR
|
||||
$encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit';
|
||||
$this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body) : null;
|
||||
break;
|
||||
|
||||
|
||||
case 'multipart/signed': // PGP
|
||||
$parts = $this->_boundarySplit($body, $content_type['other']['boundary'], true);
|
||||
$return->parts['msg_body'] = $parts[0];
|
||||
$return->parts['msg_body'] = $parts[0];
|
||||
list($part_header, $part_body) = $this->_splitBodyHeader($parts[1]);
|
||||
$return->parts['sig_hdr'] = $part_header;
|
||||
$return->parts['sig_body'] = $part_body;
|
||||
@ -404,7 +404,7 @@ class Mail_mimeDecode extends PEAR
|
||||
}
|
||||
for ($i = 0; $i < count($structure->parts); $i++) {
|
||||
|
||||
|
||||
|
||||
if (!empty($structure->headers['content-type']) AND substr(strtolower($structure->headers['content-type']), 0, 8) == 'message/') {
|
||||
$prepend = $prepend . $mime_number . '.';
|
||||
$_mime_number = '';
|
||||
@ -424,7 +424,7 @@ class Mail_mimeDecode extends PEAR
|
||||
$structure->mime_id = $prepend . $mime_number;
|
||||
$no_refs ? $return[$prepend . $mime_number] = '' : $return[$prepend . $mime_number] = &$structure;
|
||||
}
|
||||
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
@ -442,7 +442,7 @@ class Mail_mimeDecode extends PEAR
|
||||
if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $input, $match)) {
|
||||
return array($match[1], $match[2]);
|
||||
}
|
||||
// bug #17325 - empty bodies are allowed. - we just check that at least one line
|
||||
// bug #17325 - empty bodies are allowed. - we just check that at least one line
|
||||
// of headers exist..
|
||||
if (count(explode("\n",$input))) {
|
||||
return array($input, '');
|
||||
@ -466,11 +466,11 @@ class Mail_mimeDecode extends PEAR
|
||||
// Unfold the input
|
||||
$input = preg_replace("/\r?\n/", "\r\n", $input);
|
||||
//#7065 - wrapping.. with encoded stuff.. - probably not needed,
|
||||
// wrapping space should only get removed if the trailing item on previous line is a
|
||||
// wrapping space should only get removed if the trailing item on previous line is a
|
||||
// encoded character
|
||||
$input = preg_replace("/=\r\n(\t| )+/", '=', $input);
|
||||
$input = preg_replace("/\r\n(\t| )+/", ' ', $input);
|
||||
|
||||
|
||||
$headers = explode("\r\n", trim($input));
|
||||
$got_start = false;
|
||||
foreach ($headers as $value) {
|
||||
@ -485,7 +485,7 @@ class Mail_mimeDecode extends PEAR
|
||||
$got_start = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$hdr_name = substr($value, 0, $pos = strpos($value, ':'));
|
||||
$hdr_value = substr($value, $pos+1);
|
||||
if($hdr_value[0] == ' ') {
|
||||
@ -520,7 +520,7 @@ class Mail_mimeDecode extends PEAR
|
||||
* filename*0*=ENC'lang'urlencoded data.
|
||||
* filename*1*=ENC'lang'urlencoded data.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param string Header value to parse
|
||||
* @return array Contains parsed result
|
||||
@ -554,7 +554,7 @@ class Mail_mimeDecode extends PEAR
|
||||
$lq = ''; // last quote..
|
||||
|
||||
while ($i < $l) {
|
||||
|
||||
|
||||
$c = $input[$i];
|
||||
//var_dump(array('i'=>$i,'c'=>$c,'q'=>$q, 'lq'=>$lq, 'key'=>$key, 'val' =>$val));
|
||||
|
||||
@ -566,7 +566,7 @@ class Mail_mimeDecode extends PEAR
|
||||
}
|
||||
$escaped = true;
|
||||
$c = $input[$i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// state - in key..
|
||||
@ -588,7 +588,7 @@ class Mail_mimeDecode extends PEAR
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// state - in value.. (as $val is set..)
|
||||
|
||||
if ($q === false) {
|
||||
@ -597,10 +597,10 @@ class Mail_mimeDecode extends PEAR
|
||||
$i++;
|
||||
continue; // skip leading spaces after '=' or after '"'
|
||||
}
|
||||
|
||||
// do not de-quote 'xxx*= itesm..
|
||||
|
||||
// do not de-quote 'xxx*= itesm..
|
||||
$key_is_trans = $key[strlen($key)-1] == '*';
|
||||
|
||||
|
||||
if (!$key_is_trans && !$escaped && ($c == '"' || $c == "'")) {
|
||||
// start quoted area..
|
||||
$q = $c;
|
||||
@ -612,7 +612,7 @@ class Mail_mimeDecode extends PEAR
|
||||
}
|
||||
// got end....
|
||||
if (!$escaped && $c == ';') {
|
||||
|
||||
|
||||
$return['other'][$key] = trim($val);
|
||||
$val = false;
|
||||
$key = '';
|
||||
@ -625,31 +625,31 @@ class Mail_mimeDecode extends PEAR
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// state - in quote..
|
||||
if (!$escaped && $c == $q) { // potential exit state..
|
||||
|
||||
|
||||
// end of quoted string..
|
||||
$lq = $q;
|
||||
$q = false;
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// normal char inside of quoted string..
|
||||
$val.= $c;
|
||||
$i++;
|
||||
}
|
||||
|
||||
|
||||
// do we have anything left..
|
||||
if (strlen(trim($key)) || $val !== false) {
|
||||
|
||||
|
||||
$val = trim($val);
|
||||
|
||||
|
||||
$return['other'][$key] = $val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$clean_others = array();
|
||||
// merge added values. eg. *1[*]
|
||||
foreach($return['other'] as $key =>$val) {
|
||||
@ -659,12 +659,12 @@ class Mail_mimeDecode extends PEAR
|
||||
$clean_others[$key] .= $val;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
$clean_others[$key] = $val;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// handle language translation of '*' ending others.
|
||||
foreach( $clean_others as $key =>$val) {
|
||||
if ( $key[strlen($key)-1] != '*') {
|
||||
@ -677,26 +677,26 @@ class Mail_mimeDecode extends PEAR
|
||||
// extended-other-values
|
||||
$match = array();
|
||||
$info = preg_match("/^([^']+)'([^']*)'(.*)$/", $val, $match);
|
||||
|
||||
|
||||
$clean_others[$key] = urldecode($match[3]);
|
||||
$clean_others[strtolower($key)] = $clean_others[$key];
|
||||
$clean_others[strtolower($key).'-charset'] = $match[1];
|
||||
$clean_others[strtolower($key).'-language'] = $match[2];
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$return['other'] = $clean_others;
|
||||
|
||||
|
||||
// decode values.
|
||||
foreach($return['other'] as $key =>$val) {
|
||||
$charset = isset($return['other'][$key . '-charset']) ?
|
||||
$return['other'][$key . '-charset'] : false;
|
||||
|
||||
|
||||
$return['other'][$key] = $this->_decodeHeader($val, $charset);
|
||||
}
|
||||
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
@ -729,7 +729,7 @@ class Mail_mimeDecode extends PEAR
|
||||
$parts[] = $tmp[$i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// add the last part on if it does not end with the 'closing indicator'
|
||||
if (!empty($tmp[$len]) && strlen(trim($tmp[$len])) && $tmp[$len][0] != '-') {
|
||||
$parts[] = $tmp[$len];
|
||||
@ -781,12 +781,12 @@ class Mail_mimeDecode extends PEAR
|
||||
}
|
||||
$input = str_replace($encoded, $text, $input);
|
||||
}
|
||||
|
||||
|
||||
if ($default_charset && is_string($this->_decode_headers)) {
|
||||
$conv = @iconv($charset, $this->_decode_headers, $input);
|
||||
$input = ($conv === false) ? $input : $conv;
|
||||
}
|
||||
|
||||
|
||||
return $input;
|
||||
}
|
||||
|
||||
@ -832,10 +832,12 @@ class Mail_mimeDecode extends PEAR
|
||||
// Remove soft line breaks
|
||||
$input = preg_replace("/=\r?\n/", '', $input);
|
||||
|
||||
// cytopia edit
|
||||
if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
|
||||
$cb = function($matches) {
|
||||
return chr(hexdec($matches[0]));
|
||||
// cytopia edit (added ctype_xdigit() check around)
|
||||
if (ctype_xdigit($matches[0])) {
|
||||
return chr(hexdec($matches[0]));
|
||||
}
|
||||
};
|
||||
} else {
|
||||
// Replace encoded characters
|
||||
@ -924,7 +926,7 @@ class Mail_mimeDecode extends PEAR
|
||||
|
||||
/**
|
||||
* getSendArray() returns the arguments required for Mail::send()
|
||||
* used to build the arguments for a mail::send() call
|
||||
* used to build the arguments for a mail::send() call
|
||||
*
|
||||
* Usage:
|
||||
* $mailtext = Full email (for example generated by a template)
|
||||
@ -966,7 +968,7 @@ class Mail_mimeDecode extends PEAR
|
||||
}
|
||||
$to = substr($to,1);
|
||||
return array($to,$header,$this->_body);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a xml copy of the output of
|
||||
|
@ -6,12 +6,24 @@ endif
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
# Misc Targets
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
update-readme:
|
||||
.PHONY: update-readme
|
||||
update-readme: _update-readme-modules
|
||||
update-readme: _update-readme-tools
|
||||
|
||||
.PHONY: _update-readme-modules
|
||||
_update-readme-modules:
|
||||
cat "../README.md" \
|
||||
| perl -0 -pe "s#<!-- modules -->.*<!-- /modules -->#<!-- modules -->\n$$(./scripts/get-modules.sh)\n<!-- /modules -->#s" \
|
||||
> "../README.md.tmp"
|
||||
yes | mv -f "../README.md.tmp" "../README.md"
|
||||
|
||||
.PHONY: _update-readme-tools
|
||||
_update-readme-tools:
|
||||
cat "../README.md" \
|
||||
| perl -0 -pe "s#<!-- tools -->.*<!-- /tools -->#<!-- tools -->\n$$(./scripts/get-tools.sh)\n<!-- /tools -->#s" \
|
||||
> "../README.md.tmp"
|
||||
yes | mv -f "../README.md.tmp" "../README.md"
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
# Linting Targets
|
||||
|
@ -94,7 +94,7 @@ MODS="$( echo "${PHP52_MODS}, ${PHP53_MODS}, ${PHP54_MODS}, ${PHP55_MODS}, ${PHP
|
||||
###
|
||||
### Get disabled modules
|
||||
###
|
||||
DISABLED=",blackfire,ioncube,phalcon,psr,$( grep -E '^PHP_MODULES_DISABLE=' "${DVLBOX_PATH}/env-example" | sed 's/.*=//g' ),"
|
||||
DISABLED=",blackfire,ioncube,phalcon,psr,xhprof,$( grep -E '^PHP_MODULES_DISABLE=' "${DVLBOX_PATH}/env-example" | sed 's/.*=//g' ),"
|
||||
#echo $DISABLED
|
||||
B="✔" # Enabled base modules (cannot be disabled)
|
||||
E="🗸" # Enabled mods modules (can be disabled)
|
||||
|
25
.tests/scripts/get-tools.sh
Executable file
25
.tests/scripts/get-tools.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# NOTE: Parsing curl to tac to circumnvent "failed writing body"
|
||||
# https://stackoverflow.com/questions/16703647/why-curl-return-and-error-23-failed-writing-body
|
||||
|
||||
set -e
|
||||
set -u
|
||||
set -o pipefail
|
||||
|
||||
SCRIPT_PATH="$( cd "$(dirname "$0")" && pwd -P )"
|
||||
DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
|
||||
# shellcheck disable=SC1090
|
||||
. "${SCRIPT_PATH}/.lib.sh"
|
||||
|
||||
RETRIES=10
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
# FUNCTIONS
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
PHP_TAG="$( grep 'devilbox/php' "${DVLBOX_PATH}/docker-compose.yml" | sed 's/^.*-work-//g' )"
|
||||
PHP_TOOLS="$( run "curl -sS 'https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/doc/available-tools.md'" "${RETRIES}" )";
|
||||
|
||||
echo "${PHP_TOOLS}" | grep -A 1000000 'TOOLS_WORK_START'
|
@ -54,7 +54,7 @@ fi
|
||||
HOST_PORT_HTTPD="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "HOST_PORT_HTTPD" )"
|
||||
TLD_SUFFIX="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "TLD_SUFFIX" )"
|
||||
HTTPD_DOCROOT_DIR="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "HTTPD_DOCROOT_DIR" )"
|
||||
HTTPD_TEMPLATE_DIR="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "HTTPD_TEMPLATE_DIR" )"
|
||||
#HTTPD_TEMPLATE_DIR="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "HTTPD_TEMPLATE_DIR" )"
|
||||
|
||||
|
||||
###
|
||||
@ -128,14 +128,14 @@ fi
|
||||
###
|
||||
### Vhost config link is available
|
||||
###
|
||||
printf "[TEST] vhost.d config link is available"
|
||||
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep 'vhost.d/${VHOST}.conf' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
printf "\\r[FAIL] vhost.d config link is available\\n"
|
||||
run "curl 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' || true"
|
||||
exit 1
|
||||
else
|
||||
printf "\\r[OK] vhost.d config link is available\\n"
|
||||
fi
|
||||
#printf "[TEST] vhost.d config link is available"
|
||||
#if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep 'vhost.d/${VHOST}.conf' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
# printf "\\r[FAIL] vhost.d config link is available\\n"
|
||||
# run "curl 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' || true"
|
||||
# exit 1
|
||||
#else
|
||||
# printf "\\r[OK] vhost.d config link is available\\n"
|
||||
#fi
|
||||
|
||||
|
||||
###
|
||||
@ -154,62 +154,62 @@ fi
|
||||
###
|
||||
### vhost-gen config link should appear
|
||||
###
|
||||
run "docker-compose exec --user devilbox -T php mkdir -p /shared/httpd/${VHOST}/${HTTPD_TEMPLATE_DIR}" "${RETRIES}" "${DVLBOX_PATH}"
|
||||
run "cp ${DVLBOX_PATH}/cfg/vhost-gen/apache22.yml-example-vhost ${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache22.yml" "${RETRIES}"
|
||||
run "cp ${DVLBOX_PATH}/cfg/vhost-gen/apache24.yml-example-vhost ${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache24.yml" "${RETRIES}"
|
||||
run "cp ${DVLBOX_PATH}/cfg/vhost-gen/nginx.yml-example-vhost ${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/nginx.yml" "${RETRIES}"
|
||||
|
||||
printf "[TEST] vhost-gen config link is available"
|
||||
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep 'info_vhostgen.php?name=${VHOST}' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
printf "\\r[FAIL] vhost-gen config link is available\\n"
|
||||
run "curl 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' || true"
|
||||
exit 1
|
||||
else
|
||||
printf "\\r[OK] vhost-gen config link is available\\n"
|
||||
fi
|
||||
#run "docker-compose exec --user devilbox -T php mkdir -p /shared/httpd/${VHOST}/${HTTPD_TEMPLATE_DIR}" "${RETRIES}" "${DVLBOX_PATH}"
|
||||
#run "cp ${DVLBOX_PATH}/cfg/vhost-gen/apache22.yml-example-vhost ${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache22.yml" "${RETRIES}"
|
||||
#run "cp ${DVLBOX_PATH}/cfg/vhost-gen/apache24.yml-example-vhost ${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache24.yml" "${RETRIES}"
|
||||
#run "cp ${DVLBOX_PATH}/cfg/vhost-gen/nginx.yml-example-vhost ${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/nginx.yml" "${RETRIES}"
|
||||
#
|
||||
#printf "[TEST] vhost-gen config link is available"
|
||||
#if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep 'info_vhostgen.php?name=${VHOST}' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
# printf "\\r[FAIL] vhost-gen config link is available\\n"
|
||||
# run "curl 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' || true"
|
||||
# exit 1
|
||||
#else
|
||||
# printf "\\r[OK] vhost-gen config link is available\\n"
|
||||
#fi
|
||||
|
||||
|
||||
###
|
||||
### vhost-gen config should be available
|
||||
###
|
||||
printf "[TEST] vhost-gen config is available"
|
||||
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' | tac | tac | grep '__VHOST_NAME__' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
printf "\\r[FAIL] vhost-gen config is available\\n"
|
||||
run "curl 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' || true"
|
||||
exit 1
|
||||
else
|
||||
printf "\\r[OK] vhost-gen config is available\\n"
|
||||
fi
|
||||
#printf "[TEST] vhost-gen config is available"
|
||||
#if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' | tac | tac | grep '__VHOST_NAME__' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
# printf "\\r[FAIL] vhost-gen config is available\\n"
|
||||
# run "curl 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' || true"
|
||||
# exit 1
|
||||
#else
|
||||
# printf "\\r[OK] vhost-gen config is available\\n"
|
||||
#fi
|
||||
|
||||
|
||||
###
|
||||
### vhost-gen config changes are shown in intranet
|
||||
###
|
||||
replace "__INDEX__" "__MY_GREP_VALUE__" "${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache22.yml"
|
||||
replace "__INDEX__" "__MY_GREP_VALUE__" "${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache24.yml"
|
||||
replace "__INDEX__" "__MY_GREP_VALUE__" "${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/nginx.yml"
|
||||
|
||||
printf "[TEST] vhost-gen config changes are shown"
|
||||
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' | tac | tac | grep '__MY_GREP_VALUE__' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
printf "\\r[FAIL] vhost-gen config changes are shown\\n"
|
||||
run "curl 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' || true"
|
||||
exit 1
|
||||
else
|
||||
printf "\\r[OK] vhost-gen config changes are shown\\n"
|
||||
fi
|
||||
#replace "__INDEX__" "__MY_GREP_VALUE__" "${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache22.yml"
|
||||
#replace "__INDEX__" "__MY_GREP_VALUE__" "${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/apache24.yml"
|
||||
#replace "__INDEX__" "__MY_GREP_VALUE__" "${SCRIPT_PATH}/../www/${VHOST}/${HTTPD_TEMPLATE_DIR}/nginx.yml"
|
||||
#
|
||||
#printf "[TEST] vhost-gen config changes are shown"
|
||||
#if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' | tac | tac | grep '__MY_GREP_VALUE__' >/dev/null" "${RETRIES}" "" "0"; then
|
||||
# printf "\\r[FAIL] vhost-gen config changes are shown\\n"
|
||||
# run "curl 'http://localhost:${HOST_PORT_HTTPD}/info_vhostgen.php?name=${VHOST}' || true"
|
||||
# exit 1
|
||||
#else
|
||||
# printf "\\r[OK] vhost-gen config changes are shown\\n"
|
||||
#fi
|
||||
|
||||
|
||||
###
|
||||
### Vhost disappears after removing its dir
|
||||
###
|
||||
run "docker-compose exec --user devilbox -T php rm -rf /shared/httpd/${VHOST}" "${RETRIES}" "${DVLBOX_PATH}"
|
||||
run "sleep 4"
|
||||
|
||||
printf "[TEST] vhost disappears after removing its dir"
|
||||
if ! run "test \"\$(curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep -c '${VHOST}')\" = \"0\"" "${RETRIES}" "" "0"; then
|
||||
printf "\\r[FAIL] vhost disappears after removing its dir\\n"
|
||||
run "curl 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep '${VHOST}' || true"
|
||||
exit 1
|
||||
else
|
||||
printf "\\r[OK] vhost disappears after removing its dir\\n"
|
||||
fi
|
||||
#run "docker-compose exec --user devilbox -T php rm -rf /shared/httpd/${VHOST}" "${RETRIES}" "${DVLBOX_PATH}"
|
||||
#run "sleep 4"
|
||||
#
|
||||
#printf "[TEST] vhost disappears after removing its dir"
|
||||
#if ! run "test \"\$(curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep -c '${VHOST}')\" = \"0\"" "${RETRIES}" "" "0"; then
|
||||
# printf "\\r[FAIL] vhost disappears after removing its dir\\n"
|
||||
# run "curl 'http://localhost:${HOST_PORT_HTTPD}/vhosts.php' | tac | tac | grep '${VHOST}' || true"
|
||||
# exit 1
|
||||
#else
|
||||
# printf "\\r[OK] vhost disappears after removing its dir\\n"
|
||||
#fi
|
||||
|
19
CHANGELOG.md
19
CHANGELOG.md
@ -6,6 +6,24 @@ Make sure to have a look at [UPDATING.md](https://github.com/cytopia/devilbox/bl
|
||||
## Unreleased
|
||||
|
||||
|
||||
## Release v3.0.0-beta-0.3 (2022-01-02)
|
||||
|
||||
This release provides the `dvl.to` domain to be used with `TLD_SUFFIX` (set to default), which eliminates the need to set any entries in `/etc/hosts`, as all of its subdomain will point to `127.0.0.1` via official DNS. Domain has been acquired thanks to awesome sponsors!
|
||||
|
||||
### Fixed
|
||||
- Intranet: mail.php fixed deprecation warnings [#798](https://github.com/cytopia/devilbox/issues/798)
|
||||
- Added `host.docker.internal` to extra_hosts to be able to connect to the host system [#919](https://github.com/cytopia/devilbox/issues/919)
|
||||
|
||||
### Changed
|
||||
- Use `dvl.to` as default `TLD_SUFFIX` (it always poits to `127.0.0.1` removing the need to create `/etc/hosts` entries)
|
||||
|
||||
### Added
|
||||
- Intranet: vhost overview shows listening ports
|
||||
- Intranet: vhost overview now has modals to show httpd and vhost-gen configs
|
||||
- Docs: Show available tools per version in README.md
|
||||
- Added `xhprof` PHP extension
|
||||
|
||||
|
||||
## Release v3.0.0-beta-0.2 (2022-12-27)
|
||||
|
||||
The Backend configuration now supports websockets as well:
|
||||
@ -40,6 +58,7 @@ Once you're done with `backend.cfg` changes, head over to the Intranet C&C page
|
||||
### Added
|
||||
- Reverse Proxy automation for websocket projects (`ws://<host>:<port>` or `wss:<host>:<port>`) (Does not work with Apache 2.2)
|
||||
- Added tool `wscat` to be able to test websocket connections
|
||||
- Intranet: show `wscat` version
|
||||
- Intranet: vhost overview now also shows websocket projects
|
||||
|
||||
### Changed
|
||||
|
@ -134,13 +134,16 @@ features:
|
||||
Allow from all
|
||||
</Location>
|
||||
|
||||
# https://stackoverflow.com/a/42558499
|
||||
# https://fetch.spec.whatwg.org/#forbidden-header-name
|
||||
xdomain_request: |
|
||||
# Allow cross domain request from these hosts
|
||||
SetEnvIf Origin "__REGEX__" AccessControlAllowOrigin=$0
|
||||
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
|
||||
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
Header always set Access-Control-Allow-Headers "Accept, Authorization, Content-Security-Policy, Content-Type, Location, Origin, X-Requested-With"
|
||||
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
|
||||
Header always set Access-Control-Max-Age "0"
|
||||
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
|
||||
# Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_METHOD} OPTIONS
|
||||
|
@ -181,13 +181,16 @@ features:
|
||||
Allow from all
|
||||
</Location>
|
||||
|
||||
# https://stackoverflow.com/a/42558499
|
||||
# https://fetch.spec.whatwg.org/#forbidden-header-name
|
||||
xdomain_request: |
|
||||
# Allow cross domain request from these hosts
|
||||
SetEnvIf Origin "__REGEX__" AccessControlAllowOrigin=$0
|
||||
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
|
||||
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
Header always set Access-Control-Allow-Headers "Accept, Authorization, Content-Security-Policy, Content-Type, Location, Origin, X-Requested-With"
|
||||
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
|
||||
Header always set Access-Control-Max-Age "0"
|
||||
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
|
||||
# Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_METHOD} OPTIONS
|
||||
|
@ -137,13 +137,16 @@ features:
|
||||
Require all granted
|
||||
</Location>
|
||||
|
||||
# https://stackoverflow.com/a/42558499
|
||||
# https://fetch.spec.whatwg.org/#forbidden-header-name
|
||||
xdomain_request: |
|
||||
# Allow cross domain request from these hosts
|
||||
SetEnvIf Origin "__REGEX__" AccessControlAllowOrigin=$0
|
||||
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
|
||||
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
Header always set Access-Control-Allow-Headers "Accept, Authorization, Content-Security-Policy, Content-Type, Location, Origin, X-Requested-With"
|
||||
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
|
||||
Header always set Access-Control-Max-Age "0"
|
||||
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
|
||||
# Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_METHOD} OPTIONS
|
||||
|
@ -206,13 +206,16 @@ features:
|
||||
Require all granted
|
||||
</Location>
|
||||
|
||||
# https://stackoverflow.com/a/42558499
|
||||
# https://fetch.spec.whatwg.org/#forbidden-header-name
|
||||
xdomain_request: |
|
||||
# Allow cross domain request from these hosts
|
||||
SetEnvIf Origin "__REGEX__" AccessControlAllowOrigin=$0
|
||||
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
|
||||
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
|
||||
Header always set Access-Control-Allow-Methods "HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
Header always set Access-Control-Allow-Headers "Accept, Authorization, Content-Security-Policy, Content-Type, Location, Origin, X-Requested-With"
|
||||
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
|
||||
Header always set Access-Control-Max-Age "0"
|
||||
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
|
||||
# Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_METHOD} OPTIONS
|
||||
|
@ -114,11 +114,12 @@ features:
|
||||
|
||||
xdomain_request: |
|
||||
# Allow cross domain request from these hosts
|
||||
# https://fetch.spec.whatwg.org/#forbidden-header-name
|
||||
if ( $http_origin ~* (__REGEX__) ) {
|
||||
add_header "Access-Control-Allow-Origin" "$http_origin";
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
|
||||
add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
|
||||
add_header "Access-Control-Allow-Origin" "$http_origin";
|
||||
add_header 'Access-Control-Allow-Methods' 'HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'Accept, Authorization, Content-Security-Policy, Content-Type, Location, Origin, X-Requested-With';
|
||||
add_header 'Access-Control-Expose-Headers' 'Content-Security-Policy, Location';
|
||||
add_header 'Access-Control-Max-Age' 0;
|
||||
return 200;
|
||||
}
|
||||
|
@ -166,11 +166,12 @@ features:
|
||||
|
||||
xdomain_request: |
|
||||
# Allow cross domain request from these hosts
|
||||
# https://fetch.spec.whatwg.org/#forbidden-header-name
|
||||
if ( $http_origin ~* (__REGEX__) ) {
|
||||
add_header "Access-Control-Allow-Origin" "$http_origin";
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
|
||||
add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
|
||||
add_header "Access-Control-Allow-Origin" "$http_origin";
|
||||
add_header 'Access-Control-Allow-Methods' 'HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'Accept, Authorization, Content-Security-Policy, Content-Type, Location, Origin, X-Requested-With';
|
||||
add_header 'Access-Control-Expose-Headers' 'Content-Security-Policy, Location';
|
||||
add_header 'Access-Control-Max-Age' 0;
|
||||
return 200;
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ services:
|
||||
|
||||
php54:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:5.4-prod-0.148
|
||||
image: devilbox/php-fpm:5.4-prod-0.150
|
||||
hostname: php54
|
||||
networks:
|
||||
app_net:
|
||||
@ -52,7 +52,7 @@ services:
|
||||
|
||||
php55:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:5.5-prod-0.148
|
||||
image: devilbox/php-fpm:5.5-prod-0.150
|
||||
hostname: php55
|
||||
networks:
|
||||
app_net:
|
||||
@ -70,7 +70,7 @@ services:
|
||||
|
||||
php56:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:5.6-prod-0.148
|
||||
image: devilbox/php-fpm:5.6-prod-0.150
|
||||
hostname: php56
|
||||
networks:
|
||||
app_net:
|
||||
@ -88,7 +88,7 @@ services:
|
||||
|
||||
php70:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:7.0-prod-0.148
|
||||
image: devilbox/php-fpm:7.0-prod-0.150
|
||||
hostname: php70
|
||||
networks:
|
||||
app_net:
|
||||
@ -106,7 +106,7 @@ services:
|
||||
|
||||
php71:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:7.1-prod-0.148
|
||||
image: devilbox/php-fpm:7.1-prod-0.150
|
||||
hostname: php71
|
||||
networks:
|
||||
app_net:
|
||||
@ -124,7 +124,7 @@ services:
|
||||
|
||||
php72:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:7.2-prod-0.148
|
||||
image: devilbox/php-fpm:7.2-prod-0.150
|
||||
hostname: php72
|
||||
networks:
|
||||
app_net:
|
||||
@ -142,7 +142,7 @@ services:
|
||||
|
||||
php73:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:7.3-prod-0.148
|
||||
image: devilbox/php-fpm:7.3-prod-0.150
|
||||
hostname: php73
|
||||
networks:
|
||||
app_net:
|
||||
@ -160,7 +160,7 @@ services:
|
||||
|
||||
php74:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:7.4-prod-0.148
|
||||
image: devilbox/php-fpm:7.4-prod-0.150
|
||||
hostname: php74
|
||||
networks:
|
||||
app_net:
|
||||
@ -178,7 +178,7 @@ services:
|
||||
|
||||
php80:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:8.0-prod-0.148
|
||||
image: devilbox/php-fpm:8.0-prod-0.150
|
||||
hostname: php80
|
||||
networks:
|
||||
app_net:
|
||||
@ -196,7 +196,7 @@ services:
|
||||
|
||||
php81:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:8.1-prod-0.148
|
||||
image: devilbox/php-fpm:8.1-prod-0.150
|
||||
hostname: php81
|
||||
networks:
|
||||
app_net:
|
||||
@ -214,7 +214,7 @@ services:
|
||||
|
||||
php82:
|
||||
<<: *default-php
|
||||
image: devilbox/php-fpm:8.2-prod-0.148
|
||||
image: devilbox/php-fpm:8.2-prod-0.150
|
||||
hostname: php82
|
||||
networks:
|
||||
app_net:
|
||||
|
@ -89,6 +89,7 @@ services:
|
||||
extra_hosts:
|
||||
docker.for.lin.host.internal: 172.16.238.1
|
||||
docker.for.lin.localhost: 172.16.238.1
|
||||
host.docker.internal: host-gateway
|
||||
|
||||
networks:
|
||||
app_net:
|
||||
@ -99,7 +100,7 @@ services:
|
||||
# PHP
|
||||
# ------------------------------------------------------------
|
||||
php:
|
||||
image: devilbox/php-fpm:${PHP_SERVER}-work-0.148
|
||||
image: devilbox/php-fpm:${PHP_SERVER}-work-0.150
|
||||
hostname: php
|
||||
|
||||
##
|
||||
@ -171,6 +172,7 @@ services:
|
||||
extra_hosts:
|
||||
docker.for.lin.host.internal: 172.16.238.1
|
||||
docker.for.lin.localhost: 172.16.238.1
|
||||
host.docker.internal: host-gateway
|
||||
|
||||
networks:
|
||||
app_net:
|
||||
@ -227,7 +229,7 @@ services:
|
||||
# Web Server
|
||||
# ------------------------------------------------------------
|
||||
httpd:
|
||||
image: devilbox/${HTTPD_SERVER}:${HTTPD_FLAVOUR:-alpine}-1.0-beta2
|
||||
image: devilbox/${HTTPD_SERVER}:${HTTPD_FLAVOUR:-alpine}-1.0
|
||||
hostname: httpd
|
||||
|
||||
environment:
|
||||
|
BIN
docs/img/example_01-vhost.png
Normal file
BIN
docs/img/example_01-vhost.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
BIN
docs/img/example_02-vhost.png
Normal file
BIN
docs/img/example_02-vhost.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
11
env-example
11
env-example
@ -90,17 +90,20 @@ LOCAL_LISTEN_ADDR=
|
||||
###
|
||||
### Note: In addition to period or dot character ('.'), only ALPHA ([a-zA-Z]+) characters are supported.
|
||||
### Mac users should not use the .local TLD, as this will not resolve properly due Apple's
|
||||
### use of Multicast DNS.##
|
||||
### use of Multicast DNS.
|
||||
###
|
||||
### Note: If you use 'dvl.to' then there is no need for additional DNS as this always points
|
||||
### to 127.0.0.1 by default.
|
||||
###
|
||||
### Example:
|
||||
### TLD_SUFFIX=loc
|
||||
### Makes your project available under xxxx.loc
|
||||
### Makes your project available under <project>.loc
|
||||
###
|
||||
### Example:
|
||||
### TLD_SUFFIX=local
|
||||
### Makes your project available under xxxx.local
|
||||
### Makes your project available under <project>.local
|
||||
###
|
||||
TLD_SUFFIX=loc
|
||||
TLD_SUFFIX=dvl.to
|
||||
|
||||
|
||||
###
|
||||
|
Loading…
x
Reference in New Issue
Block a user