/home/complianthowden/public_html/vendor/sentry/sentry/src/Dsn.php
<?php

declare(strict_types=1);

namespace Sentry;

/**
 * This class represents a Sentry DSN that can be obtained from the Settings
 * page of a project.
 *
 * @author Stefano Arlandini <sarlandini@alice.it>
 */
final class Dsn implements \Stringable
{
    /**
     * @var string The protocol to be used to access the resource
     */
    private $scheme;

    /**
     * @var string The host that holds the resource
     */
    private $host;

    /**
     * @var int The port on which the resource is exposed
     */
    private $port;

    /**
     * @var string The public key to authenticate the SDK
     */
    private $publicKey;

    /**
     * @var string|null The secret key to authenticate the SDK
     */
    private $secretKey;

    /**
     * @var string The ID of the resource to access
     */
    private $projectId;

    /**
     * @var string The specific resource that the web client wants to access
     */
    private $path;

    /**
     * Class constructor.
     *
     * @param string      $scheme    The protocol to be used to access the resource
     * @param string      $host      The host that holds the resource
     * @param int         $port      The port on which the resource is exposed
     * @param string      $projectId The ID of the resource to access
     * @param string      $path      The specific resource that the web client wants to access
     * @param string      $publicKey The public key to authenticate the SDK
     * @param string|null $secretKey The secret key to authenticate the SDK
     */
    private function __construct(string $scheme, string $host, int $port, string $projectId, string $path, string $publicKey, ?string $secretKey)
    {
        $this->scheme = $scheme;
        $this->host = $host;
        $this->port = $port;
        $this->publicKey = $publicKey;
        $this->secretKey = $secretKey;
        $this->path = $path;
        $this->projectId = $projectId;
    }

    /**
     * Creates an instance of this class by parsing the given string.
     *
     * @param string $value The string to parse
     */
    public static function createFromString(string $value): self
    {
        $parsedDsn = parse_url($value);

        if (false === $parsedDsn) {
            throw new \InvalidArgumentException(sprintf('The "%s" DSN is invalid.', $value));
        }

        foreach (['scheme', 'host', 'path', 'user'] as $component) {
            if (!isset($parsedDsn[$component]) || (isset($parsedDsn[$component]) && empty($parsedDsn[$component]))) {
                throw new \InvalidArgumentException(sprintf('The "%s" DSN must contain a scheme, a host, a user and a path component.', $value));
            }
        }

        if (isset($parsedDsn['pass']) && empty($parsedDsn['pass'])) {
            throw new \InvalidArgumentException(sprintf('The "%s" DSN must contain a valid secret key.', $value));
        }

        if (!\in_array($parsedDsn['scheme'], ['http', 'https'], true)) {
            throw new \InvalidArgumentException(sprintf('The scheme of the "%s" DSN must be either "http" or "https".', $value));
        }

        $segmentPaths = explode('/', $parsedDsn['path']);
        $projectId = array_pop($segmentPaths);
        $lastSlashPosition = strrpos($parsedDsn['path'], '/');
        $path = $parsedDsn['path'];

        if (false !== $lastSlashPosition) {
            $path = substr($parsedDsn['path'], 0, $lastSlashPosition);
        }

        return new self(
            $parsedDsn['scheme'],
            $parsedDsn['host'],
            $parsedDsn['port'] ?? ('http' === $parsedDsn['scheme'] ? 80 : 443),
            $projectId,
            $path,
            $parsedDsn['user'],
            $parsedDsn['pass'] ?? null
        );
    }

    /**
     * Gets the protocol to be used to access the resource.
     */
    public function getScheme(): string
    {
        return $this->scheme;
    }

    /**
     * Gets the host that holds the resource.
     */
    public function getHost(): string
    {
        return $this->host;
    }

    /**
     * Gets the port on which the resource is exposed.
     */
    public function getPort(): int
    {
        return $this->port;
    }

    /**
     * Gets the specific resource that the web client wants to access.
     */
    public function getPath(): string
    {
        return $this->path;
    }

    /**
     * Gets the ID of the resource to access.
     *
     * @return int|string
     */
    public function getProjectId(bool $returnAsString = false)
    {
        if ($returnAsString) {
            return $this->projectId;
        }

        @trigger_error(sprintf('Calling the method %s() and expecting it to return an integer is deprecated since version 3.4 and will stop working in 4.0.', __METHOD__), \E_USER_DEPRECATED);

        return (int) $this->projectId;
    }

    /**
     * Gets the public key to authenticate the SDK.
     */
    public function getPublicKey(): string
    {
        return $this->publicKey;
    }

    /**
     * Gets the secret key to authenticate the SDK.
     */
    public function getSecretKey(): ?string
    {
        return $this->secretKey;
    }

    /**
     * Returns the URL of the API for the store endpoint.
     */
    public function getStoreApiEndpointUrl(): string
    {
        return $this->getBaseEndpointUrl() . '/store/';
    }

    /**
     * Returns the URL of the API for the envelope endpoint.
     */
    public function getEnvelopeApiEndpointUrl(): string
    {
        return $this->getBaseEndpointUrl() . '/envelope/';
    }

    /**
     * Returns the URL of the API for the CSP report endpoint.
     */
    public function getCspReportEndpointUrl(): string
    {
        return $this->getBaseEndpointUrl() . '/security/?sentry_key=' . $this->publicKey;
    }

    /**
     * @see https://www.php.net/manual/en/language.oop5.magic.php#object.tostring
     */
    public function __toString(): string
    {
        $url = $this->scheme . '://' . $this->publicKey;

        if (null !== $this->secretKey) {
            $url .= ':' . $this->secretKey;
        }

        $url .= '@' . $this->host;

        if (('http' === $this->scheme && 80 !== $this->port) || ('https' === $this->scheme && 443 !== $this->port)) {
            $url .= ':' . $this->port;
        }

        if (null !== $this->path) {
            $url .= $this->path;
        }

        $url .= '/' . $this->projectId;

        return $url;
    }

    /**
     * Returns the base url to Sentry from the DSN.
     */
    private function getBaseEndpointUrl(): string
    {
        $url = $this->scheme . '://' . $this->host;

        if (('http' === $this->scheme && 80 !== $this->port) || ('https' === $this->scheme && 443 !== $this->port)) {
            $url .= ':' . $this->port;
        }

        if (null !== $this->path) {
            $url .= $this->path;
        }

        $url .= '/api/' . $this->projectId;

        return $url;
    }
}
Customer Complaint Form | Howden Indonesia - Official Working Website

CUSTOMER COMPLAINT FORM

Please use this form to give us suggestions, compliments or complaints.
Click here to check complaint status.
Click here to show Term of Business Agreement
Howden


Notes: *.png, *.jpg, *.jpeg, *.pdf, *.doc, *.docx, *.xls, *.xlsx, *.ppt, *.pptx, *.eml are allowed, and size must be smaller than 5Mb.

Copyright © 2026 PT. Howden Insurance Brokers Indonesia. All rights reserved.
Authorised and regulated by Otoritas Jasa Keuangan (OJK).
Member of The Association of Indonesian Insurance & Reinsurance Brokers (APPARINDO).