8000 Merge branch '5.2' into 5.3 · shuvroroy/symfony@e1b6b4a · GitHub
[go: up one dir, main page]

Skip to content

Commit e1b6b4a

Browse files
committed
Merge branch '5.2' into 5.3
* 5.2: [Notifier] Make sure Http TransportException is not leaking
2 parents 70cc48f + b74d9c3 commit e1b6b4a

File tree

19 files changed

+153
-25
lines changed

19 files changed

+153
-25
lines changed

src/Symfony/Component/Notifier/Bridge/Discord/DiscordTransport.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Symfony\Component\Notifier\Message\SentMessage;
2020
use Symfony\Component\Notifier\Transport\AbstractTransport;
2121
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
22+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2223
use Symfony\Contracts\HttpClient\HttpClientInterface;
2324

2425
/**
@@ -76,17 +77,23 @@ protected function doSend(MessageInterface $message): SentMessage
7677
'json' => array_filter($options),
7778
]);
7879

79-
if (204 !== $response->getStatusCode()) {
80+
try {
81+
$statusCode = $response->getStatusCode();
82+
} catch (TransportExceptionInterface $e) {
83+
throw new TransportException('Could not reach the remote Discord server.', $response, 0, $e);
84+
}
85+
86+
if (204 !== $statusCode) {
8087
$result = $response->toArray(false);
8188

82-
if (401 === $response->getStatusCode()) {
89+
if (401 === $statusCode) {
8390
$originalContent = $message->getSubject();
8491
$errorMessage = $result['message'];
8592
$errorCode = $result['code'];
8693
throw new TransportException(sprintf('Unable to post the Discord message: "%s" (%d: "%s").', $originalContent, $errorCode, $errorMessage), $response);
8794
}
8895

89-
if (400 === $response->getStatusCode()) {
96+
if (400 === $statusCode) {
9097
$originalContent = $message->getSubject();
9198

9299
$errorMessage = '';
@@ -99,7 +106,7 @@ protected function doSend(MessageInterface $message): SentMessage
99106
throw new TransportException(sprintf('Unable to post the Discord message: "%s" (%s).', $originalContent, $errorMessage), $response);
100107
}
101108

102-
throw new TransportException(sprintf('Unable to post the Discord message: "%s" (Status Code: %d).', $message->getSubject(), $response->getStatusCode()), $response);
109+
throw new TransportException(sprintf('Unable to post the Discord message: "%s" (Status Code: %d).', $message->getSubject(), $statusCode), $response);
103110
}
104111

105112
return new SentMessage($message, (string) $this);

src/Symfony/Component/Notifier/Bridge/Esendex/EsendexTransport.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Symfony\Component\Notifier\Message\SmsMessage;
2121
use Symfony\Component\Notifier\Transport\AbstractTransport;
2222
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
23+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2324
use Symfony\Contracts\HttpClient\HttpClientInterface;
2425

2526
final class EsendexTransport extends AbstractTransport
@@ -74,7 +75,11 @@ protected function doSend(MessageInterface $message): SentMessage
7475
],
7576
]);
7677

77-
$statusCode = $response->getStatusCode();
78+
try {
79+
$statusCode = $response->getStatusCode();
80+
} catch (TransportExceptionInterface $e) {
81+
throw new TransportException('Could not reach the remote Esendex server.', $response, 0, $e);
82+
}
7883

7984
if (200 === $statusCode) {
8085
return new SentMessage($message, (string) $this);

src/Symfony/Component/Notifier/Bridge/Firebase/FirebaseTransport.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Symfony\Component\Notifier\Message\SentMessage;
2020
use Symfony\Component\Notifier\Transport\AbstractTransport;
2121
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
22+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2223
use Symfony\Contracts\HttpClient\HttpClientInterface;
2324

2425
/**
@@ -74,10 +75,16 @@ protected function doSend(MessageInterface $message): SentMessage
7475
'json' => array_filter($options),
7576
]);
7677

78+
try {
79+
$statusCode = $response->getStatusCode();
80+
} catch (TransportExceptionInterface $e) {
81+
throw new TransportException('Could not reach the remote Forebase server.', $response, 0, $e);
82+
}
83+
7784
$contentType = $response->getHeaders(false)['content-type'][0] ?? '';
7885
$jsonContents = 0 === strpos($contentType, 'application/json') ? $response->toArray(false) : null;
7986

80-
if (200 !== $response->getStatusCode()) {
87+
if (200 !== $statusCode) {
8188
$errorMessage = $jsonContents ? $jsonContents['results']['error'] : $response->getContent(false);
8289

8390
throw new TransportException('Unable to post the Firebase message: '.$errorMessage, $response);

src/Symfony/Component/Notifier/Bridge/FreeMobile/FreeMobileTransport.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\Notifier\Message\SmsMessage;
1919
use Symfony\Component\Notifier\Transport\AbstractTransport;
2020
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
21+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2122
use Symfony\Contracts\HttpClient\HttpClientInterface;
2223

2324
/**
@@ -66,15 +67,21 @@ protected function doSend(MessageInterface $message): SentMessage
6667
],
6768
]);
6869

69-
if (200 !== $response->getStatusCode()) {
70+
try {
71+
$statusCode = $response->getStatusCode();
72+
} catch (TransportExceptionInterface $e) {
73+
throw new TransportException('Could not reach the remote FreeMobile server.', $response, 0, $e);
74+
}
75+
76+
if (200 !== $statusCode) {
7077
$errors = [
7178
400 => 'Missing required parameter or wrongly formatted message.',
7279
402 => 'Too many messages have been sent too fast.',
7380
403 => 'Service not enabled or wrong credentials.',
7481
500 => 'Server error, please try again later.',
7582
];
7683

77-
throw new TransportException(sprintf('Unable to send the SMS: error %d: ', $response->getStatusCode()).($errors[$response->getStatusCode()] ?? ''), $response);
84+
throw new TransportException(sprintf('Unable to send the SMS: error %d: ', $statusCode).($errors[$statusCode] ?? ''), $response);
7885
}
7986

8087
return new SentMessage($message, (string) $this);

src/Symfony/Component/Notifier/Bridge/GoogleChat/GoogleChatTransport.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Symfony\Component\Notifier\Message\SentMessage;
2121
use Symfony\Component\Notifier\Transport\AbstractTransport;
2222
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
23+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2324
use Symfony\Contracts\HttpClient\HttpClientInterface;
2425

2526
/**
@@ -107,14 +108,20 @@ protected function doSend(MessageInterface $message): SentMessage
107108
'json' => array_filter($options),
108109
]);
109110

111+
try {
112+
$statusCode = $response->getStatusCode();
113+
} catch (TransportExceptionInterface $e) {
114+
throw new TransportException('Could not reach the remote GoogleChat server.', $response, 0, $e);
115+
}
116+
110117
try {
111118
$result = $response->toArray(false);
112119
} catch (JsonException $jsonException) {
113-
throw new TransportException('Unable to post the Google Chat message: Invalid response.', $response, $response->getStatusCode(), $jsonException);
120+
throw new TransportException('Unable to post the Google Chat message: Invalid response.', $response, $statusCode, $jsonException);
114121
}
115122

116-
if (200 !== $response->getStatusCode()) {
117-
throw new TransportException(sprintf('Unable to post the Google Chat message: "%s".', $result['error']['message'] ?? $response->getContent(false)), $response, $result['error']['code'] ?? $response->getStatusCode());
123+
if (200 !== $statusCode) {
124+
throw new TransportException(sprintf('Unable to post the Google Chat message: "%s".', $result['error']['message'] ?? $response->getContent(false)), $response, $result['error']['code'] ?? $statusCode);
118125
}
119126

120127
if (!\array_key_exists('name', $result)) {

src/Symfony/Component/Notifier/Bridge/Infobip/InfobipTransport.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\Notifier\Message\SmsMessage;
1919
use Symfony\Component\Notifier\Transport\AbstractTransport;
2020
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
21+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2122
use Symfony\Contracts\HttpClient\HttpClientInterface;
2223

2324
/**
@@ -74,7 +75,13 @@ protected function doSend(MessageInterface $message): SentMessage
7475
],
7576
]);
7677

77-
if (200 !== $response->getStatusCode()) {
78+
try {
79+
$statusCode = $response->getStatusCode();
80+
} catch (TransportExceptionInterface $e) {
81+
throw new TransportException('Could not reach the remote Infobip server.', $response, 0, $e);
82+
}
83+
84+
if (200 !== $statusCode) {
7885
$content = $response->toArray(false);
7986
$errorMessage = $content['requestError']['serviceException']['messageId'] ?? '';
8087
$errorInfo = $content['requestError']['serviceException']['text'] ?? '';

src/Symfony/Component/Notifier/Bridge/LinkedIn/LinkedInTransport.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Symfony\Component\Notifier\Message\SentMessage;
2121
use Symfony\Component\Notifier\Transport\AbstractTransport;
2222
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
23+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2324
use Symfony\Contracts\HttpClient\HttpClientInterface;
2425

2526
/**
@@ -80,7 +81,13 @@ protected function doSend(MessageInterface $message): SentMessage
8081
'json' => array_filter($opts ? $opts->toArray() : $this->bodyFromMessageWithNoOption($message)),
8182
]);
8283

83-
if (201 !== $response->getStatusCode()) {
84+
try {
85+
$statusCode = $response->getStatusCode();
86+
} catch (TransportExceptionInterface $e) {
87+
throw new TransportException('Could not reach the remote LinkedIn server.', $response, 0, $e);
88+
}
89+
90+
if (201 !== $statusCode) {
8491
throw new TransportException(sprintf('Unable to post the Linkedin message: "%s".', $response->getContent(false)), $response);
8592
}
8693

src/Symfony/Component/Notifier/Bridge/Mattermost/MattermostTransport.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\Notifier\Message\SentMessage;
1919
use Symfony\Component\Notifier\Transport\AbstractTransport;
2020
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
21+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2122
use Symfony\Contracts\HttpClient\HttpClientInterface;
2223

2324
/**
@@ -71,7 +72,13 @@ protected function doSend(MessageInterface $message): SentMessage
7172
'json' => array_filter($options),
7273
]);
7374

74-
if (201 !== $response->getStatusCode()) {
75+
try {
76+
$statusCode = $response->getStatusCode();
77+
} catch (TransportExceptionInterface $e) {
78+
throw new TransportException('Could not reach the remote Mattermost server.', $response, 0, $e);
79+
}
80+
81+
if (201 !== $statusCode) {
7582
$result = $response->toArray(false);
7683

7784
throw new TransportException(sprintf('Unable to post the Mattermost message: %s (%s).', $result['message'], $result['id']), $response);

src/Symfony/Component/Notifier/Bridge/Mobyt/MobytTransport.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Symfony\Component\Notifier\Message\SmsMessage;
2020
use Symfony\Component\Notifier\Transport\AbstractTransport;
2121
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
22+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2223
use Symfony\Contracts\HttpClient\HttpClientInterface;
2324

2425
/**
@@ -84,7 +85,11 @@ protected function doSend(MessageInterface $message): SentMessage
8485
'json' => array_filter($options),
8586
]);
8687

87-
$statusCode = $response->getStatusCode();
88+
try {
89+
$statusCode = $response->getStatusCode();
90+
} catch (TransportExceptionInterface $e) {
91+
throw new TransportException('Could not reach the remote Mobyt server.', $response, 0, $e);
92+
}
8893

8994
if (401 === $statusCode || 404 === $statusCode) {
9095
throw new TransportException(sprintf('Unable to send the SMS: "%s". Check your credentials.', $message->getSubject()), $response);

src/Symfony/Component/Notifier/Bridge/Nexmo/NexmoTransport.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\Notifier\Message\SmsMessage;
1919
use Symfony\Component\Notifier\Transport\AbstractTransport;
2020
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
21+
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
2122
use Symfony\Contracts\HttpClient\HttpClientInterface;
2223

2324
/**
@@ -66,7 +67,12 @@ protected function doSend(MessageInterface $message): SentMessage
6667
],
6768
]);
6869

69-
$result = $response->toArray(false);
70+
try {
71+
$result = $response->toArray(false);
72+
} catch (TransportExceptionInterface $e) {
73+
throw new TransportException('Could not reach the remote Nexmo server.', $response, 0, $e);
74+
}
75+
7076
foreach ($result['messages'] as $msg) {
7177
if ($msg['status'] ?? false) {
7278
throw new TransportException('Unable to send the SMS: '.$msg['error-text'].sprintf(' (code %s).', $msg['status']), $response);

0 commit comments

Comments
 (0)
0