Files
MOHPortalTest-AllAgents-All…/qwen/hack/src/Middleware/TenantMiddleware.php
2025-10-24 14:54:44 -05:00

52 lines
1.8 KiB
PHP

<?hh // strict
namespace App\Middleware;
use App\Services\TenantResolver;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Slim\Psr7\Response;
class TenantMiddleware implements MiddlewareInterface
{
private TenantResolver $tenantResolver;
public function __construct(TenantResolver $tenantResolver)
{
$this->tenantResolver = $tenantResolver;
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// Resolve the current tenant
$tenant = $this->tenantResolver->resolveTenant($request);
// Attach the tenant to the request attributes
$request = $request->withAttribute('tenant', $tenant);
// If we have a tenant, verify it's active
if ($tenant !== null) {
if (!$tenant->getIsActive()) {
$response = new Response();
$response->getBody()->write(json_encode([
'error' => 'Tenant is inactive',
'message' => 'This tenant account is currently inactive.'
]));
return $response
->withHeader('Content-Type', 'application/json')
->withStatus(403);
}
// Set tenant-specific headers
$response = $handler->handle($request);
return $response->withAddedHeader('X-Tenant-ID', $tenant->getId());
}
// If no tenant found, we might want to return an error
// Or provide a default experience
$response = $handler->handle($request);
return $response->withAddedHeader('X-Tenant-ID', 'default');
}
}