From ede7d0d7320b270a79e73d86116c1ff914a1a3ab Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Wed, 12 Jun 2019 09:51:28 -0100 Subject: enable host-meta locally Signed-off-by: Maxence Lange --- lib/Service/AccountService.php | 5 ++-- lib/Service/CheckService.php | 23 +++++++++++++--- lib/Service/ConfigService.php | 30 ++++++++++++++++++--- lib/hostmeta.php | 61 ++++++++++++++++++++++++++++++++++++++++++ lib/webfinger.php | 15 +++++++---- 5 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 lib/hostmeta.php diff --git a/lib/Service/AccountService.php b/lib/Service/AccountService.php index d7ff1941..cfe304bf 100644 --- a/lib/Service/AccountService.php +++ b/lib/Service/AccountService.php @@ -216,6 +216,7 @@ class AccountService { } $this->configService->setCoreValue('public_webfinger', 'social/lib/webfinger.php'); + $this->configService->setCoreValue('public_host-meta', 'social/lib/hostmeta.php'); $actor = new Person(); $actor->setUserId($userId); @@ -320,8 +321,8 @@ class AccountService { /** - * @throws Exception * @return int + * @throws Exception */ public function manageCacheLocalActors(): int { $update = $this->actorsRequest->getAll(); @@ -337,8 +338,8 @@ class AccountService { /** - * @throws Exception * @return int + * @throws Exception */ public function blindKeyRotation(): int { $update = $this->actorsRequest->getAll(); diff --git a/lib/Service/CheckService.php b/lib/Service/CheckService.php index 47a4a133..3e65a26f 100644 --- a/lib/Service/CheckService.php +++ b/lib/Service/CheckService.php @@ -50,17 +50,30 @@ class CheckService { use TStringTools; + const CACHE_PREFIX = 'social_check_'; + + + /** @var ICache */ private $cache; + + /** @var IConfig */ private $config; + + /** @var IClientService */ private $clientService; + + /** @var IRequest */ private $request; + + /** @var IURLGenerator */ private $urlGenerator; + /** @var ConfigService */ + private $configService; + /** @var FollowsRequest */ private $followRequest; - const CACHE_PREFIX = 'social_check_'; - /** * CheckService constructor. @@ -71,10 +84,11 @@ class CheckService { * @param IRequest $request * @param IURLGenerator $urlGenerator * @param FollowsRequest $followRequest + * @param ConfigService $configService */ public function __construct( ICache $cache, IConfig $config, IClientService $clientService, IRequest $request, - IURLGenerator $urlGenerator, FollowsRequest $followRequest + IURLGenerator $urlGenerator, FollowsRequest $followRequest, ConfigService $configService ) { $this->cache = $cache; $this->config = $config; @@ -82,6 +96,7 @@ class CheckService { $this->request = $request; $this->urlGenerator = $urlGenerator; $this->followRequest = $followRequest; + $this->configService = $configService; } @@ -139,6 +154,8 @@ class CheckService { * */ public function checkInstallationStatus() { + $this->configService->setCoreValue('public_webfinger', 'social/lib/webfinger.php'); + $this->configService->setCoreValue('public_host-meta', 'social/lib/hostmeta.php'); $this->checkStatusTableFollows(); } diff --git a/lib/Service/ConfigService.php b/lib/Service/ConfigService.php index cf747f6f..0e25ff09 100644 --- a/lib/Service/ConfigService.php +++ b/lib/Service/ConfigService.php @@ -51,7 +51,8 @@ class ConfigService { use TArrayTools; - const SOCIAL_ADDRESS = 'address'; + const CLOUD_ADDRESS = 'address'; + const SOCIAL_ADDRESS = 'social_address'; const SOCIAL_SERVICE = 'service'; const SOCIAL_MAX_SIZE = 'max_size'; const SOCIAL_ACCESS_TYPE = 'access_type'; @@ -64,6 +65,7 @@ class ConfigService { /** @var array */ public $defaults = [ + self::CLOUD_ADDRESS => '', self::SOCIAL_ADDRESS => '', self::SOCIAL_SERVICE => 1, self::SOCIAL_MAX_SIZE => 10, @@ -258,7 +260,7 @@ class ConfigService { * @param string $cloudAddress */ public function setCloudAddress(string $cloudAddress) { - $this->setAppValue(self::SOCIAL_ADDRESS, $cloudAddress); + $this->setAppValue(self::CLOUD_ADDRESS, $cloudAddress); } /** @@ -268,7 +270,7 @@ class ConfigService { * @throws SocialAppConfigException */ public function getCloudAddress(bool $host = false) { - $address = $this->getAppValue(self::SOCIAL_ADDRESS); + $address = $this->getAppValue(self::CLOUD_ADDRESS); if ($address === '') { throw new SocialAppConfigException(); } @@ -294,6 +296,28 @@ class ConfigService { } + /** + * @param string $address + */ + public function setSocialAddress(string $address) { + $this->setAppValue(self::SOCIAL_ADDRESS, $address); + } + + /** + * @return string + * @throws SocialAppConfigException + */ + public function getSocialAddress(): string { + $address = $this->getAppValue(self::SOCIAL_ADDRESS); + + if ($address === '') { + return $this->getCloudAddress(true); + } + + return $address; + } + + /** * @param string $path * diff --git a/lib/hostmeta.php b/lib/hostmeta.php new file mode 100644 index 00000000..94dd8413 --- /dev/null +++ b/lib/hostmeta.php @@ -0,0 +1,61 @@ + + * @copyright 2018, Maxence Lange + * @license GNU AGPL version 3 or any later version + * + * 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 . + * + */ + +namespace OCA\Social; + + +use Exception; +use OC; +use OCA\Social\Service\ConfigService; +use OCA\Social\Service\FediverseService; + +require_once(__DIR__ . '/../appinfo/autoload.php'); + +try { + $fediverseService = OC::$server->query(FediverseService::class); + /** @var ConfigService $configService */ + $configService = OC::$server->query(ConfigService::class); + $fediverseService->jailed(); + +} catch (Exception $e) { + OC::$server->getLogger() + ->log(1, 'Exception on hostmeta - ' . $e->getMessage()); + http_response_code(404); + exit; +} + +header('Content-type: application/xdr+xml'); + +try { + $url = $configService->getCloudAddress() . '/.well-known/webfinger?resource={uri}'; + echo '' . "\n"; + echo '' . "\n"; + echo ' ' . "\n"; + echo '' . "\n"; +} catch (Exceptions\SocialAppConfigException $e) { +} diff --git a/lib/webfinger.php b/lib/webfinger.php index 432b2c0b..1d7c7d98 100644 --- a/lib/webfinger.php +++ b/lib/webfinger.php @@ -62,10 +62,15 @@ try { $fediverseService->jailed(); - if ($configService->getCloudAddress(true) !== $instance) { - throw new Exception( - 'instance is ' . $instance . ', expected ' . $configService->getCloudAddress(true) - ); + if ($configService->getSocialAddress() !== $instance) { + + if ($configService->getCloudAddress(true) === $instance) { + $instance = $configService->getSocialAddress(); + } else { + throw new Exception( + 'instance is ' . $instance . ', expected ' . $configService->getSocialAddress() + ); + } } $cacheActorService->getFromLocalAccount($username); @@ -85,7 +90,7 @@ if (substr($href, -1) === '/') { } $finger = [ - 'subject' => $subject, + 'subject' => $username . '@' . $instance, 'links' => [ [ 'rel' => 'self', -- cgit v1.2.3