From fa3be01ce96da148279710a2a68c1e0030092939 Mon Sep 17 00:00:00 2001 From: Dominik Schwind Date: Sat, 20 Jan 2024 15:55:39 +0100 Subject: [PATCH] [Notifier] Updated the NTFY notifier to run without a user parameter --- .../Notifier/Bridge/Ntfy/NtfyTransport.php | 6 +++-- .../Bridge/Ntfy/NtfyTransportFactory.php | 5 +++- .../Ntfy/Tests/NtfyTransportFactoryTest.php | 4 +++ .../Bridge/Ntfy/Tests/NtfyTransportTest.php | 26 +++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransport.php b/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransport.php index d6120c1447fe4..aafdcd5b8a27e 100644 --- a/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransport.php +++ b/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransport.php @@ -84,6 +84,8 @@ protected function doSend(MessageInterface $message): SentMessage if (null !== $this->user && null !== $this->password) { $headers['Authorization'] = 'Basic '.rtrim(base64_encode($this->user.':'.$this->password), '='); + } elseif (null !== $this->password) { + $headers['Authorization'] = 'Bearer '.$this->password; } $response = $this->client->request('POST', ($this->secureHttp ? 'https' : 'http').'://'.$this->getEndpoint(), [ @@ -115,8 +117,8 @@ protected function doSend(MessageInterface $message): SentMessage public function supports(MessageInterface $message): bool { - return $message instanceof PushMessage && - (null === $message->getOptions() || $message->getOptions() instanceof NtfyOptions); + return $message instanceof PushMessage + && (null === $message->getOptions() || $message->getOptions() instanceof NtfyOptions); } public function __toString(): string diff --git a/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransportFactory.php index b469090f8f0e0..2cb2282e4f768 100644 --- a/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/Ntfy/NtfyTransportFactory.php @@ -41,8 +41,11 @@ public function create(Dsn $dsn): TransportInterface $transport->setPort($port); } - if (!empty($user = $dsn->getUser()) && !empty($password = $dsn->getPassword())) { + if (!empty($user = $dsn->getUser())) { $transport->setUser($user); + } + + if (!empty($password = $dsn->getPassword())) { $transport->setPassword($password); } diff --git a/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportFactoryTest.php b/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportFactoryTest.php index d54fdd122f880..35a77a54b379a 100644 --- a/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportFactoryTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportFactoryTest.php @@ -31,6 +31,10 @@ public static function createProvider(): iterable 'ntfy://ntfy.sh/test', 'ntfy://user:password@default/test', ]; + yield [ + 'ntfy://ntfy.sh/test', + 'ntfy://:password@default/test', + ]; yield [ 'ntfy://ntfy.sh:8888/test', 'ntfy://user:password@default:8888/test?secureHttp=off', diff --git a/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportTest.php index cb8485750c463..cc5fa2b67adf2 100644 --- a/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Ntfy/Tests/NtfyTransportTest.php @@ -85,6 +85,32 @@ public function testSend() $this->assertSame('2BYIwRmvBKcv', $sentMessage->getMessageId()); } + public function testSendWithPassword() + { + $response = $this->createMock(ResponseInterface::class); + $response->expects($this->exactly(2)) + ->method('getStatusCode') + ->willReturn(200); + $response->expects($this->once()) + ->method('getContent') + ->willReturn(json_encode(['id' => '2BYIwRmvBKcv', 'event' => 'message'])); + + $client = new MockHttpClient(function (string $method, string $url, array $options = []) use ($response): ResponseInterface { + $expectedBody = json_encode(['topic' => 'test', 'title' => 'Hello', 'message' => 'World']); + $expectedAuthorization = 'Authorization: Bearer testtokentesttoken'; + $this->assertJsonStringEqualsJsonString($expectedBody, $options['body']); + $this->assertTrue(\in_array($expectedAuthorization, $options['headers'], true)); + + return $response; + }); + + $transport = $this->createTransport($client)->setPassword('testtokentesttoken'); + + $sentMessage = $transport->send(new PushMessage('Hello', 'World')); + + $this->assertSame('2BYIwRmvBKcv', $sentMessage->getMessageId()); + } + public function testSendWithUserAndPassword() { $response = $this->createMock(ResponseInterface::class);