<?php
declare(strict_types=1);

namespace Infolab;

/**
 * Auth admin "cachée" : token Bearer comparé en temps constant à $ADMIN_TOKEN.
 * Pas d'utilisateur, pas de session. V2 : OIDC via Nextcloud (voir README).
 */
final class Auth
{
    /** Lance ApiException 401 si le token est manquant, vide ou ne matche pas. */
    public static function requireAdmin(Request $req): void
    {
        $token    = $req->bearerToken();
        $expected = getenv('ADMIN_TOKEN') ?: '';

        if ($expected === '' || $token === null || $token === '' || !hash_equals($expected, $token)) {
            throw new \ApiException(401, ['error' => 'unauthorized']);
        }
    }
}
