Skip to content

Commit f7ba955

Browse files
OndraHunalslischka
authored andcommitted
Added possibility to enable accepting certificates from a file
1 parent ff84d8b commit f7ba955

4 files changed

Lines changed: 53 additions & 28 deletions

File tree

.github/workflows/main.yml

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on:
1111
env:
1212
extensions: 'json'
1313
cache-version: '1'
14-
composer-version: 'v1'
14+
composer-version: 'v2'
1515
composer-install: 'composer update --no-interaction --no-progress --no-suggest --prefer-dist --prefer-stable'
1616

1717
jobs:
@@ -21,13 +21,13 @@ jobs:
2121

2222
strategy:
2323
matrix:
24-
php-version: [ '8.1', '8.2' ]
24+
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
2525
operating-system: [ 'ubuntu-latest' ]
2626
fail-fast: false
2727

2828
steps:
2929
- name: 'Checkout'
30-
uses: 'actions/checkout@v2'
30+
uses: 'actions/checkout@v4'
3131

3232
- name: 'Setup PHP cache environment'
3333
id: 'extcache'
@@ -38,7 +38,7 @@ jobs:
3838
key: '${{ env.cache-version }}'
3939

4040
- name: 'Cache PHP extensions'
41-
uses: 'actions/cache@v2'
41+
uses: 'actions/cache@v4'
4242
with:
4343
path: '${{ steps.extcache.outputs.dir }}'
4444
key: '${{ steps.extcache.outputs.key }}'
@@ -56,10 +56,10 @@ jobs:
5656

5757
- name: 'Get Composer cache directory'
5858
id: 'composercache'
59-
run: 'echo "::set-output name=dir::$(composer config cache-files-dir)"'
59+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
6060

6161
- name: 'Cache PHP dependencies'
62-
uses: "actions/cache@v2"
62+
uses: "actions/cache@v4"
6363
with:
6464
path: '${{ steps.composercache.outputs.dir }}'
6565
key: "${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}"
@@ -80,13 +80,13 @@ jobs:
8080

8181
strategy:
8282
matrix:
83-
php-version: [ '8.1', '8.2' ]
83+
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
8484
operating-system: [ 'ubuntu-latest' ]
8585
fail-fast: false
8686

8787
steps:
8888
- name: 'Checkout'
89-
uses: 'actions/checkout@v2'
89+
uses: 'actions/checkout@v4'
9090

9191
- name: 'Setup PHP cache environment'
9292
id: 'extcache'
@@ -97,7 +97,7 @@ jobs:
9797
key: '${{ env.cache-version }}'
9898

9999
- name: 'Cache PHP extensions'
100-
uses: 'actions/cache@v2'
100+
uses: 'actions/cache@v4'
101101
with:
102102
path: '${{ steps.extcache.outputs.dir }}'
103103
key: '${{ steps.extcache.outputs.key }}'
@@ -115,10 +115,10 @@ jobs:
115115

116116
- name: 'Get Composer cache directory'
117117
id: 'composercache'
118-
run: 'echo "::set-output name=dir::$(composer config cache-files-dir)"'
118+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
119119

120120
- name: 'Cache PHP dependencies'
121-
uses: 'actions/cache@v2'
121+
uses: 'actions/cache@v4'
122122
with:
123123
path: '${{ steps.composercache.outputs.dir }}'
124124
key: "${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}"
@@ -136,15 +136,14 @@ jobs:
136136

137137
strategy:
138138
matrix:
139-
php-version: [ '8.1', '8.2' ]
139+
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
140140
operating-system: [ 'ubuntu-latest' ]
141141
composer-args: [ '' ]
142-
143142
fail-fast: false
144143

145144
steps:
146145
- name: 'Checkout'
147-
uses: 'actions/checkout@v2'
146+
uses: 'actions/checkout@v4'
148147

149148
- name: 'Setup PHP cache environment'
150149
id: 'extcache'
@@ -155,7 +154,7 @@ jobs:
155154
key: '${{ env.cache-version }}'
156155

157156
- name: 'Cache PHP extensions'
158-
uses: 'actions/cache@v2'
157+
uses: 'actions/cache@v4'
159158
with:
160159
path: '${{ steps.extcache.outputs.dir }}'
161160
key: '${{ steps.extcache.outputs.key }}'
@@ -173,10 +172,10 @@ jobs:
173172

174173
- name: 'Get Composer cache directory'
175174
id: 'composercache'
176-
run: 'echo "::set-output name=dir::$(composer config cache-files-dir)"'
175+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
177176

178177
- name: 'Cache PHP dependencies'
179-
uses: 'actions/cache@v2'
178+
uses: 'actions/cache@v4'
180179
with:
181180
path: '${{ steps.composercache.outputs.dir }}'
182181
key: "${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}"
@@ -194,15 +193,15 @@ jobs:
194193

195194
strategy:
196195
matrix:
197-
php-version: [ '8.1', '8.2' ]
196+
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
198197
operating-system: [ 'ubuntu-latest' ]
199198
fail-fast: false
200199

201200
if: "github.event_name == 'push'"
202201

203202
steps:
204203
- name: 'Checkout'
205-
uses: 'actions/checkout@v2'
204+
uses: 'actions/checkout@v4'
206205

207206
- name: 'Setup PHP cache environment'
208207
id: 'extcache'
@@ -213,7 +212,7 @@ jobs:
213212
key: '${{ env.cache-version }}'
214213

215214
- name: 'Cache PHP extensions'
216-
uses: 'actions/cache@v2'
215+
uses: 'actions/cache@v4'
217216
with:
218217
path: '${{ steps.extcache.outputs.dir }}'
219218
key: '${{ steps.extcache.outputs.key }}'
@@ -231,10 +230,10 @@ jobs:
231230

232231
- name: 'Get Composer cache directory'
233232
id: 'composercache'
234-
run: 'echo "::set-output name=dir::$(composer config cache-files-dir)"'
233+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
235234

236235
- name: 'Cache PHP dependencies'
237-
uses: 'actions/cache@v2'
236+
uses: 'actions/cache@v4'
238237
with:
239238
path: '${{ steps.composercache.outputs.dir }}'
240239
key: "${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}"
@@ -246,7 +245,7 @@ jobs:
246245
- name: 'Tests'
247246
run: vendor/bin/tester tests -C --coverage coverage.xml --coverage-src src
248247

249-
- uses: codecov/codecov-action@v1
248+
- uses: codecov/codecov-action@v3
250249
with:
251250
token: ${{ secrets.CODECOV_TOKEN }}
252251
fail_ci_if_error: true

docs/en/index.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,20 @@ $httpRequest = HttpRequest::from('https://www.example.com/', HttpMethod::GET, [
125125
]);
126126
```
127127

128+
Option `verify` can be set by boolean value or by specifying path to accepted certificate file.
129+
130+
```php
131+
$httpRequest = HttpRequest::from('https://www.example.com/', HttpMethod::GET, [
132+
'verify' => false,
133+
]);
134+
```
135+
136+
```php
137+
$httpRequest = HttpRequest::from('https://www.example.com/', HttpMethod::GET, [
138+
'verify' => 'path/to/some/accepted/certificate.crt',
139+
]);
140+
```
141+
128142
## Redirects
129143

130144

src/Fapi/HttpClient/GuzzleHttpClient.php

100644100755
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,14 @@ private function processOptions(RequestInterface $request): array
104104
$options['connect_timeout'] = (int) ($headerLine !== '' ? $headerLine : 5);
105105
}
106106

107-
if ($request->hasHeader('verify') && !(bool) $request->getHeaderLine('verify')) {
108-
$options['verify'] = false;
107+
if ($request->hasHeader('verify')) {
108+
$headerLine = $request->getHeaderLine('verify');
109+
110+
$options['verify'] = match ($headerLine) {
111+
'false', '' => false,
112+
'true', '1' => true,
113+
default => $headerLine,
114+
};
109115
}
110116

111117
if ($request->hasHeader('cert')) {

src/Fapi/HttpClient/HttpRequest.php

100644100755
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,11 @@ private static function preProcessHeaders(array $options, StreamInterface|string
108108
if (isset($options['verify'])) {
109109
$value = $options['verify'];
110110
self::validateVerify($value);
111-
$data['verify'] = (bool) $value;
111+
if (is_bool($value)) {
112+
$value = $value ? 'true' : 'false';
113+
}
114+
115+
$data['verify'] = $value;
112116
}
113117

114118
if (isset($options['cert'])) {
@@ -211,8 +215,10 @@ private static function validateConnectTimeoutOption(mixed $connectTimeout): voi
211215

212216
private static function validateVerify(mixed $verify): void
213217
{
214-
if (!is_bool($verify)) {
215-
throw new InvalidArgumentException('Option verify must be an bool.');
218+
if (!(is_bool($verify) || (is_string($verify) && file_exists($verify)))) {
219+
throw new InvalidArgumentException(
220+
'Option verify must be an bool or a string path to file, ' . $verify . ' given.',
221+
);
216222
}
217223
}
218224

0 commit comments

Comments
 (0)