An error occurred while loading the file. Please try again.
-
dockx thibault authored
Updates for dashboard - version 0.3
Verified1b8ebc50
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2018-2019 FusionDirectory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*!
* \brief Class URL
* Static methods to get/build URLs
*/
class URL
{
/*! \brief Returns TRUE if SSL was used to contact FD, whether directly or through a proxy
*/
public static function sslOn (): bool
{
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
return (strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') == 0);
}
if (isset($_SERVER['HTTPS'])) {
return (strcasecmp($_SERVER['HTTPS'], 'on') == 0);
}
return FALSE;
}
protected static function gatherInfos (): array
{
$protocol = 'http';
if (static::sslOn()) {
$protocol .= 's';
}
if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$host = $_SERVER['HTTP_X_FORWARDED_HOST'];
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
$protocol = $_SERVER['HTTP_X_FORWARDED_PROTO'];
}
if (isset($_SERVER['HTTP_X_FORWARDED_PORT'])) {
$port = $_SERVER['HTTP_X_FORWARDED_PORT'];
} else {
$port = ($protocol === 'http' ? 80 : 443);
}
} else {
if (!empty($_SERVER['HTTP_HOST'])) {
$host = $_SERVER['HTTP_HOST'];
} else {
$host = $_SERVER['SERVER_NAME'];
}
$port = $_SERVER['SERVER_PORT'];
}
return [$protocol, $host, $port];
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
/*! \brief Returns SSL URL to redirect to
*/
public static function getSslUrl (): string
{
list(, $host, $port) = static::gatherInfos();
$ssl = 'https://'.$host;
if (!empty($_SERVER['REQUEST_URI'])) {
$ssl .= $_SERVER['REQUEST_URI'];
} elseif (!empty($_SERVER['PATH_INFO'])) {
$ssl .= $_SERVER['PATH_INFO'];
} else {
$ssl .= $_SERVER['PHP_SELF'];
}
return $ssl;
}
/*! \brief Returns current page URL
*/
public static function getPageURL ($queryString = FALSE): string
{
list($protocol, $host, $port) = static::gatherInfos();
$pageURL = $protocol.'://'.$host;
if ((($protocol == 'http') && ($port != '80')) || (($protocol == 'https') && ($port != '443'))) {
$pageURL .= ':'.$port;
}
if (!empty($_SERVER['REQUEST_URI']) && $queryString) {
$pageURL .= $_SERVER['REQUEST_URI'];
} elseif (!empty($_SERVER['PATH_INFO'])) {
$pageURL .= $_SERVER['PATH_INFO'];
} else {
$pageURL .= $_SERVER['PHP_SELF'];
}
return $pageURL;
}
/*! \brief Returns hostname to identify this website
*/
public static function getHostName (): string
{
list($protocol, $host, $port) = static::gatherInfos();
if ((($protocol == 'http') && ($port != '80')) || (($protocol == 'https') && ($port != '443'))) {
$host .= ':'.$port;
}
return $host;
}
/*! \brief Returns absolute URL from relative URL
*/
public static function buildAbsoluteUrl (string $path): string
{
return preg_replace('|/[^/]*$|', $path, static::getPageURL(FALSE));
}
}