Skip to content

Commit a73da76

Browse files
authored
Merge pull request cloudflare#178 from phily245/177-missing-support=for=custom-hostname-properties
2 parents 2030e29 + dfbc5a1 commit a73da76

2 files changed

Lines changed: 114 additions & 11 deletions

File tree

src/Endpoints/CustomHostnames.php

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
class CustomHostnames implements API
1515
{
1616
use BodyAccessorTrait;
17-
17+
1818
private $adapter;
1919

2020
public function __construct(Adapter $adapter)
@@ -30,27 +30,50 @@ public function __construct(Adapter $adapter)
3030
* @param string $hostname
3131
* @param string $sslMethod
3232
* @param string $sslType
33-
* @param array $sslSettings
33+
* @param array $sslSettings
3434
* @param string $customOriginServer
35-
* @param bool $wildcard
35+
* @param bool $wildcard
36+
* @param string $bundleMethod
37+
* @param array $customSsl
3638
* @return \stdClass
3739
*/
38-
public function addHostname(string $zoneID, string $hostname, string $sslMethod = 'http', string $sslType = 'dv', array $sslSettings = [], string $customOriginServer = '', bool $wildcard = false): \stdClass
39-
{
40+
public function addHostname(
41+
string $zoneID,
42+
string $hostname,
43+
string $sslMethod = 'http',
44+
string $sslType = 'dv',
45+
array $sslSettings = [],
46+
string $customOriginServer = '',
47+
bool $wildcard = false,
48+
string $bundleMethod = '',
49+
array $customSsl = []
50+
): \stdClass {
4051
$options = [
4152
'hostname' => $hostname,
4253
'ssl' => [
4354
'method' => $sslMethod,
4455
'type' => $sslType,
45-
'settings' => $sslSettings
56+
'settings' => $sslSettings,
57+
'wildcard' => $wildcard,
4658
],
47-
'wildcard' => $wildcard,
4859
];
4960

5061
if (!empty($customOriginServer)) {
5162
$options['custom_origin_server'] = $customOriginServer;
5263
}
5364

65+
if (!empty($bundleMethod)) {
66+
$options['ssl']['bundle_method'] = $bundleMethod;
67+
}
68+
69+
if (!empty($customSsl['key'])) {
70+
$options['ssl']['custom_key'] = $customSsl['key'];
71+
}
72+
73+
if (!empty($customSsl['certificate'])) {
74+
$options['ssl']['custom_certificate'] = $customSsl['certificate'];
75+
}
76+
5477
$zone = $this->adapter->post('zones/'.$zoneID.'/custom_hostnames', $options);
5578
$this->body = json_decode($zone->getBody());
5679
return $this->body->result;

tests/Endpoints/CustomHostnamesTest.php

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public function testAddHostname()
1414
{
1515
$response = $this->getPsr7JsonResponseForFixture('Endpoints/createCustomHostname.json');
1616

17+
$customSsl = $this->getCustomSsl();
18+
1719
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
1820
$mock->method('post')->willReturn($response);
1921

@@ -30,10 +32,13 @@ public function testAddHostname()
3032
'settings' => [
3133
'http2' => 'on',
3234
'http3' => 'on',
33-
'min_tls_version' => '1.2'
34-
]
35+
'min_tls_version' => '1.2',
36+
],
37+
'bundle_method' => 'optimal',
38+
'custom_key' => $customSsl['key'],
39+
'custom_certificate' => $customSsl['certificate'],
40+
'wildcard' => true,
3541
],
36-
'wildcard' => true,
3742
])
3843
);
3944

@@ -43,7 +48,18 @@ public function testAddHostname()
4348
'http3' => 'on',
4449
'min_tls_version' => '1.2'
4550
];
46-
$hostname->addHostname('023e105f4ecef8ad9ca31a8372d0c353', 'app.example.com', 'http', 'dv', $sslSettings, 'origin.example.com', true);
51+
52+
$hostname->addHostname(
53+
'023e105f4ecef8ad9ca31a8372d0c353',
54+
'app.example.com',
55+
'http',
56+
'dv',
57+
$sslSettings,
58+
'origin.example.com',
59+
true,
60+
'optimal',
61+
$customSsl
62+
);
4763
$this->assertEquals('0d89c70d-ad9f-4843-b99f-6cc0252067e9', $hostname->getBody()->result->id);
4864
}
4965

@@ -178,4 +194,68 @@ public function testGetHostnameFallbackOrigin()
178194
$this->assertObjectHasAttribute('origin', $result);
179195
$this->assertObjectHasAttribute('status', $result);
180196
}
197+
198+
private function getCustomSsl(): array
199+
{
200+
$customKey = <<<KEY
201+
-----BEGIN PRIVATE KEY-----
202+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDZfoCUkzkZLCzo
203+
OFTtlXU9OYqNFx06J/GOKCwDCyfkY5RY1x6BVrVpTqf/JaU42DZmCjIiEugBg4bu
204+
eu9/w21prIWgRKEe8mjrw83+3QSIyQrs+78rqwDptUfL+IyhYln6SBjqPQ569Y0w
205+
x6A896PDMYPHgnWtclGwsxDNKJ2eWsH+C4UkLUeVM4BILEJ00YUjayowL/0sflTJ
206+
yY58c9fVV27aGBJ4znreYkBojPQ0fzVZ3HJfYD+DgYUUkuzN/WohOLTNTxvzt/i2
207+
GNxP8tZzi0E/t4KtGTsIVmROKaCXnmozQyv0VES5TNZL1nxLvVuPca9DKXwVst2o
208+
v5czEM8fAgMBAAECggEBANgG/aIVpWYqaaRyp3CgviWE7Oh9J+um1xgzMJwJTaNd
209+
gXDIoyUmweQKW3Vjp/uRTl8GC4uqqcUvJivj8dU+gIOw970bzcmWT7616vsV/rX6
210+
sp524wh1vt9jzx97DfwSW3rsd8rZwHNDSO1FqxRDiOaNXO4i183iud8/zRVqHTy1
211+
5girngsGl7ebTt3LDHDQQ86kND2nVr8xZuFaqs8Td41AsF6DGbB709wMUqoM/obO
212+
iUtXCZ5Rrm2a78OUi0cqWsuxdhJjtOW0PBvrPTlSq+1EuQWAWV8HN1JI58YnLcLy
213+
SKZpsu5wxWdKMgX0NCkfLjDZCAPlBaZLPPp986GHavECgYEA8hM6tIfGBnXuxBvI
214+
y2lJG3sHGs83pnCqYg9dDrr+m3JOPQu6l9MEPEtsrOiI0Ktu/L+kV5uyBDRvB6ff
215+
BD6BJ2CiG86UvMpKojBeAlZBLXr1SnWzIPC+3fBzkVSo1MiRs3nTNRfeblkRxC3e
216+
LWtl96obA1GOgpifrh6ZB2RfvrcCgYEA5gFL4+oDUDcRtc1Pw+AFwPTey+3rkVU+
217+
FHvRGeU+m6dtxXF+BYFpDs/ONfmHzsdBSwkYxta/x8rKP5uyjl9p0QSdhysrJibO
218+
sWsoux35QxEZiyplCV2+zMK/79EhS2CuiudAidF6NxK+/g9EwXRlGDDlnFDB2epe
219+
kyL97K4zCtkCgYEA68Bgbsq/xzD5XFG2xqr9wN6a97gQ+W5F8QQHW74vEZJLsdYH
220+
Xa7rNBE8gFRiUd5zU4EL+yotPz0VWH5bilWZEJFirvQMFKRp9PRnyZzZEwLpeh+Q
221+
WSc8qwZudn3dgoTmqMSfNdjODed+jvEgrFkoz/8BGcVGpdcfw8IWxIUzXZcCgYAY
222+
/OsRx8q0XEdASR3xWdVGMVRDM4X0NB6aexkshwtWPcpfOQVH89dGFK2Cj6mBfYRK
223+
cqKOd6Y+Pnnajz/G1/bXDnlOxhHaAz1RaSLzsT3zW1g7FlADxHuGI2JW25GSbt6H
224+
mLgaQPfWI+M8FsyRd+PDzQwk/2EQG7ZKpfKQVByXgQKBgQDkKciB6Wb2hLNTKzK8
225+
Kr42U70H++QT8AqZX2F79PjgYcRFZqGXLuq/hEuiOhXfl8DFur3fC5JN8AeLC5/j
226+
bsrBsljYfVvtLQzilugs1oEe94LTrYjR2oQt0W24bqpGQHuv1ILuUBuodERkxSFL
227+
/cMkj3wSfC341hFaJEuG1+PcxA==
228+
-----END PRIVATE KEY-----
229+
KEY;
230+
231+
$customCertificate = <<<CERTIFICATE
232+
-----BEGIN CERTIFICATE-----
233+
MIIDmTCCAoGgAwIBAgIULyaeNqp0tOut/wvuxNyKmUxOGYEwDQYJKoZIhvcNAQEL
234+
BQAwXDELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UE
235+
CgwTRGVmYXVsdCBDb21wYW55IEx0ZDEYMBYGA1UEAwwPYXBwLmV4YW1wbGUuY29t
236+
MB4XDTIxMDYxNDIzMzU0MVoXDTIyMDYxNDIzMzU0MVowXDELMAkGA1UEBhMCWFgx
237+
FTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55
238+
IEx0ZDEYMBYGA1UEAwwPYXBwLmV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEF
239+
AAOCAQ8AMIIBCgKCAQEA2X6AlJM5GSws6DhU7ZV1PTmKjRcdOifxjigsAwsn5GOU
240+
WNcegVa1aU6n/yWlONg2ZgoyIhLoAYOG7nrvf8NtaayFoEShHvJo68PN/t0EiMkK
241+
7Pu/K6sA6bVHy/iMoWJZ+kgY6j0OevWNMMegPPejwzGDx4J1rXJRsLMQzSidnlrB
242+
/guFJC1HlTOASCxCdNGFI2sqMC/9LH5UycmOfHPX1Vdu2hgSeM563mJAaIz0NH81
243+
WdxyX2A/g4GFFJLszf1qITi0zU8b87f4thjcT/LWc4tBP7eCrRk7CFZkTimgl55q
244+
M0Mr9FREuUzWS9Z8S71bj3GvQyl8FbLdqL+XMxDPHwIDAQABo1MwUTAdBgNVHQ4E
245+
FgQUbAfyBm0wpM7FqUb1yqeaF4voY/gwHwYDVR0jBBgwFoAUbAfyBm0wpM7FqUb1
246+
yqeaF4voY/gwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAO2Dd
247+
k/seFjp83caYE/NVdDy5B7l5JeVtruaUdlGbb0xtVhiIdoY43ukhHFw8zuWMW9RX
248+
SUbrzwacfKLDBikcefk9go6cMimqYIRF8Hntph1gjjqB0papUm2WVYbsBRv2okys
249+
ej0dGSeUEsWjKRTSMkJsbbiEv6oveeSki069zl+tln0UhbHedkIY3rJsFIyoddSu
250+
g96r5HPHksnObm1JCym0xd09+msliDkBmq87mxok9m5aEqWX4XvdGfYERV/eD5vC
251+
KcW4DoM1KZd8E6tlniglc1jC0pzKfho7Uoe6UtObgHZGNwRYwYy+BHvHYY46ctSI
252+
NdZ7G/lUyrBFhsRrhw==
253+
-----END CERTIFICATE-----
254+
CERTIFICATE;
255+
256+
return [
257+
'key' => $customKey,
258+
'certificate' => $customCertificate,
259+
];
260+
}
181261
}

0 commit comments

Comments
 (0)