* @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\CacheActorService; use OCA\Social\Service\ConfigService; use OCA\Social\Service\FediverseService; require_once(__DIR__ . '/../appinfo/autoload.php'); if (!array_key_exists('resource', $_GET)) { echo 'missing resource'; exit(); } $subject = $_GET['resource']; $urlGenerator = OC::$server->getURLGenerator(); list($type, $account) = explode(':', $subject, 2); if ($type !== 'acct') { echo 'no acct'; exit(); } list($username, $instance) = explode('@', $account); try { $cacheActorService = OC::$server->query(CacheActorService::class); $fediverseService = OC::$server->query(FediverseService::class); $configService = OC::$server->query(ConfigService::class); $fediverseService->jailed(); 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); } catch (Exception $e) { OC::$server->getLogger() ->log(1, 'Exception on webfinger - ' . $e->getMessage()); http_response_code(404); exit; } $href = $configService->getUrlSocial( $urlGenerator->linkToRoute('social.ActivityPub.actorAlias', ['username' => $username]) ); if (substr($href, -1) === '/') { $href = substr($href, 0, -1); } $finger = [ 'subject' => $username . '@' . $instance, 'links' => [ [ 'rel' => 'self', 'type' => 'application/activity+json', 'href' => $href ], [ 'rel' => 'http://ostatus.org/schema/1.0/subscribe', 'template' => urldecode( $href = $urlGenerator->linkToRouteAbsolute( 'social.OStatus.subscribe', ['uri' => '{uri}'] ) ) ] ] ]; header('Content-type: application/json'); echo json_encode($finger);