This repository has been archived by the owner on Nov 25, 2020. It is now read-only.
/
SessionMiddleware.php
95 lines (83 loc) · 3.56 KB
/
SessionMiddleware.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
/*
* Copyright 2007-2015 Abstrium <contact (at) pydio.com>
* This file is part of Pydio.
*
* Pydio is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Pydio 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Pydio. If not, see <http://www.gnu.org/licenses/>.
*
* The latest code can be found at <https://pydio.com>.
*/
namespace Pydio\Core\Http\Middleware;
use Pydio\Core\Http\Server;
use Pydio\Core\Model\ContextInterface;
use Pydio\Core\Services\SessionService;
use Pydio\Core\Services\ApplicationState;
defined('AJXP_EXEC') or die('Access not allowed');
/**
* SessionMiddleware launches a working session
* @package Pydio\Core\Http\Middleware
*/
class SessionMiddleware
{
/**
* @var \Pydio\Enterprise\Session\PydioSessionHandler $sessionHandler
*/
private static $sessionHandler;
/**
* @param \Psr\Http\Message\ServerRequestInterface $requestInterface
* @param \Psr\Http\Message\ResponseInterface $responseInterface
* @param callable|null $next
* @return \Psr\Http\Message\ResponseInterface
*/
public static function handleRequest(\Psr\Http\Message\ServerRequestInterface $requestInterface, \Psr\Http\Message\ResponseInterface $responseInterface, callable $next = null){
$getParams = $requestInterface->getQueryParams();
$sessionName = SessionService::getSessionName();
if (isSet($getParams[PYDIO_SESSION_QUERY_PARAM])) {
$cookies = $requestInterface->getCookieParams();
if (!isSet($cookies[$sessionName])) {
$cookies[$sessionName] = $getParams[PYDIO_SESSION_QUERY_PARAM];
$_COOKIE[$sessionName] = $getParams[PYDIO_SESSION_QUERY_PARAM];
$requestInterface = $requestInterface->withCookieParams($cookies);
}
}
if(defined("AJXP_SESSION_HANDLER_PATH") && defined("AJXP_SESSION_HANDLER_CLASSNAME") && file_exists(AJXP_SESSION_HANDLER_PATH)){
require_once(AJXP_SESSION_HANDLER_PATH);
if(class_exists(AJXP_SESSION_HANDLER_CLASSNAME, false)){
$sessionHandlerClass = AJXP_SESSION_HANDLER_CLASSNAME;
/** @var \Pydio\Enterprise\Session\PydioSessionHandler $sessionHandler */
$sessionHandler = new $sessionHandlerClass();
self::$sessionHandler = $sessionHandler;
$sessionHandler->updateContext($requestInterface->getAttribute("ctx"));
session_set_save_handler($sessionHandler, false);
}
}
session_name($sessionName);
session_start();
register_shutdown_function(function(){
SessionService::close();
});
if(SessionService::has(SessionService::CTX_MINISITE_HASH)){
ApplicationState::setStateMinisite(SessionService::fetch(SessionService::CTX_MINISITE_HASH));
}
return Server::callNextMiddleWare($requestInterface, $responseInterface, $next);
}
/**
* @param ContextInterface $ctx
*/
public static function updateContext($ctx){
if(self::$sessionHandler){
self::$sessionHandler->updateContext($ctx);
}
}
}