Add support for Pushover

This commit is contained in:
James Cole
2024-12-09 07:34:01 +01:00
parent 94085ee940
commit c35ff3174a
10 changed files with 213 additions and 2 deletions

View File

@@ -189,6 +189,14 @@ NTFY_AUTH_ENABLED=false
NTFY_AUTH_USERNAME=
NTFY_AUTH_PASSWORD=
#
# Pushover notification Application/API Token and User token.
# Used if you want to receive notifications over pushover.
# Both must be configured for this channel to work.
#
PUSHOVER_APP_TOKEN=
PUSHOVER_USER_TOKEN=
# Firefly III can send you the following messages.
SEND_ERROR_MESSAGE=true

View File

@@ -32,6 +32,7 @@ use FireflyIII\Notifications\Admin\VersionCheckResult;
use FireflyIII\Notifications\Test\TestNotificationDiscord;
use FireflyIII\Notifications\Test\TestNotificationEmail;
use FireflyIII\Notifications\Test\TestNotificationNtfy;
use FireflyIII\Notifications\Test\TestNotificationPushover;
use FireflyIII\Notifications\Test\TestNotificationSlack;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Facades\Log;
@@ -134,6 +135,9 @@ class AdminEventHandler
case 'ntfy':
$class = TestNotificationNtfy::class;
break;
case 'pushover':
$class = TestNotificationPushover::class;
break;
default:
app('log')->error(sprintf('Unknown channel "%s" in sendTestNotification method.', $event->channel));
return;

View File

@@ -65,6 +65,12 @@ class NotificationController extends Controller
$forcedAvailability['ntfy'] = false;
}
// validate pushover
if('' === (string)config('services.pushover.token') || '' === (string)config('services.pushover.user_token')) {
Log::warning('No Pushover token, channel is disabled.');
$forcedAvailability['pushover'] = false;
}
return view('admin.notifications.index', compact('title', 'subTitle', 'forcedAvailability', 'mainTitleIcon', 'subTitleIcon', 'channels', 'slackUrl', 'notifications'));
}
@@ -101,6 +107,7 @@ class NotificationController extends Controller
break;
case 'email':
case 'slack':
case 'pushover':
case 'ntfy':
/** @var User $user */
$user = auth()->user();

View File

@@ -0,0 +1,115 @@
<?php
/*
* TestNotification.php
* Copyright (c) 2022 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Notifications\Test;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Log;
use NotificationChannels\Pushover\PushoverChannel;
use NotificationChannels\Pushover\PushoverMessage;
use Ntfy\Message;
use Wijourdil\NtfyNotificationChannel\Channels\NtfyChannel;
//use Illuminate\Notifications\Slack\SlackMessage;
/**
* Class TestNotification
*/
class TestNotificationPushover extends Notification
{
use Queueable;
private string $address;
/**
* Create a new notification instance.
*/
public function __construct(string $address)
{
$this->address = $address;
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
* @return array
*/
public function toArray($notifiable)
{
return [
];
}
public function toPushover(mixed $notifiable): PushoverMessage
{
Log::debug('Now in toPushover()');
return PushoverMessage::create((string)trans('email.admin_test_message', ['channel' => 'Pushover']))
->title((string)trans('email.admin_test_subject'));
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
* @return MailMessage
*/
public function toMail($notifiable)
{
}
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
*/
public function toSlack($notifiable) {
}
/**
* Get the notification's delivery channels.
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
* @param mixed $notifiable
*
* @return array
*/
public function via($notifiable)
{
return [PushoverChannel::class];
}
}

View File

@@ -66,6 +66,7 @@ use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use Laravel\Passport\HasApiTokens;
use Laravel\Passport\Token;
use NotificationChannels\Pushover\PushoverReceiver;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
@@ -101,6 +102,12 @@ class User extends Authenticatable
throw new NotFoundHttpException();
}
public function routeNotificationForPushover()
{
return PushoverReceiver::withUserKey((string) config('services.pushover.user_token'))
->withApplicationToken((string) config('services.pushover.token'));
//return (string) config('services.pushover.token');
}
/**
* Link to accounts.

View File

@@ -90,6 +90,7 @@
"jc5/recovery": "^2",
"laravel-json-api/laravel": "^4.0",
"laravel-json-api/non-eloquent": "^4.0",
"laravel-notification-channels/pushover": "^4.0",
"laravel/framework": "^11",
"laravel/passport": "^12",
"laravel/sanctum": "^4",

64
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "a2800d2f481f640d8cd058b3b31e8962",
"content-hash": "a739782c3c7121d1e9c0d31105b5974a",
"packages": [
{
"name": "bacon/bacon-qr-code",
@@ -2546,6 +2546,68 @@
},
"time": "2024-06-20T19:46:31+00:00"
},
{
"name": "laravel-notification-channels/pushover",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/laravel-notification-channels/pushover.git",
"reference": "31ff8c124f54de69673145c90836dd6cf7a01223"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-notification-channels/pushover/zipball/31ff8c124f54de69673145c90836dd6cf7a01223",
"reference": "31ff8c124f54de69673145c90836dd6cf7a01223",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "^7.0.1",
"illuminate/notifications": "^8.0 || ^9.0 || ^10.0 || ^11.0",
"illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0",
"php": "^8.1"
},
"require-dev": {
"dms/phpunit-arraysubset-asserts": ">=0.1.0",
"mockery/mockery": "^1.3.1",
"orchestra/testbench": "^8.0 || ^9.0",
"phpunit/phpunit": "^9.3 || ^10.5"
},
"suggest": {
"ext-exif": "Required for image attachment support"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"NotificationChannels\\Pushover\\PushoverServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"NotificationChannels\\Pushover\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Casper Boone",
"email": "mail@casperboone.nl",
"homepage": "https://casperboone.nl",
"role": "Developer"
}
],
"description": "Pushover notifications for Laravel.",
"homepage": "https://github.com/laravel-notification-channels/pushover",
"support": {
"issues": "https://github.com/laravel-notification-channels/pushover/issues",
"source": "https://github.com/laravel-notification-channels/pushover/tree/4.0.0"
},
"time": "2024-03-20T08:14:56+00:00"
},
{
"name": "laravel/framework",
"version": "v11.34.0",

View File

@@ -25,7 +25,7 @@ return [
'email' => ['enabled' => true, 'ui_configurable' => 0,],
'slack' => ['enabled' => true, 'ui_configurable' => 1,],
'ntfy' => ['enabled' => true, 'ui_configurable' => 0,],
'pushover' => ['enabled' => false, 'ui_configurable' => 0,],
'pushover' => ['enabled' => true, 'ui_configurable' => 0,],
'gotify' => ['enabled' => false, 'ui_configurable' => 0,],
'pushbullet' => ['enabled' => false, 'ui_configurable' => 0,],
],

View File

@@ -61,4 +61,8 @@ return [
'mandrill' => [
'secret' => env('MANDRILL_SECRET'),
],
'pushover' => [
'token' => env('PUSHOVER_APP_TOKEN', ''),
'user_token' => env('PUSHOVER_USER_TOKEN', ''),
],
];

View File

@@ -2509,6 +2509,9 @@ return [
'test_notification_channel_name_email' => 'Test email',
'test_notification_channel_name_slack' => 'Test Slack',
'test_notification_channel_name_ntfy' => 'Test Ntfy.sh',
'test_notification_channel_name_pushover' => 'Test Pushover',
'test_notification_channel_name_gotify' => 'Test Gotify',
'test_notification_channel_name_pushbullet' => 'Test Pushbullet',
'split_transaction_title' => 'Description of the split transaction',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',