xref: /webtrees/app/Http/Middleware/UseSession.php (revision 3976b4703df669696105ed6b024b96d433c8fbdb)
1b5979037SGreg Roach<?php
2*3976b470SGreg Roach
3b5979037SGreg Roach/**
4b5979037SGreg Roach * webtrees: online genealogy
5b5979037SGreg Roach * Copyright (C) 2019 webtrees development team
6b5979037SGreg Roach * This program is free software: you can redistribute it and/or modify
7b5979037SGreg Roach * it under the terms of the GNU General Public License as published by
8b5979037SGreg Roach * the Free Software Foundation, either version 3 of the License, or
9b5979037SGreg Roach * (at your option) any later version.
10b5979037SGreg Roach * This program is distributed in the hope that it will be useful,
11b5979037SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
12b5979037SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13b5979037SGreg Roach * GNU General Public License for more details.
14b5979037SGreg Roach * You should have received a copy of the GNU General Public License
15b5979037SGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
16b5979037SGreg Roach */
17b5979037SGreg Roachdeclare(strict_types=1);
18b5979037SGreg Roach
19b5979037SGreg Roachnamespace Fisharebest\Webtrees\Http\Middleware;
20b5979037SGreg Roach
21b5979037SGreg Roachuse Fisharebest\Webtrees\Auth;
224459dc9aSGreg Roachuse Fisharebest\Webtrees\Carbon;
230c8c69d4SGreg Roachuse Fisharebest\Webtrees\Contracts\UserInterface;
24b5979037SGreg Roachuse Fisharebest\Webtrees\Session;
256ccdf4f0SGreg Roachuse Psr\Http\Message\ResponseInterface;
266ccdf4f0SGreg Roachuse Psr\Http\Message\ServerRequestInterface;
276ccdf4f0SGreg Roachuse Psr\Http\Server\MiddlewareInterface;
286ccdf4f0SGreg Roachuse Psr\Http\Server\RequestHandlerInterface;
29b5979037SGreg Roach
30b5979037SGreg Roach/**
31b5979037SGreg Roach * Middleware to activate sessions.
32b5979037SGreg Roach */
33b5979037SGreg Roachclass UseSession implements MiddlewareInterface
34b5979037SGreg Roach{
35b5979037SGreg Roach    /**
366ccdf4f0SGreg Roach     * @param ServerRequestInterface  $request
376ccdf4f0SGreg Roach     * @param RequestHandlerInterface $handler
38b5979037SGreg Roach     *
396ccdf4f0SGreg Roach     * @return ResponseInterface
40b5979037SGreg Roach     */
416ccdf4f0SGreg Roach    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
42b5979037SGreg Roach    {
43b5979037SGreg Roach        // Sessions
444d7dd147SGreg Roach        Session::start($request);
45b5979037SGreg Roach
4657ab2231SGreg Roach        $user = Auth::user();
4757ab2231SGreg Roach
48b5979037SGreg Roach        // Update the last-login time no more than once a minute.
49b5979037SGreg Roach        $next_session_update = Carbon::createFromTimestamp((int) Session::get('session_time_updates'))->addMinute();
50b5979037SGreg Roach        if ($next_session_update < Carbon::now()) {
514459dc9aSGreg Roach            $timestamp_now = Carbon::now()->unix();
52b5979037SGreg Roach
53b5979037SGreg Roach            if (Session::get('masquerade') === null) {
5457ab2231SGreg Roach                $user->setPreference('sessiontime', (string) $timestamp_now);
55b5979037SGreg Roach            }
56b5979037SGreg Roach            Session::put('session_time_updates', $timestamp_now);
57b5979037SGreg Roach        }
58b5979037SGreg Roach
5957ab2231SGreg Roach        app()->instance(UserInterface::class, $user);
6057ab2231SGreg Roach
6157ab2231SGreg Roach        $request = $request->withAttribute('user', $user);
620c8c69d4SGreg Roach
636ccdf4f0SGreg Roach        return $handler->handle($request);
64b5979037SGreg Roach    }
65b5979037SGreg Roach}
66