Skip to content
Snippets Groups Projects
Commit 886b80aa authored by Hahn Axel (hahn)'s avatar Hahn Axel (hahn)
Browse files

Merge branch '7728-handle-http-and-https-redirects' into 'master'

7728 handle http and https redirects

See merge request !9
parents 2cf63d43 9e3d933b
Branches
No related tags found
1 merge request!97728 handle http and https redirects
......@@ -144,7 +144,15 @@ if (!$oR->isEnabled()) {
if (count($aCfg['redirects'][$sType])) {
foreach ($aCfg['redirects'][$sType] as $sFrom => $aTo) {
$iCount++;
$sRelFrom = $sType == 'direct' ? $sFrom : ($aTo['link'] ?? false );
switch ($sType) {
case 'direct':
$sRelFrom = $sFrom;
break;
case 'regex':
$sRelFrom = $aTo['link'] ?? false;
break;
}
$sTable .= $sTdFirst
. '<td class="type-' . $sType . '">' . $sType . '</td>'
. '<td class="type-' . $sType . '">'
......@@ -268,7 +276,7 @@ if (!$oR->isEnabled()) {
</head>
<body>
<h1><a href="?"> Redirects :: admin</a></h1>
<h1><a href="?"><?php echo $oR->getTitle(); ?></a></h1>
<main>
<?php echo $sErrors . $sHtml; ?>
......
......@@ -7,6 +7,7 @@
--top-bg: linear-gradient(0deg, #000, #234, #222);
--top-color: #e55;
--top-version-color: #488;
--top-bottom: var(--col-border-1);
--link-color: #46d;
......@@ -70,11 +71,12 @@ body {
h1{margin: 0 0 0.5em;; padding: 0;}
h1 a{background: var(--top-bg); color: var(--top-color); text-decoration: none;border-bottom: 5px solid var(--top-bottom); display: block; padding: 0.5em;}
h1 a small{color: var(--top-version-color);}
h2{background: var(--h2-bg); color: var('--h2-color'); margin: 1em 0 0.5em; border-top: 2px solid var(--h2-border); border-left: 5px solid var(--h2-border); border-top-left-radius: 0.5em; padding: 0.5em; margin: 0;}
h3{color:var('--h3-color'); font-size: 250%}
pre{background: rgba(0,0,0,0.02);padding: 0.3em 1em; border: 1px solid rgba(0,0,0,0.1); margin: 2em 0 3em;; border-bottom: 2px solid rgba(0,0,0,0.2); border-bottom-right-radius: 1em;}
pre{background: rgba(0,0,0,0.02);padding: 0.3em 1em; border: 1px solid rgba(0,0,0,0.1); margin: 1em 0 3em;; border-bottom: 2px solid rgba(0,0,0,0.2); border-bottom-right-radius: 1em;}
.dataTable tr:hover{background: #f4f0f8 !important;}
footer{background: var(--footer-bg); margin-top: 4em; text-align: right; padding: 1em;}
......@@ -96,7 +98,7 @@ ol.error{padding-left: 2em;}
.type-direct{color: var(--type-direct-color); }
.type-regex{color: var(--type-regex-color); }
.status{padding: 0.5em 1em; position: relative; top: -1.4em; left: -0.9em; border-left: 5px solid; font-size: 125%; border-bottom-right-radius: 0.7em;}
.status{padding: 0.5em 1em; border-left: 5px solid; font-size: 125%; border-top-right-radius: 0.7em;}
.status-ok{background: var(--txt-ok-bg); color: var(--txt-ok-color);}
.status-redirect{background: var(--txt-warning-bg); color: var(--txt-warning-color);}
.status-error{background: var(--txt-error-bg); color: var(--txt-error-color);}
......@@ -106,6 +108,8 @@ ol.error{padding-left: 2em;}
.location::before{content:' 🌐 '; background-color: var(--txt-location-before-bg);}
.debug{color:var(--txt-debug-color);}
.box{display: inline-block; border: 1px solid rgba(0,0,0,0.1); padding: 0.3em; margin: 0em; text-align: center; border-radius: 0.25em;}
.overlay{position: fixed; margin: 0; width: 100%; height: 100%; top: 0; left: 0; background: var(--overlay-bg); overflow: scroll; display: none;}
.overlay>div{margin: 3% 10%; background: var(--overlay-box-bg); padding: 1em;box-shadow: var(--overlay-box-shadow); }
......
......@@ -40,7 +40,7 @@ class redirectadmin extends redirect
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => strip_tags($this->sAbout),
CURLOPT_USERAGENT => strip_tags($this->_app . ' ' . $this->_version),
CURLOPT_VERBOSE => false,
CURLOPT_ENCODING => 'gzip, deflate', // to fetch encoding
CURLOPT_HTTPHEADER => [
......@@ -112,41 +112,80 @@ class redirectadmin extends redirect
public function renderHttpResponseHeader(array $aResponse): string
{
$sHeader=$aResponse['response_header']."\r\n\r\n".$aResponse['response_body'];
$sReturn = $sHeader;
// $sReturn.="<pre>".print_r($aResponse, 1)."</pre>";
$iJump = 0;
$sBox = '';
$sReturn = '';
if ($aResponse['curlerrorcode']) {
$sReturn = '<pre><br>'
.'<span class="status status-error">Request failed.<br></span>'
$sReturn .= '<br>'
.'<span class="status status-error">Request failed.</span>'
.'<pre>'
.'Curl error #'.$aResponse['curlerrorcode'] .':<br>'
. '<strong>'.$aResponse['curlerrormsg'].'</strong><br><br>'
.'</pre>'
.'🌐 <a href="https://curl.se/libcurl/c/libcurl-errors.html" target="_blank">Curl error codes</a>'
;
} else {
}
$sReturn = preg_replace('/(HTTP.*)\\r/', '</pre><pre><strong>$1</strong>', $sReturn);
$sReturn = preg_replace('/(HTTP.*200.*)/', '<span class="status status-ok">$1</span>', $sReturn);
$sReturn = preg_replace('/(HTTP.*30.*)/', '<span class="status status-redirect">$1</span>', $sReturn);
$sReturn = preg_replace('/(HTTP.*40.*)/', '<span class="status status-error">$1</span>', $sReturn);
$sReturn = preg_replace('/(HTTP.*50.*)/', '<span class="status status-error">$1</span>', $sReturn);
$sReturn = preg_replace('/\ ([1-5][0-9][0-9])\ /', ' <span class="statuscode">$1</span> ', $sReturn);
$sReturn = preg_replace('/(x-debug-.*)\\r/i', '<span class="debug">$1</span>', $sReturn);
$sReturn = preg_replace('/(location:.*)\\r/i', '<span class="location">$1</span>', $sReturn);
$sReturn .= '</pre>';
preg_match_all('/(HTTP\/.*)/i', $sReturn, $aTmp);
// $sReturn.=print_r($aTmp, 1);
$iHops = (count($aTmp[0]) - 1);
$sReturn = ($iHops > 0
? '<br>Found hops: <strong>' . $iHops . '</strong>'
. ($iHops > 1 ? ' <br><span class="warning"> ⚠️ Verify your redirect to skip unneeded hops.</span>' : '') . '<br><br>'
: ''
) . $sReturn
;
$sUrl=$aResponse['url'];
foreach(explode("\r\n\r\n", $aResponse['response_header']."\r\n\r\n".$aResponse['response_body'] ) as $sBlock){
if(strlen($sBlock)){
$iJump++;
// find http status
preg_match('/HTTP\/.* ([0-9]*) /', $sBlock, $aTmp);
// $sReturn.='<pre>'.print_r($aTmp, 1).'</pre>';
$iStatus=$aTmp[1] ?? '0';
$sStatus='';
if($iStatus>=200 && $iStatus<300){
$sStatus='status-ok';
} elseif($iStatus>=300 && $iStatus<400){
$sStatus='status-redirect';
} elseif($iStatus>=400 && $iStatus<500){
$sStatus='status-error';
} elseif($iStatus>=500 && $iStatus<600){
$sStatus='status-error';
}
// find location
preg_match('/Location: (.*)/i', $sBlock, $aTmp);
$sNextUrl=$aTmp[1] ?? '';
// modify lines in block
$sBlock = preg_replace('/(x-debug-.*)\\r/i', '<span class="debug">$1</span>', $sBlock);
$sBlock = preg_replace('/(location:.*)\\r/i', '<span class="location">$1</span>', $sBlock);
$sReturn.="<span class=\"status $sStatus\">$sUrl ($iStatus) </span><pre>$sBlock</pre>";
// $sReturn .= '<strong>'.$iJump.') HTTP status: '.$iStatus.' - '.$sUrl.'</strong><pre>'.$sBlock.'</pre>';
$sWebhost=parse_url($sUrl, PHP_URL_HOST);
$sBox.="<div class=\"box $sStatus\">"
.$sWebhost.'<br>'
. $this->_getIp($sWebhost)
.'</div>';
if($sNextUrl){
$sBox.= " --- $iStatus ---&gt; ";
$sUrl=$sNextUrl;
}
}
}
$iHops = $iJump-1;
$sReturn = '<br>'.($iHops > 0
? 'Found hops: <strong>' . $iHops . '</strong>'
. ($iHops > 1 ? '<span class="warning"> ⚠️ Verify your redirect to skip unneeded hops.</span>' : '') . '<br><br>'
. '<div>'.$sBox.'</div><br><br><br>'
: ''
)
. $sReturn;
return $sReturn;
}
......@@ -222,5 +261,9 @@ class redirectadmin extends redirect
return $aReturn;
}
function getTitle(): string
{
return 'Redirect :: admin <small>'.$this->_version.'</small>';
}
}
......@@ -39,6 +39,12 @@ class redirect
// CONFIG
// ----------------------------------------------------------------------
/**
* About message
* @var string
*/
protected string $_version = '1.7';
/**
* Flag: debug is enabled?
* @var bool
......@@ -55,7 +61,7 @@ class redirect
* About message
* @var string
*/
protected string $sAbout = 'IML redirect <small>v1.6</small>';
protected string $_app = 'IML redirect';
/**
* Hostname
......@@ -417,7 +423,7 @@ class redirect
. '</head>'
. '<body>'
. $sBody
. '<h2>' . $this->sAbout . '</h2>'
. '<h2>' . $this->_app . ' <small>'.$this->_version.'</small></h2>'
. '<footer>&copy; ' . date('Y') . ' ' . $this->sHostname . '</footer>'
. '</body></html>'
);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment