| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2024-12-14 05:45:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  | /* | 
					
						
							|  |  |  |  * ReturnsSettings.php | 
					
						
							|  |  |  |  * Copyright (c) 2024 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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use FireflyIII\Exceptions\FireflyException; | 
					
						
							|  |  |  | use FireflyIII\Support\Facades\FireflyConfig; | 
					
						
							| 
									
										
										
										
											2024-12-14 06:30:27 +01:00
										 |  |  | use FireflyIII\Support\Facades\Preferences; | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  | use FireflyIII\User; | 
					
						
							| 
									
										
										
										
											2025-02-05 18:37:00 +01:00
										 |  |  | use Illuminate\Support\Facades\Log; | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | class ReturnsSettings | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public static function getSettings(string $channel, string $type, ?User $user): array | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ('ntfy' === $channel) { | 
					
						
							|  |  |  |             return self::getNtfySettings($type, $user); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-12-14 05:45:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  |         throw new FireflyException(sprintf('Cannot handle channel "%s"', $channel)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-04 15:16:11 +01:00
										 |  |  |     private static function getNtfySettings(string $type, ?User $user): array | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2025-02-05 18:37:00 +01:00
										 |  |  |         Log::debug(sprintf('Getting Ntfy settings for %s and user #%d', $type, $user?->id)); | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  |         $settings = [ | 
					
						
							|  |  |  |             'ntfy_server' => 'https://ntfy.sh', | 
					
						
							|  |  |  |             'ntfy_topic'  => '', | 
					
						
							|  |  |  |             'ntfy_auth'   => false, | 
					
						
							|  |  |  |             'ntfy_user'   => '', | 
					
						
							|  |  |  |             'ntfy_pass'   => '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2025-05-27 17:06:15 +02:00
										 |  |  |         if ('user' === $type && $user instanceof User) { | 
					
						
							| 
									
										
										
										
											2024-12-14 06:30:27 +01:00
										 |  |  |             $settings['ntfy_server'] = Preferences::getEncryptedForUser($user, 'ntfy_server', 'https://ntfy.sh')->data; | 
					
						
							|  |  |  |             $settings['ntfy_topic']  = Preferences::getEncryptedForUser($user, 'ntfy_topic', '')->data; | 
					
						
							| 
									
										
										
										
											2025-03-13 20:23:53 +01:00
										 |  |  |             $settings['ntfy_auth']   = '1' === Preferences::getForUser($user, 'ntfy_auth', false)->data; | 
					
						
							| 
									
										
										
										
											2024-12-14 06:30:27 +01:00
										 |  |  |             $settings['ntfy_user']   = Preferences::getEncryptedForUser($user, 'ntfy_user', '')->data; | 
					
						
							|  |  |  |             $settings['ntfy_pass']   = Preferences::getEncryptedForUser($user, 'ntfy_pass', '')->data; | 
					
						
							| 
									
										
										
										
											2025-02-05 18:37:00 +01:00
										 |  |  |             Log::debug(sprintf('Auth is %s, user = "%s"', var_export($settings['ntfy_auth'], true), $settings['ntfy_user'])); | 
					
						
							| 
									
										
										
										
											2024-12-14 06:30:27 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  |         if ('owner' === $type) { | 
					
						
							|  |  |  |             $settings['ntfy_server'] = FireflyConfig::getEncrypted('ntfy_server', 'https://ntfy.sh')->data; | 
					
						
							|  |  |  |             $settings['ntfy_topic']  = FireflyConfig::getEncrypted('ntfy_topic', '')->data; | 
					
						
							|  |  |  |             $settings['ntfy_auth']   = FireflyConfig::get('ntfy_auth', false)->data; | 
					
						
							|  |  |  |             $settings['ntfy_user']   = FireflyConfig::getEncrypted('ntfy_user', '')->data; | 
					
						
							|  |  |  |             $settings['ntfy_pass']   = FireflyConfig::getEncrypted('ntfy_pass', '')->data; | 
					
						
							| 
									
										
										
										
											2025-02-05 18:37:00 +01:00
										 |  |  |             Log::debug(sprintf('Auth is %s, user = "%s"', var_export($settings['ntfy_auth'], true), $settings['ntfy_user'])); | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-12-14 05:45:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-14 07:05:08 +01:00
										 |  |  |         // overrule config.
 | 
					
						
							|  |  |  |         config(['ntfy-notification-channel.server' => $settings['ntfy_server']]); | 
					
						
							|  |  |  |         config(['ntfy-notification-channel.topic' => $settings['ntfy_topic']]); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-03 14:56:06 +01:00
										 |  |  |         if (true === $settings['ntfy_auth']) { | 
					
						
							| 
									
										
										
										
											2024-12-14 07:05:08 +01:00
										 |  |  |             // overrule auth as well.
 | 
					
						
							|  |  |  |             config(['ntfy-notification-channel.authentication.enabled' => true]); | 
					
						
							|  |  |  |             config(['ntfy-notification-channel.authentication.username' => $settings['ntfy_user']]); | 
					
						
							|  |  |  |             config(['ntfy-notification-channel.authentication.password' => $settings['ntfy_pass']]); | 
					
						
							| 
									
										
										
										
											2025-02-05 18:37:00 +01:00
										 |  |  |             Log::debug('Authentication enabled for Ntfy.'); | 
					
						
							| 
									
										
										
										
											2024-12-14 07:05:08 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-02-05 18:37:00 +01:00
										 |  |  |         Log::debug('Return ntfy settings.'); | 
					
						
							| 
									
										
										
										
											2024-12-14 07:05:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 07:23:46 +01:00
										 |  |  |         return $settings; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |