From: Hypolite Petovan Date: Sun, 30 Oct 2022 19:50:39 +0000 (-0400) Subject: Move remote follow module to profile folder X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=a1e6e13a9f44236b23b5b9e0d5559a59deb45011;p=friendica.git Move remote follow module to profile folder --- diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 2496199bd1..8538bfde2c 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/Profile/RemoteFollow.php b/src/Module/Profile/RemoteFollow.php new file mode 100644 index 0000000000..7111146a28 --- /dev/null +++ b/src/Module/Profile/RemoteFollow.php @@ -0,0 +1,141 @@ +. + * + */ + +namespace Friendica\Module\Profile; + +use Friendica\App; +use Friendica\App\Page; +use Friendica\BaseModule; +use Friendica\Content\Widget; +use Friendica\Core\L10n; +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; +use Psr\Log\LoggerInterface; + +/** + * Remotely follow the account on this system by the provided account + */ +class RemoteFollow extends BaseModule +{ + /** @var SystemMessages */ + private $systemMessages; + /** @var Page */ + protected $page; + /** @var IHandleUserSessions */ + private $userSession; + + /** @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->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.')); + } + } + + protected function post(array $request = []) + { + if (!empty($request['cancel']) || empty($request['dfrn_url'])) { + $this->baseUrl->redirect('profile/' . $this->parameters['nickname']); + } + + if (empty($this->owner)) { + $this->systemMessages->addNotice($this->t('Profile unavailable.')); + return; + } + + $url = Probe::cleanURI($request['dfrn_url']); + if (!strlen($url)) { + $this->systemMessages->addNotice($this->t('Invalid locator')); + return; + } + + // Detect the network, make sure the provided URL is valid + $data = Contact::getByURL($url); + if (!$data) { + $this->systemMessages->addNotice($this->t("The provided profile link doesn't seem to be valid")); + return; + } + + if (empty($data['subscribe'])) { + $this->systemMessages->addNotice($this->t("Remote subscription can't be done for your network. Please subscribe directly on your system.")); + return; + } + + $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 + if ($data['network'] == Protocol::DIASPORA) { + $uri = urlencode($this->owner['addr']); + } else { + $uri = urlencode($this->owner['url']); + } + + $follow_link = str_replace('{uri}', $uri, $data['subscribe']); + System::externalRedirect($follow_link); + } + + protected function content(array $request = []): string + { + $this->page['aside'] = Widget\VCard::getHTML($this->owner); + + $target_addr = $this->owner['addr']; + $target_url = $this->owner['url']; + + $tpl = Renderer::getMarkupTemplate('auto_request.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'), + '$your_address' => $this->t('Your Webfinger address or profile URL:'), + '$pls_answer' => $this->t('Please answer the following:'), + '$submit' => $this->t('Submit Request'), + '$cancel' => $this->t('Cancel'), + + '$action' => 'profile/' . $this->parameters['nickname'] . '/remote_follow', + '$name' => $this->owner['name'], + '$myaddr' => $this->userSession->getMyUrl(), + ]); + } +} diff --git a/src/Module/RemoteFollow.php b/src/Module/RemoteFollow.php deleted file mode 100644 index ce5c6f60e1..0000000000 --- a/src/Module/RemoteFollow.php +++ /dev/null @@ -1,136 +0,0 @@ -. - * - */ - -namespace Friendica\Module; - -use Friendica\App; -use Friendica\App\Page; -use Friendica\BaseModule; -use Friendica\Content\Widget; -use Friendica\Core\L10n; -use Friendica\Core\Logger; -use Friendica\Core\Protocol; -use Friendica\Core\Renderer; -use Friendica\Core\Search; -use Friendica\Core\System; -use Friendica\DI; -use Friendica\Model\Contact; -use Friendica\Model\Profile; -use Friendica\Model\User; -use Friendica\Network\HTTPException; -use Friendica\Network\Probe; -use Friendica\Util\Profiler; -use Psr\Log\LoggerInterface; - -/** - * Remotely follow the account on this system by the provided account - */ -class RemoteFollow extends BaseModule -{ - /** @var array */ - protected $owner; - /** @var Page */ - protected $page; - - public function __construct(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']); - 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($this->owner)) { - DI::sysmsg()->addNotice($this->t('Profile unavailable.')); - return; - } - - $url = Probe::cleanURI($_POST['dfrn_url']); - if (!strlen($url)) { - DI::sysmsg()->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")); - 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.")); - return; - } - - 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 - if ($data['network'] == Protocol::DIASPORA) { - $uri = urlencode($this->owner['addr']); - } 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']; - - $tpl = Renderer::getMarkupTemplate('auto_request.tpl'); - $o = 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'), - '$your_address' => $this->t('Your Webfinger address or profile URL:'), - '$pls_answer' => $this->t('Please answer the following:'), - '$submit' => $this->t('Submit Request'), - '$cancel' => $this->t('Cancel'), - - '$action' => 'remote_follow/' . $this->parameters['profile'], - '$name' => $this->owner['name'], - '$myaddr' => Profile::getMyURL(), - ]); - return $o; - } -} diff --git a/static/routes.config.php b/static/routes.config.php index 1b0f68026a..c5685acea8 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]],