* SPDX-License-Identifier: AGPL-3.0-or-later */ namespace KTXM\ProviderJmapc\Providers; use KTXF\Resource\Provider\ResourceServiceLocationUri; /** * JMAP Service Location * * Connection details for JMAP server. */ class ServiceLocation implements ResourceServiceLocationUri { public function __construct( private string $host = '', private int $port = 443, private string $scheme = 'https', private string $path = '/.well-known/jmap', private bool $verifyPeer = true, private bool $verifyHost = true, ) { $testing = 'test'; } public function toStore(): array { return $this->jsonSerialize(); } public function fromStore(array $data): static { return $this->jsonDeserialize($data); } public function jsonSerialize(): array { return array_filter([ 'type' => self::TYPE_URI, 'host' => $this->host ?? '', 'port' => $this->port ?? 443, 'scheme' => $this->scheme, 'path' => $this->path, 'verifyPeer' => $this->verifyPeer, 'verifyHost' => $this->verifyHost, ], fn($v) => $v !== null && $v !== ''); } public function jsonDeserialize(array|string $data): static { if (is_string($data)) { $data = json_decode($data, true); } $this->host = $data['host'] ?? ''; $this->port = (int)($data['port'] ?? 443); $this->scheme = $data['scheme'] ?? 'https'; $this->path = $data['path'] ?? ''; $this->verifyPeer = $data['verifyPeer'] ?? true; $this->verifyHost = $data['verifyHost'] ?? true; return $this; } public function type(): string { return self::TYPE_URI; } public function location(): string { $uri = $this->scheme . '://' . $this->host; // Add port if not default for scheme if (($this->scheme === 'https' && $this->port !== 443) || ($this->scheme === 'http' && $this->port !== 80)) { $uri .= ':' . $this->port; } // Add path if present if ($this->path !== '') { $uri .= '/' . ltrim($this->path, '/'); } return $uri; } public function getScheme(): string { return $this->scheme; } public function setScheme(string $value): void { $this->scheme = $value; } public function getHost(): string { return $this->host; } public function setHost(string $value): void { $this->host = $value; } public function getPort(): int { return $this->port; } public function setPort(int $value): void { $this->port = $value; } public function getPath(): string { return $this->path; } public function setPath(string $value): void { $this->path = $value; } public function getVerifyPeer(): bool { return $this->verifyPeer; } public function setVerifyPeer(bool $value): void { $this->verifyPeer = $value; } public function getVerifyHost(): bool { return $this->verifyHost; } public function setVerifyHost(bool $value): void { $this->verifyHost = $value; } }