<?php

declare(strict_types=1);

namespace Ekdos\Http\Middleware;

use Ekdos\Support\Json;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface as Handler;
use Slim\Psr7\Response as Psr7Response;

/**
 * Sauberes 401 statt einer Weiterleitung: die Oberflaeche liest den Status und
 * zeigt daraufhin die Anmeldemaske. Es gibt hier nichts umzuleiten, weil der
 * Anmeldedialog Teil der SPA ist.
 */
final class RequireAuth implements MiddlewareInterface
{
    public function process(Request $request, Handler $handler): Response
    {
        if (SessionMiddleware::of($request) === null) {
            return Json::error(new Psr7Response(), 'Bitte erneut anmelden.', 401);
        }

        return $handler->handle($request);
    }
}
