From a1e6e13a9f44236b23b5b9e0d5559a59deb45011 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 30 Oct 2022 15:50:39 -0400 Subject: [PATCH] Move remote follow module to profile folder --- src/Model/Profile.php | 2 +- src/Module/{ => Profile}/RemoteFollow.php | 59 ++++++++++++----------- static/routes.config.php | 10 ++-- 3 files changed, 38 insertions(+), 33 deletions(-) rename src/Module/{ => Profile}/RemoteFollow.php (67%) diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 2496199bd..8538bfde2 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -335,7 +335,7 @@ class Profile if (!$visitor_is_authenticated) { // Remote follow is only available for local profiles if (!empty($profile['nickname']) && strpos($profile_url, DI::baseUrl()->get()) === 0) { - $follow_link = 'remote_follow/' . $profile['nickname']; + $follow_link = 'profile/' . $profile['nickname'] . '/remote_follow'; } } else { if ($visitor_is_following) { diff --git a/src/Module/RemoteFollow.php b/src/Module/Profile/RemoteFollow.php similarity index 67% rename from src/Module/RemoteFollow.php rename to src/Module/Profile/RemoteFollow.php index ce5c6f60e..7111146a2 100644 --- a/src/Module/RemoteFollow.php +++ b/src/Module/Profile/RemoteFollow.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Module; +namespace Friendica\Module\Profile; use Friendica\App; use Friendica\App\Page; @@ -30,11 +30,14 @@ use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Search; +use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Core\System; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Profile; use Friendica\Model\User; +use Friendica\Module\Response; +use Friendica\Navigation\SystemMessages; use Friendica\Network\HTTPException; use Friendica\Network\Probe; use Friendica\Util\Profiler; @@ -45,54 +48,61 @@ use Psr\Log\LoggerInterface; */ class RemoteFollow extends BaseModule { - /** @var array */ - protected $owner; + /** @var SystemMessages */ + private $systemMessages; /** @var Page */ protected $page; + /** @var IHandleUserSessions */ + private $userSession; - public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, App\Page $page, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + /** @var array */ + protected $owner; + + public function __construct(IHandleUserSessions $userSession, SystemMessages $systemMessages, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, App\Page $page, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); - $this->owner = User::getOwnerDataByNick($this->parameters['profile']); + $this->systemMessages = $systemMessages; + $this->page = $page; + $this->userSession = $userSession; + + $this->owner = User::getOwnerDataByNick($this->parameters['nickname']); if (!$this->owner) { throw new HTTPException\NotFoundException($this->t('User not found.')); } - - $this->page = $page; } protected function post(array $request = []) { - if (!empty($_POST['cancel']) || empty($_POST['dfrn_url'])) { - $this->baseUrl->redirect(); + if (!empty($request['cancel']) || empty($request['dfrn_url'])) { + $this->baseUrl->redirect('profile/' . $this->parameters['nickname']); } if (empty($this->owner)) { - DI::sysmsg()->addNotice($this->t('Profile unavailable.')); + $this->systemMessages->addNotice($this->t('Profile unavailable.')); return; } - - $url = Probe::cleanURI($_POST['dfrn_url']); + + $url = Probe::cleanURI($request['dfrn_url']); if (!strlen($url)) { - DI::sysmsg()->addNotice($this->t("Invalid locator")); + $this->systemMessages->addNotice($this->t('Invalid locator')); return; } // Detect the network, make sure the provided URL is valid $data = Contact::getByURL($url); if (!$data) { - DI::sysmsg()->addNotice($this->t("The provided profile link doesn't seem to be valid")); + $this->systemMessages->addNotice($this->t("The provided profile link doesn't seem to be valid")); return; } if (empty($data['subscribe'])) { - DI::sysmsg()->addNotice($this->t("Remote subscription can't be done for your network. Please subscribe directly on your system.")); + $this->systemMessages->addNotice($this->t("Remote subscription can't be done for your network. Please subscribe directly on your system.")); return; } - Logger::notice('Remote request', ['url' => $url, 'follow' => $this->owner['url'], 'remote' => $data['subscribe']]); - + $this->logger->notice('Remote request', ['url' => $url, 'follow' => $this->owner['url'], 'remote' => $data['subscribe']]); + // Substitute our user's feed URL into $data['subscribe'] // Send the subscriber home to subscribe // Diaspora needs the uri in the format user@domain.tld @@ -101,24 +111,20 @@ class RemoteFollow extends BaseModule } else { $uri = urlencode($this->owner['url']); } - + $follow_link = str_replace('{uri}', $uri, $data['subscribe']); System::externalRedirect($follow_link); } protected function content(array $request = []): string { - if (empty($this->owner)) { - return ''; - } - $this->page['aside'] = Widget\VCard::getHTML($this->owner); $target_addr = $this->owner['addr']; - $target_url = $this->owner['url']; + $target_url = $this->owner['url']; $tpl = Renderer::getMarkupTemplate('auto_request.tpl'); - $o = Renderer::replaceMacros($tpl, [ + return Renderer::replaceMacros($tpl, [ '$header' => $this->t('Friend/Connection Request'), '$page_desc' => $this->t('Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to %s or %s directly on your system.', $target_addr, $target_url), '$invite_desc' => $this->t('If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.', Search::getGlobalDirectory() . '/servers'), @@ -127,10 +133,9 @@ class RemoteFollow extends BaseModule '$submit' => $this->t('Submit Request'), '$cancel' => $this->t('Cancel'), - '$action' => 'remote_follow/' . $this->parameters['profile'], + '$action' => 'profile/' . $this->parameters['nickname'] . '/remote_follow', '$name' => $this->owner['name'], - '$myaddr' => Profile::getMyURL(), + '$myaddr' => $this->userSession->getMyUrl(), ]); - return $o; } } diff --git a/static/routes.config.php b/static/routes.config.php index 1b0f68026..c5685acea 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -33,14 +33,15 @@ use Friendica\Module; $profileRoutes = [ '' => [Module\Profile\Index::class, [R::GET]], '/attachment/upload' => [Module\Profile\Attachment\Upload::class, [ R::POST]], - '/profile' => [Module\Profile\Profile::class, [R::GET]], - '/schedule' => [Module\Profile\Schedule::class, [R::GET, R::POST]], '/contacts/common' => [Module\Profile\Common::class, [R::GET]], '/contacts[/{type}]' => [Module\Profile\Contacts::class, [R::GET]], - '/status[/{category}[/{date1}[/{date2}]]]' => [Module\Profile\Status::class, [R::GET]], '/media' => [Module\Profile\Media::class, [R::GET]], - '/unkmail' => [Module\Profile\UnkMail::class, [R::GET, R::POST]], '/photos/upload' => [Module\Profile\Photos\Upload::class, [ R::POST]], + '/profile' => [Module\Profile\Profile::class, [R::GET]], + '/remote_follow' => [Module\Profile\RemoteFollow::class, [R::GET, R::POST]], + '/schedule' => [Module\Profile\Schedule::class, [R::GET, R::POST]], + '/status[/{category}[/{date1}[/{date2}]]]' => [Module\Profile\Status::class, [R::GET]], + '/unkmail' => [Module\Profile\UnkMail::class, [R::GET, R::POST]], ]; $apiRoutes = [ @@ -589,7 +590,6 @@ return [ '/randprof' => [Module\RandomProfile::class, [R::GET]], '/register' => [Module\Register::class, [R::GET, R::POST]], - '/remote_follow/{profile}' => [Module\RemoteFollow::class, [R::GET, R::POST]], '/robots.txt' => [Module\RobotsTxt::class, [R::GET]], '/rsd.xml' => [Module\ReallySimpleDiscovery::class, [R::GET]], '/smilies[/json]' => [Module\Smilies::class, [R::GET]],