index request works almost
This commit is contained in:
parent
114e93d09e
commit
f9a692e635
@ -15,7 +15,15 @@ require_once (__DIR__ . '/../internals/website.php');
|
||||
<title><?php echo $FRAME_OPTIONS->title; ?></title>
|
||||
<meta name="google-site-verification" content="pZOhmjeJcQbRMNa8xRLam4dwJ2oYwMwISY1lRKreSSs"/>
|
||||
<link rel="icon" type="image/png" href="/data/images/favicon.png"/>
|
||||
<link rel="canonical" href="<?php echo $FRAME_OPTIONS->canonical_url; ?>"/>
|
||||
<?php
|
||||
if ($FRAME_OPTIONS->canonical_url !== null) echo '<link rel="canonical" href="'.$FRAME_OPTIONS->canonical_url.'"/>';
|
||||
foreach ($FRAME_OPTIONS->stylesheets as $cssfile) echo '<link rel="stylesheet" href="' . $cssfile . '"/>';
|
||||
foreach ($FRAME_OPTIONS->scripts as $scriptfile)
|
||||
{
|
||||
if ($scriptfile[1]) echo '<script src="' . $scriptfile[0] . '" defer/>';
|
||||
else echo '<script src="' . $scriptfile[0] . '" type="text/javascript" ></script>';
|
||||
}
|
||||
?>
|
||||
</head>
|
||||
<body>
|
||||
<div id="mastercontainer">
|
||||
@ -40,7 +48,9 @@ require_once (__DIR__ . '/../internals/website.php');
|
||||
|
||||
</div>
|
||||
|
||||
<div id="content" class="<?php echo join(' ', $FRAME_OPTIONS->contentCSSClasses); ?>">
|
||||
<?php echo $FRAME_OPTIONS->raw; ?>
|
||||
</div>
|
||||
|
||||
<div id="footerdiv" class="content-responsive">
|
||||
<hr />
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,37 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<?php require_once (__DIR__ . '/../internals/base.php'); ?>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Mikescher.com</title>
|
||||
<meta name="google-site-verification" content="pZOhmjeJcQbRMNa8xRLam4dwJ2oYwMwISY1lRKreSSs"/>
|
||||
<link rel="icon" type="image/png" href="/data/images/favicon.png"/>
|
||||
<link rel="canonical" href="https://www.mikescher.com/"/>
|
||||
<?php printHeaderCSS(); ?>
|
||||
</head>
|
||||
<body>
|
||||
<div id="mastercontainer">
|
||||
<?php
|
||||
require_once (__DIR__ . '/../internals/website.php');
|
||||
|
||||
<?php $HEADER_ACTIVE='home'; include (__DIR__ . '/../fragments/header.php'); ?>
|
||||
/** @var PageFrameOptions $FRAME_OPTIONS */ global $FRAME_OPTIONS;
|
||||
/** @var URLRoute $ROUTE */ global $ROUTE;
|
||||
/** @var Website $SITE */ global $SITE;
|
||||
?>
|
||||
|
||||
<div id="content" class="content-responsive">
|
||||
<?php include (__DIR__ . '/../fragments/panel_euler.php'); ?>
|
||||
|
||||
<?php include (__DIR__ . '/../fragments/panel_euler.php'); ?>
|
||||
<?php include (__DIR__ . '/../fragments/panel_programs.php'); ?>
|
||||
|
||||
<?php include (__DIR__ . '/../fragments/panel_programs.php'); ?>
|
||||
<?php include (__DIR__ . '/../fragments/panel_blog.php'); ?>
|
||||
|
||||
<?php include (__DIR__ . '/../fragments/panel_blog.php'); ?>
|
||||
<?php include (__DIR__ . '/../fragments/panel_books.php'); ?>
|
||||
|
||||
<?php include (__DIR__ . '/../fragments/panel_books.php'); ?>
|
||||
|
||||
<?php include (__DIR__ . '/../fragments/panel_aoc.php'); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php include (__DIR__ . '/../fragments/footer.php'); ?>
|
||||
|
||||
</div>
|
||||
<?php printAdditionalScripts(); ?>
|
||||
<?php printAdditionalStylesheets(); ?>
|
||||
</body>
|
||||
</html>
|
||||
<?php include (__DIR__ . '/../fragments/panel_aoc.php'); ?>
|
Loading…
Reference in New Issue
Block a user