mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-21 11:45:14 +00:00
Add support for Pushover
This commit is contained in:
@@ -189,6 +189,14 @@ NTFY_AUTH_ENABLED=false
|
|||||||
NTFY_AUTH_USERNAME=
|
NTFY_AUTH_USERNAME=
|
||||||
NTFY_AUTH_PASSWORD=
|
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.
|
# Firefly III can send you the following messages.
|
||||||
SEND_ERROR_MESSAGE=true
|
SEND_ERROR_MESSAGE=true
|
||||||
|
|
||||||
|
@@ -32,6 +32,7 @@ use FireflyIII\Notifications\Admin\VersionCheckResult;
|
|||||||
use FireflyIII\Notifications\Test\TestNotificationDiscord;
|
use FireflyIII\Notifications\Test\TestNotificationDiscord;
|
||||||
use FireflyIII\Notifications\Test\TestNotificationEmail;
|
use FireflyIII\Notifications\Test\TestNotificationEmail;
|
||||||
use FireflyIII\Notifications\Test\TestNotificationNtfy;
|
use FireflyIII\Notifications\Test\TestNotificationNtfy;
|
||||||
|
use FireflyIII\Notifications\Test\TestNotificationPushover;
|
||||||
use FireflyIII\Notifications\Test\TestNotificationSlack;
|
use FireflyIII\Notifications\Test\TestNotificationSlack;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -134,6 +135,9 @@ class AdminEventHandler
|
|||||||
case 'ntfy':
|
case 'ntfy':
|
||||||
$class = TestNotificationNtfy::class;
|
$class = TestNotificationNtfy::class;
|
||||||
break;
|
break;
|
||||||
|
case 'pushover':
|
||||||
|
$class = TestNotificationPushover::class;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
app('log')->error(sprintf('Unknown channel "%s" in sendTestNotification method.', $event->channel));
|
app('log')->error(sprintf('Unknown channel "%s" in sendTestNotification method.', $event->channel));
|
||||||
return;
|
return;
|
||||||
|
@@ -65,6 +65,12 @@ class NotificationController extends Controller
|
|||||||
$forcedAvailability['ntfy'] = false;
|
$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'));
|
return view('admin.notifications.index', compact('title', 'subTitle', 'forcedAvailability', 'mainTitleIcon', 'subTitleIcon', 'channels', 'slackUrl', 'notifications'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,6 +107,7 @@ class NotificationController extends Controller
|
|||||||
break;
|
break;
|
||||||
case 'email':
|
case 'email':
|
||||||
case 'slack':
|
case 'slack':
|
||||||
|
case 'pushover':
|
||||||
case 'ntfy':
|
case 'ntfy':
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
115
app/Notifications/Test/TestNotificationPushover.php
Normal file
115
app/Notifications/Test/TestNotificationPushover.php
Normal 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];
|
||||||
|
}
|
||||||
|
}
|
@@ -66,6 +66,7 @@ use Illuminate\Support\Collection;
|
|||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Laravel\Passport\HasApiTokens;
|
use Laravel\Passport\HasApiTokens;
|
||||||
use Laravel\Passport\Token;
|
use Laravel\Passport\Token;
|
||||||
|
use NotificationChannels\Pushover\PushoverReceiver;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -101,6 +102,12 @@ class User extends Authenticatable
|
|||||||
|
|
||||||
throw new NotFoundHttpException();
|
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.
|
* Link to accounts.
|
||||||
|
@@ -90,6 +90,7 @@
|
|||||||
"jc5/recovery": "^2",
|
"jc5/recovery": "^2",
|
||||||
"laravel-json-api/laravel": "^4.0",
|
"laravel-json-api/laravel": "^4.0",
|
||||||
"laravel-json-api/non-eloquent": "^4.0",
|
"laravel-json-api/non-eloquent": "^4.0",
|
||||||
|
"laravel-notification-channels/pushover": "^4.0",
|
||||||
"laravel/framework": "^11",
|
"laravel/framework": "^11",
|
||||||
"laravel/passport": "^12",
|
"laravel/passport": "^12",
|
||||||
"laravel/sanctum": "^4",
|
"laravel/sanctum": "^4",
|
||||||
|
64
composer.lock
generated
64
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "a2800d2f481f640d8cd058b3b31e8962",
|
"content-hash": "a739782c3c7121d1e9c0d31105b5974a",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bacon/bacon-qr-code",
|
"name": "bacon/bacon-qr-code",
|
||||||
@@ -2546,6 +2546,68 @@
|
|||||||
},
|
},
|
||||||
"time": "2024-06-20T19:46:31+00:00"
|
"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",
|
"name": "laravel/framework",
|
||||||
"version": "v11.34.0",
|
"version": "v11.34.0",
|
||||||
|
@@ -25,7 +25,7 @@ return [
|
|||||||
'email' => ['enabled' => true, 'ui_configurable' => 0,],
|
'email' => ['enabled' => true, 'ui_configurable' => 0,],
|
||||||
'slack' => ['enabled' => true, 'ui_configurable' => 1,],
|
'slack' => ['enabled' => true, 'ui_configurable' => 1,],
|
||||||
'ntfy' => ['enabled' => true, 'ui_configurable' => 0,],
|
'ntfy' => ['enabled' => true, 'ui_configurable' => 0,],
|
||||||
'pushover' => ['enabled' => false, 'ui_configurable' => 0,],
|
'pushover' => ['enabled' => true, 'ui_configurable' => 0,],
|
||||||
'gotify' => ['enabled' => false, 'ui_configurable' => 0,],
|
'gotify' => ['enabled' => false, 'ui_configurable' => 0,],
|
||||||
'pushbullet' => ['enabled' => false, 'ui_configurable' => 0,],
|
'pushbullet' => ['enabled' => false, 'ui_configurable' => 0,],
|
||||||
],
|
],
|
||||||
|
@@ -61,4 +61,8 @@ return [
|
|||||||
'mandrill' => [
|
'mandrill' => [
|
||||||
'secret' => env('MANDRILL_SECRET'),
|
'secret' => env('MANDRILL_SECRET'),
|
||||||
],
|
],
|
||||||
|
'pushover' => [
|
||||||
|
'token' => env('PUSHOVER_APP_TOKEN', ''),
|
||||||
|
'user_token' => env('PUSHOVER_USER_TOKEN', ''),
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
@@ -2509,6 +2509,9 @@ return [
|
|||||||
'test_notification_channel_name_email' => 'Test email',
|
'test_notification_channel_name_email' => 'Test email',
|
||||||
'test_notification_channel_name_slack' => 'Test Slack',
|
'test_notification_channel_name_slack' => 'Test Slack',
|
||||||
'test_notification_channel_name_ntfy' => 'Test Ntfy.sh',
|
'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' => '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.',
|
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
|
||||||
|
Reference in New Issue
Block a user