CluPilotCloud/app/Services/Traefik/FakeTraefikWriter.php

59 lines
1.8 KiB
PHP

<?php
namespace App\Services\Traefik;
class FakeTraefikWriter implements TraefikWriter
{
/** @var array<string, string> subdomain => backend */
public array $routes = [];
/** @var array<string, array<int, string>> subdomain => hostnames the router serves */
public array $hostnames = [];
/** @var array<string, string> subdomain => traffic host */
public array $hosts = [];
/** How many times a router file was written, so a test can prove a rewrite happened. */
public int $writes = 0;
public bool $certReady = true;
/**
* Hostnames that answer nothing however often they are probed — a
* customer's own domain whose A record does not point at us. Consulted
* before $certReady, so a test can have the platform address certified
* while the custom domain is not.
*
* @var array<int, string>
*/
public array $certUnreachable = [];
public function write(string $trafficHost, string $subdomain, array $hostnames, string $backend): void
{
$this->routes[$subdomain] = $backend;
$this->hostnames[$subdomain] = array_values($hostnames);
$this->hosts[$subdomain] = $trafficHost;
$this->writes++;
}
public function remove(string $trafficHost, string $subdomain): void
{
unset($this->routes[$subdomain], $this->hostnames[$subdomain], $this->hosts[$subdomain]);
}
public function certReachable(string $fqdn): bool
{
if (in_array($fqdn, $this->certUnreachable, true)) {
return false;
}
return $this->certReady;
}
/** Does the router for this instance serve that hostname right now? */
public function serves(string $subdomain, string $hostname): bool
{
return in_array($hostname, $this->hostnames[$subdomain] ?? [], true);
}
}