diff --git a/app/Http/Controllers/Merchant/CustomDomainController.php b/app/Http/Controllers/Merchant/CustomDomainController.php index f4ccd3b..c349b00 100644 --- a/app/Http/Controllers/Merchant/CustomDomainController.php +++ b/app/Http/Controllers/Merchant/CustomDomainController.php @@ -6,12 +6,16 @@ use App\Http\Controllers\Controller; use App\Models\CustomDomain; use App\Models\QrCode; use App\Services\CustomDomain\CustomDomainService; +use App\Services\CustomDomain\DomainsSslClient; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; class CustomDomainController extends Controller { - public function __construct(private readonly CustomDomainService $service) {} + public function __construct( + private readonly CustomDomainService $service, + private readonly DomainsSslClient $domains, + ) {} public function store(Request $request, QrCode $storefront): RedirectResponse { @@ -31,6 +35,14 @@ class CustomDomainController extends Controller $this->service->attach($storefront, $host, (bool) ($data['include_www'] ?? true)); + // Surface this domain in Ladill Domains' "My Domains" (best-effort). + $this->domains->registerConnected( + $host, + (string) $request->user()->public_id, + 'Storefront: '.$storefront->label, + route('merchant.storefronts.show', $storefront), + ); + return back()->with('success', "Domain added. Point an A record for {$host} (and www) to ".config('customdomain.server_ip').', then click Verify.'); } @@ -47,7 +59,9 @@ class CustomDomainController extends Controller { abort_unless($customDomain->user_id === $request->user()->id, 403); + $host = $customDomain->host; $customDomain->delete(); + $this->domains->removeConnected($host); return back()->with('success', 'Custom domain removed.'); } diff --git a/app/Services/CustomDomain/DomainsSslClient.php b/app/Services/CustomDomain/DomainsSslClient.php index 93237ca..8000df7 100644 --- a/app/Services/CustomDomain/DomainsSslClient.php +++ b/app/Services/CustomDomain/DomainsSslClient.php @@ -49,4 +49,37 @@ class DomainsSslClient return false; } } + + /** Register/update this domain in Ladill Domains' connected-domains registry (best-effort). */ + public function registerConnected(string $host, string $ownerPublicId, ?string $label = null, ?string $linkUrl = null): void + { + if (! $this->configured() || $ownerPublicId === '') { + return; + } + try { + Http::withToken((string) config('customdomain.ssl_api_key'))->acceptJson()->timeout(10) + ->post(config('customdomain.ssl_api_url').'/connected-domains', array_filter([ + 'host' => $host, + 'owner_public_id' => $ownerPublicId, + 'label' => $label, + 'link_url' => $linkUrl, + ])); + } catch (\Throwable $e) { + Log::info('DomainsSslClient: connected register skipped', ['host' => $host, 'error' => $e->getMessage()]); + } + } + + /** Remove this domain from the connected-domains registry (best-effort). */ + public function removeConnected(string $host): void + { + if (! $this->configured()) { + return; + } + try { + Http::withToken((string) config('customdomain.ssl_api_key'))->acceptJson()->timeout(10) + ->delete(config('customdomain.ssl_api_url').'/connected-domains/'.urlencode($host)); + } catch (\Throwable $e) { + Log::info('DomainsSslClient: connected remove skipped', ['host' => $host, 'error' => $e->getMessage()]); + } + } }