Skip to content

Commit 9f1beaa

Browse files
committed
refactor: Moved Sesion and Caching to Middleware
1 parent 9c3499a commit 9f1beaa

File tree

4 files changed

+92
-24
lines changed

4 files changed

+92
-24
lines changed

webfiori/framework/App.php

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,19 @@
1818
use webfiori\file\exceptions\FileException;
1919
use webfiori\file\File;
2020
use webfiori\framework\autoload\ClassLoader;
21-
use webfiori\framework\cache\Cache;
2221
use webfiori\framework\config\ConfigurationDriver;
2322
use webfiori\framework\config\Controller;
2423
use webfiori\framework\exceptions\InitializationException;
2524
use webfiori\framework\handlers\APICallErrHandler;
2625
use webfiori\framework\handlers\CLIErrHandler;
2726
use webfiori\framework\handlers\HTTPErrHandler;
2827
use webfiori\framework\middleware\AbstractMiddleware;
28+
use webfiori\framework\middleware\CacheMiddleware;
2929
use webfiori\framework\middleware\MiddlewareManager;
30+
use webfiori\framework\middleware\StartSessionMiddleware;
3031
use webfiori\framework\router\Router;
3132
use webfiori\framework\router\RouterUri;
3233
use webfiori\framework\scheduler\TasksManager;
33-
use webfiori\framework\session\SessionsManager;
3434
use webfiori\http\Request;
3535
use webfiori\http\Response;
3636
/**
@@ -154,7 +154,6 @@ private function __construct() {
154154
{
155155
register_shutdown_function(function()
156156
{
157-
SessionsManager::validateStorage();
158157
$uriObj = Router::getRouteUri();
159158

160159
if ($uriObj !== null) {
@@ -163,14 +162,6 @@ private function __construct() {
163162
}
164163
}
165164
});
166-
try {
167-
$sessionsCookiesHeaders = SessionsManager::getCookiesHeaders();
168-
169-
foreach ($sessionsCookiesHeaders as $headerVal) {
170-
Response::addHeader('set-cookie', $headerVal);
171-
}
172-
} catch (Error $exc) {
173-
}
174165

175166
$uriObj = Router::getRouteUri();
176167

@@ -180,21 +171,11 @@ private function __construct() {
180171
foreach ($uriObj->getMiddleware() as $mw) {
181172
$mw->after(Request::get(), Response::get());
182173
}
183-
App::cacheResponse($uriObj->getUri(true, true), $uriObj->getCacheDuration());
184174
}
185175
});
186176
//class is now initialized
187177
self::$ClassStatus = self::STATUS_INITIALIZED;
188178
}
189-
public static function cacheResponse(string $key, int $duration) {
190-
Cache::get($key, function () {
191-
return [
192-
'headers' => Response::getHeaders(),
193-
'http-code' => Response::getCode(),
194-
'body' => Response::getBody()
195-
];
196-
}, $duration);
197-
}
198179
/**
199180
* Register CLI commands or background tasks.
200181
*
@@ -317,7 +298,8 @@ public static function handle() {
317298
App::getRunner()->start();
318299
} else {
319300
//route user request.
320-
SessionsManager::start('wf-session');
301+
MiddlewareManager::register(new StartSessionMiddleware());
302+
MiddlewareManager::register(new CacheMiddleware());
321303
Router::route(Request::getRequestedURI());
322304
Response::send();
323305
}
@@ -538,7 +520,8 @@ private function checkStandardLibs() {
538520
'webfiori/file' => 'webfiori\\file\\File',
539521
'webfiori/mailer' => 'webfiori\\email\\SMTPAccount',
540522
'webfiori/cli' => 'webfiori\\cli\\CLICommand',
541-
'webfiori/err' => 'webfiori\\error\\ErrorHandlerException'
523+
'webfiori/err' => 'webfiori\\error\\ErrorHandlerException',
524+
'webfiori/cache' => 'webfiori\\cache\\Cache'
542525
];
543526

544527
foreach ($standardLibsClasses as $lib => $class) {
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace webfiori\framework\middleware;
4+
5+
use webfiori\cache\Cache;
6+
use webfiori\framework\router\Router;
7+
use webfiori\framework\session\SessionsManager;
8+
use webfiori\http\Request;
9+
use webfiori\http\Response;
10+
11+
12+
class CacheMiddleware extends AbstractMiddleware {
13+
public function __construct() {
14+
parent::__construct('cache');
15+
$this->setPriority(50);
16+
$this->addToGroups(['web', 'api']);
17+
}
18+
public function after(Request $request, Response $response) {
19+
$uriObj = Router::getRouteUri();
20+
21+
if ($uriObj !== null) {
22+
$request->getRequestedURI();
23+
24+
//Following steps are used to make cached response unique per user.
25+
$session = SessionsManager::getActiveSession();
26+
if ($session !== null) {
27+
$key .= $session->getId();
28+
}
29+
$authHeader = $request->getAuthHeader();
30+
$key .= $authHeader['scheme'].$authHeader['credentials'];
31+
//End
32+
33+
Cache::get($key, function (Response $response) {
34+
return [
35+
'headers' => $response->getHeaders(),
36+
'http-code' => $response->getCode(),
37+
'body' => $response->getBody()
38+
];
39+
}, $uriObj->getCacheDuration(), [$response]);
40+
}
41+
}
42+
43+
public function afterSend(Request $request, Response $response) {
44+
45+
}
46+
47+
public function before(Request $request, Response $response) {
48+
49+
}
50+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace webfiori\framework\middleware;
4+
5+
use Error;
6+
use webfiori\framework\session\SessionsManager;
7+
use webfiori\http\Request;
8+
use webfiori\http\Response;
9+
10+
class StartSessionMiddleware extends AbstractMiddleware {
11+
12+
public function __construct() {
13+
parent::__construct('start-session');
14+
$this->setPriority(PHP_INT_MAX);
15+
$this->addToGroup('web');
16+
}
17+
public function after(Request $request, Response $response) {
18+
try {
19+
$sessionsCookiesHeaders = SessionsManager::getCookiesHeaders();
20+
21+
foreach ($sessionsCookiesHeaders as $headerVal) {
22+
Response::addHeader('set-cookie', $headerVal);
23+
}
24+
} catch (Error $exc) {
25+
}
26+
}
27+
28+
public function afterSend(Request $request, Response $response) {
29+
SessionsManager::validateStorage();
30+
}
31+
32+
public function before(Request $request, Response $response) {
33+
SessionsManager::start('wf-session');
34+
}
35+
}

webfiori/framework/router/Router.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
use Error;
1414
use Exception;
15+
use webfiori\cache\Cache;
1516
use webfiori\cli\Runner;
1617
use webfiori\file\exceptions\FileException;
1718
use webfiori\file\File;
18-
use webfiori\framework\cache\Cache;
1919
use webfiori\framework\exceptions\RoutingException;
2020
use webfiori\framework\ui\HTTPCodeView;
2121
use webfiori\framework\ui\StarterPage;

0 commit comments

Comments
 (0)