. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Admin; use FireflyIII\Events\AdminRequestedTestMessage; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Middleware\IsDemoUser; use FireflyIII\Support\Facades\FireflyConfig; use FireflyIII\Support\Notifications\UrlValidator; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Support\Facades\Log; use Illuminate\View\View; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; /** * Class HomeController. */ class HomeController extends Controller { /** * ConfigurationController constructor. * */ public function __construct() { parent::__construct(); $this->middleware(IsDemoUser::class)->except(['index']); } /** * Index of the admin. * * @return Factory|View * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function index() { Log::channel('audit')->info('User visits admin index.'); $title = (string)trans('firefly.administration'); $mainTitleIcon = 'fa-hand-spock-o'; $email = auth()->user()->email; $pref = app('preferences')->get('remote_guard_alt_email'); if (null !== $pref && is_string($pref->data)) { $email = $pref->data; } // admin notification settings: $notifications = []; foreach (config('firefly.admin_notifications') as $item) { $notifications[$item] = FireflyConfig::get(sprintf('notification_%s', $item), true)->data; } $slackUrl = FireflyConfig::get('slack_webhook_url', '')->data; return view('admin.index', compact('title', 'mainTitleIcon', 'email', 'notifications', 'slackUrl')); } /** * @param Request $request * * @return RedirectResponse */ public function notifications(Request $request): RedirectResponse { foreach (config('firefly.admin_notifications') as $item) { $value = false; if ($request->has(sprintf('notification_%s', $item))) { $value = true; } FireflyConfig::set(sprintf('notification_%s', $item), $value); } $url = (string)$request->get('slackUrl'); if ('' === $url) { FireflyConfig::delete('slack_webhook_url'); } if (UrlValidator::isValidWebhookURL($url)) { FireflyConfig::set('slack_webhook_url', $url); } session()->flash('success', (string)trans('firefly.notification_settings_saved')); return redirect(route('admin.index')); } /** * Send a test message to the admin. * * @param Request $request * * @return RedirectResponse|Redirector */ public function testMessage(Request $request) { Log::channel('audit')->info('User sends test message.'); /** @var User $user */ $user = auth()->user(); Log::debug('Now in testMessage() controller.'); event(new AdminRequestedTestMessage($user)); session()->flash('info', (string)trans('firefly.send_test_triggered')); return redirect(route('admin.index')); } }