index request works almost
This commit is contained in:
@@ -7,7 +7,7 @@ class PageFrameOptions
|
||||
public $raw;
|
||||
|
||||
/** @var string */
|
||||
public $title = '';
|
||||
public $title = 'Mikescher.com';
|
||||
|
||||
/** @var int */
|
||||
public $statuscode = 200;
|
||||
@@ -23,4 +23,39 @@ class PageFrameOptions
|
||||
|
||||
/** @var string */
|
||||
public $contentType = null;
|
||||
|
||||
/** @var string */
|
||||
public $activeHeader = null;
|
||||
|
||||
/** @var string */
|
||||
public $canonical_url = null;
|
||||
|
||||
/** @var string[] */
|
||||
public $contentCSSClasses = [ 'content-responsive' ];
|
||||
|
||||
/** @var array */
|
||||
public $stylesheets = [];
|
||||
|
||||
/** @var array */
|
||||
public $scripts = [];
|
||||
|
||||
public function addStylesheet(string $url)
|
||||
{
|
||||
foreach ($this->stylesheets as $css) if ($css === $url) return;
|
||||
$this->stylesheets []= $url;
|
||||
}
|
||||
|
||||
public function addScript(string $url, bool $defer = false)
|
||||
{
|
||||
foreach ($this->scripts as &$script)
|
||||
{
|
||||
if ($script[0] === $url)
|
||||
{
|
||||
if (!$defer && $script[1]) $script[1] = false; // upgrade from defered to immediate script
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$this->scripts []= [ $url, $defer ];
|
||||
}
|
||||
}
|
||||
@@ -5,13 +5,13 @@ require_once "website.php";
|
||||
class RuleEngine
|
||||
{
|
||||
/**
|
||||
* @param Website $app
|
||||
* @param Website $site
|
||||
* @param array $urlConfig
|
||||
* @return URLRoute
|
||||
*/
|
||||
public static function findRoute(Website $app, array $urlConfig): URLRoute
|
||||
public static function findRoute(Website $site, array $urlConfig): URLRoute
|
||||
{
|
||||
if ($app->isProd())
|
||||
if ($site->isProd())
|
||||
$requri = $_SERVER['REQUEST_URI'];
|
||||
else
|
||||
$requri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'localhost:80/';
|
||||
@@ -24,16 +24,18 @@ class RuleEngine
|
||||
|
||||
foreach ($urlConfig as $rule)
|
||||
{
|
||||
$route = self::testRule($app, $rule, $requri, $pathparts, $partcount);
|
||||
$route = self::testRule($site, $rule, $requri, $pathparts, $partcount);
|
||||
if ($route === null) continue;
|
||||
|
||||
if ($route->needsAdminLogin && !$app->isLoggedIn()) return URLRoute::getLoginRoute($route, $requri);
|
||||
if ($route->needsAdminLogin && !$site->isLoggedInByCookie()) return URLRoute::getLoginRoute($route, $requri);
|
||||
|
||||
return $route;
|
||||
}
|
||||
|
||||
return URLRoute::getNotFoundRoute($requri);
|
||||
}
|
||||
|
||||
private static function testRule(Website $app, array $rule, string $requri, array $pathparts, int $partcount)
|
||||
private static function testRule(Website $site, array $rule, string $requri, array $pathparts, int $partcount)
|
||||
{
|
||||
if ($partcount !== count($rule['url'])) return null;
|
||||
|
||||
@@ -95,7 +97,7 @@ class RuleEngine
|
||||
|
||||
$route->needsAdminLogin = isset($ctrlOpt['password']);
|
||||
|
||||
if ($app->isProd() && isHTTPRequest() && !in_array('http', $ctrlOpt))
|
||||
if ($site->isProd() && isHTTPRequest() && !in_array('http', $ctrlOpt))
|
||||
{
|
||||
// enforce https
|
||||
$redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||
|
||||
@@ -16,52 +16,43 @@ class URLRoute
|
||||
/** @var int */
|
||||
public $needsAdminLogin;
|
||||
|
||||
/** @var int */
|
||||
public $isAPI;
|
||||
|
||||
public function __construct(string $target, string $url)
|
||||
{
|
||||
$this->targetpath = __DIR__ . '/../pages/' . $target;
|
||||
$this->full_url = $url;
|
||||
$this->parameter = [];
|
||||
$this->needsAdminLogin = false;
|
||||
$this->isAPI = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Website $app
|
||||
* @param Website $site
|
||||
* @return PageFrameOptions
|
||||
*/
|
||||
public function get(Website $app): PageFrameOptions
|
||||
public function get(Website $site): PageFrameOptions
|
||||
{
|
||||
$pfo = new PageFrameOptions();
|
||||
|
||||
$pfo->title = 'Mikescher.com'; // default title
|
||||
if ($this->isAPI)
|
||||
{
|
||||
$pfo->frame = 'no_frame.php';
|
||||
$pfo->contentType = 'application/json';
|
||||
}
|
||||
$pfo->addStylesheet($site->isProd() ? ('/data/css/styles.min.css') : ('/data/css/styles.css'));
|
||||
|
||||
return $this->getDirect($app, $pfo);
|
||||
return $this->getDirect($site, $pfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Website $app
|
||||
* @param Website $site
|
||||
* @param PageFrameOptions $pfo
|
||||
* @return PageFrameOptions
|
||||
*/
|
||||
public function getDirect(Website $app, PageFrameOptions $pfo): PageFrameOptions
|
||||
public function getDirect(Website $site, PageFrameOptions $pfo): PageFrameOptions
|
||||
{
|
||||
@ob_end_clean();
|
||||
ob_start();
|
||||
|
||||
global $ROUTE;
|
||||
global $FRAME_OPTIONS;
|
||||
global $APP;
|
||||
global $SITE;
|
||||
$ROUTE = $this;
|
||||
$FRAME_OPTIONS = $pfo;
|
||||
$APP = $app;
|
||||
$SITE = $site;
|
||||
|
||||
/** @noinspection PhpIncludeInspection */
|
||||
require $this->targetpath;
|
||||
@@ -79,7 +70,7 @@ class URLRoute
|
||||
public static function getLoginRoute(URLRoute $route, string $requri): URLRoute
|
||||
{
|
||||
$r = new URLRoute('login.php', $requri);
|
||||
$r->parameter = [ 'redirect' => $route->full_url ];
|
||||
$r->parameter = [ 'login_target' => $route->full_url ];
|
||||
return $r;
|
||||
}
|
||||
|
||||
@@ -89,7 +80,7 @@ class URLRoute
|
||||
*/
|
||||
public static function getNotFoundRoute(string $requri): URLRoute
|
||||
{
|
||||
$r = new URLRoute('errors/not_found.php', $requri);
|
||||
$r = new URLRoute('error_notfound.php', $requri);
|
||||
$r->parameter = [];
|
||||
return $r;
|
||||
}
|
||||
@@ -100,7 +91,7 @@ class URLRoute
|
||||
*/
|
||||
public static function getServerErrorRoute(string $requri): URLRoute
|
||||
{
|
||||
$r = new URLRoute('errors/server_error.php', $requri);
|
||||
$r = new URLRoute('error_servererror.php', $requri);
|
||||
$r->parameter = [];
|
||||
return $r;
|
||||
}
|
||||
|
||||
@@ -82,61 +82,6 @@ function formatMilliseconds($millis)
|
||||
}
|
||||
}
|
||||
|
||||
function includeAdditionalScript($script, $attr='', $printImmediately = false) {
|
||||
global $ADDITIONAL_SCRIPTS;
|
||||
|
||||
if (in_array($script, $ADDITIONAL_SCRIPTS)) return false;
|
||||
|
||||
if ($printImmediately) {
|
||||
$ADDITIONAL_SCRIPTS[$script] = ['src' => $script, 'attr' => $attr, 'consumed' => true];
|
||||
echo '<script src="'.$script.'" type="text/javascript" '.$attr.'></script>';
|
||||
return true;
|
||||
} else {
|
||||
$ADDITIONAL_SCRIPTS[$script] = ['src' => $script, 'attr' => $attr, 'consumed' => false];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function includeAdditionalStylesheet($sheet, $attr='', $printImmediately = false) {
|
||||
global $ADDITIONAL_STYLESHEETS;
|
||||
|
||||
if (in_array($sheet, $ADDITIONAL_STYLESHEETS)) return false;
|
||||
|
||||
if ($printImmediately) {
|
||||
$ADDITIONAL_STYLESHEETS[$sheet] = ['src' => $sheet, 'attr' => $attr, 'consumed' => true];
|
||||
echo '<link rel="stylesheet" href="' . $sheet . '" '.$attr.'/>';
|
||||
return true;
|
||||
} else {
|
||||
$ADDITIONAL_STYLESHEETS[$sheet] = ['src' => $sheet, 'attr' => $attr, 'consumed' => false];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function printHeaderCSS() {
|
||||
global $CSS_BASE;
|
||||
includeAdditionalStylesheet($CSS_BASE, '', true);
|
||||
}
|
||||
|
||||
function printAdditionalScripts() {
|
||||
global $ADDITIONAL_SCRIPTS;
|
||||
|
||||
foreach ($ADDITIONAL_SCRIPTS as $d) {
|
||||
if ($d['consumed']) continue;
|
||||
echo '<script src="' . $d['src'] . '" type="text/javascript" ' . $d['attr'] . '></script>';
|
||||
$d['consumed'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
function printAdditionalStylesheets() {
|
||||
global $ADDITIONAL_STYLESHEETS;
|
||||
|
||||
foreach ($ADDITIONAL_STYLESHEETS as $d) {
|
||||
if ($d['consumed']) continue;
|
||||
echo '<link rel="stylesheet" href="' . $d['src'] . '" ' . $d['attr'] . '/>';
|
||||
$d['consumed'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
function isProd() {
|
||||
global $CONFIG;
|
||||
return $CONFIG['prod'];
|
||||
@@ -180,34 +125,6 @@ function convertLanguageToFlag($lang) {
|
||||
return null;
|
||||
}
|
||||
|
||||
function setLoginCookie($user, $pass)
|
||||
{
|
||||
$expires = time() + (24*60*60); // 24h
|
||||
$hash = hash('sha256', $user . ';' . $pass . ';' . gmdate('Y-m-d'));
|
||||
setcookie('mikescher_auth', $hash, $expires);
|
||||
}
|
||||
|
||||
function isLoggedInByCookie()
|
||||
{
|
||||
static $_loginCache = null;
|
||||
if ($_loginCache !== null) return $_loginCache;
|
||||
|
||||
global $CONFIG;
|
||||
if (key_exists('mikescher_auth', $_COOKIE))
|
||||
{
|
||||
if (strlen($_COOKIE['mikescher_auth']) !== 64) return $_loginCache = false;
|
||||
$auth = hash('sha256', $CONFIG['admin_username'] . ';' . $CONFIG['admin_password'] . ';' . gmdate('Y-m-d'));
|
||||
if ($auth === $_COOKIE['mikescher_auth']) return $_loginCache = true;
|
||||
}
|
||||
|
||||
return $_loginCache = false;
|
||||
}
|
||||
|
||||
function clearLoginCookie()
|
||||
{
|
||||
setcookie("mikescher_auth", "", time()+30);
|
||||
}
|
||||
|
||||
/**
|
||||
* easy image resize function
|
||||
* @author http://www.nimrodstech.com/php-image-resize/
|
||||
|
||||
@@ -14,6 +14,9 @@ class Website
|
||||
/** @var array */
|
||||
public $config;
|
||||
|
||||
/** @var bool|null */
|
||||
public $isLoggedIn = null;
|
||||
|
||||
/** @var Database|null */ private $database = null;
|
||||
/** @var AdventOfCode|null */ private $adventOfCode = null;
|
||||
/** @var Blog|null */ private $blog = null;
|
||||
@@ -145,13 +148,13 @@ class Website
|
||||
|
||||
global $ROUTE;
|
||||
global $FRAME_OPTIONS;
|
||||
global $APP;
|
||||
global $SITE;
|
||||
$ROUTE = $route;
|
||||
$FRAME_OPTIONS = $pfo;
|
||||
$APP = $this;
|
||||
$SITE = $this;
|
||||
|
||||
/** @noinspection PhpIncludeInspection */
|
||||
require __DIR__ . '/../pages/frame/' . $FRAME_OPTIONS->frame;
|
||||
require __DIR__ . '/../frames/' . $FRAME_OPTIONS->frame;
|
||||
}
|
||||
|
||||
public function Database()
|
||||
@@ -222,6 +225,33 @@ class Website
|
||||
if ($this->config == null) return true;
|
||||
return $this->config['prod'];
|
||||
}
|
||||
|
||||
public function isLoggedInByCookie()
|
||||
{
|
||||
if ($this->isLoggedIn !== null) return $this->isLoggedIn;
|
||||
|
||||
if (key_exists('mikescher_auth', $_COOKIE))
|
||||
{
|
||||
if (strlen($_COOKIE['mikescher_auth']) !== 64) return ($this->isLoggedIn = false);
|
||||
$auth = hash('sha256', $this->config['admin_username'] . ';' . $this->config['admin_password'] . ';' . gmdate('Y-m-d'));
|
||||
if ($auth === $_COOKIE['mikescher_auth']) return ($this->isLoggedIn = true);
|
||||
}
|
||||
|
||||
return ($this->isLoggedIn = false);
|
||||
}
|
||||
|
||||
function setLoginCookie($user, $pass)
|
||||
{
|
||||
$expires = time() + (24*60*60); // 24h
|
||||
$hash = hash('sha256', $user . ';' . $pass . ';' . gmdate('Y-m-d'));
|
||||
setcookie('mikescher_auth', $hash, $expires);
|
||||
}
|
||||
|
||||
function clearLoginCookie()
|
||||
{
|
||||
setcookie("mikescher_auth", "", time()+30);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user