1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 17:44:04 +00:00
tenancy/src/Middleware/InitializeTenancyByDomain.php
2024-11-09 19:54:56 +00:00

61 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Stancl\Tenancy\Middleware;
use Closure;
use Illuminate\Http\Request;
use Stancl\Tenancy\Concerns\UsableWithEarlyIdentification;
use Stancl\Tenancy\Resolvers\DomainTenantResolver;
use Stancl\Tenancy\Tenancy;
class InitializeTenancyByDomain extends IdentificationMiddleware
{
use UsableWithEarlyIdentification;
public static ?Closure $onFail = null;
public function __construct(
protected Tenancy $tenancy,
protected DomainTenantResolver $resolver,
) {}
/** @return \Illuminate\Http\Response|mixed */
public function handle(Request $request, Closure $next): mixed
{
if ($this->shouldBeSkipped(tenancy()->getRoute($request))) {
// Allow accessing central route in kernel identification
return $next($request);
}
$domain = $this->getDomain($request);
return $this->initializeTenancy(
$request,
$next,
$domain
);
}
/**
* Domain identification request has a tenant if it's
* not hitting a domain specifically defined as central in the config.
*/
public function requestHasTenant(Request $request): bool
{
$domain = $this->getDomain($request);
// Mainly used with origin identification if the header isn't specified and e.g. universal routes are used
if (! $domain) {
return false;
}
return ! in_array($domain, config('tenancy.identification.central_domains'));
}
public function getDomain(Request $request): string
{
return $request->getHost();
}
}