%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/bookmarks/vendor/rowbot/url/src/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/bookmarks/vendor/rowbot/url/src/Origin.php |
<?php declare(strict_types=1); namespace Rowbot\URL; use Rowbot\URL\Component\Host\HostInterface; /** * @see https://html.spec.whatwg.org/multipage/browsers.html#origin */ class Origin { /** * @var string|null */ private $domain; /** * @var \Rowbot\URL\Component\Host\HostInterface */ private $host; /** * @var bool */ private $isOpaque; /** * @var int|null */ private $port; /** * @var string */ private $scheme; /** * Constructor. */ private function __construct() { $this->isOpaque = true; } /** * Creates a tuple origin, which consists of a scheme, host, port, and optionally a domain. */ public static function createTupleOrigin( string $scheme, HostInterface $host, ?int $port, string $domain = null ): self { $origin = new self(); $origin->domain = $domain; $origin->host = $host; $origin->isOpaque = false; $origin->port = $port; $origin->scheme = $scheme; return $origin; } /** * Creates an opaque origin. An opaque origin serializes to the string 'null' and is only useful * for testing equality. */ public static function createOpaqueOrigin(): self { return new self(); } /** * @see https://html.spec.whatwg.org/multipage/browsers.html#concept-origin-effective-domain */ public function getEffectiveDomain(): ?string { if ($this->isOpaque) { return null; } if ($this->domain !== null) { return $this->domain; } return $this->host->getSerializer()->toFormattedString(); } /** * @see https://html.spec.whatwg.org/multipage/browsers.html#concept-origin-opaque */ public function isOpaque(): bool { return $this->isOpaque; } /** * Checks if two origins are the same. * * @see https://html.spec.whatwg.org/multipage/browsers.html#same-origin * * @param self $other The origin being compared. */ public function isSameOrigin(Origin $other): bool { // If A and B are the same opaque origin, then return true. if ($this->isOpaque && $other->isOpaque && $this === $other) { return true; } // If A and B are both tuple origins and their schemes, hosts, and port // are identical, then return true. if (!$this->isOpaque && !$other->isOpaque) { return $this->scheme === $other->scheme && $this->host->equals($other->host) && $this->port === $other->port; } return false; } /** * Checks if the origin is both the same origin and the same domain. * * @see https://html.spec.whatwg.org/multipage/browsers.html#same-origin-domain * * @param self $other The origin being compared. */ public function isSameOriginDomain(Origin $other): bool { // If A and B are the same opaque origin, then return true. if ($this->isOpaque && $other->isOpaque && $this === $other) { return true; } // If A and B are both tuple origins... if (!$this->isOpaque && !$other->isOpaque) { // If A and B's schemes are identical, and their domains are // identical and non-null, then return true. Otherwise, if A and B // are same origin and their domains are identical and null, then // return true. if ( $this->scheme === $other->scheme && $this->domain !== null && $this->domain === $other->domain ) { return true; } elseif ( $this->isSameOrigin($other) && $this->domain === $other->domain && $this->domain === null ) { return true; } } return false; } /** * @see https://html.spec.whatwg.org/multipage/origin.html#ascii-serialisation-of-an-origin */ public function __toString(): string { if ($this->isOpaque) { return 'null'; } $result = $this->scheme; $result .= '://'; $result .= $this->host->getSerializer()->toFormattedString(); if ($this->port !== null) { $result .= ':' . $this->port; } return $result; } }