blob: 465c88a701139d8eb02bd9fb68d11a13d129f871 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<?php
namespace League\Glide\Urls;
use InvalidArgumentException;
use League\Glide\Signatures\SignatureInterface;
class UrlBuilder
{
/**
* The base URL.
* @var string
*/
protected $baseUrl;
/**
* Whether the base URL is a relative domain.
* @var bool
*/
protected $isRelativeDomain = false;
/**
* The HTTP signature used to sign URLs.
* @var SignatureInterface
*/
protected $signature;
/**
* Create UrlBuilder instance.
* @param string $baseUrl The base URL.
* @param SignatureInterface|null $signature The HTTP signature used to sign URLs.
*/
public function __construct($baseUrl = '', SignatureInterface $signature = null)
{
$this->setBaseUrl($baseUrl);
$this->setSignature($signature);
}
/**
* Set the base URL.
* @param string $baseUrl The base URL.
*/
public function setBaseUrl($baseUrl)
{
if (substr($baseUrl, 0, 2) === '//') {
$baseUrl = 'http:'.$baseUrl;
$this->isRelativeDomain = true;
}
$this->baseUrl = rtrim($baseUrl, '/');
}
/**
* Set the HTTP signature.
* @param SignatureInterface|null $signature The HTTP signature used to sign URLs.
*/
public function setSignature(SignatureInterface $signature = null)
{
$this->signature = $signature;
}
/**
* Get the URL.
* @param string $path The resource path.
* @param array $params The manipulation parameters.
* @return string The URL.
*/
public function getUrl($path, array $params = [])
{
$parts = parse_url($this->baseUrl.'/'.trim($path, '/'));
if ($parts === false) {
throw new InvalidArgumentException('Not a valid path.');
}
$parts['path'] = '/'.trim($parts['path'], '/');
if ($this->signature) {
$params = $this->signature->addSignature($parts['path'], $params);
}
return $this->buildUrl($parts, $params);
}
/**
* Build the URL.
* @param array $parts The URL parts.
* @param array $params The manipulation parameters.
* @return string The built URL.
*/
protected function buildUrl($parts, $params)
{
$url = '';
if (isset($parts['host'])) {
if ($this->isRelativeDomain) {
$url .= '//'.$parts['host'];
} else {
$url .= $parts['scheme'].'://'.$parts['host'];
}
if (isset($parts['port'])) {
$url .= ':'.$parts['port'];
}
}
$url .= $parts['path'];
if (count($params)) {
$url .= '?'.http_build_query($params);
}
return $url;
}
}
|