From 962b19bab583677438e9cbe450acddfba33b8c91 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 19:43:20 +0200 Subject: [PATCH 01/51] [Notifier] add support for gatewayapi-notifier --- .../FrameworkExtension.php | 2 + .../Resources/config/notifier_transports.php | 5 ++ .../Tests/Adapter/PdoDbalAdapterTest.php | 1 - .../Notifier/Bridge/GatewayAPI/.gitattributes | 3 + .../Bridge/GatewayAPI/GatewayAPITransport.php | 76 +++++++++++++++++++ .../GatewayAPI/GatewayAPITransportFactory.php | 47 ++++++++++++ .../Notifier/Bridge/GatewayAPI/LICENSE | 19 +++++ .../Notifier/Bridge/GatewayAPI/README.md | 26 +++++++ .../Notifier/Bridge/GatewayAPI/composer.json | 35 +++++++++ .../Bridge/GatewayAPI/phpunit.xml.dist | 31 ++++++++ src/Symfony/Component/Notifier/Transport.php | 2 + 11 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index c15c5d97e70e5..2e2dc31a48870 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -105,6 +105,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -2227,6 +2228,7 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $ SendinblueNotifierTransportFactory::class => 'notifier.transport_factory.sendinblue', DiscordTransportFactory::class => 'notifier.transport_factory.discord', LinkedInTransportFactory::class => 'notifier.transport_factory.linkedin', + GatewayAPITransportFactory::class => 'notifier.transport_factory.gatewayapi', ]; foreach ($classToServices as $class => $service) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php index cff7f0d0c91dc..31a0f48e0b14f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php @@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -115,6 +116,10 @@ ->parent('notifier.transport_factory.abstract') ->tag('chatter.transport_factory') + ->set('notifier.transport_factory.gatewayapi', GatewayAPITransportFactory::class) + ->parent('notifier.transport_factory.abstract') + ->tag('texter.transport_factory') + ->set('notifier.transport_factory.null', NullTransportFactory::class) ->parent('notifier.transport_factory.abstract') ->tag('chatter.transport_factory') diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php index 648e4313d8375..82441bdbc496d 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php @@ -15,7 +15,6 @@ use Doctrine\DBAL\Driver\AbstractMySQLDriver; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Schema\Schema; -use Doctrine\DBAL\Version; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\PdoAdapter; use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait; diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes new file mode 100644 index 0000000000000..ebb9287043dc4 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes @@ -0,0 +1,3 @@ +/Tests export-ignore +/phpunit.xml.dist export-ignore +/.gitignore export-ignore diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php new file mode 100644 index 0000000000000..49bc463d14fdd --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php @@ -0,0 +1,76 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\GatewayAPI; + +use Symfony\Component\Notifier\Exception\LogicException; +use Symfony\Component\Notifier\Exception\TransportException; +use Symfony\Component\Notifier\Message\MessageInterface; +use Symfony\Component\Notifier\Message\SentMessage; +use Symfony\Component\Notifier\Message\SmsMessage; +use Symfony\Component\Notifier\Transport\AbstractTransport; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; +use Symfony\Contracts\HttpClient\HttpClientInterface; + +/** + * @author Piergiuseppe Longo + * @experimental in 5.2 + */ +final class GatewayAPITransport extends AbstractTransport +{ + protected const HOST = 'gatewayapi.com'; + + private $authToken; + private $from; + + public function __construct(string $authToken, string $from, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null) + { + $this->authToken = $authToken; + $this->from = $from; + + parent::__construct($client, $dispatcher); + } + + public function __toString(): string + { + return sprintf('gatewaypi://%s?from=%s', $this->getEndpoint(), $this->from); + } + + public function supports(MessageInterface $message): bool + { + return $message instanceof SmsMessage; + } + + protected function doSend(MessageInterface $message): SentMessage + { + if (!$message instanceof SmsMessage) { + throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message))); + } + + $endpoint = sprintf('https://%s/rest/mtsms', $this->getEndpoint()); + + $response = $this->client->request('POST', $endpoint, [ + 'auth_basic' => [$this->authToken, ''], + 'json' => [ + 'sender' => $this->from, + 'recipients' => [['msisdn' => $message->getPhone()]], + 'message' => $message->getSubject(), + ], + ]); + + $statusCode = $response->getStatusCode(); + if (200 !== $statusCode) { + throw new TransportException(sprintf('Unable to send the SMS: error %d.', $statusCode), $response); + } + + return new SentMessage($message, (string) $this); + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php new file mode 100644 index 0000000000000..b78d76027b42e --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\GatewayAPI; + +use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; +use Symfony\Component\Notifier\Transport\AbstractTransportFactory; +use Symfony\Component\Notifier\Transport\Dsn; +use Symfony\Component\Notifier\Transport\TransportInterface; + +/** + * @author Piergiuseppe Longo + * @experimental in 5.2 + */ +class GatewayAPITransportFactory extends AbstractTransportFactory +{ + /** + * @return GatewayAPITransport + */ + public function create(Dsn $dsn): TransportInterface + { + $scheme = $dsn->getScheme(); + $authToken = $dsn->getUser(); + $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); + $from = $dsn->getOption('from'); + $port = $dsn->getPort(); + + if ('gatewaypi' === $scheme) { + return (new GatewayAPITransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); + } + + throw new UnsupportedSchemeException($dsn, 'gatewaypi', $this->getSupportedSchemes()); + } + + protected function getSupportedSchemes(): array + { + return ['gatewaypi']; + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE new file mode 100644 index 0000000000000..5593b1d84f74a --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md new file mode 100644 index 0000000000000..27017fb421c8a --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md @@ -0,0 +1,26 @@ +GatewayAPI Notifier +=============== + +Provides GatewayAPI integration for Symfony Notifier. + +DSN example +----------- + +``` +// .env file +GATEWAYAPI_DSN=gatewaypi://TOKEN@default?from=FROM +``` + +where: + - `TOKEN` is API Token (OAuth) + - `FROM` is sender name + +See your account info at https://gatewayapi.com + +Resources +--------- + + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json new file mode 100644 index 0000000000000..52f792875c9e2 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json @@ -0,0 +1,35 @@ +{ + "name": "symfony/gatewayapi-notifier", + "type": "symfony-bridge", + "description": "Symfony GatewayAPI Notifier Bridge", + "keywords": ["sms", "gatewayapi", "notifier"], + "homepage": "https://gatewayapi.com", + "license": "MIT", + "authors": [ + { + "name": "Piergiuseppe Longo", + "email": "piergiuseppe.longo@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2.5", + "symfony/http-client": "^4.3|^5.0", + "symfony/notifier": "^5.2" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\Bridge\\GatewayAPI\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-version": "5.2" + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist new file mode 100644 index 0000000000000..d541cf2e205e8 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist @@ -0,0 +1,31 @@ + + + + + + + + + + ./Tests/ + + + + + + ./ + + ./Resources + ./Tests + ./vendor + + + + diff --git a/src/Symfony/Component/Notifier/Transport.php b/src/Symfony/Component/Notifier/Transport.php index 3477477461d66..7f156afbcb4b4 100644 --- a/src/Symfony/Component/Notifier/Transport.php +++ b/src/Symfony/Component/Notifier/Transport.php @@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\Mattermost\MattermostTransportFactory; use Symfony\Component\Notifier\Bridge\Mobyt\MobytTransportFactory; @@ -64,6 +65,7 @@ class Transport EsendexTransportFactory::class, SendinblueTransportFactory::class, DiscordTransportFactory::class, + GatewayAPITransportFactory::class, ]; private $factories; From 8de3bddb25b3a14ba29174f73ef0dbdf8a44b4f4 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 20:44:06 +0200 Subject: [PATCH 02/51] Make GatewayAPITransportFactory final --- .../Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php index b78d76027b42e..7605969fd37cf 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php @@ -20,7 +20,7 @@ * @author Piergiuseppe Longo * @experimental in 5.2 */ -class GatewayAPITransportFactory extends AbstractTransportFactory +final class GatewayAPITransportFactory extends AbstractTransportFactory { /** * @return GatewayAPITransport From 6b9eca0ae529dbd7fa01aca9c145bde0428989d7 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 20:45:27 +0200 Subject: [PATCH 03/51] Fix typo in gatewaypi --- .../Bridge/GatewayAPI/GatewayAPITransportFactory.php | 6 +++--- src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php index 7605969fd37cf..9bc24895d64b2 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php @@ -33,15 +33,15 @@ public function create(Dsn $dsn): TransportInterface $from = $dsn->getOption('from'); $port = $dsn->getPort(); - if ('gatewaypi' === $scheme) { + if ('gatewayapi' === $scheme) { return (new GatewayAPITransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); } - throw new UnsupportedSchemeException($dsn, 'gatewaypi', $this->getSupportedSchemes()); + throw new UnsupportedSchemeException($dsn, 'gatewayapi', $this->getSupportedSchemes()); } protected function getSupportedSchemes(): array { - return ['gatewaypi']; + return ['gatewayapi']; } } diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md index 27017fb421c8a..48c1847dadcf5 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md @@ -8,7 +8,7 @@ DSN example ``` // .env file -GATEWAYAPI_DSN=gatewaypi://TOKEN@default?from=FROM +GATEWAYAPI_DSN=gatewayapi://TOKEN@default?from=FROM ``` where: From 86018e7b7fb7aa9a43095ba6b22c49e1e9120d5b Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 21:44:59 +0200 Subject: [PATCH 04/51] Fix typo --- .../Notifier/Bridge/GatewayAPI/GatewayAPITransport.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php index 49bc463d14fdd..ca370575feea0 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php @@ -41,7 +41,7 @@ public function __construct(string $authToken, string $from, HttpClientInterface public function __toString(): string { - return sprintf('gatewaypi://%s?from=%s', $this->getEndpoint(), $this->from); + return sprintf('gatewayapi://%s?from=%s', $this->getEndpoint(), $this->from); } public function supports(MessageInterface $message): bool From 2a4c6a8e74371f6cc2ab993ffd20bb5c81517030 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 21:45:28 +0200 Subject: [PATCH 05/51] Update README.md --- src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md index 48c1847dadcf5..508974de7dccf 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md @@ -1,5 +1,5 @@ GatewayAPI Notifier -=============== +=================== Provides GatewayAPI integration for Symfony Notifier. From da125b569a5866d0146388d9fdfae17783ce2ca3 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 09:13:26 +0200 Subject: [PATCH 06/51] Rename GatewayAPI -> GatewayApi --- .../DependencyInjection/FrameworkExtension.php | 4 ++-- .../Resources/config/notifier_transports.php | 4 ++-- .../Bridge/{GatewayAPI => GatewayApi}/.gitattributes | 0 .../GatewayApiTransport.php} | 4 ++-- .../GatewayApiTransportFactory.php} | 8 ++++---- .../Notifier/Bridge/{GatewayAPI => GatewayApi}/LICENSE | 0 .../Notifier/Bridge/{GatewayAPI => GatewayApi}/README.md | 0 .../Bridge/{GatewayAPI => GatewayApi}/composer.json | 2 +- .../Bridge/{GatewayAPI => GatewayApi}/phpunit.xml.dist | 0 src/Symfony/Component/Notifier/Transport.php | 4 ++-- 10 files changed, 13 insertions(+), 13 deletions(-) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/.gitattributes (100%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI/GatewayAPITransport.php => GatewayApi/GatewayApiTransport.php} (95%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI/GatewayAPITransportFactory.php => GatewayApi/GatewayApiTransportFactory.php} (84%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/LICENSE (100%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/README.md (100%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/composer.json (92%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/phpunit.xml.dist (100%) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 2e2dc31a48870..ec1daef34c68a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -105,7 +105,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; -use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -2228,7 +2228,7 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $ SendinblueNotifierTransportFactory::class => 'notifier.transport_factory.sendinblue', DiscordTransportFactory::class => 'notifier.transport_factory.discord', LinkedInTransportFactory::class => 'notifier.transport_factory.linkedin', - GatewayAPITransportFactory::class => 'notifier.transport_factory.gatewayapi', + GatewayApiTransportFactory::class => 'notifier.transport_factory.gatewayapi', ]; foreach ($classToServices as $class => $service) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php index 31a0f48e0b14f..a4cd55d55125a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php @@ -15,7 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; -use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -116,7 +116,7 @@ ->parent('notifier.transport_factory.abstract') ->tag('chatter.transport_factory') - ->set('notifier.transport_factory.gatewayapi', GatewayAPITransportFactory::class) + ->set('notifier.transport_factory.gatewayapi', GatewayApiTransportFactory::class) ->parent('notifier.transport_factory.abstract') ->tag('texter.transport_factory') diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php similarity index 95% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php index ca370575feea0..ba59798086d6c 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Symfony\Component\Notifier\Bridge\GatewayAPI; +namespace Symfony\Component\Notifier\Bridge\GatewayApi; use Symfony\Component\Notifier\Exception\LogicException; use Symfony\Component\Notifier\Exception\TransportException; @@ -24,7 +24,7 @@ * @author Piergiuseppe Longo * @experimental in 5.2 */ -final class GatewayAPITransport extends AbstractTransport +final class GatewayApiTransport extends AbstractTransport { protected const HOST = 'gatewayapi.com'; diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php similarity index 84% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index 9bc24895d64b2..c00f463110484 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Symfony\Component\Notifier\Bridge\GatewayAPI; +namespace Symfony\Component\Notifier\Bridge\GatewayApi; use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; use Symfony\Component\Notifier\Transport\AbstractTransportFactory; @@ -20,10 +20,10 @@ * @author Piergiuseppe Longo * @experimental in 5.2 */ -final class GatewayAPITransportFactory extends AbstractTransportFactory +final class GatewayApiTransportFactory extends AbstractTransportFactory { /** - * @return GatewayAPITransport + * @return GatewayApiTransport */ public function create(Dsn $dsn): TransportInterface { @@ -34,7 +34,7 @@ public function create(Dsn $dsn): TransportInterface $port = $dsn->getPort(); if ('gatewayapi' === $scheme) { - return (new GatewayAPITransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); + return (new GatewayApiTransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); } throw new UnsupportedSchemeException($dsn, 'gatewayapi', $this->getSupportedSchemes()); diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE b/src/Symfony/Component/Notifier/Bridge/GatewayApi/LICENSE similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/LICENSE diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json similarity index 92% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index 52f792875c9e2..85f45f2210be2 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -22,7 +22,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Component\\Notifier\\Bridge\\GatewayAPI\\": "" + "Symfony\\Component\\Notifier\\Bridge\\GatewayApi\\": "" }, "exclude-from-classmap": [ "/Tests/" diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist b/src/Symfony/Component/Notifier/Bridge/GatewayApi/phpunit.xml.dist similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/phpunit.xml.dist diff --git a/src/Symfony/Component/Notifier/Transport.php b/src/Symfony/Component/Notifier/Transport.php index 7f156afbcb4b4..176b63c310034 100644 --- a/src/Symfony/Component/Notifier/Transport.php +++ b/src/Symfony/Component/Notifier/Transport.php @@ -15,7 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; -use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\Mattermost\MattermostTransportFactory; use Symfony\Component\Notifier\Bridge\Mobyt\MobytTransportFactory; @@ -65,7 +65,7 @@ class Transport EsendexTransportFactory::class, SendinblueTransportFactory::class, DiscordTransportFactory::class, - GatewayAPITransportFactory::class, + GatewayApiTransportFactory::class, ]; private $factories; From 8231389fa6d4933e4e8eaf39c9e627f1f12b878a Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:09:38 +0200 Subject: [PATCH 07/51] Add GatewayApiTransportFactory tests --- .../GatewayApi/GatewayApiTransportFactory.php | 9 ++++ .../Tests/GatewayApiTransportFactoryTest.php | 50 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index c00f463110484..fd732bea8f4c0 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Notifier\Bridge\GatewayApi; +use Symfony\Component\Notifier\Exception\IncompleteDsnException; use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; use Symfony\Component\Notifier\Transport\AbstractTransportFactory; use Symfony\Component\Notifier\Transport\Dsn; @@ -33,6 +34,14 @@ public function create(Dsn $dsn): TransportInterface $from = $dsn->getOption('from'); $port = $dsn->getPort(); + if (!$from) { + throw new IncompleteDsnException('Missing from.', $dsn->getOriginalDsn()); + } + + if (!$authToken) { + throw new IncompleteDsnException('Missing auth token.', $dsn->getOriginalDsn()); + } + if ('gatewayapi' === $scheme) { return (new GatewayApiTransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); } diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php new file mode 100644 index 0000000000000..44871bc8c9761 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -0,0 +1,50 @@ +initFactory(); + + $dsn = 'gatewayapi://token@default?from=Symfony'; + + $this->assertTrue($factory->supports(Dsn::fromString($dsn))); + } + + public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException(): void + { + $factory = $this->initFactory(); + $this->expectException(UnsupportedSchemeException::class); + $dsn = 'wrongGateway://token@default?from=Symfony'; + $factory->create(Dsn::fromString($dsn)); + } + + public function testCreateWithNoTokenThrowsIncompleteDsnException(): void + { + $factory = $this->initFactory(); + $this->expectException(IncompleteDsnException::class); + $dsn = 'gatewayapi://default?from=Symfony'; + $factory->create(Dsn::fromString($dsn)); + } + + public function testCreateWithNoFromShouldThrowsIncompleteDsnException(): void + { + $factory = $this->initFactory(); + $this->expectException(IncompleteDsnException::class); + $dsn = 'gatewayapi://token@default'; + $factory->create(Dsn::fromString($dsn)); + } + + private function initFactory(): GatewayApiTransportFactory + { + return new GatewayApiTransportFactory(); + } +} From f5a5f3b04983fefca6fff3734cf40a1094eaeabc Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:24:30 +0200 Subject: [PATCH 08/51] Add GatewayApiTransportTest testSend --- .../Tests/GatewayApiTransportTest.php | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php new file mode 100644 index 0000000000000..9f0554cea9e25 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -0,0 +1,46 @@ +createMock(ResponseInterface::class); + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + + $client = new MockHttpClient(static function () use ($response): ResponseInterface { + return $response; + }); + + $transport = $this->getTransport($client); + $message = new SmsMessage("3333333333", "Test Messgage"); + $sentMessage = $transport->send($message); + $this->assertNotNull($sentMessage); + } + + private function getTransport(MockHttpClient $client): GatewayApiTransport + { + return (new GatewayApiTransport( + 'authtoken', + 'Symfony', + $client + ))->setHost('host.test'); + } +} From c5dd5d8dfa4657abe150f745936eb435ac996a02 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:26:58 +0200 Subject: [PATCH 09/51] Add GatewayApiTransportTest testSupportsSmsMessage --- .../GatewayApi/Tests/GatewayApiTransportTest.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 9f0554cea9e25..761f37789a476 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -35,8 +35,19 @@ public function testSend(): void $this->assertNotNull($sentMessage); } - private function getTransport(MockHttpClient $client): GatewayApiTransport + public function testSupportsSmsMessage(): void { + $transport = $this->getTransport(); + $message = new SmsMessage("3333333333", "Test Messgage"); + $this->assertTrue($transport->supports($message)); + } + + private function getTransport(MockHttpClient $client = null): GatewayApiTransport + { + if($client == null) { + $this->createMock(ResponseInterface::class); + } + return (new GatewayApiTransport( 'authtoken', 'Symfony', From 3ec6c592682b5cadb996d30a73ac6c3252aad478 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:28:59 +0200 Subject: [PATCH 10/51] Add GatewayApiTransportTest testNotSupportsChatMessage --- .../Bridge/GatewayApi/Tests/GatewayApiTransportTest.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 761f37789a476..4083e39ce55c2 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -42,6 +42,13 @@ public function testSupportsSmsMessage(): void $this->assertTrue($transport->supports($message)); } + public function testNotSupportsChatMessage(): void + { + $transport = $this->getTransport(); + $message = new ChatMessage("3333333333"); + $this->assertFalse($transport->supports($message)); + } + private function getTransport(MockHttpClient $client = null): GatewayApiTransport { if($client == null) { From c10d7d6b13bf181b26c8cfd694dc7ac075f18fe9 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:30:29 +0200 Subject: [PATCH 11/51] Lint code --- .../GatewayApi/Tests/GatewayApiTransportTest.php | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 4083e39ce55c2..72404e65a0de6 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -5,15 +5,8 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransport; -use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransport; -use Symfony\Component\Notifier\Exception\LogicException; -use Symfony\Component\Notifier\Exception\TransportException; use Symfony\Component\Notifier\Message\ChatMessage; -use Symfony\Component\Notifier\Message\MessageInterface; -use Symfony\Component\Notifier\Message\MessageOptionsInterface; use Symfony\Component\Notifier\Message\SmsMessage; -use Symfony\Component\Notifier\Notification\Notification; -use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\HttpClient\ResponseInterface; final class GatewayApiTransportTest extends TestCase @@ -30,7 +23,7 @@ public function testSend(): void }); $transport = $this->getTransport($client); - $message = new SmsMessage("3333333333", "Test Messgage"); + $message = new SmsMessage('3333333333', 'Test Messgage'); $sentMessage = $transport->send($message); $this->assertNotNull($sentMessage); } @@ -38,20 +31,20 @@ public function testSend(): void public function testSupportsSmsMessage(): void { $transport = $this->getTransport(); - $message = new SmsMessage("3333333333", "Test Messgage"); + $message = new SmsMessage('3333333333', 'Test Messgage'); $this->assertTrue($transport->supports($message)); } public function testNotSupportsChatMessage(): void { $transport = $this->getTransport(); - $message = new ChatMessage("3333333333"); + $message = new ChatMessage('3333333333'); $this->assertFalse($transport->supports($message)); } private function getTransport(MockHttpClient $client = null): GatewayApiTransport { - if($client == null) { + if (null == $client) { $this->createMock(ResponseInterface::class); } From 56aefa1eb600feb69a22745c7d0d79f169a08c55 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 30 Oct 2020 23:59:03 +0100 Subject: [PATCH 12/51] Fix name and email in composer.json Co-authored-by: Tobias Nyholm --- .../Component/Notifier/Bridge/GatewayApi/composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index 85f45f2210be2..d1738c4b9672f 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -7,8 +7,8 @@ "license": "MIT", "authors": [ { - "name": "Piergiuseppe Longo", - "email": "piergiuseppe.longo@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", From 2575ca2b12bdb222336c9cb64e3c6efaacbdfea2 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 19:43:20 +0200 Subject: [PATCH 13/51] [Notifier] add support for gatewayapi-notifier --- .../FrameworkExtension.php | 2 + .../Resources/config/notifier_transports.php | 5 ++ .../Tests/Adapter/PdoDbalAdapterTest.php | 1 - .../Notifier/Bridge/GatewayAPI/.gitattributes | 3 + .../Bridge/GatewayAPI/GatewayAPITransport.php | 76 +++++++++++++++++++ .../GatewayAPI/GatewayAPITransportFactory.php | 47 ++++++++++++ .../Notifier/Bridge/GatewayAPI/LICENSE | 19 +++++ .../Notifier/Bridge/GatewayAPI/README.md | 26 +++++++ .../Notifier/Bridge/GatewayAPI/composer.json | 35 +++++++++ .../Bridge/GatewayAPI/phpunit.xml.dist | 31 ++++++++ src/Symfony/Component/Notifier/Transport.php | 2 + 11 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index c15c5d97e70e5..2e2dc31a48870 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -105,6 +105,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -2227,6 +2228,7 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $ SendinblueNotifierTransportFactory::class => 'notifier.transport_factory.sendinblue', DiscordTransportFactory::class => 'notifier.transport_factory.discord', LinkedInTransportFactory::class => 'notifier.transport_factory.linkedin', + GatewayAPITransportFactory::class => 'notifier.transport_factory.gatewayapi', ]; foreach ($classToServices as $class => $service) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php index cff7f0d0c91dc..31a0f48e0b14f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php @@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -115,6 +116,10 @@ ->parent('notifier.transport_factory.abstract') ->tag('chatter.transport_factory') + ->set('notifier.transport_factory.gatewayapi', GatewayAPITransportFactory::class) + ->parent('notifier.transport_factory.abstract') + ->tag('texter.transport_factory') + ->set('notifier.transport_factory.null', NullTransportFactory::class) ->parent('notifier.transport_factory.abstract') ->tag('chatter.transport_factory') diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php index 648e4313d8375..82441bdbc496d 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php @@ -15,7 +15,6 @@ use Doctrine\DBAL\Driver\AbstractMySQLDriver; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Schema\Schema; -use Doctrine\DBAL\Version; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\PdoAdapter; use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait; diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes new file mode 100644 index 0000000000000..ebb9287043dc4 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes @@ -0,0 +1,3 @@ +/Tests export-ignore +/phpunit.xml.dist export-ignore +/.gitignore export-ignore diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php new file mode 100644 index 0000000000000..49bc463d14fdd --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php @@ -0,0 +1,76 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\GatewayAPI; + +use Symfony\Component\Notifier\Exception\LogicException; +use Symfony\Component\Notifier\Exception\TransportException; +use Symfony\Component\Notifier\Message\MessageInterface; +use Symfony\Component\Notifier\Message\SentMessage; +use Symfony\Component\Notifier\Message\SmsMessage; +use Symfony\Component\Notifier\Transport\AbstractTransport; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; +use Symfony\Contracts\HttpClient\HttpClientInterface; + +/** + * @author Piergiuseppe Longo + * @experimental in 5.2 + */ +final class GatewayAPITransport extends AbstractTransport +{ + protected const HOST = 'gatewayapi.com'; + + private $authToken; + private $from; + + public function __construct(string $authToken, string $from, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null) + { + $this->authToken = $authToken; + $this->from = $from; + + parent::__construct($client, $dispatcher); + } + + public function __toString(): string + { + return sprintf('gatewaypi://%s?from=%s', $this->getEndpoint(), $this->from); + } + + public function supports(MessageInterface $message): bool + { + return $message instanceof SmsMessage; + } + + protected function doSend(MessageInterface $message): SentMessage + { + if (!$message instanceof SmsMessage) { + throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message))); + } + + $endpoint = sprintf('https://%s/rest/mtsms', $this->getEndpoint()); + + $response = $this->client->request('POST', $endpoint, [ + 'auth_basic' => [$this->authToken, ''], + 'json' => [ + 'sender' => $this->from, + 'recipients' => [['msisdn' => $message->getPhone()]], + 'message' => $message->getSubject(), + ], + ]); + + $statusCode = $response->getStatusCode(); + if (200 !== $statusCode) { + throw new TransportException(sprintf('Unable to send the SMS: error %d.', $statusCode), $response); + } + + return new SentMessage($message, (string) $this); + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php new file mode 100644 index 0000000000000..b78d76027b42e --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Notifier\Bridge\GatewayAPI; + +use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; +use Symfony\Component\Notifier\Transport\AbstractTransportFactory; +use Symfony\Component\Notifier\Transport\Dsn; +use Symfony\Component\Notifier\Transport\TransportInterface; + +/** + * @author Piergiuseppe Longo + * @experimental in 5.2 + */ +class GatewayAPITransportFactory extends AbstractTransportFactory +{ + /** + * @return GatewayAPITransport + */ + public function create(Dsn $dsn): TransportInterface + { + $scheme = $dsn->getScheme(); + $authToken = $dsn->getUser(); + $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); + $from = $dsn->getOption('from'); + $port = $dsn->getPort(); + + if ('gatewaypi' === $scheme) { + return (new GatewayAPITransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); + } + + throw new UnsupportedSchemeException($dsn, 'gatewaypi', $this->getSupportedSchemes()); + } + + protected function getSupportedSchemes(): array + { + return ['gatewaypi']; + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE new file mode 100644 index 0000000000000..5593b1d84f74a --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md new file mode 100644 index 0000000000000..27017fb421c8a --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md @@ -0,0 +1,26 @@ +GatewayAPI Notifier +=============== + +Provides GatewayAPI integration for Symfony Notifier. + +DSN example +----------- + +``` +// .env file +GATEWAYAPI_DSN=gatewaypi://TOKEN@default?from=FROM +``` + +where: + - `TOKEN` is API Token (OAuth) + - `FROM` is sender name + +See your account info at https://gatewayapi.com + +Resources +--------- + + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json new file mode 100644 index 0000000000000..52f792875c9e2 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json @@ -0,0 +1,35 @@ +{ + "name": "symfony/gatewayapi-notifier", + "type": "symfony-bridge", + "description": "Symfony GatewayAPI Notifier Bridge", + "keywords": ["sms", "gatewayapi", "notifier"], + "homepage": "https://gatewayapi.com", + "license": "MIT", + "authors": [ + { + "name": "Piergiuseppe Longo", + "email": "piergiuseppe.longo@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2.5", + "symfony/http-client": "^4.3|^5.0", + "symfony/notifier": "^5.2" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\Bridge\\GatewayAPI\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-version": "5.2" + } +} diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist new file mode 100644 index 0000000000000..d541cf2e205e8 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist @@ -0,0 +1,31 @@ + + + + + + + + + + ./Tests/ + + + + + + ./ + + ./Resources + ./Tests + ./vendor + + + + diff --git a/src/Symfony/Component/Notifier/Transport.php b/src/Symfony/Component/Notifier/Transport.php index 3477477461d66..7f156afbcb4b4 100644 --- a/src/Symfony/Component/Notifier/Transport.php +++ b/src/Symfony/Component/Notifier/Transport.php @@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\Mattermost\MattermostTransportFactory; use Symfony\Component\Notifier\Bridge\Mobyt\MobytTransportFactory; @@ -64,6 +65,7 @@ class Transport EsendexTransportFactory::class, SendinblueTransportFactory::class, DiscordTransportFactory::class, + GatewayAPITransportFactory::class, ]; private $factories; From ef3e5091a6011fca0e836bf7d889173fe0ddfeba Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 20:44:06 +0200 Subject: [PATCH 14/51] Make GatewayAPITransportFactory final --- .../Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php index b78d76027b42e..7605969fd37cf 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php @@ -20,7 +20,7 @@ * @author Piergiuseppe Longo * @experimental in 5.2 */ -class GatewayAPITransportFactory extends AbstractTransportFactory +final class GatewayAPITransportFactory extends AbstractTransportFactory { /** * @return GatewayAPITransport From 10c82696a7c2b6f31e886c7c12e177ace465dcd5 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 20:45:27 +0200 Subject: [PATCH 15/51] Fix typo in gatewaypi --- .../Bridge/GatewayAPI/GatewayAPITransportFactory.php | 6 +++--- src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php index 7605969fd37cf..9bc24895d64b2 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php @@ -33,15 +33,15 @@ public function create(Dsn $dsn): TransportInterface $from = $dsn->getOption('from'); $port = $dsn->getPort(); - if ('gatewaypi' === $scheme) { + if ('gatewayapi' === $scheme) { return (new GatewayAPITransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); } - throw new UnsupportedSchemeException($dsn, 'gatewaypi', $this->getSupportedSchemes()); + throw new UnsupportedSchemeException($dsn, 'gatewayapi', $this->getSupportedSchemes()); } protected function getSupportedSchemes(): array { - return ['gatewaypi']; + return ['gatewayapi']; } } diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md index 27017fb421c8a..48c1847dadcf5 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md @@ -8,7 +8,7 @@ DSN example ``` // .env file -GATEWAYAPI_DSN=gatewaypi://TOKEN@default?from=FROM +GATEWAYAPI_DSN=gatewayapi://TOKEN@default?from=FROM ``` where: From 633941bd1d47d7f17def8b4cb7dee3f2ab8381f9 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 21:44:59 +0200 Subject: [PATCH 16/51] Fix typo --- .../Notifier/Bridge/GatewayAPI/GatewayAPITransport.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php index 49bc463d14fdd..ca370575feea0 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php @@ -41,7 +41,7 @@ public function __construct(string $authToken, string $from, HttpClientInterface public function __toString(): string { - return sprintf('gatewaypi://%s?from=%s', $this->getEndpoint(), $this->from); + return sprintf('gatewayapi://%s?from=%s', $this->getEndpoint(), $this->from); } public function supports(MessageInterface $message): bool From 9ce1bab8d766188bd866e6b7a4c5c7e6d63507ac Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 22 Oct 2020 21:45:28 +0200 Subject: [PATCH 17/51] Update README.md --- src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md index 48c1847dadcf5..508974de7dccf 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md +++ b/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md @@ -1,5 +1,5 @@ GatewayAPI Notifier -=============== +=================== Provides GatewayAPI integration for Symfony Notifier. From c7f7d5f99422413addd0db41c630d18a345c7876 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 09:13:26 +0200 Subject: [PATCH 18/51] Rename GatewayAPI -> GatewayApi --- .../DependencyInjection/FrameworkExtension.php | 4 ++-- .../Resources/config/notifier_transports.php | 4 ++-- .../Bridge/{GatewayAPI => GatewayApi}/.gitattributes | 0 .../GatewayApiTransport.php} | 4 ++-- .../GatewayApiTransportFactory.php} | 8 ++++---- .../Notifier/Bridge/{GatewayAPI => GatewayApi}/LICENSE | 0 .../Notifier/Bridge/{GatewayAPI => GatewayApi}/README.md | 0 .../Bridge/{GatewayAPI => GatewayApi}/composer.json | 2 +- .../Bridge/{GatewayAPI => GatewayApi}/phpunit.xml.dist | 0 src/Symfony/Component/Notifier/Transport.php | 4 ++-- 10 files changed, 13 insertions(+), 13 deletions(-) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/.gitattributes (100%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI/GatewayAPITransport.php => GatewayApi/GatewayApiTransport.php} (95%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI/GatewayAPITransportFactory.php => GatewayApi/GatewayApiTransportFactory.php} (84%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/LICENSE (100%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/README.md (100%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/composer.json (92%) rename src/Symfony/Component/Notifier/Bridge/{GatewayAPI => GatewayApi}/phpunit.xml.dist (100%) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 2e2dc31a48870..ec1daef34c68a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -105,7 +105,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; -use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -2228,7 +2228,7 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $ SendinblueNotifierTransportFactory::class => 'notifier.transport_factory.sendinblue', DiscordTransportFactory::class => 'notifier.transport_factory.discord', LinkedInTransportFactory::class => 'notifier.transport_factory.linkedin', - GatewayAPITransportFactory::class => 'notifier.transport_factory.gatewayapi', + GatewayApiTransportFactory::class => 'notifier.transport_factory.gatewayapi', ]; foreach ($classToServices as $class => $service) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php index 31a0f48e0b14f..a4cd55d55125a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_transports.php @@ -15,7 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; -use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransportFactory; use Symfony\Component\Notifier\Bridge\GoogleChat\GoogleChatTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransportFactory; @@ -116,7 +116,7 @@ ->parent('notifier.transport_factory.abstract') ->tag('chatter.transport_factory') - ->set('notifier.transport_factory.gatewayapi', GatewayAPITransportFactory::class) + ->set('notifier.transport_factory.gatewayapi', GatewayApiTransportFactory::class) ->parent('notifier.transport_factory.abstract') ->tag('texter.transport_factory') diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/.gitattributes rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php similarity index 95% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php index ca370575feea0..ba59798086d6c 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Symfony\Component\Notifier\Bridge\GatewayAPI; +namespace Symfony\Component\Notifier\Bridge\GatewayApi; use Symfony\Component\Notifier\Exception\LogicException; use Symfony\Component\Notifier\Exception\TransportException; @@ -24,7 +24,7 @@ * @author Piergiuseppe Longo * @experimental in 5.2 */ -final class GatewayAPITransport extends AbstractTransport +final class GatewayApiTransport extends AbstractTransport { protected const HOST = 'gatewayapi.com'; diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php similarity index 84% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index 9bc24895d64b2..c00f463110484 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/GatewayAPITransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Symfony\Component\Notifier\Bridge\GatewayAPI; +namespace Symfony\Component\Notifier\Bridge\GatewayApi; use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; use Symfony\Component\Notifier\Transport\AbstractTransportFactory; @@ -20,10 +20,10 @@ * @author Piergiuseppe Longo * @experimental in 5.2 */ -final class GatewayAPITransportFactory extends AbstractTransportFactory +final class GatewayApiTransportFactory extends AbstractTransportFactory { /** - * @return GatewayAPITransport + * @return GatewayApiTransport */ public function create(Dsn $dsn): TransportInterface { @@ -34,7 +34,7 @@ public function create(Dsn $dsn): TransportInterface $port = $dsn->getPort(); if ('gatewayapi' === $scheme) { - return (new GatewayAPITransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); + return (new GatewayApiTransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); } throw new UnsupportedSchemeException($dsn, 'gatewayapi', $this->getSupportedSchemes()); diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE b/src/Symfony/Component/Notifier/Bridge/GatewayApi/LICENSE similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/LICENSE rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/LICENSE diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/README.md rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json similarity index 92% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index 52f792875c9e2..85f45f2210be2 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -22,7 +22,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Component\\Notifier\\Bridge\\GatewayAPI\\": "" + "Symfony\\Component\\Notifier\\Bridge\\GatewayApi\\": "" }, "exclude-from-classmap": [ "/Tests/" diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist b/src/Symfony/Component/Notifier/Bridge/GatewayApi/phpunit.xml.dist similarity index 100% rename from src/Symfony/Component/Notifier/Bridge/GatewayAPI/phpunit.xml.dist rename to src/Symfony/Component/Notifier/Bridge/GatewayApi/phpunit.xml.dist diff --git a/src/Symfony/Component/Notifier/Transport.php b/src/Symfony/Component/Notifier/Transport.php index 7f156afbcb4b4..176b63c310034 100644 --- a/src/Symfony/Component/Notifier/Transport.php +++ b/src/Symfony/Component/Notifier/Transport.php @@ -15,7 +15,7 @@ use Symfony\Component\Notifier\Bridge\Esendex\EsendexTransportFactory; use Symfony\Component\Notifier\Bridge\Firebase\FirebaseTransportFactory; use Symfony\Component\Notifier\Bridge\FreeMobile\FreeMobileTransportFactory; -use Symfony\Component\Notifier\Bridge\GatewayAPI\GatewayAPITransportFactory; +use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransportFactory; use Symfony\Component\Notifier\Bridge\Infobip\InfobipTransportFactory; use Symfony\Component\Notifier\Bridge\Mattermost\MattermostTransportFactory; use Symfony\Component\Notifier\Bridge\Mobyt\MobytTransportFactory; @@ -65,7 +65,7 @@ class Transport EsendexTransportFactory::class, SendinblueTransportFactory::class, DiscordTransportFactory::class, - GatewayAPITransportFactory::class, + GatewayApiTransportFactory::class, ]; private $factories; From 622a8bf92659444547283d98a545a0b3b831eace Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:09:38 +0200 Subject: [PATCH 19/51] Add GatewayApiTransportFactory tests --- .../GatewayApi/GatewayApiTransportFactory.php | 9 ++++ .../Tests/GatewayApiTransportFactoryTest.php | 50 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index c00f463110484..fd732bea8f4c0 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Notifier\Bridge\GatewayApi; +use Symfony\Component\Notifier\Exception\IncompleteDsnException; use Symfony\Component\Notifier\Exception\UnsupportedSchemeException; use Symfony\Component\Notifier\Transport\AbstractTransportFactory; use Symfony\Component\Notifier\Transport\Dsn; @@ -33,6 +34,14 @@ public function create(Dsn $dsn): TransportInterface $from = $dsn->getOption('from'); $port = $dsn->getPort(); + if (!$from) { + throw new IncompleteDsnException('Missing from.', $dsn->getOriginalDsn()); + } + + if (!$authToken) { + throw new IncompleteDsnException('Missing auth token.', $dsn->getOriginalDsn()); + } + if ('gatewayapi' === $scheme) { return (new GatewayApiTransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); } diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php new file mode 100644 index 0000000000000..44871bc8c9761 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -0,0 +1,50 @@ +initFactory(); + + $dsn = 'gatewayapi://token@default?from=Symfony'; + + $this->assertTrue($factory->supports(Dsn::fromString($dsn))); + } + + public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException(): void + { + $factory = $this->initFactory(); + $this->expectException(UnsupportedSchemeException::class); + $dsn = 'wrongGateway://token@default?from=Symfony'; + $factory->create(Dsn::fromString($dsn)); + } + + public function testCreateWithNoTokenThrowsIncompleteDsnException(): void + { + $factory = $this->initFactory(); + $this->expectException(IncompleteDsnException::class); + $dsn = 'gatewayapi://default?from=Symfony'; + $factory->create(Dsn::fromString($dsn)); + } + + public function testCreateWithNoFromShouldThrowsIncompleteDsnException(): void + { + $factory = $this->initFactory(); + $this->expectException(IncompleteDsnException::class); + $dsn = 'gatewayapi://token@default'; + $factory->create(Dsn::fromString($dsn)); + } + + private function initFactory(): GatewayApiTransportFactory + { + return new GatewayApiTransportFactory(); + } +} From 4d9ef5cb567f19680d7fc8a580e926413f849b24 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:24:30 +0200 Subject: [PATCH 20/51] Add GatewayApiTransportTest testSend --- .../Tests/GatewayApiTransportTest.php | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php new file mode 100644 index 0000000000000..9f0554cea9e25 --- /dev/null +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -0,0 +1,46 @@ +createMock(ResponseInterface::class); + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + + $client = new MockHttpClient(static function () use ($response): ResponseInterface { + return $response; + }); + + $transport = $this->getTransport($client); + $message = new SmsMessage("3333333333", "Test Messgage"); + $sentMessage = $transport->send($message); + $this->assertNotNull($sentMessage); + } + + private function getTransport(MockHttpClient $client): GatewayApiTransport + { + return (new GatewayApiTransport( + 'authtoken', + 'Symfony', + $client + ))->setHost('host.test'); + } +} From 2faa1ded6e88205504efb4e16b0c1195d7176d42 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:26:58 +0200 Subject: [PATCH 21/51] Add GatewayApiTransportTest testSupportsSmsMessage --- .../GatewayApi/Tests/GatewayApiTransportTest.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 9f0554cea9e25..761f37789a476 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -35,8 +35,19 @@ public function testSend(): void $this->assertNotNull($sentMessage); } - private function getTransport(MockHttpClient $client): GatewayApiTransport + public function testSupportsSmsMessage(): void { + $transport = $this->getTransport(); + $message = new SmsMessage("3333333333", "Test Messgage"); + $this->assertTrue($transport->supports($message)); + } + + private function getTransport(MockHttpClient $client = null): GatewayApiTransport + { + if($client == null) { + $this->createMock(ResponseInterface::class); + } + return (new GatewayApiTransport( 'authtoken', 'Symfony', From fc8fba8d42ee8487525ddb57e79d20261de6d6b9 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:28:59 +0200 Subject: [PATCH 22/51] Add GatewayApiTransportTest testNotSupportsChatMessage --- .../Bridge/GatewayApi/Tests/GatewayApiTransportTest.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 761f37789a476..4083e39ce55c2 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -42,6 +42,13 @@ public function testSupportsSmsMessage(): void $this->assertTrue($transport->supports($message)); } + public function testNotSupportsChatMessage(): void + { + $transport = $this->getTransport(); + $message = new ChatMessage("3333333333"); + $this->assertFalse($transport->supports($message)); + } + private function getTransport(MockHttpClient $client = null): GatewayApiTransport { if($client == null) { From 0c03fa2e1adc2fb8c825e53df18096e1fa8b5ecc Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 23 Oct 2020 10:30:29 +0200 Subject: [PATCH 23/51] Lint code --- .../GatewayApi/Tests/GatewayApiTransportTest.php | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 4083e39ce55c2..72404e65a0de6 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -5,15 +5,8 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Notifier\Bridge\GatewayApi\GatewayApiTransport; -use Symfony\Component\Notifier\Bridge\LinkedIn\LinkedInTransport; -use Symfony\Component\Notifier\Exception\LogicException; -use Symfony\Component\Notifier\Exception\TransportException; use Symfony\Component\Notifier\Message\ChatMessage; -use Symfony\Component\Notifier\Message\MessageInterface; -use Symfony\Component\Notifier\Message\MessageOptionsInterface; use Symfony\Component\Notifier\Message\SmsMessage; -use Symfony\Component\Notifier\Notification\Notification; -use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\HttpClient\ResponseInterface; final class GatewayApiTransportTest extends TestCase @@ -30,7 +23,7 @@ public function testSend(): void }); $transport = $this->getTransport($client); - $message = new SmsMessage("3333333333", "Test Messgage"); + $message = new SmsMessage('3333333333', 'Test Messgage'); $sentMessage = $transport->send($message); $this->assertNotNull($sentMessage); } @@ -38,20 +31,20 @@ public function testSend(): void public function testSupportsSmsMessage(): void { $transport = $this->getTransport(); - $message = new SmsMessage("3333333333", "Test Messgage"); + $message = new SmsMessage('3333333333', 'Test Messgage'); $this->assertTrue($transport->supports($message)); } public function testNotSupportsChatMessage(): void { $transport = $this->getTransport(); - $message = new ChatMessage("3333333333"); + $message = new ChatMessage('3333333333'); $this->assertFalse($transport->supports($message)); } private function getTransport(MockHttpClient $client = null): GatewayApiTransport { - if($client == null) { + if (null == $client) { $this->createMock(ResponseInterface::class); } From 88d533a022d4377a58b2824914cdd84350239ba9 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 30 Oct 2020 23:59:03 +0100 Subject: [PATCH 24/51] Fix name and email in composer.json Co-authored-by: Tobias Nyholm --- .../Component/Notifier/Bridge/GatewayApi/composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index 85f45f2210be2..d1738c4b9672f 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -7,8 +7,8 @@ "license": "MIT", "authors": [ { - "name": "Piergiuseppe Longo", - "email": "piergiuseppe.longo@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", From 1010e7c5878e8fa463f955c1872b0d9bdd608c4c Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Mon, 7 Dec 2020 09:49:22 +0100 Subject: [PATCH 25/51] Remove extra from composer.json --- src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index d1738c4b9672f..886409e2111aa 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -29,7 +29,4 @@ ] }, "minimum-stability": "dev", - "extra": { - "branch-version": "5.2" - } } From e2fe4fb5a901222a65a44300dbb74ee8d2e2920a Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Mon, 7 Dec 2020 09:50:06 +0100 Subject: [PATCH 26/51] Update version tag in GatewayApiTransport --- .../Notifier/Bridge/GatewayApi/GatewayApiTransport.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php index ba59798086d6c..af10c741b2c62 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php @@ -22,7 +22,7 @@ /** * @author Piergiuseppe Longo - * @experimental in 5.2 + * @experimental in 5.3 */ final class GatewayApiTransport extends AbstractTransport { From d0e94dbadf7abb72a19a824f51e24c88203f4ea5 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Mon, 7 Dec 2020 09:50:54 +0100 Subject: [PATCH 27/51] Add /.gitattributes export-ignore in .gitattributes --- src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes index ebb9287043dc4..55a1071913aab 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes @@ -1,3 +1,4 @@ /Tests export-ignore /phpunit.xml.dist export-ignore /.gitignore export-ignore +/.gitattributes export-ignore From 9c482dc5fc36c7e42d5bc7b4139721c2ca905319 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Mon, 7 Dec 2020 09:55:40 +0100 Subject: [PATCH 28/51] Update UnsupportedSchemeException --- .../Notifier/Exception/UnsupportedSchemeException.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Notifier/Exception/UnsupportedSchemeException.php b/src/Symfony/Component/Notifier/Exception/UnsupportedSchemeException.php index 2546b0f1c60b1..13926d5f39309 100644 --- a/src/Symfony/Component/Notifier/Exception/UnsupportedSchemeException.php +++ b/src/Symfony/Component/Notifier/Exception/UnsupportedSchemeException.php @@ -86,6 +86,10 @@ class UnsupportedSchemeException extends LogicException 'class' => Bridge\Discord\DiscordTransportFactory::class, 'package' => 'symfony/discord-notifier', ], + 'gatewayapi' => [ + 'class' => Bridge\GatewayApi\GatewayApiTransportFactory::class, + 'package' => 'symfony/gatewayapi-notifier', + ], ]; /** From 716c3b684386558248b1a14b6ebb220c8cff1bf0 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Mon, 7 Dec 2020 09:57:33 +0100 Subject: [PATCH 29/51] Add required space in phpdoc --- .../Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php | 1 + .../Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php index af10c741b2c62..b950c534dae24 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php @@ -22,6 +22,7 @@ /** * @author Piergiuseppe Longo + * * @experimental in 5.3 */ final class GatewayApiTransport extends AbstractTransport diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index fd732bea8f4c0..dbc1166b6a0c0 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -19,6 +19,7 @@ /** * @author Piergiuseppe Longo + * * @experimental in 5.2 */ final class GatewayApiTransportFactory extends AbstractTransportFactory From 628fb465464ecbcdeae44bf7d1e9653ef75ce8c4 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Mon, 7 Dec 2020 09:57:49 +0100 Subject: [PATCH 30/51] Update GatewayApiTransportFactory.php Update version tag in GatewayApiTransportFactory --- .../Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index dbc1166b6a0c0..f63eb47f880a7 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -20,7 +20,7 @@ /** * @author Piergiuseppe Longo * - * @experimental in 5.2 + * @experimental in 5.3 */ final class GatewayApiTransportFactory extends AbstractTransportFactory { From 48002b5f3ae2d46c5eddb7b2f1225fe8ef71e75b Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 18:56:38 +0100 Subject: [PATCH 31/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md Co-authored-by: Oskar Stark --- src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md index 508974de7dccf..cde9b6941f4be 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md @@ -1,7 +1,7 @@ GatewayAPI Notifier =================== -Provides GatewayAPI integration for Symfony Notifier. +Provides [GatewayAPI](https://gatewayapi.com) integration for Symfony Notifier. DSN example ----------- From f6e7cbeb4ac76116608fb6c50793a8318e2fb62e Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 18:57:18 +0100 Subject: [PATCH 32/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md Co-authored-by: Oskar Stark --- src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md b/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md index cde9b6941f4be..083fe1490e0da 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/README.md @@ -7,7 +7,6 @@ DSN example ----------- ``` -// .env file GATEWAYAPI_DSN=gatewayapi://TOKEN@default?from=FROM ``` From 8c7e6d143462c4c4432e64c611f3384683f6126b Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 19:01:37 +0100 Subject: [PATCH 33/51] Update authors in composer.json --- .../Component/Notifier/Bridge/GatewayApi/composer.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index ab4c13b24fe5e..933a3453c3d08 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -10,6 +10,10 @@ "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Piergiuseppe Longo", + "email": "piergiuseppe.longo@gmail.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" From 3370b926ff401b3043be94c229202091b0896aa3 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 19:02:20 +0100 Subject: [PATCH 34/51] Remove :void in GatewayApiTransportTest --- .../Bridge/GatewayApi/Tests/GatewayApiTransportTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 72404e65a0de6..0a34c1ff198f7 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -11,7 +11,7 @@ final class GatewayApiTransportTest extends TestCase { - public function testSend(): void + public function testSend() { $response = $this->createMock(ResponseInterface::class); $response->expects($this->exactly(2)) @@ -28,14 +28,14 @@ public function testSend(): void $this->assertNotNull($sentMessage); } - public function testSupportsSmsMessage(): void + public function testSupportsSmsMessage() { $transport = $this->getTransport(); $message = new SmsMessage('3333333333', 'Test Messgage'); $this->assertTrue($transport->supports($message)); } - public function testNotSupportsChatMessage(): void + public function testNotSupportsChatMessage() { $transport = $this->getTransport(); $message = new ChatMessage('3333333333'); From 9c084ffd38b2d5eac185837aeed8b405dbea9c9e Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 19:02:41 +0100 Subject: [PATCH 35/51] Remove :void in GatewayApiTransportFactoryTest --- .../GatewayApi/Tests/GatewayApiTransportFactoryTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php index 44871bc8c9761..f784ddd980498 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -10,7 +10,7 @@ final class GatewayApiTransportFactoryTest extends TestCase { - public function testSupportsGatewayApiScheme(): void + public function testSupportsGatewayApiScheme() { $factory = $this->initFactory(); @@ -19,7 +19,7 @@ public function testSupportsGatewayApiScheme(): void $this->assertTrue($factory->supports(Dsn::fromString($dsn))); } - public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException(): void + public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException() { $factory = $this->initFactory(); $this->expectException(UnsupportedSchemeException::class); @@ -27,7 +27,7 @@ public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException(): $factory->create(Dsn::fromString($dsn)); } - public function testCreateWithNoTokenThrowsIncompleteDsnException(): void + public function testCreateWithNoTokenThrowsIncompleteDsnException() { $factory = $this->initFactory(); $this->expectException(IncompleteDsnException::class); @@ -35,7 +35,7 @@ public function testCreateWithNoTokenThrowsIncompleteDsnException(): void $factory->create(Dsn::fromString($dsn)); } - public function testCreateWithNoFromShouldThrowsIncompleteDsnException(): void + public function testCreateWithNoFromShouldThrowsIncompleteDsnException() { $factory = $this->initFactory(); $this->expectException(IncompleteDsnException::class); From afff051976fb974fadae656c6b1ed5359e5e69e2 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 19:42:35 +0100 Subject: [PATCH 36/51] Rename initFactory to createFactory --- .../Tests/GatewayApiTransportFactoryTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php index f784ddd980498..bc7d637092831 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -12,7 +12,7 @@ final class GatewayApiTransportFactoryTest extends TestCase { public function testSupportsGatewayApiScheme() { - $factory = $this->initFactory(); + $factory = $this->createFactory(); $dsn = 'gatewayapi://token@default?from=Symfony'; @@ -21,7 +21,7 @@ public function testSupportsGatewayApiScheme() public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException() { - $factory = $this->initFactory(); + $factory = $this->createFactory(); $this->expectException(UnsupportedSchemeException::class); $dsn = 'wrongGateway://token@default?from=Symfony'; $factory->create(Dsn::fromString($dsn)); @@ -29,7 +29,7 @@ public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException() public function testCreateWithNoTokenThrowsIncompleteDsnException() { - $factory = $this->initFactory(); + $factory = $this->createFactory(); $this->expectException(IncompleteDsnException::class); $dsn = 'gatewayapi://default?from=Symfony'; $factory->create(Dsn::fromString($dsn)); @@ -37,13 +37,13 @@ public function testCreateWithNoTokenThrowsIncompleteDsnException() public function testCreateWithNoFromShouldThrowsIncompleteDsnException() { - $factory = $this->initFactory(); + $factory = $this->createFactory(); $this->expectException(IncompleteDsnException::class); $dsn = 'gatewayapi://token@default'; $factory->create(Dsn::fromString($dsn)); } - private function initFactory(): GatewayApiTransportFactory + private function createFactory(): GatewayApiTransportFactory { return new GatewayApiTransportFactory(); } From fd7144b4313ce71dbd9119c1f19525a196eacd19 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 19:44:57 +0100 Subject: [PATCH 37/51] Remove not used createMock from getTransport --- .../Bridge/GatewayApi/Tests/GatewayApiTransportTest.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 0a34c1ff198f7..352c6ba4a7cde 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -44,10 +44,6 @@ public function testNotSupportsChatMessage() private function getTransport(MockHttpClient $client = null): GatewayApiTransport { - if (null == $client) { - $this->createMock(ResponseInterface::class); - } - return (new GatewayApiTransport( 'authtoken', 'Symfony', From 0d2b49161094aa590ae18b63d3f9cb955dabf43f Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Thu, 10 Dec 2020 22:04:25 +0100 Subject: [PATCH 38/51] Update .gitattributes --- src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes index 55a1071913aab..84c7add058fb5 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes @@ -1,4 +1,4 @@ /Tests export-ignore /phpunit.xml.dist export-ignore -/.gitignore export-ignore /.gitattributes export-ignore +/.gitignore export-ignore From f9bbdb7d12c5430f769b81c4d73fc63b2c17051a Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:05:48 +0100 Subject: [PATCH 39/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json Co-authored-by: Oskar Stark --- src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index 933a3453c3d08..184366a722b1d 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -22,7 +22,7 @@ "require": { "php": ">=7.2.5", "symfony/http-client": "^4.3|^5.0", - "symfony/notifier": "^5.2" + "symfony/notifier": "^5.3" }, "autoload": { "psr-4": { From 9506724ffdea93364ac909cce45f85a555de0d88 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:05:58 +0100 Subject: [PATCH 40/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json Co-authored-by: Oskar Stark --- .../Component/Notifier/Bridge/GatewayApi/composer.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index 184366a722b1d..6f1c837913f3a 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -25,9 +25,7 @@ "symfony/notifier": "^5.3" }, "autoload": { - "psr-4": { - "Symfony\\Component\\Notifier\\Bridge\\GatewayApi\\": "" - }, + "psr-4": { "Symfony\\Component\\Notifier\\Bridge\\GatewayApi\\": "" }, "exclude-from-classmap": [ "/Tests/" ] From 8ae74ff6e1d77043ecb6f569a4a738bcdb37e999 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:06:19 +0100 Subject: [PATCH 41/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php Co-authored-by: Oskar Stark --- .../GatewayApi/Tests/GatewayApiTransportFactoryTest.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php index bc7d637092831..39573e3c07184 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -14,9 +14,7 @@ public function testSupportsGatewayApiScheme() { $factory = $this->createFactory(); - $dsn = 'gatewayapi://token@default?from=Symfony'; - - $this->assertTrue($factory->supports(Dsn::fromString($dsn))); + $this->assertTrue($factory->supports(Dsn::fromString('gatewayapi://token@host.test?from=Symfony'))); } public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException() From 0e069b21aac4e0a54531017d7ae646914a553421 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:06:48 +0100 Subject: [PATCH 42/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php Co-authored-by: Oskar Stark --- .../GatewayApi/Tests/GatewayApiTransportFactoryTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php index 39573e3c07184..4f28ddd2bc566 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -36,9 +36,10 @@ public function testCreateWithNoTokenThrowsIncompleteDsnException() public function testCreateWithNoFromShouldThrowsIncompleteDsnException() { $factory = $this->createFactory(); + $this->expectException(IncompleteDsnException::class); - $dsn = 'gatewayapi://token@default'; - $factory->create(Dsn::fromString($dsn)); + + $factory->create(Dsn::fromString('gatewayapi://token@host.test')); } private function createFactory(): GatewayApiTransportFactory From 23fc6efdbfdccff49e90ceaea26c75283af00054 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:07:08 +0100 Subject: [PATCH 43/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php Co-authored-by: Oskar Stark --- .../Bridge/GatewayApi/Tests/GatewayApiTransportTest.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php index 352c6ba4a7cde..bad09db594560 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportTest.php @@ -44,10 +44,6 @@ public function testNotSupportsChatMessage() private function getTransport(MockHttpClient $client = null): GatewayApiTransport { - return (new GatewayApiTransport( - 'authtoken', - 'Symfony', - $client - ))->setHost('host.test'); + return (new GatewayApiTransport('authtoken', 'Symfony', $client))->setHost('host.test'); } } From d41d30eb0e74ea70c4e8fbbf1066d2df03f53d03 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:07:36 +0100 Subject: [PATCH 44/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php Co-authored-by: Oskar Stark --- .../GatewayApi/Tests/GatewayApiTransportFactoryTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php index 4f28ddd2bc566..1bd9dae5b6066 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -28,9 +28,10 @@ public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException() public function testCreateWithNoTokenThrowsIncompleteDsnException() { $factory = $this->createFactory(); + $this->expectException(IncompleteDsnException::class); - $dsn = 'gatewayapi://default?from=Symfony'; - $factory->create(Dsn::fromString($dsn)); + + $factory->create(Dsn::fromString('gatewayapi://host.test?from=Symfony')); } public function testCreateWithNoFromShouldThrowsIncompleteDsnException() From 09613da4fe70d90da90098153a4722be1af2a622 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:07:53 +0100 Subject: [PATCH 45/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php Co-authored-by: Oskar Stark --- .../GatewayApi/Tests/GatewayApiTransportFactoryTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php index 1bd9dae5b6066..fc96cce0e525f 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -20,9 +20,10 @@ public function testSupportsGatewayApiScheme() public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException() { $factory = $this->createFactory(); + $this->expectException(UnsupportedSchemeException::class); - $dsn = 'wrongGateway://token@default?from=Symfony'; - $factory->create(Dsn::fromString($dsn)); + + $factory->create(Dsn::fromString( 'somethingElse://token@default?from=Symfony')); } public function testCreateWithNoTokenThrowsIncompleteDsnException() From fe9473dbc716b12328da8fda5449208765e181b1 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:24:41 +0100 Subject: [PATCH 46/51] Use UnsupportedMessageTypeException instead of LogicException in GatewayApiTransport --- .../Notifier/Bridge/GatewayApi/GatewayApiTransport.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php index b950c534dae24..80ea6097a8415 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php @@ -13,6 +13,7 @@ use Symfony\Component\Notifier\Exception\LogicException; use Symfony\Component\Notifier\Exception\TransportException; +use Symfony\Component\Notifier\Exception\UnsupportedMessageTypeException; use Symfony\Component\Notifier\Message\MessageInterface; use Symfony\Component\Notifier\Message\SentMessage; use Symfony\Component\Notifier\Message\SmsMessage; @@ -53,7 +54,7 @@ public function supports(MessageInterface $message): bool protected function doSend(MessageInterface $message): SentMessage { if (!$message instanceof SmsMessage) { - throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message))); + throw new UnsupportedMessageTypeException( __CLASS__, SmsMessage::class, $message); } $endpoint = sprintf('https://%s/rest/mtsms', $this->getEndpoint()); From 139728fe1d43c17a07875d5b15ee11bf6c889454 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:28:40 +0100 Subject: [PATCH 47/51] Add first check if schema is supported in GatewayApiTransportFactory --- .../Bridge/GatewayApi/GatewayApiTransportFactory.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index f63eb47f880a7..f4360057a0e11 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -30,6 +30,11 @@ final class GatewayApiTransportFactory extends AbstractTransportFactory public function create(Dsn $dsn): TransportInterface { $scheme = $dsn->getScheme(); + + if ('gatewayapi' !== $scheme) { + throw new UnsupportedSchemeException($dsn, 'gatewayapi', $this->getSupportedSchemes()); + } + $authToken = $dsn->getUser(); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $from = $dsn->getOption('from'); From 0a848b0c541be77089774b0ea4427357441ae074 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:42:40 +0100 Subject: [PATCH 48/51] Update GatewayApiTransportFactory.php --- .../GatewayApi/GatewayApiTransportFactory.php | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php index f4360057a0e11..0290606aee435 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransportFactory.php @@ -35,24 +35,17 @@ public function create(Dsn $dsn): TransportInterface throw new UnsupportedSchemeException($dsn, 'gatewayapi', $this->getSupportedSchemes()); } - $authToken = $dsn->getUser(); - $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); + $authToken = $this->getUser($dsn); $from = $dsn->getOption('from'); - $port = $dsn->getPort(); if (!$from) { throw new IncompleteDsnException('Missing from.', $dsn->getOriginalDsn()); } - if (!$authToken) { - throw new IncompleteDsnException('Missing auth token.', $dsn->getOriginalDsn()); - } - - if ('gatewayapi' === $scheme) { - return (new GatewayApiTransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); - } + $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); + $port = $dsn->getPort(); - throw new UnsupportedSchemeException($dsn, 'gatewayapi', $this->getSupportedSchemes()); + return (new GatewayApiTransport($authToken, $from, $this->client, $this->dispatcher))->setHost($host)->setPort($port); } protected function getSupportedSchemes(): array From 24fac37624a9b9ae5b8cafcf2be9f4e9fda0ef26 Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Tue, 15 Dec 2020 12:46:03 +0100 Subject: [PATCH 49/51] Update src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php Co-authored-by: Oskar Stark --- .../Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php index fc96cce0e525f..45be523be17bb 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/Tests/GatewayApiTransportFactoryTest.php @@ -23,7 +23,7 @@ public function testUnSupportedGatewayShouldThrowsUnsupportedSchemeException() $this->expectException(UnsupportedSchemeException::class); - $factory->create(Dsn::fromString( 'somethingElse://token@default?from=Symfony')); + $factory->create(Dsn::fromString('somethingElse://token@default?from=Symfony')); } public function testCreateWithNoTokenThrowsIncompleteDsnException() From 7bb93b8cf8c9ee19e090f7bb6728b269d749143f Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 18 Dec 2020 14:32:59 +0100 Subject: [PATCH 50/51] Update composer.json --- src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json index 6f1c837913f3a..e05e395b2d1d6 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/composer.json @@ -22,7 +22,7 @@ "require": { "php": ">=7.2.5", "symfony/http-client": "^4.3|^5.0", - "symfony/notifier": "^5.3" + "symfony/notifier": "~5.3.0" }, "autoload": { "psr-4": { "Symfony\\Component\\Notifier\\Bridge\\GatewayApi\\": "" }, From ffbd0de09ecfc398c4210f932fd20e97b5e05d7f Mon Sep 17 00:00:00 2001 From: Piergiuseppe Longo Date: Fri, 18 Dec 2020 14:36:10 +0100 Subject: [PATCH 51/51] Fix code style issue in GatewayApiTransport --- .../Notifier/Bridge/GatewayApi/GatewayApiTransport.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php index 80ea6097a8415..2e0c92d97a031 100644 --- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/GatewayApiTransport.php @@ -11,7 +11,6 @@ namespace Symfony\Component\Notifier\Bridge\GatewayApi; -use Symfony\Component\Notifier\Exception\LogicException; use Symfony\Component\Notifier\Exception\TransportException; use Symfony\Component\Notifier\Exception\UnsupportedMessageTypeException; use Symfony\Component\Notifier\Message\MessageInterface; @@ -54,7 +53,7 @@ public function supports(MessageInterface $message): bool protected function doSend(MessageInterface $message): SentMessage { if (!$message instanceof SmsMessage) { - throw new UnsupportedMessageTypeException( __CLASS__, SmsMessage::class, $message); + throw new UnsupportedMessageTypeException(__CLASS__, SmsMessage::class, $message); } $endpoint = sprintf('https://%s/rest/mtsms', $this->getEndpoint());