From 323765110c036d0230061d188fe0f2c4db5f4bd4 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 13 Jan 2023 19:20:55 -0500 Subject: [PATCH] Enable calendar export for public_calendar = true --- src/Module/Calendar/Export.php | 27 ++++++++++++++++++++++----- src/Module/Calendar/Show.php | 2 +- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Module/Calendar/Export.php b/src/Module/Calendar/Export.php index 68c9369279..3d45c7f928 100644 --- a/src/Module/Calendar/Export.php +++ b/src/Module/Calendar/Export.php @@ -23,11 +23,14 @@ namespace Friendica\Module\Calendar; use Friendica\App; use Friendica\BaseModule; +use Friendica\Content\Feature; use Friendica\Core\L10n; use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Model\Event; +use Friendica\Model\Profile; use Friendica\Model\User; use Friendica\Module\Response; +use Friendica\Module\Security\Login; use Friendica\Navigation\SystemMessages; use Friendica\Network\HTTPException; use Friendica\Util\Profiler; @@ -47,25 +50,39 @@ class Export extends BaseModule protected $session; /** @var SystemMessages */ protected $sysMessages; + /** @var App */ + protected $app; - public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IHandleUserSessions $session, SystemMessages $sysMessages, array $server, array $parameters = []) + public function __construct(App $app, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IHandleUserSessions $session, SystemMessages $sysMessages, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); $this->session = $session; $this->sysMessages = $sysMessages; + $this->app = $app; } protected function rawContent(array $request = []) { - if (!$this->session->getLocalUserId()) { - throw new HTTPException\UnauthorizedException($this->t('Permission denied.')); + $nickname = $this->parameters['nickname'] ?? null; + if (!$nickname) { + throw new HTTPException\BadRequestException(); } - $owner = User::getByNickname($this->parameters['nickname'], ['uid']); - if (empty($owner)) { + $owner = Profile::load($this->app, $nickname, false); + if (!$owner || $owner['account_expired'] || $owner['account_removed']) { throw new HTTPException\NotFoundException($this->t('User not found.')); } + + if (!$this->session->isAuthenticated() && $owner['hidewall']) { + $this->baseUrl->redirect('profile/' . $nickname . '/restricted'); + } + + if (!$this->session->isAuthenticated() && !Feature::isEnabled($owner['uid'], 'public_calendar')) { + $this->sysMessages->addNotice($this->t('Permission denied.')); + $this->baseUrl->redirect('profile/' . $nickname); + } + $ownerUid = $owner['uid']; $format = $this->parameters['format'] ?: static::DEFAULT_EXPORT; diff --git a/src/Module/Calendar/Show.php b/src/Module/Calendar/Show.php index 09c319ac9d..e5e7c2444f 100644 --- a/src/Module/Calendar/Show.php +++ b/src/Module/Calendar/Show.php @@ -64,7 +64,7 @@ class Show extends BaseModule protected function content(array $request = []): string { - $nickname = $this->parameters['nickname'] ?? $this->app->getLoggedInUserNickname(); + $nickname = $this->parameters['nickname'] ?? $this->session->getLocalUserNickname(); if (!$nickname) { throw new HTTPException\UnauthorizedException(); }