From cb4a743c2a26916dbd1b84550dc7c660676127bb Mon Sep 17 00:00:00 2001 From: Christiaan Goossens Date: Wed, 29 Mar 2017 17:09:21 +0200 Subject: [PATCH] Added a proxy for use with index.php/$1 and rewrote redirects to work with sgni.nl --- composer.json | 4 +- composer.lock | 13 ++-- src/Application/Auth/Middleware.php | 2 +- src/Application/Helper/Redirect.php | 15 +--- src/Application/Login.php | 8 +-- src/Proxy.php | 108 ++++++++++++++++++++++++++++ src/bootstrap.php | 3 + templates/__header.phtml | 4 +- 8 files changed, 131 insertions(+), 26 deletions(-) create mode 100644 src/Proxy.php diff --git a/composer.json b/composer.json index 41d7dd7..e91668d 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,8 @@ "start": "php -S 0.0.0.0:8080" }, "autoload": { - "psr-4": {"Inforbank\\": "src/"} + "psr-4": { + "Inforbank\\": "src/" + } } } diff --git a/composer.lock b/composer.lock index 0f0c531..4adeb46 100644 --- a/composer.lock +++ b/composer.lock @@ -276,23 +276,24 @@ }, { "name": "slim/slim", - "version": "3.7.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/slimphp/Slim.git", - "reference": "4254e40d81559e35cdf856bcbaca5f3af468b7ef" + "reference": "5385302707530b2bccee1769613ad769859b826d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/4254e40d81559e35cdf856bcbaca5f3af468b7ef", - "reference": "4254e40d81559e35cdf856bcbaca5f3af468b7ef", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/5385302707530b2bccee1769613ad769859b826d", + "reference": "5385302707530b2bccee1769613ad769859b826d", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", + "container-interop/container-interop": "^1.2", "nikic/fast-route": "^1.0", "php": ">=5.5.0", "pimple/pimple": "^3.0", + "psr/container": "^1.0", "psr/http-message": "^1.0" }, "provide": { @@ -342,7 +343,7 @@ "micro", "router" ], - "time": "2016-12-20T20:30:47+00:00" + "time": "2017-03-19T17:55:20+00:00" }, { "name": "vrana/notorm", diff --git a/src/Application/Auth/Middleware.php b/src/Application/Auth/Middleware.php index e578d91..4da1563 100644 --- a/src/Application/Auth/Middleware.php +++ b/src/Application/Auth/Middleware.php @@ -28,7 +28,7 @@ class Middleware return $next($request, $response); } else { // Redirect to the login page - return Redirect::create($response, '/login'); + return Redirect::create($request, $response, '/login'); } } } diff --git a/src/Application/Helper/Redirect.php b/src/Application/Helper/Redirect.php index ed1ab63..1fe4108 100644 --- a/src/Application/Helper/Redirect.php +++ b/src/Application/Helper/Redirect.php @@ -16,20 +16,11 @@ namespace Inforbank\Application\Helper; class Redirect { - public static function create($response, $path) + public static function create($request, $response, $path) { + $basePath = $request->getUri()->getBaseUrl(); $response = $response->withStatus(302); - $response = $response->withHeader('Location', Redirect::getBasepath() . $path); + $response = $response->withHeader('Location', $basePath . $path); return $response; } - - private static function getBasepath() - { - if (isset($_SERVER['HTTPS'])) { - $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http"; - } else { - $protocol = 'http'; - } - return $protocol . "://" . $_SERVER['HTTP_HOST']; - } } diff --git a/src/Application/Login.php b/src/Application/Login.php index 33da093..5fd620a 100644 --- a/src/Application/Login.php +++ b/src/Application/Login.php @@ -34,18 +34,18 @@ class Login $resp = $this->auth->login($post['rekeningnr'], $post['pascode']); if ($resp) { - return Redirect::create($response, '/'); + return Redirect::create($request, $response, '/'); } else { - return Redirect::create($response, '/login?error'); + return Redirect::create($request, $response, '/login?error'); } } catch (\Exception $e) { - return Redirect::create($response, '/login?error'); + return Redirect::create($request, $response, '/login?error'); } }); $app->get('/logout', function ($request, $response, $args) { $this->auth->logout(); - return Redirect::create($response, '/login'); + return Redirect::create($request, $response, '/login'); }); } } diff --git a/src/Proxy.php b/src/Proxy.php new file mode 100644 index 0000000..b8f3ce3 --- /dev/null +++ b/src/Proxy.php @@ -0,0 +1,108 @@ +getUri(); + $path = $uri->getPath(); + if (strpos($path, 'assets/') !== false) { + if (file_exists($path)) { + $ext = pathinfo($path, PATHINFO_EXTENSION); + $ext2Mime = array( + + 'txt' => 'text/plain', + 'htm' => 'text/html', + 'html' => 'text/html', + 'php' => 'text/html', + 'css' => 'text/css', + 'js' => 'application/javascript', + 'json' => 'application/json', + 'xml' => 'application/xml', + 'swf' => 'application/x-shockwave-flash', + 'flv' => 'video/x-flv', + + // images + 'png' => 'image/png', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'gif' => 'image/gif', + 'bmp' => 'image/bmp', + 'ico' => 'image/vnd.microsoft.icon', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'svg' => 'image/svg+xml', + 'svgz' => 'image/svg+xml', + + // archives + 'zip' => 'application/zip', + 'rar' => 'application/x-rar-compressed', + 'exe' => 'application/x-msdownload', + 'msi' => 'application/x-msdownload', + 'cab' => 'application/vnd.ms-cab-compressed', + + // audio/video + 'mp3' => 'audio/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + + // adobe + 'pdf' => 'application/pdf', + 'psd' => 'image/vnd.adobe.photoshop', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + + // ms office + 'doc' => 'application/msword', + 'rtf' => 'application/rtf', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + + // open office + 'odt' => 'application/vnd.oasis.opendocument.text', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + ); + + if (array_key_exists($ext, $ext2Mime)) { + $mime = $ext2Mime[$ext]; + } else { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + if (false !== ($_mime = finfo_file($finfo, $path))) { + $mime = $_mime; + } + finfo_close($finfo); + } + + header('Content-Type: ' . $mime); + header('Content-Length: ' . filesize($path)); + + ob_clean(); + flush(); + readfile($path); + exit; + } else { + return $next($request, $response); + } + } + + return $next($request, $response); + } +} diff --git a/src/bootstrap.php b/src/bootstrap.php index fee2e5a..0eecfca 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -130,5 +130,8 @@ new Inforbank\Application\API\Handler($app); * - http://php.net/manual/en/language.oop5.basic.php (over de class) */ +// Add the asset Proxy +$app->add(new Inforbank\Proxy()); + // Run app $app->run(); diff --git a/templates/__header.phtml b/templates/__header.phtml index 913831f..844375b 100644 --- a/templates/__header.phtml +++ b/templates/__header.phtml @@ -17,14 +17,14 @@ echo " " . $klant['tussenvoegsel']; } ?>
- Uitloggen + Uitloggen