diff --git a/appinfo/routes.php b/appinfo/routes.php index ad824468..e462d5dd 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -60,7 +60,7 @@ return [ ['name' => 'ActivityPub#displayPost', 'url' => '/@{username}/{token}', 'verb' => 'GET'], - ['name' => 'OStatus#subscribe', 'url' => '/ostatus/follow/{uri}', 'verb' => 'GET'], + ['name' => 'OStatus#subscribe', 'url' => '/ostatus/follow/', 'verb' => 'GET'], ['name' => 'OStatus#followRemote', 'url' => '/api/v1/ostatus/followRemote/{local}', 'verb' => 'GET'], ['name' => 'OStatus#getLink', 'url' => '/api/v1/ostatus/link/{local}/{account}', 'verb' => 'GET'], diff --git a/lib/Controller/OStatusController.php b/lib/Controller/OStatusController.php index cc012e87..ad848960 100644 --- a/lib/Controller/OStatusController.php +++ b/lib/Controller/OStatusController.php @@ -35,6 +35,7 @@ use daita\MySmallPhpTools\Traits\Nextcloud\TNCDataResponse; use daita\MySmallPhpTools\Traits\TArrayTools; use Exception; use OCA\Social\AppInfo\Application; +use OCA\Social\Exceptions\InvalidResourceException; use OCA\Social\Exceptions\RetrieveAccountFormatException; use OCA\Social\Service\AccountService; use OCA\Social\Service\CacheActorService; @@ -104,24 +105,30 @@ class OStatusController extends Controller { * @return Response */ public function subscribe(string $uri): Response { - try { - $actor = $this->cacheActorService->getFromAccount($uri); + + try { + $actor = $this->cacheActorService->getFromAccount($uri); + } catch (InvalidResourceException $e) { + $actor = $this->cacheActorService->getFromId($uri); + } $user = $this->userSession->getUser(); if ($user === null) { throw new Exception('Failed to retrieve current user'); } - return new TemplateResponse('social', 'ostatus', [ + return new TemplateResponse( + 'social', 'ostatus', [ 'serverData' => [ - 'account' => $actor->getAccount(), + 'account' => $actor->getAccount(), 'currentUser' => [ - 'uid' => $user->getUID(), + 'uid' => $user->getUID(), 'displayName' => $user->getDisplayName(), ] ] - ], 'guest'); + ], 'guest' + ); } catch (Exception $e) { return $this->fail($e); } @@ -134,18 +141,21 @@ class OStatusController extends Controller { * @PublicPage * * @param string $local + * * @return Response */ public function followRemote(string $local): Response { try { $following = $this->accountService->getActor($local); - return new TemplateResponse('social', 'ostatus', [ + return new TemplateResponse( + 'social', 'ostatus', [ 'serverData' => [ - 'local' => $local, + 'local' => $local, 'account' => $following->getAccount() ] - ], 'guest'); + ], 'guest' + ); } catch (Exception $e) { return $this->fail($e); } diff --git a/lib/Db/ActionsRequestBuilder.php b/lib/Db/ActionsRequestBuilder.php index 5bf74e8f..fa760304 100644 --- a/lib/Db/ActionsRequestBuilder.php +++ b/lib/Db/ActionsRequestBuilder.php @@ -158,7 +158,7 @@ class ActionsRequestBuilder extends CoreRequestBuilder { * * @return ACore */ - protected function parseActionsSelectSql($data): ACore { + public function parseActionsSelectSql($data): ACore { $item = new ACore(); $item->importFromDatabase($data); diff --git a/lib/Db/ActorsRequestBuilder.php b/lib/Db/ActorsRequestBuilder.php index 444f4ea5..a1fb23ec 100644 --- a/lib/Db/ActorsRequestBuilder.php +++ b/lib/Db/ActorsRequestBuilder.php @@ -107,7 +107,7 @@ class ActorsRequestBuilder extends CoreRequestBuilder { * @return Person * @throws SocialAppConfigException */ - protected function parseActorsSelectSql($data): Person { + public function parseActorsSelectSql($data): Person { $root = $this->configService->getSocialUrl(); $actor = new Person(); diff --git a/lib/Db/CacheDocumentsRequestBuilder.php b/lib/Db/CacheDocumentsRequestBuilder.php index 10b91f79..c21869b9 100644 --- a/lib/Db/CacheDocumentsRequestBuilder.php +++ b/lib/Db/CacheDocumentsRequestBuilder.php @@ -105,7 +105,7 @@ class CacheDocumentsRequestBuilder extends CoreRequestBuilder { * * @return Document */ - protected function parseCacheDocumentsSelectSql(array $data): Document { + public function parseCacheDocumentsSelectSql(array $data): Document { $document = new Document(); $document->importFromDatabase($data); diff --git a/lib/Db/CoreRequestBuilder.php b/lib/Db/CoreRequestBuilder.php index 622805eb..0ffe381b 100644 --- a/lib/Db/CoreRequestBuilder.php +++ b/lib/Db/CoreRequestBuilder.php @@ -913,7 +913,7 @@ class CoreRequestBuilder { * @return Person * @throws InvalidResourceException */ - protected function parseCacheActorsLeftJoin(array $data): Person { + public function parseCacheActorsLeftJoin(array $data): Person { $new = []; foreach ($data as $k => $v) { diff --git a/lib/Db/FollowsRequestBuilder.php b/lib/Db/FollowsRequestBuilder.php index 550dd278..91695738 100644 --- a/lib/Db/FollowsRequestBuilder.php +++ b/lib/Db/FollowsRequestBuilder.php @@ -128,7 +128,7 @@ class FollowsRequestBuilder extends CoreRequestBuilder { * * @return Follow */ - protected function parseFollowsSelectSql($data): Follow { + public function parseFollowsSelectSql($data): Follow { $follow = new Follow(); $follow->importFromDatabase($data); diff --git a/lib/Db/HashtagsRequestBuilder.php b/lib/Db/HashtagsRequestBuilder.php index 9f8922d4..6ed4e92b 100644 --- a/lib/Db/HashtagsRequestBuilder.php +++ b/lib/Db/HashtagsRequestBuilder.php @@ -108,7 +108,7 @@ class HashtagsRequestBuilder extends CoreRequestBuilder { * * @return array */ - protected function parseHashtagsSelectSql($data): array { + public function parseHashtagsSelectSql($data): array { return [ 'hashtag' => $this->get('hashtag', $data, ''), 'trend' => $this->getArray('trend', $data, []) diff --git a/lib/Db/RequestQueueRequestBuilder.php b/lib/Db/RequestQueueRequestBuilder.php index b3a59150..4d0f5f63 100644 --- a/lib/Db/RequestQueueRequestBuilder.php +++ b/lib/Db/RequestQueueRequestBuilder.php @@ -105,7 +105,7 @@ class RequestQueueRequestBuilder extends CoreRequestBuilder { * * @return RequestQueue */ - protected function parseRequestQueueSelectSql($data): RequestQueue { + public function parseRequestQueueSelectSql($data): RequestQueue { $queue = new RequestQueue(); $queue->importFromDatabase($data); diff --git a/lib/Db/StreamActionsRequestBuilder.php b/lib/Db/StreamActionsRequestBuilder.php index c5f0da47..fc68aff5 100644 --- a/lib/Db/StreamActionsRequestBuilder.php +++ b/lib/Db/StreamActionsRequestBuilder.php @@ -108,7 +108,7 @@ class StreamActionsRequestBuilder extends CoreRequestBuilder { * * @return StreamAction */ - protected function parseStreamActionsSelectSql($data): StreamAction { + public function parseStreamActionsSelectSql($data): StreamAction { $action = new StreamAction(); $action->importFromDatabase($data); diff --git a/lib/Db/StreamQueueRequestBuilder.php b/lib/Db/StreamQueueRequestBuilder.php index 2b4760fe..39509ce0 100644 --- a/lib/Db/StreamQueueRequestBuilder.php +++ b/lib/Db/StreamQueueRequestBuilder.php @@ -104,7 +104,7 @@ class StreamQueueRequestBuilder extends CoreRequestBuilder { * * @return StreamQueue */ - protected function parseStreamQueueSelectSql($data): StreamQueue { + public function parseStreamQueueSelectSql($data): StreamQueue { $queue = new StreamQueue(); $queue->importFromDatabase($data); diff --git a/lib/Service/CacheDocumentService.php b/lib/Service/CacheDocumentService.php index 0b7ef70e..22fb640d 100644 --- a/lib/Service/CacheDocumentService.php +++ b/lib/Service/CacheDocumentService.php @@ -236,6 +236,13 @@ class CacheDocumentService { throw new CacheDocumentDoesNotExistException(); } + // right now, we do not handle cache for local avatar, we need to change this + // so the current avatar is cached, or a new avatar is uploaded + if ($path === 'avatar') { + throw new CacheContentException(); + } + + $pos = strrpos($path, '/'); $dir = substr($path, 0, $pos); $filename = substr($path, $pos + 1); diff --git a/lib/webfinger.php b/lib/webfinger.php index 499dfac4..d575dfa3 100644 --- a/lib/webfinger.php +++ b/lib/webfinger.php @@ -129,9 +129,7 @@ $finger = [ [ 'rel' => 'http://ostatus.org/schema/1.0/subscribe', 'template' => urldecode( - $href = $urlGenerator->linkToRouteAbsolute( - 'social.OStatus.subscribe', ['uri' => '{uri}'] - ) + $href = $urlGenerator->linkToRouteAbsolute('social.OStatus.subscribe') . '?uri={uri}' ) ] ] diff --git a/templates/ostatus.php b/templates/ostatus.php index dac1a5d0..f7ffa08f 100644 --- a/templates/ostatus.php +++ b/templates/ostatus.php @@ -23,6 +23,7 @@ script('social', 'ostatus'); style('social', 'style'); + ?>