From d6c1e85b5fe1a110ece698434e4b2010c16cb2ac Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 16 Feb 2023 08:05:32 -0500 Subject: [PATCH 01/42] Add blocked/ignored filters to Mastodon Timeline API Home and Tags endpoints --- src/Module/Api/Mastodon/Timelines/Home.php | 7 +++++++ src/Module/Api/Mastodon/Timelines/Tag.php | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/Module/Api/Mastodon/Timelines/Home.php b/src/Module/Api/Mastodon/Timelines/Home.php index 5efaf4930..c121bad66 100644 --- a/src/Module/Api/Mastodon/Timelines/Home.php +++ b/src/Module/Api/Mastodon/Timelines/Home.php @@ -90,6 +90,13 @@ class Home extends BaseApi $condition = DBA::mergeConditions($condition, ['gravity' => Item::GRAVITY_PARENT]); } + if (!empty($uid)) { + $condition = DBA::mergeConditions( + $condition, + ["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid] + ); + } + $items = Post::selectForUser($uid, ['uri-id'], $condition, $params); $display_quotes = self::appSupportsQuotes(); diff --git a/src/Module/Api/Mastodon/Timelines/Tag.php b/src/Module/Api/Mastodon/Timelines/Tag.php index 1d04dec62..64cd84366 100644 --- a/src/Module/Api/Mastodon/Timelines/Tag.php +++ b/src/Module/Api/Mastodon/Timelines/Tag.php @@ -104,6 +104,13 @@ class Tag extends BaseApi $params['order'] = ['uri-id']; } + if (!empty($uid)) { + $condition = DBA::mergeConditions( + $condition, + ["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid] + ); + } + $items = DBA::select('tag-search-view', ['uri-id'], $condition, $params); $display_quotes = self::appSupportsQuotes(); From a4515daca4980377c56cd12d56a12cf505dc57bf Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 16 Feb 2023 08:08:58 -0500 Subject: [PATCH 02/42] Add blocked/ignored filters to Mastodon Timeline API Direct and List endpoints --- src/Module/Api/Mastodon/Timelines/Direct.php | 7 +++++++ src/Module/Api/Mastodon/Timelines/ListTimeline.php | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/Module/Api/Mastodon/Timelines/Direct.php b/src/Module/Api/Mastodon/Timelines/Direct.php index a5f1f97f3..82b96e698 100644 --- a/src/Module/Api/Mastodon/Timelines/Direct.php +++ b/src/Module/Api/Mastodon/Timelines/Direct.php @@ -65,6 +65,13 @@ class Direct extends BaseApi $params['order'] = ['uri-id']; } + if (!empty($uid)) { + $condition = DBA::mergeConditions( + $condition, + ["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid] + ); + } + $mails = DBA::select('mail', ['id', 'uri-id'], $condition, $params); $statuses = []; diff --git a/src/Module/Api/Mastodon/Timelines/ListTimeline.php b/src/Module/Api/Mastodon/Timelines/ListTimeline.php index a8de13056..378e3eeaa 100644 --- a/src/Module/Api/Mastodon/Timelines/ListTimeline.php +++ b/src/Module/Api/Mastodon/Timelines/ListTimeline.php @@ -95,6 +95,13 @@ class ListTimeline extends BaseApi $condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin` AND `post-user`.`uri-id` = `post-user-view`.`uri-id`)"]); } + if (!empty($uid)) { + $condition = DBA::mergeConditions( + $condition, + ["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid] + ); + } + $items = Post::selectForUser($uid, ['uri-id'], $condition, $params); $display_quotes = self::appSupportsQuotes(); From e3bfb39e917ff553b97507753be85f431e8b6d54 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 16 Feb 2023 16:06:56 -0500 Subject: [PATCH 03/42] Remove explicit block filtering for results that go through selectViewForUser --- src/Module/Api/Mastodon/Timelines/Home.php | 7 ------- src/Module/Api/Mastodon/Timelines/ListTimeline.php | 7 ------- src/Module/Api/Mastodon/Timelines/PublicTimeline.php | 5 ----- 3 files changed, 19 deletions(-) diff --git a/src/Module/Api/Mastodon/Timelines/Home.php b/src/Module/Api/Mastodon/Timelines/Home.php index c121bad66..5efaf4930 100644 --- a/src/Module/Api/Mastodon/Timelines/Home.php +++ b/src/Module/Api/Mastodon/Timelines/Home.php @@ -90,13 +90,6 @@ class Home extends BaseApi $condition = DBA::mergeConditions($condition, ['gravity' => Item::GRAVITY_PARENT]); } - if (!empty($uid)) { - $condition = DBA::mergeConditions( - $condition, - ["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid] - ); - } - $items = Post::selectForUser($uid, ['uri-id'], $condition, $params); $display_quotes = self::appSupportsQuotes(); diff --git a/src/Module/Api/Mastodon/Timelines/ListTimeline.php b/src/Module/Api/Mastodon/Timelines/ListTimeline.php index 378e3eeaa..a8de13056 100644 --- a/src/Module/Api/Mastodon/Timelines/ListTimeline.php +++ b/src/Module/Api/Mastodon/Timelines/ListTimeline.php @@ -95,13 +95,6 @@ class ListTimeline extends BaseApi $condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin` AND `post-user`.`uri-id` = `post-user-view`.`uri-id`)"]); } - if (!empty($uid)) { - $condition = DBA::mergeConditions( - $condition, - ["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid] - ); - } - $items = Post::selectForUser($uid, ['uri-id'], $condition, $params); $display_quotes = self::appSupportsQuotes(); diff --git a/src/Module/Api/Mastodon/Timelines/PublicTimeline.php b/src/Module/Api/Mastodon/Timelines/PublicTimeline.php index 083d9867e..968e34dbb 100644 --- a/src/Module/Api/Mastodon/Timelines/PublicTimeline.php +++ b/src/Module/Api/Mastodon/Timelines/PublicTimeline.php @@ -90,11 +90,6 @@ class PublicTimeline extends BaseApi $condition = DBA::mergeConditions($condition, ['gravity' => Item::GRAVITY_PARENT]); } - if (!empty($uid)) { - $condition = DBA::mergeConditions($condition, - ["NOT `parent-author-id` IN (SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND (`blocked` OR `ignored`) AND `cid` = `parent-author-id`)", $uid]); - } - $items = Post::selectPostsForUser($uid, ['uri-id'], $condition, $params); $display_quotes = self::appSupportsQuotes(); From c5effdadeca85194b844abc1ace44cf98580a032 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 16 Feb 2023 22:55:23 -0500 Subject: [PATCH 04/42] Add support to Mastodon Tag Trends for paging, local tags, and faster refresh = with phpcbf format auto-correction --- src/Model/Tag.php | 68 +++++++++++++++---------- src/Module/Api/Mastodon/Trends/Tags.php | 11 +++- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/src/Model/Tag.php b/src/Model/Tag.php index d46680059..362df49ec 100644 --- a/src/Model/Tag.php +++ b/src/Model/Tag.php @@ -534,8 +534,11 @@ class Tag $searchpath = DI::baseUrl() . '/search?tag='; - $taglist = DBA::select('tag-view', ['type', 'name', 'url', 'cid'], - ['uri-id' => $item['uri-id'], 'type' => [self::HASHTAG, self::MENTION, self::EXCLUSIVE_MENTION, self::IMPLICIT_MENTION]]); + $taglist = DBA::select( + 'tag-view', + ['type', 'name', 'url', 'cid'], + ['uri-id' => $item['uri-id'], 'type' => [self::HASHTAG, self::MENTION, self::EXCLUSIVE_MENTION, self::IMPLICIT_MENTION]] + ); while ($tag = DBA::fetch($taglist)) { if ($tag['url'] == '') { $tag['url'] = $searchpath . rawurlencode($tag['name']); @@ -544,7 +547,7 @@ class Tag $orig_tag = $tag['url']; $prefix = self::TAG_CHARACTER[$tag['type']]; - switch($tag['type']) { + switch ($tag['type']) { case self::HASHTAG: if ($orig_tag != $tag['url']) { $item['body'] = str_replace($orig_tag, $tag['url'], $item['body']); @@ -639,17 +642,17 @@ class Tag * * @param int $period Period in hours to consider posts * @param int $limit Number of returned tags + * @param int $offset Page offset in results * @return array * @throws \Exception */ - public static function getGlobalTrendingHashtags(int $period, $limit = 10): array + public static function getGlobalTrendingHashtags(int $period, int $limit = 10, int $offset = 0): array { - $tags = DI::cache()->get('global_trending_tags-' . $period . '-' . $limit); - if (!empty($tags)) { - return $tags; - } else { - return self::setGlobalTrendingHashtags($period, $limit); + $tags = DI::cache()->get("global_trending_tags-$period"); + if (empty($tags)) { + $tags = self::setGlobalTrendingHashtags($period, 1000); } + return array_slice($tags, $limit * $offset, $limit); } /** @@ -665,7 +668,9 @@ class Tag } $blocked = explode(',', $blocked_txt); - array_walk($blocked, function(&$value) { $value = "'" . DBA::escape(trim($value)) . "'";}); + array_walk($blocked, function (&$value) { + $value = "'" . DBA::escape(trim($value)) . "'"; + }); return ' AND NOT `name` IN (' . implode(',', $blocked) . ')'; } @@ -683,8 +688,11 @@ class Tag * Get a uri-id that is at least X hours old. * We use the uri-id in the query for the hash tags since this is much faster */ - $post = Post::selectFirstThread(['uri-id'], ["`uid` = ? AND `received` < ?", 0, DateTimeFormat::utc('now - ' . $period . ' hour')], - ['order' => ['received' => true]]); + $post = Post::selectFirstThread( + ['uri-id'], + ["`uid` = ? AND `received` < ?", 0, DateTimeFormat::utc('now - ' . $period . ' hour')], + ['order' => ['received' => true]] + ); if (empty($post['uri-id'])) { return []; @@ -692,17 +700,20 @@ class Tag $block_sql = self::getBlockedSQL(); - $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`, COUNT(DISTINCT(`author-id`)) as `authors` + $tagsStmt = DBA::p( + "SELECT `name` AS `term`, COUNT(*) AS `score`, COUNT(DISTINCT(`author-id`)) as `authors` FROM `tag-search-view` WHERE `private` = ? AND `uid` = ? AND `uri-id` > ? $block_sql GROUP BY `term` ORDER BY `authors` DESC, `score` DESC LIMIT ?", - Item::PUBLIC, 0, $post['uri-id'], + Item::PUBLIC, + 0, + $post['uri-id'], $limit ); if (DBA::isResult($tagsStmt)) { $tags = DBA::toArray($tagsStmt); - DI::cache()->set('global_trending_tags-' . $period . '-' . $limit, $tags, Duration::DAY); + DI::cache()->set("global_trending_tags-$period", $tags, Duration::HOUR); return $tags; } @@ -714,17 +725,17 @@ class Tag * * @param int $period Period in hours to consider posts * @param int $limit Number of returned tags + * @param int $offset Page offset in results * @return array * @throws \Exception */ - public static function getLocalTrendingHashtags(int $period, $limit = 10): array + public static function getLocalTrendingHashtags(int $period, $limit = 10, int $offset = 0): array { - $tags = DI::cache()->get('local_trending_tags-' . $period . '-' . $limit); - if (!empty($tags)) { - return $tags; - } else { - return self::setLocalTrendingHashtags($period, $limit); + $tags = DI::cache()->get("local_trending_tags-$period"); + if (empty($tags)) { + $tags = self::setLocalTrendingHashtags($period, 1000); } + return array_slice($tags, $limit * $offset, $limit); } /** @@ -739,25 +750,30 @@ class Tag { // Get a uri-id that is at least X hours old. // We use the uri-id in the query for the hash tags since this is much faster - $post = Post::selectFirstThread(['uri-id'], ["`uid` = ? AND `received` < ?", 0, DateTimeFormat::utc('now - ' . $period . ' hour')], - ['order' => ['received' => true]]); + $post = Post::selectFirstThread( + ['uri-id'], + ["`uid` = ? AND `received` < ?", 0, DateTimeFormat::utc('now - ' . $period . ' hour')], + ['order' => ['received' => true]] + ); if (empty($post['uri-id'])) { return []; } $block_sql = self::getBlockedSQL(); - $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`, COUNT(DISTINCT(`author-id`)) as `authors` + $tagsStmt = DBA::p( + "SELECT `name` AS `term`, COUNT(*) AS `score`, COUNT(DISTINCT(`author-id`)) as `authors` FROM `tag-search-view` WHERE `private` = ? AND `wall` AND `origin` AND `uri-id` > ? $block_sql GROUP BY `term` ORDER BY `authors` DESC, `score` DESC LIMIT ?", - Item::PUBLIC, $post['uri-id'], + Item::PUBLIC, + $post['uri-id'], $limit ); if (DBA::isResult($tagsStmt)) { $tags = DBA::toArray($tagsStmt); - DI::cache()->set('local_trending_tags-' . $period . '-' . $limit, $tags, Duration::DAY); + DI::cache()->set("local_trending_tags-$period", $tags, Duration::HOUR); return $tags; } diff --git a/src/Module/Api/Mastodon/Trends/Tags.php b/src/Module/Api/Mastodon/Trends/Tags.php index 810ab002d..b084797c8 100644 --- a/src/Module/Api/Mastodon/Trends/Tags.php +++ b/src/Module/Api/Mastodon/Trends/Tags.php @@ -37,11 +37,18 @@ class Tags extends BaseApi protected function rawContent(array $request = []) { $request = $this->getRequest([ - 'limit' => 20, // Maximum number of results to return. Defaults to 10. + 'limit' => 20, // Maximum number of results to return. Defaults to 20. + 'offset' => 0, + 'friendica_local' => false, ], $request); $trending = []; - $tags = Tag::getGlobalTrendingHashtags(24, 20); + if ($request['friendica_local']) { + $tags = Tag::getLocalTrendingHashtags(24, $request['limit'], $request['offset']); + } else { + $tags = Tag::getGlobalTrendingHashtags(24, $request['limit'], $request['offset']); + } + foreach ($tags as $tag) { $tag['name'] = $tag['term']; $history = [['day' => (string)time(), 'uses' => (string)$tag['score'], 'accounts' => (string)$tag['authors']]]; From 6a94632131060bade068717095cc484b9d51652f Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 17 Feb 2023 11:25:25 -0500 Subject: [PATCH 05/42] Add documentation to new trending tags endpoint QPs --- src/Module/Api/Mastodon/Trends/Tags.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Module/Api/Mastodon/Trends/Tags.php b/src/Module/Api/Mastodon/Trends/Tags.php index b084797c8..21e078b23 100644 --- a/src/Module/Api/Mastodon/Trends/Tags.php +++ b/src/Module/Api/Mastodon/Trends/Tags.php @@ -38,8 +38,8 @@ class Tags extends BaseApi { $request = $this->getRequest([ 'limit' => 20, // Maximum number of results to return. Defaults to 20. - 'offset' => 0, - 'friendica_local' => false, + 'offset' => 0, // Offset page. Defaults to 0. + 'friendica_local' => false, // Whether to return local tag trends instead of global, defaults to false ], $request); $trending = []; From e6c93d31c17760c76909f0569176a1ec3050dc78 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 17 Feb 2023 11:59:30 -0500 Subject: [PATCH 06/42] Add offset parameter to Mastodon trending Links and Statuses endpoints --- src/Module/Api/Mastodon/Trends/Links.php | 3 ++- src/Module/Api/Mastodon/Trends/Statuses.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Module/Api/Mastodon/Trends/Links.php b/src/Module/Api/Mastodon/Trends/Links.php index 5cf2ed471..e2a160087 100644 --- a/src/Module/Api/Mastodon/Trends/Links.php +++ b/src/Module/Api/Mastodon/Trends/Links.php @@ -41,6 +41,7 @@ class Links extends BaseApi { $request = $this->getRequest([ 'limit' => 10, // Maximum number of results to return. Defaults to 10. + 'offset' => 0, // Offset page, Defaults to 0. ], $request); $condition = ["EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-thread-view`.`uri-id` AND `type` = ? AND NOT `name` IS NULL AND NOT `description` IS NULL) AND NOT `private` AND `commented` > ? AND `created` > ?", @@ -48,7 +49,7 @@ class Links extends BaseApi $condition = DBA::mergeConditions($condition, ['network' => Protocol::FEDERATED]); $trending = []; - $statuses = Post::selectPostThread(['uri-id', 'total-comments', 'total-actors'], $condition, ['limit' => $request['limit'], 'order' => ['total-actors' => true]]); + $statuses = Post::selectPostThread(['uri-id', 'total-comments', 'total-actors'], $condition, ['limit' => [$request['offset'], $request['limit']], 'offset' => $request['offset'], 'order' => ['total-actors' => true]]); while ($status = Post::fetch($statuses)) { $history = [['day' => (string)time(), 'uses' => (string)$status['total-comments'], 'accounts' => (string)$status['total-actors']]]; $trending[] = DI::mstdnCard()->createFromUriId($status['uri-id'], $history)->toArray(); diff --git a/src/Module/Api/Mastodon/Trends/Statuses.php b/src/Module/Api/Mastodon/Trends/Statuses.php index cf287e59c..6ae9c83dd 100644 --- a/src/Module/Api/Mastodon/Trends/Statuses.php +++ b/src/Module/Api/Mastodon/Trends/Statuses.php @@ -44,6 +44,7 @@ class Statuses extends BaseApi $request = $this->getRequest([ 'limit' => 10, // Maximum number of results to return. Defaults to 10. + 'offset' => 0, // Offset page, Defaults to 0. ], $request); $condition = ["NOT `private` AND `commented` > ? AND `created` > ?", DateTimeFormat::utc('now -1 day'), DateTimeFormat::utc('now -1 week')]; @@ -52,7 +53,7 @@ class Statuses extends BaseApi $display_quotes = self::appSupportsQuotes(); $trending = []; - $statuses = Post::selectPostThread(['uri-id'], $condition, ['limit' => $request['limit'], 'order' => ['total-actors' => true]]); + $statuses = Post::selectPostThread(['uri-id'], $condition, ['limit' => [$request['offset'], $request['limit']], 'order' => ['total-actors' => true]]); while ($status = Post::fetch($statuses)) { try { $trending[] = DI::mstdnStatus()->createFromUriId($status['uri-id'], $uid, $display_quotes); From df4af8da9bac95aba6839487d7dd851227fea30c Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 17 Feb 2023 13:23:34 -0500 Subject: [PATCH 07/42] Fix offset is absolute in set not a page to be consistent with SQL --- src/Model/Tag.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/Tag.php b/src/Model/Tag.php index 362df49ec..0e891f9c6 100644 --- a/src/Model/Tag.php +++ b/src/Model/Tag.php @@ -652,7 +652,7 @@ class Tag if (empty($tags)) { $tags = self::setGlobalTrendingHashtags($period, 1000); } - return array_slice($tags, $limit * $offset, $limit); + return array_slice($tags, $offset, $limit); } /** @@ -735,7 +735,7 @@ class Tag if (empty($tags)) { $tags = self::setLocalTrendingHashtags($period, 1000); } - return array_slice($tags, $limit * $offset, $limit); + return array_slice($tags, $offset, $limit); } /** From 2754cdc5d6661d27351f7c0d320f715f0b6105ba Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 17 Feb 2023 13:24:00 -0500 Subject: [PATCH 08/42] Add Link headers by offset/limit capability to BaseApi --- src/Module/BaseApi.php | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/Module/BaseApi.php b/src/Module/BaseApi.php index 6a4119847..f8524b524 100644 --- a/src/Module/BaseApi.php +++ b/src/Module/BaseApi.php @@ -168,6 +168,34 @@ class BaseApi extends BaseModule return 'Link: <' . $next . '>; rel="next", <' . $prev . '>; rel="prev"'; } + /** + * Get the "link" header with "next" and "prev" links for an offset/limit type call + * @return string + */ + protected static function getOffsetAndLimitLinkHeader(int $offset, int $limit): string + { + $request = self::$request; + + unset($request['offset']); + $request['limit'] = $limit; + + $prev_request = $next_request = $request; + + $prev_request['offset'] = $offset - $limit; + $next_request['offset'] = $offset + $limit; + + $command = DI::baseUrl() . '/' . DI::args()->getCommand(); + + $prev = $command . '?' . http_build_query($prev_request); + $next = $command . '?' . http_build_query($next_request); + + if ($prev_request['offset'] >= 0) { + return 'Link: <' . $next . '>; rel="next", <' . $prev . '>; rel="prev"'; + } else { + return 'Link: <' . $next . '>; rel="next"'; + } + } + /** * Set the "link" header with "next" and "prev" links * @return void @@ -180,6 +208,18 @@ class BaseApi extends BaseModule } } + /** + * Set the "link" header with "next" and "prev" links + * @return void + */ + protected static function setLinkHeaderByOffsetLimit(int $offset, int $limit) + { + $header = self::getOffsetAndLimitLinkHeader($offset, $limit); + if (!empty($header)) { + header($header); + } + } + /** * Check if the app is known to support quoted posts * From 9187723263c5b0d87b78bfbdcfa8b8234ee958ce Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 17 Feb 2023 13:24:11 -0500 Subject: [PATCH 09/42] Add link headers to Mastodon trending endpoints --- src/Module/Api/Mastodon/Trends/Links.php | 6 +++++- src/Module/Api/Mastodon/Trends/Statuses.php | 6 +++++- src/Module/Api/Mastodon/Trends/Tags.php | 8 ++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Module/Api/Mastodon/Trends/Links.php b/src/Module/Api/Mastodon/Trends/Links.php index e2a160087..bfb353147 100644 --- a/src/Module/Api/Mastodon/Trends/Links.php +++ b/src/Module/Api/Mastodon/Trends/Links.php @@ -41,7 +41,7 @@ class Links extends BaseApi { $request = $this->getRequest([ 'limit' => 10, // Maximum number of results to return. Defaults to 10. - 'offset' => 0, // Offset page, Defaults to 0. + 'offset' => 0, // Offset in set, Defaults to 0. ], $request); $condition = ["EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-thread-view`.`uri-id` AND `type` = ? AND NOT `name` IS NULL AND NOT `description` IS NULL) AND NOT `private` AND `commented` > ? AND `created` > ?", @@ -56,6 +56,10 @@ class Links extends BaseApi } DBA::close($statuses); + if (!empty($trending)) { + self::setLinkHeaderByOffsetLimit($request['offset'], $request['limit']); + } + System::jsonExit($trending); } } diff --git a/src/Module/Api/Mastodon/Trends/Statuses.php b/src/Module/Api/Mastodon/Trends/Statuses.php index 6ae9c83dd..884319aa4 100644 --- a/src/Module/Api/Mastodon/Trends/Statuses.php +++ b/src/Module/Api/Mastodon/Trends/Statuses.php @@ -44,7 +44,7 @@ class Statuses extends BaseApi $request = $this->getRequest([ 'limit' => 10, // Maximum number of results to return. Defaults to 10. - 'offset' => 0, // Offset page, Defaults to 0. + 'offset' => 0, // Offset in set, Defaults to 0. ], $request); $condition = ["NOT `private` AND `commented` > ? AND `created` > ?", DateTimeFormat::utc('now -1 day'), DateTimeFormat::utc('now -1 week')]; @@ -63,6 +63,10 @@ class Statuses extends BaseApi } DBA::close($statuses); + if (!empty($trending)) { + self::setLinkHeaderByOffsetLimit($request['offset'], $request['limit']); + } + System::jsonExit($trending); } } diff --git a/src/Module/Api/Mastodon/Trends/Tags.php b/src/Module/Api/Mastodon/Trends/Tags.php index 21e078b23..2190a2e3c 100644 --- a/src/Module/Api/Mastodon/Trends/Tags.php +++ b/src/Module/Api/Mastodon/Trends/Tags.php @@ -38,7 +38,7 @@ class Tags extends BaseApi { $request = $this->getRequest([ 'limit' => 20, // Maximum number of results to return. Defaults to 20. - 'offset' => 0, // Offset page. Defaults to 0. + 'offset' => 0, // Offset in set. Defaults to 0. 'friendica_local' => false, // Whether to return local tag trends instead of global, defaults to false ], $request); @@ -56,6 +56,10 @@ class Tags extends BaseApi $trending[] = $hashtag->toArray(); } - System::jsonExit(array_slice($trending, 0, $request['limit'])); + if (!empty($trending)) { + self::setLinkHeaderByOffsetLimit($request['offset'], $request['limit']); + } + + System::jsonExit($trending); } } From 40ee96512a3073e0d0063d5202b3551bd27abe4b Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 17 Feb 2023 17:42:00 -0500 Subject: [PATCH 10/42] Add extension to Mastodon Status object for Friendica-specific things - first entry is the title --- src/Object/Api/Mastodon/Status.php | 4 ++ .../Mastodon/Status/FriendicaExtension.php | 53 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/Object/Api/Mastodon/Status/FriendicaExtension.php diff --git a/src/Object/Api/Mastodon/Status.php b/src/Object/Api/Mastodon/Status.php index e3f322778..bcbe1deeb 100644 --- a/src/Object/Api/Mastodon/Status.php +++ b/src/Object/Api/Mastodon/Status.php @@ -25,6 +25,7 @@ use Friendica\BaseDataTransferObject; use Friendica\Content\Text\BBCode; use Friendica\Model\Item; use Friendica\Object\Api\Mastodon\Status\Counts; +use Friendica\Object\Api\Mastodon\Status\FriendicaExtension; use Friendica\Object\Api\Mastodon\Status\UserAttributes; use Friendica\Util\DateTimeFormat; @@ -95,6 +96,8 @@ class Status extends BaseDataTransferObject protected $card = null; /** @var Poll|null */ protected $poll = null; + /** @var FriendicaExtension|null */ + protected $friendica = null; /** * Creates a status record from an item record. @@ -148,6 +151,7 @@ class Status extends BaseDataTransferObject $this->emojis = []; $this->card = $card->toArray() ?: null; $this->poll = $poll; + $this->friendica = new FriendicaExtension($item['title']); } /** diff --git a/src/Object/Api/Mastodon/Status/FriendicaExtension.php b/src/Object/Api/Mastodon/Status/FriendicaExtension.php new file mode 100644 index 000000000..1a63f7606 --- /dev/null +++ b/src/Object/Api/Mastodon/Status/FriendicaExtension.php @@ -0,0 +1,53 @@ +. + * + */ + +namespace Friendica\Object\Api\Mastodon\Status; + +use Friendica\BaseDataTransferObject; + +/** + * Class FriendicaExtension + * + * Additional fields on Mastodon Statuses for storing Friendica specific data + * + * @see https://docs.joinmastodon.org/entities/status + */ +class FriendicaExtension extends BaseDataTransferObject +{ + /** @var string */ + protected $title; + + /** + * Creates a status count object + * + * @param string $title + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + public function __construct(string $title) + { + $this->title = $title; + } + + public function __get($name) + { + return $this->$name; + } +} From f10821f915dda47aa5cc06b8a7bd46510d86d7cd Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 17 Feb 2023 17:42:55 -0500 Subject: [PATCH 11/42] Add friendica->title input to Mastodon Status POST API for explicitly setting title - update logic so that if it is provided with a spoiler text then the spoiler text is always used as actual spoiler text and the title is the title. --- src/Module/Api/Mastodon/Statuses.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Module/Api/Mastodon/Statuses.php b/src/Module/Api/Mastodon/Statuses.php index c803835d1..602087025 100644 --- a/src/Module/Api/Mastodon/Statuses.php +++ b/src/Module/Api/Mastodon/Statuses.php @@ -107,6 +107,7 @@ class Statuses extends BaseApi 'visibility' => '', // Visibility of the posted status. One of: "public", "unlisted", "private" or "direct". 'scheduled_at' => '', // ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future. 'language' => '', // ISO 639 language code for this status. + 'friendica' => [], // Friendica extensions to the standard Mastodon API spec ], $request); $owner = User::getOwnerDataById($uid); @@ -208,8 +209,13 @@ class Statuses extends BaseApi $item['quote-uri-id'] = $request['quote_id']; } + $has_title = array_key_exists('title', $request['friendica']); + if ($has_title != null && !$request['in_reply_to_id']) { + $item['title'] = $request['friendica']['title']; + } + if (!empty($request['spoiler_text'])) { - if (!$request['in_reply_to_id'] && DI::pConfig()->get($uid, 'system', 'api_spoiler_title', true)) { + if (!$has_title && !$request['in_reply_to_id'] && DI::pConfig()->get($uid, 'system', 'api_spoiler_title', true)) { $item['title'] = $request['spoiler_text']; } else { $item['body'] = '[abstract=' . Protocol::ACTIVITYPUB . ']' . $request['spoiler_text'] . "[/abstract]\n" . $item['body']; From 4b2ee284d8b5e4e8fd6193678b005670719557bc Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Sat, 18 Feb 2023 10:07:08 -0500 Subject: [PATCH 12/42] Change check for friendica-title key to use isa and always set --- src/Module/Api/Mastodon/Statuses.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Module/Api/Mastodon/Statuses.php b/src/Module/Api/Mastodon/Statuses.php index 602087025..38eeb877c 100644 --- a/src/Module/Api/Mastodon/Statuses.php +++ b/src/Module/Api/Mastodon/Statuses.php @@ -209,13 +209,10 @@ class Statuses extends BaseApi $item['quote-uri-id'] = $request['quote_id']; } - $has_title = array_key_exists('title', $request['friendica']); - if ($has_title != null && !$request['in_reply_to_id']) { - $item['title'] = $request['friendica']['title']; - } + $item['title'] = $request['friendica']['title'] ?? ''; if (!empty($request['spoiler_text'])) { - if (!$has_title && !$request['in_reply_to_id'] && DI::pConfig()->get($uid, 'system', 'api_spoiler_title', true)) { + if (!isset($request['friendica']['title']) && !$request['in_reply_to_id'] && DI::pConfig()->get($uid, 'system', 'api_spoiler_title', true)) { $item['title'] = $request['spoiler_text']; } else { $item['body'] = '[abstract=' . Protocol::ACTIVITYPUB . ']' . $request['spoiler_text'] . "[/abstract]\n" . $item['body']; From 45749c14be69aeff3000c33766e5248146f87fef Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 18 Feb 2023 20:24:48 +0100 Subject: [PATCH 13/42] Refactor BaseURL.php to UriInterface compatible class - remove parts - added tests --- src/App/BaseURL.php | 318 ++++------------------ tests/src/App/BaseURLTest.php | 191 +++++++++++++ tests/src/Util/BaseURLTest.php | 473 --------------------------------- 3 files changed, 237 insertions(+), 745 deletions(-) create mode 100644 tests/src/App/BaseURLTest.php delete mode 100644 tests/src/Util/BaseURLTest.php diff --git a/src/App/BaseURL.php b/src/App/BaseURL.php index 564527a65..8c046fda3 100644 --- a/src/App/BaseURL.php +++ b/src/App/BaseURL.php @@ -23,284 +23,66 @@ namespace Friendica\App; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\System; -use Friendica\Util\Network; use Friendica\Util\Strings; use Friendica\Network\HTTPException; +use GuzzleHttp\Psr7\ServerRequest; +use GuzzleHttp\Psr7\Uri; +use Psr\Http\Message\UriInterface; +use Psr\Log\LoggerInterface; /** * A class which checks and contains the basic * environment for the BaseURL (url, urlpath, ssl_policy, hostname, scheme) */ -class BaseURL +class BaseURL extends Uri implements UriInterface { - /** - * No SSL necessary - */ - const SSL_POLICY_NONE = 0; - - /** - * SSL is necessary - */ - const SSL_POLICY_FULL = 1; - - /** - * SSL is optional, but preferred - */ - const SSL_POLICY_SELFSIGN = 2; - - /** - * Define the Default SSL scheme - */ - const DEFAULT_SSL_SCHEME = self::SSL_POLICY_SELFSIGN; - - /** - * The Friendica Config - * - * @var IManageConfigValues - */ - private $config; - - /** - * The server side variables - * - * @var array - */ - private $server; - - /** - * The hostname of the Base URL - * - * @var string - */ - private $hostname; - - /** - * The SSL_POLICY of the Base URL - * - * @var int - */ - private $sslPolicy; - - /** - * The URL sub-path of the Base URL - * - * @var string - */ - private $urlPath; - - /** - * The full URL - * - * @var string - */ - private $url; - - /** - * The current scheme of this call - * - * @var string - */ - private $scheme; - - /** - * Returns the hostname of this node - * - * @return string - */ - public function getHostname(): string + public function __construct(IManageConfigValues $config, LoggerInterface $logger, array $server = []) { - return $this->hostname; + $url = $config->get('system', 'url'); + if (empty($url)) { + $logger->critical('Invalid config - Missing system.url'); + $url = ServerRequest::getUriFromGlobals() + ->withQuery('') + ->withPath($this->determineURLPath($server)); + + parent::__construct((string)$url); + } else { + parent::__construct($url); + } } /** - * Returns the current scheme of this call - * - * @return string + * Figure out if we are running at the top of a domain or in a subdirectory */ - public function getScheme(): string + private function determineURLPath(array $server): string { - return $this->scheme; - } + /* Relative script path to the web server root + * Not all of those $_SERVER properties can be present, so we do by inverse priority order + */ + $relativeScriptPath = + ($server['REDIRECT_URL'] ?? '') ?: + ($server['REDIRECT_URI'] ?? '') ?: + ($server['REDIRECT_SCRIPT_URL'] ?? '') ?: + ($server['SCRIPT_URL'] ?? '') ?: + $server['REQUEST_URI'] ?? ''; - /** - * Returns the SSL policy of this node - * - * @return int - */ - public function getSSLPolicy(): int - { - return $this->sslPolicy; - } - - /** - * Returns the sub-path of this URL - * - * @return string - */ - public function getUrlPath(): string - { - return $this->urlPath; - } - - /** - * Returns the full URL of this call - * - * Note: $ssl parameter value doesn't directly correlate with the resulting protocol - * - * @param bool $ssl True, if ssl should get used - * - * @return string - */ - public function get(bool $ssl = false): string - { - if ($this->sslPolicy === self::SSL_POLICY_SELFSIGN && $ssl) { - return Network::switchScheme($this->url); - } - - return $this->url; - } - - /** - * Save current parts of the base Url - * - * @param string? $hostname - * @param int? $sslPolicy - * @param string? $urlPath - * - * @return bool true, if successful - * @TODO Find proper types - */ - public function save($hostname = null, $sslPolicy = null, $urlPath = null): bool - { - $currUrl = $this->url; - - $configTransaction = $this->config->beginTransaction(); - - if (!empty($hostname) && $hostname !== $this->hostname) { - $configTransaction->set('config', 'hostname', $hostname); - $this->hostname = $hostname; - } - - if (isset($sslPolicy) && $sslPolicy !== $this->sslPolicy) { - $configTransaction->set('system', 'ssl_policy', $sslPolicy); - $this->sslPolicy = $sslPolicy; - } - - if (isset($urlPath) && $urlPath !== $this->urlPath) { - $configTransaction->set('system', 'urlpath', $urlPath); - $this->urlPath = $urlPath; - } - - $this->determineBaseUrl(); - if ($this->url !== $currUrl) { - $configTransaction->set('system', 'url', $this->url); - } - - $configTransaction->commit(); - - return true; - } - - /** - * Save the current url as base URL - * - * @param string $url - * - * @return bool true, if the save was successful - */ - public function saveByURL(string $url): bool - { - $parsed = @parse_url($url); - - if (empty($parsed) || empty($parsed['host'])) { - return false; - } - - $hostname = $parsed['host']; - if (!empty($hostname) && !empty($parsed['port'])) { - $hostname .= ':' . $parsed['port']; - } - - $urlPath = null; - if (!empty($parsed['path'])) { - $urlPath = trim($parsed['path'], '\\/'); - } - - $sslPolicy = null; - if (!empty($parsed['scheme'])) { - if ($parsed['scheme'] == 'https') { - $sslPolicy = BaseURL::SSL_POLICY_FULL; + /* $relativeScriptPath gives /relative/path/to/friendica/module/parameter + * QUERY_STRING gives pagename=module/parameter + * + * To get /relative/path/to/friendica we perform dirname() for as many levels as there are slashes in the QUERY_STRING + */ + if (!empty($relativeScriptPath)) { + // Module + if (!empty($server['QUERY_STRING'])) { + return trim(dirname($relativeScriptPath, substr_count(trim($server['QUERY_STRING'], '/'), '/') + 1), '/'); + } else { + // Root page + $scriptPathParts = explode('?', $relativeScriptPath, 2); + return trim($scriptPathParts[0], '/'); } } - return $this->save($hostname, $sslPolicy, $urlPath); - } - - /** - * Checks, if a redirect to the HTTPS site would be necessary - * - * @return bool - */ - public function checkRedirectHttps() - { - return $this->config->get('system', 'force_ssl') && - ($this->getScheme() == "http") && - intval($this->getSSLPolicy()) == BaseURL::SSL_POLICY_FULL && - strpos($this->get(), 'https://') === 0 && - !empty($this->server['REQUEST_METHOD']) && - $this->server['REQUEST_METHOD'] === 'GET'; - } - - /** - * @param IManageConfigValues $config The Friendica IConfiguration - * @param array $server The $_SERVER array - */ - public function __construct(IManageConfigValues $config, array $server) - { - $this->config = $config; - $this->server = $server; - $this->hostname = $this->config->get('config', 'hostname'); - $this->urlPath = $this->config->get('system', 'urlpath') ?? ''; - $this->sslPolicy = $this->config->get('system', 'ssl_policy') ?? static::DEFAULT_SSL_SCHEME; - $this->url = $this->config->get('system', 'url'); - - if (empty($this->hostname) || empty($this->url)) { - throw new \Exception('Invalid config - Missing system.url or config.hostname'); - } - - $this->determineSchema(); - } - - /** - * Determine the full URL based on all parts - */ - private function determineBaseUrl() - { - $scheme = 'http'; - - if ($this->sslPolicy == self::SSL_POLICY_FULL) { - $scheme = 'https'; - } - - $this->url = $scheme . '://' . $this->hostname . (!empty($this->urlPath) ? '/' . $this->urlPath : ''); - } - - /** - * Determine the scheme of the current used link - */ - private function determineSchema() - { - $this->scheme = 'http'; - - if (!empty($this->server['HTTPS']) || - !empty($this->server['HTTP_FORWARDED']) && preg_match('/proto=https/', $this->server['HTTP_FORWARDED']) || - !empty($this->server['HTTP_X_FORWARDED_PROTO']) && $this->server['HTTP_X_FORWARDED_PROTO'] == 'https' || - !empty($this->server['HTTP_X_FORWARDED_SSL']) && $this->server['HTTP_X_FORWARDED_SSL'] == 'on' || - !empty($this->server['FRONT_END_HTTPS']) && $this->server['FRONT_END_HTTPS'] == 'on' || - !empty($this->server['SERVER_PORT']) && (intval($this->server['SERVER_PORT']) == 443) // XXX: reasonable assumption, but isn't this hardcoding too much? - ) { - $this->scheme = 'https'; - } + return ''; } /** @@ -314,11 +96,11 @@ class BaseURL { // Remove the hostname from the url if it is an internal link $nurl = Strings::normaliseLink($origURL); - $base = Strings::normaliseLink($this->get()); + $base = Strings::normaliseLink($this->__toString()); $url = str_replace($base . '/', '', $nurl); - // if it is an external link return the orignal value - if ($url == Strings::normaliseLink($origURL)) { + // if it is an external link return the original value + if ($url === $nurl) { return $origURL; } else { return $url; @@ -344,15 +126,7 @@ class BaseURL throw new HTTPException\InternalServerErrorException("$toUrl is not a relative path, please use System::externalRedirectTo"); } - $redirectTo = $this->get($ssl) . '/' . ltrim($toUrl, '/'); + $redirectTo = $this->__toString() . '/' . ltrim($toUrl, '/'); System::externalRedirect($redirectTo); } - - /** - * Returns the base url as string - */ - public function __toString(): string - { - return (string) $this->get(); - } } diff --git a/tests/src/App/BaseURLTest.php b/tests/src/App/BaseURLTest.php new file mode 100644 index 000000000..e45b30b20 --- /dev/null +++ b/tests/src/App/BaseURLTest.php @@ -0,0 +1,191 @@ +. + * + */ + +namespace Friendica\Test\src\App; + +use Friendica\App\BaseURL; +use Friendica\Core\Config\Model\ReadOnlyFileConfig; +use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Network\HTTPException\InternalServerErrorException; +use Friendica\Test\MockedTest; +use Psr\Log\NullLogger; + +class BaseURLTest extends MockedTest +{ + public function dataSystemUrl(): array + { + return [ + 'default' => [ + 'input' => ['system' => ['url' => 'https://friendica.local',],], + 'server' => [], + 'assertion' => 'https://friendica.local', + ], + 'subPath' => [ + 'input' => ['system' => ['url' => 'https://friendica.local/subpath',],], + 'server' => [], + 'assertion' => 'https://friendica.local/subpath', + ], + 'empty' => [ + 'input' => [], + 'server' => [], + 'assertion' => 'http://localhost', + ], + 'serverArrayStandard' => [ + 'input' => [], + 'server' => [ + 'HTTPS' => 'on', + 'HTTP_HOST' => 'friendica.server', + 'REQUEST_URI' => '/test/it?with=query', + 'QUERY_STRING' => 'pagename=test/it', + ], + 'assertion' => 'https://friendica.server', + ], + 'serverArraySubPath' => [ + 'input' => [], + 'server' => [ + 'HTTPS' => 'on', + 'HTTP_HOST' => 'friendica.server', + 'REQUEST_URI' => '/test/it/now?with=query', + 'QUERY_STRING' => 'pagename=it/now', + ], + 'assertion' => 'https://friendica.server/test', + ], + 'serverArraySubPath2' => [ + 'input' => [], + 'server' => [ + 'HTTPS' => 'on', + 'HTTP_HOST' => 'friendica.server', + 'REQUEST_URI' => '/test/it/now?with=query', + 'QUERY_STRING' => 'pagename=now', + ], + 'assertion' => 'https://friendica.server/test/it', + ], + 'serverArraySubPath3' => [ + 'input' => [], + 'server' => [ + 'HTTPS' => 'on', + 'HTTP_HOST' => 'friendica.server', + 'REQUEST_URI' => '/test/it/now?with=query', + 'QUERY_STRING' => 'pagename=test/it/now', + ], + 'assertion' => 'https://friendica.server', + ], + 'serverArrayWithoutQueryString1' => [ + 'input' => [], + 'server' => [ + 'HTTPS' => 'on', + 'HTTP_HOST' => 'friendica.server', + 'REQUEST_URI' => '/test/it/now?with=query', + ], + 'assertion' => 'https://friendica.server/test/it/now', + ], + 'serverArrayWithoutQueryString2' => [ + 'input' => [], + 'server' => [ + 'HTTPS' => 'on', + 'HTTP_HOST' => 'friendica.server', + 'REQUEST_URI' => '', + ], + 'assertion' => 'https://friendica.server', + ], + 'serverArrayWithoutQueryString3' => [ + 'input' => [], + 'server' => [ + 'HTTPS' => 'on', + 'HTTP_HOST' => 'friendica.server', + 'REQUEST_URI' => '/', + ], + 'assertion' => 'https://friendica.server', + ], + ]; + } + + /** + * @dataProvider dataSystemUrl + */ + public function testDetermine(array $input, array $server, string $assertion) + { + $origServerGlobal = $_SERVER; + + $_SERVER = array_merge_recursive($_SERVER, $server); + $config = new ReadOnlyFileConfig(new Cache($input)); + + $baseUrl = new BaseURL($config, new NullLogger(), $server); + + self::assertEquals($assertion, (string)$baseUrl); + + $_SERVER = $origServerGlobal; + } + + public function dataRemove(): array + { + return [ + 'same' => [ + 'base' => ['system' => ['url' => 'https://friendica.local',],], + 'origUrl' => 'https://friendica.local/test/picture.png', + 'assertion' => 'test/picture.png', + ], + 'other' => [ + 'base' => ['system' => ['url' => 'https://friendica.local',],], + 'origUrl' => 'https://friendica.other/test/picture.png', + 'assertion' => 'https://friendica.other/test/picture.png', + ], + 'samSubPath' => [ + 'base' => ['system' => ['url' => 'https://friendica.local/test',],], + 'origUrl' => 'https://friendica.local/test/picture.png', + 'assertion' => 'picture.png', + ], + 'otherSubPath' => [ + 'base' => ['system' => ['url' => 'https://friendica.local/test',],], + 'origUrl' => 'https://friendica.other/test/picture.png', + 'assertion' => 'https://friendica.other/test/picture.png', + ], + ]; + } + + /** + * @dataProvider dataRemove + */ + public function testRemove(array $base, string $origUrl, string $assertion) + { + $config = new ReadOnlyFileConfig(new Cache($base)); + $baseUrl = new BaseURL($config, new NullLogger()); + + self::assertEquals($assertion, $baseUrl->remove($origUrl)); + } + + /** + * Test that redirect to external domains fails + */ + public function testRedirectException() + { + self::expectException(InternalServerErrorException::class); + self::expectErrorMessage('https://friendica.other is not a relative path, please use System::externalRedirect'); + + $config = new ReadOnlyFileConfig(new Cache([ + 'system' => [ + 'url' => 'https://friendica.local', + ] + ])); + $baseUrl = new BaseURL($config, new NullLogger()); + $baseUrl->redirect('https://friendica.other'); + } +} diff --git a/tests/src/Util/BaseURLTest.php b/tests/src/Util/BaseURLTest.php deleted file mode 100644 index a72ffc607..000000000 --- a/tests/src/Util/BaseURLTest.php +++ /dev/null @@ -1,473 +0,0 @@ -. - * - */ - -namespace Friendica\Test\src\Util; - -use Friendica\App\BaseURL; -use Friendica\Core\Config\Capability\IManageConfigValues; -use Friendica\Core\Config\Model\DatabaseConfig; -use Friendica\Core\Config\Model\ReadOnlyFileConfig; -use Friendica\Core\Config\Util\ConfigFileManager; -use Friendica\Core\Config\ValueObject\Cache; -use Friendica\Test\DatabaseTest; -use Friendica\Test\Util\CreateDatabaseTrait; -use Friendica\Test\Util\VFSTrait; - -class BaseURLTest extends DatabaseTest -{ - use VFSTrait; - use CreateDatabaseTrait; - - protected function setUp(): void - { - parent::setUp(); - - $this->setUpVfsDir(); - } - - public function dataDefault() - { - return [ - 'null' => [ - 'server' => [], - 'input' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - 'url' => null, - ], - 'assert' => [ - 'hostname' => '', - 'urlPath' => '', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://', - 'scheme' => 'http', - ], - ], - 'WithSubDirectory' => [ - 'server' => [ - 'SERVER_NAME' => 'friendica.local', - 'REDIRECT_URI' => 'test/module/more', - 'QUERY_STRING' => 'module/more', - ], - 'input' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - 'url' => null, - ], - 'assert' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'test', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://friendica.local/test', - 'scheme' => 'http', - ], - ], - 'input' => [ - 'server' => [], - 'input' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'test', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'http://friendica.local/test', - ], - 'assert' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'test', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'http://friendica.local/test', - 'scheme' => 'http', - ], - ], - 'WithHttpsScheme' => [ - 'server' => [ - 'SERVER_NAME' => 'friendica.local', - 'REDIRECT_URI' => 'test/module/more', - 'QUERY_STRING' => 'module/more', - 'HTTPS' => true, - ], - 'input' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - 'url' => null, - ], - 'assert' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'test', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'https://friendica.local/test', - 'scheme' => 'https', - ], - ], - 'WithoutQueryString' => [ - 'server' => [ - 'SERVER_NAME' => 'friendica.local', - 'REDIRECT_URI' => 'test/more', - 'HTTPS' => true, - ], - 'input' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - 'url' => null, - ], - 'assert' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'test/more', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'https://friendica.local/test/more', - 'scheme' => 'https', - ], - ], - 'WithPort' => [ - 'server' => [ - 'SERVER_NAME' => 'friendica.local', - 'SERVER_PORT' => '1234', - 'REDIRECT_URI' => 'test/more', - 'HTTPS' => true, - ], - 'input' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - 'url' => null, - ], - 'assert' => [ - 'hostname' => 'friendica.local:1234', - 'urlPath' => 'test/more', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'https://friendica.local:1234/test/more', - 'scheme' => 'https', - ], - ], - 'With443Port' => [ - 'server' => [ - 'SERVER_NAME' => 'friendica.local', - 'SERVER_PORT' => '443', - 'REDIRECT_URI' => 'test/more', - ], - 'input' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - 'url' => null, - ], - 'assert' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'test/more', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'https://friendica.local/test/more', - 'scheme' => 'https', - ], - ], - 'With80Port' => [ - 'server' => [ - 'SERVER_NAME' => 'friendica.local', - 'SERVER_PORT' => '80', - 'REDIRECT_URI' => 'test/more', - ], - 'input' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - 'url' => null, - ], - 'assert' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'test/more', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://friendica.local/test/more', - 'scheme' => 'http', - ], - ], - ]; - } - - public function dataSave() - { - return [ - 'no_change' => [ - 'input' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'path', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'https://friendica.local/path', - 'force_ssl' => true, - ], - 'save' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'path', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - ], - 'url' => 'https://friendica.local/path', - ], - 'default' => [ - 'input' => [ - 'hostname' => 'friendica.old', - 'urlPath' => 'is/old/path', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://friendica.old/is/old/path', - 'force_ssl' => true, - ], - 'save' => [ - 'hostname' => 'friendica.local', - 'urlPath' => 'new/path', - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - ], - 'url' => 'https://friendica.local/new/path', - ], - 'null' => [ - 'input' => [ - 'hostname' => 'friendica.old', - 'urlPath' => 'is/old/path', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://friendica.old/is/old/path', - 'force_ssl' => true, - ], - 'save' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => null, - ], - 'url' => 'http://friendica.old/is/old/path', - ], - 'changeHostname' => [ - 'input' => [ - 'hostname' => 'friendica.old', - 'urlPath' => 'is/old/path', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://friendica.old/is/old/path', - 'force_ssl' => true, - ], - 'save' => [ - 'hostname' => 'friendica.local', - 'urlPath' => null, - 'sslPolicy' => null, - ], - 'url' => 'http://friendica.local/is/old/path', - ], - 'changeUrlPath' => [ - 'input' => [ - 'hostname' => 'friendica.old', - 'urlPath' => 'is/old/path', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://friendica.old/is/old/path', - 'force_ssl' => true, - ], - 'save' => [ - 'hostname' => null, - 'urlPath' => 'new/path', - 'sslPolicy' => null, - ], - 'url' => 'http://friendica.old/new/path', - ], - 'changeSSLPolicy' => [ - 'input' => [ - 'hostname' => 'friendica.old', - 'urlPath' => 'is/old/path', - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'http://friendica.old/is/old/path', - 'force_ssl' => true, - ], - 'save' => [ - 'hostname' => null, - 'urlPath' => null, - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - ], - 'url' => 'https://friendica.old/is/old/path', - ], - ]; - } - - /** - * Test the save() method - * @dataProvider dataSave - */ - public function testSave($input, $save, $url) - { - $config = new DatabaseConfig($this->getDbInstance(), new Cache([ - 'config' => [ - 'hostname' => $input['hostname'] ?? null, - ], - 'system' => [ - 'urlpath' => $input['urlPath'] ?? null, - 'ssl_policy' => $input['sslPolicy'] ?? null, - 'url' => $input['url'] ?? null, - 'force_ssl' => $input['force_ssl'] ?? null, - ], - ])); - - $baseUrl = new BaseURL($config, []); - - $baseUrl->save($save['hostname'], $save['sslPolicy'], $save['urlPath']); - - self::assertEquals($url, $baseUrl->get()); - } - - /** - * Test the saveByUrl() method - * @dataProvider dataSave - * - * @param $input - * @param $save - * @param $url - */ - public function testSaveByUrl($input, $save, $url) - { - $config = new DatabaseConfig($this->getDbInstance(), new Cache([ - 'config' => [ - 'hostname' => $input['hostname'] ?? null, - ], - 'system' => [ - 'urlpath' => $input['urlPath'] ?? null, - 'ssl_policy' => $input['sslPolicy'] ?? null, - 'url' => $input['url'] ?? null, - 'force_ssl' => $input['force_ssl'] ?? null, - ], - ])); - - $baseUrl = new BaseURL($config, []); - - $baseUrl->saveByURL($url); - - self::assertEquals($url, $baseUrl->get()); - } - - public function dataGetBaseUrl() - { - return [ - 'default' => [ - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'ssl' => false, - 'url' => 'http://friendica.local/new/test', - 'assert' => 'http://friendica.local/new/test', - ], - 'DefaultWithSSL' => [ - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'ssl' => true, - 'url' => 'http://friendica.local/new/test', - 'assert' => 'https://friendica.local/new/test', - ], - 'SSLFullWithSSL' => [ - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'ssl' => true, - 'url' => 'http://friendica.local/new/test', - 'assert' => 'http://friendica.local/new/test', - ], - 'SSLFullWithoutSSL' => [ - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'ssl' => false, - 'url' => 'https://friendica.local/new/test', - 'assert' => 'https://friendica.local/new/test', - ], - 'NoSSLWithSSL' => [ - 'sslPolicy' => BaseURL::SSL_POLICY_NONE, - 'ssl' => true, - 'url' => 'http://friendica.local/new/test', - 'assert' => 'http://friendica.local/new/test', - ], - 'NoSSLWithoutSSL' => [ - 'sslPolicy' => BaseURL::SSL_POLICY_NONE, - 'ssl' => false, - 'url' => 'http://friendica.local/new/test', - 'assert' => 'http://friendica.local/new/test', - ], - ]; - } - - /** - * Test the get() method - * @dataProvider dataGetBaseUrl - */ - public function testGetURL($sslPolicy, $ssl, $url, $assert) - { - $configMock = \Mockery::mock(IManageConfigValues::class); - $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn('friendica.local'); - $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn('new/test'); - $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn($sslPolicy); - $configMock->shouldReceive('get')->with('system', 'url')->andReturn($url); - - $baseUrl = new BaseURL($configMock, []); - - self::assertEquals($assert, $baseUrl->get($ssl)); - } - - public function dataCheckRedirectHTTPS() - { - return [ - 'default' => [ - 'server' => [ - 'REQUEST_METHOD' => 'GET', - 'HTTPS' => true, - ], - 'forceSSL' => false, - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'https://friendica.local', - 'redirect' => false, - ], - 'forceSSL' => [ - 'server' => [ - 'REQUEST_METHOD' => 'GET', - ], - 'forceSSL' => true, - 'sslPolicy' => BaseURL::DEFAULT_SSL_SCHEME, - 'url' => 'https://friendica.local', - 'redirect' => false, - ], - 'forceSSLWithSSLPolicy' => [ - 'server' => [], - 'forceSSL' => true, - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'https://friendica.local', - 'redirect' => false, - ], - 'forceSSLWithSSLPolicyAndGet' => [ - 'server' => [ - 'REQUEST_METHOD' => 'GET', - ], - 'forceSSL' => true, - 'sslPolicy' => BaseURL::SSL_POLICY_FULL, - 'url' => 'https://friendica.local', - 'redirect' => true, - ], - ]; - } - - /** - * Test the checkRedirectHTTPS() method - * @dataProvider dataCheckRedirectHTTPS - */ - public function testCheckRedirectHTTPS($server, $forceSSL, $sslPolicy, $url, $redirect) - { - $configMock = \Mockery::mock(IManageConfigValues::class); - $configMock->shouldReceive('get')->with('config', 'hostname')->andReturn('friendica.local'); - $configMock->shouldReceive('get')->with('system', 'urlpath')->andReturn('new/test'); - $configMock->shouldReceive('get')->with('system', 'ssl_policy')->andReturn($sslPolicy); - $configMock->shouldReceive('get')->with('system', 'url')->andReturn($url); - $configMock->shouldReceive('get')->with('system', 'force_ssl')->andReturn($forceSSL); - - $baseUrl = new BaseURL($configMock, $server); - - self::assertEquals($redirect, $baseUrl->checkRedirectHttps()); - } -} From 96e12be26be356deb8895974b68b383279b8d1b2 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 18 Feb 2023 20:28:01 +0100 Subject: [PATCH 14/42] Remove old config parts - config.hostname - system.urlpath - system.ssl_policy --- config/local-sample.config.php | 1 - database.sql | 2 +- mods/local.config.ci.php | 3 --- mods/local.config.vagrant.php | 3 --- static/dbstructure.config.php | 2 +- update.php | 12 ++++++++++++ 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/config/local-sample.config.php b/config/local-sample.config.php index 2e9c02b42..069e5834f 100644 --- a/config/local-sample.config.php +++ b/config/local-sample.config.php @@ -36,7 +36,6 @@ return [ 'sitename' => 'Friendica Social Network', 'register_policy' => \Friendica\Module\Register::OPEN, 'register_text' => '', - 'hostname' => 'friendica.local', ], 'system' => [ 'default_timezone' => 'UTC', diff --git a/database.sql b/database.sql index e890d7421..053f0c727 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2023.03-dev (Giant Rhubarb) --- DB_UPDATE_VERSION 1514 +-- DB_UPDATE_VERSION 1515 -- ------------------------------------------ diff --git a/mods/local.config.ci.php b/mods/local.config.ci.php index 66e80a809..2da6b2a1a 100644 --- a/mods/local.config.ci.php +++ b/mods/local.config.ci.php @@ -35,7 +35,6 @@ return [ // **************************************************************** 'config' => [ - 'hostname' => 'friendica.local', 'admin_email' => 'admin@friendica.local', 'sitename' => 'Friendica Social Network', 'register_policy' => \Friendica\Module\Register::OPEN, @@ -44,9 +43,7 @@ return [ 'system' => [ 'default_timezone' => 'UTC', 'language' => 'en', - 'ssl_policy' => \Friendica\App\BaseURL::SSL_POLICY_SELFSIGN, 'url' => 'https://friendica.local', - 'urlpath' => '', // don't start unexpected worker.php processes during test! 'worker_dont_fork' => true, ], diff --git a/mods/local.config.vagrant.php b/mods/local.config.vagrant.php index 379ddf185..16426f932 100644 --- a/mods/local.config.vagrant.php +++ b/mods/local.config.vagrant.php @@ -29,7 +29,6 @@ return [ // **************************************************************** 'config' => [ - 'hostname' => '192.168.56.10', 'admin_email' => 'admin@friendica.local', 'sitename' => 'Friendica Social Network', 'register_policy' => \Friendica\Module\Register::OPEN, @@ -39,8 +38,6 @@ return [ 'default_timezone' => 'UTC', 'language' => 'en', 'basepath' => '/vagrant', - 'ssl_policy' => \Friendica\App\BaseURL::SSL_POLICY_SELFSIGN, 'url' => 'https://192.168.56.10', - 'urlpath' => '', ], ]; diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index dcab1d0c8..83c890915 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -55,7 +55,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1514); + define('DB_UPDATE_VERSION', 1515); } return [ diff --git a/update.php b/update.php index 86735f864..63afae8d8 100644 --- a/update.php +++ b/update.php @@ -1287,3 +1287,15 @@ function update_1514() return Update::SUCCESS; } + +function update_1515() +{ + DI::config() + ->beginTransaction() + ->delete('config', 'hostname') + ->delete('system', 'urlpath') + ->delete('system', 'ssl_policy') + ->commit(); + + return Update::SUCCESS; +} From dbb7022ca530e76671c6f66ca6553f8fc7ff2353 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 18 Feb 2023 20:43:49 +0100 Subject: [PATCH 15/42] Refactor Installer due new BaseURL logic --- src/Core/Installer.php | 25 +++---- src/Module/Install.php | 68 +++++++------------ .../01_checks.tpl} | 2 +- .../02_base_config.tpl} | 6 +- .../03_database_config.tpl} | 4 +- .../04_site_settings.tpl} | 4 +- .../05_finished.tpl} | 0 view/templates/{ => install}/local.config.tpl | 5 +- 8 files changed, 39 insertions(+), 75 deletions(-) rename view/templates/{install_checks.tpl => install/01_checks.tpl} (94%) rename view/templates/{install_base.tpl => install/02_base_config.tpl} (74%) rename view/templates/{install_db.tpl => install/03_database_config.tpl} (81%) rename view/templates/{install_settings.tpl => install/04_site_settings.tpl} (80%) rename view/templates/{install_finished.tpl => install/05_finished.tpl} (100%) rename view/templates/{ => install}/local.config.tpl (85%) diff --git a/src/Core/Installer.php b/src/Core/Installer.php index fd8663471..b3d6e2911 100644 --- a/src/Core/Installer.php +++ b/src/Core/Installer.php @@ -158,23 +158,20 @@ class Installer { $basepath = $configCache->get('system', 'basepath'); - $tpl = Renderer::getMarkupTemplate('local.config.tpl'); + $tpl = Renderer::getMarkupTemplate('install/local.config.tpl'); $txt = Renderer::replaceMacros($tpl, [ - '$dbhost' => $configCache->get('database', 'hostname'), - '$dbuser' => $configCache->get('database', 'username'), - '$dbpass' => $configCache->get('database', 'password'), - '$dbdata' => $configCache->get('database', 'database'), + '$dbhost' => $configCache->get('database', 'hostname'), + '$dbuser' => $configCache->get('database', 'username'), + '$dbpass' => $configCache->get('database', 'password'), + '$dbdata' => $configCache->get('database', 'database'), - '$phpath' => $configCache->get('config', 'php_path'), - '$adminmail' => $configCache->get('config', 'admin_email'), - '$hostname' => $configCache->get('config', 'hostname'), + '$phpath' => $configCache->get('config', 'php_path'), + '$adminmail' => $configCache->get('config', 'admin_email'), - '$urlpath' => $configCache->get('system', 'urlpath'), - '$baseurl' => $configCache->get('system', 'url'), - '$sslpolicy' => $configCache->get('system', 'ssl_policy'), - '$basepath' => $basepath, - '$timezone' => $configCache->get('system', 'default_timezone'), - '$language' => $configCache->get('system', 'language'), + '$system_url' => $configCache->get('system', 'url'), + '$basepath' => $basepath, + '$timezone' => $configCache->get('system', 'default_timezone'), + '$language' => $configCache->get('system', 'language'), ]); $result = file_put_contents($basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.config.php', $txt); diff --git a/src/Module/Install.php b/src/Module/Install.php index c1c3cda35..e8093095b 100644 --- a/src/Module/Install.php +++ b/src/Module/Install.php @@ -34,6 +34,7 @@ use Friendica\Util\BasePath; use Friendica\Util\Profiler; use Friendica\Util\Temporal; use Psr\Log\LoggerInterface; +use GuzzleHttp\Psr7\Uri; class Install extends BaseModule { @@ -73,7 +74,7 @@ class Install extends BaseModule /** @var App\Mode */ protected $mode; - public function __construct(App $app, App\Mode $mode, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, Core\Installer $installer, array $server, array $parameters = []) + public function __construct(App $app, BasePath $basePath, App\Mode $mode, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, Core\Installer $installer, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); @@ -94,12 +95,11 @@ class Install extends BaseModule // get basic installation information and save them to the config cache $configCache = $this->app->getConfigCache(); - $basePath = new BasePath($this->app->getBasePath()); $this->installer->setUpCache($configCache, $basePath->getPath()); // We overwrite current theme css, because during install we may not have a working mod_rewrite // so we may not have a css at all. Here we set a static css file for the install procedure pages - Renderer::$theme['stylesheet'] = $this->baseUrl->get() . '/view/install/style.css'; + Renderer::$theme['stylesheet'] = $this->baseUrl . '/view/install/style.css'; $this->currentWizardStep = ($_POST['pass'] ?? '') ?: self::SYSTEM_CHECK; } @@ -117,19 +117,15 @@ class Install extends BaseModule case self::DATABASE_CONFIG: $this->checkSetting($configCache, $_POST, 'config', 'php_path'); - $this->checkSetting($configCache, $_POST, 'config', 'hostname'); - $this->checkSetting($configCache, $_POST, 'system', 'ssl_policy'); $this->checkSetting($configCache, $_POST, 'system', 'basepath'); - $this->checkSetting($configCache, $_POST, 'system', 'urlpath'); + $this->checkSetting($configCache, $_POST, 'system', 'url'); break; case self::SITE_SETTINGS: $this->checkSetting($configCache, $_POST, 'config', 'php_path'); - $this->checkSetting($configCache, $_POST, 'config', 'hostname'); - $this->checkSetting($configCache, $_POST, 'system', 'ssl_policy'); $this->checkSetting($configCache, $_POST, 'system', 'basepath'); - $this->checkSetting($configCache, $_POST, 'system', 'urlpath'); + $this->checkSetting($configCache, $_POST, 'system', 'url'); $this->checkSetting($configCache, $_POST, 'database', 'hostname', Core\Installer::DEFAULT_HOST); $this->checkSetting($configCache, $_POST, 'database', 'username', ''); @@ -146,10 +142,8 @@ class Install extends BaseModule case self::FINISHED: $this->checkSetting($configCache, $_POST, 'config', 'php_path'); - $this->checkSetting($configCache, $_POST, 'config', 'hostname'); - $this->checkSetting($configCache, $_POST, 'system', 'ssl_policy'); $this->checkSetting($configCache, $_POST, 'system', 'basepath'); - $this->checkSetting($configCache, $_POST, 'system', 'urlpath'); + $this->checkSetting($configCache, $_POST, 'system', 'url'); $this->checkSetting($configCache, $_POST, 'database', 'hostname', Core\Installer::DEFAULT_HOST); $this->checkSetting($configCache, $_POST, 'database', 'username', ''); @@ -198,9 +192,9 @@ class Install extends BaseModule case self::SYSTEM_CHECK: $php_path = $configCache->get('config', 'php_path'); - $status = $this->installer->checkEnvironment($this->baseUrl->get(), $php_path); + $status = $this->installer->checkEnvironment($this->baseUrl, $php_path); - $tpl = Renderer::getMarkupTemplate('install_checks.tpl'); + $tpl = Renderer::getMarkupTemplate('install/01_checks.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, '$pass' => $this->t('System check'), @@ -218,43 +212,31 @@ class Install extends BaseModule break; case self::BASE_CONFIG: - $ssl_choices = [ - App\BaseURL::SSL_POLICY_NONE => $this->t("No SSL policy, links will track page SSL state"), - App\BaseURL::SSL_POLICY_FULL => $this->t("Force all links to use SSL"), - App\BaseURL::SSL_POLICY_SELFSIGN => $this->t("Self-signed certificate, use SSL for local links only \x28discouraged\x29") - ]; + $baseUrl = $configCache->get('system', 'url') ? + new Uri($configCache->get('system', 'url')) : + $this->baseUrl; - $tpl = Renderer::getMarkupTemplate('install_base.tpl'); + $tpl = Renderer::getMarkupTemplate('install/02_base_config.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, '$pass' => $this->t('Base settings'), - '$ssl_policy' => ['system-ssl_policy', - $this->t("SSL link policy"), - $configCache->get('system', 'ssl_policy'), - $this->t("Determines whether generated links should be forced to use SSL"), - $ssl_choices], - '$hostname' => ['config-hostname', - $this->t('Host name'), - $configCache->get('config', 'hostname'), - $this->t('Overwrite this field in case the determinated hostname isn\'t right, otherweise leave it as is.'), - $this->t('Required')], '$basepath' => ['system-basepath', $this->t("Base path to installation"), $configCache->get('system', 'basepath'), $this->t("If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."), $this->t('Required')], - '$urlpath' => ['system-urlpath', - $this->t('Sub path of the URL'), - $configCache->get('system', 'urlpath'), - $this->t('Overwrite this field in case the sub path determination isn\'t right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path.'), - ''], + '$system_url' => ['system-url', + $this->t('The Friendica system URL'), + (string)$baseUrl, + $this->t('Overwrite this field in case the system URL determination isn\'t right, otherwise leave it as is.'), + $this->t('Required')], '$php_path' => $configCache->get('config', 'php_path'), '$submit' => $this->t('Submit'), ]); break; case self::DATABASE_CONFIG: - $tpl = Renderer::getMarkupTemplate('install_db.tpl'); + $tpl = Renderer::getMarkupTemplate('install/03_database_config.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, '$pass' => $this->t('Database connection'), @@ -264,10 +246,8 @@ class Install extends BaseModule '$required' => $this->t('Required'), '$requirement_not_satisfied' => $this->t('Requirement not satisfied'), '$checks' => $this->installer->getChecks(), - '$hostname' => $configCache->get('config', 'hostname'), - '$ssl_policy' => $configCache->get('system', 'ssl_policy'), '$basepath' => $configCache->get('system', 'basepath'), - '$urlpath' => $configCache->get('system', 'urlpath'), + '$system_url' => $configCache->get('system', 'url'), '$dbhost' => ['database-hostname', $this->t('Database Server Name'), $configCache->get('database', 'hostname'), @@ -299,16 +279,14 @@ class Install extends BaseModule /* Installed langs */ $lang_choices = $this->l10n->getAvailableLanguages(); - $tpl = Renderer::getMarkupTemplate('install_settings.tpl'); + $tpl = Renderer::getMarkupTemplate('install/04_site_settings.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, '$required' => $this->t('Required'), '$checks' => $this->installer->getChecks(), '$pass' => $this->t('Site settings'), - '$hostname' => $configCache->get('config', 'hostname'), - '$ssl_policy' => $configCache->get('system', 'ssl_policy'), '$basepath' => $configCache->get('system', 'basepath'), - '$urlpath' => $configCache->get('system', 'urlpath'), + '$system_url' => $configCache->get('system', 'url'), '$dbhost' => $configCache->get('database', 'hostname'), '$dbuser' => $configCache->get('database', 'username'), '$dbpass' => $configCache->get('database', 'password'), @@ -341,7 +319,7 @@ class Install extends BaseModule $db_return_text .= $txt; } - $tpl = Renderer::getMarkupTemplate('install_finished.tpl'); + $tpl = Renderer::getMarkupTemplate('install/05_finished.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, '$required' => $this->t('Required'), @@ -365,7 +343,7 @@ class Install extends BaseModule */ private function whatNext(): string { - $baseurl = $this->baseUrl->get(); + $baseurl = $this->baseUrl; return $this->t('

What next

') . "

" . $this->t('IMPORTANT: You will need to [manually] setup a scheduled task for the worker.') diff --git a/view/templates/install_checks.tpl b/view/templates/install/01_checks.tpl similarity index 94% rename from view/templates/install_checks.tpl rename to view/templates/install/01_checks.tpl index 26f47daad..9e8f2b4db 100644 --- a/view/templates/install_checks.tpl +++ b/view/templates/install/01_checks.tpl @@ -1,7 +1,7 @@

{{$title}}

{{$pass}}

-
+ {{foreach $checks as $check}}
{{$check.title nofilter}} diff --git a/view/templates/install_base.tpl b/view/templates/install/02_base_config.tpl similarity index 74% rename from view/templates/install_base.tpl rename to view/templates/install/02_base_config.tpl index a8a6c0ab9..b1269cd32 100644 --- a/view/templates/install_base.tpl +++ b/view/templates/install/02_base_config.tpl @@ -12,13 +12,9 @@ - {{include file="field_select.tpl" field=$ssl_policy}} -
- {{include file="field_input.tpl" field=$hostname}} -
{{include file="field_input.tpl" field=$basepath}}
- {{include file="field_input.tpl" field=$urlpath}} + {{include file="field_input.tpl" field=$system_url}} diff --git a/view/templates/install_db.tpl b/view/templates/install/03_database_config.tpl similarity index 81% rename from view/templates/install_db.tpl rename to view/templates/install/03_database_config.tpl index e41975a94..20eeab513 100644 --- a/view/templates/install_db.tpl +++ b/view/templates/install/03_database_config.tpl @@ -22,10 +22,8 @@ - - - + {{include file="field_input.tpl" field=$dbhost}} diff --git a/view/templates/install_settings.tpl b/view/templates/install/04_site_settings.tpl similarity index 80% rename from view/templates/install_settings.tpl rename to view/templates/install/04_site_settings.tpl index ff857f4c0..4ced7ed27 100644 --- a/view/templates/install_settings.tpl +++ b/view/templates/install/04_site_settings.tpl @@ -7,10 +7,8 @@ - - - + diff --git a/view/templates/install_finished.tpl b/view/templates/install/05_finished.tpl similarity index 100% rename from view/templates/install_finished.tpl rename to view/templates/install/05_finished.tpl diff --git a/view/templates/local.config.tpl b/view/templates/install/local.config.tpl similarity index 85% rename from view/templates/local.config.tpl rename to view/templates/install/local.config.tpl index 24b33b8cd..753698a3f 100644 --- a/view/templates/local.config.tpl +++ b/view/templates/install/local.config.tpl @@ -24,14 +24,11 @@ return [ 'php_path' => '{{$phpath|escape:'quotes' nofilter}}', 'admin_email' => '{{$adminmail|escape:'quotes' nofilter}}', 'sitename' => 'Friendica Social Network', - 'hostname' => '{{$hostname|escape:'quotes' nofilter}}', 'register_policy' => \Friendica\Module\Register::OPEN, 'max_import_size' => 200000, ], 'system' => [ - 'urlpath' => '{{$urlpath|escape:'quotes' nofilter}}', - 'url' => '{{$baseurl|escape:'quotes' nofilter}}', - 'ssl_policy' => {{$sslpolicy|escape:'quotes' nofilter}}, + 'url' => '{{$system_url|escape:'quotes' nofilter}}', 'basepath' => '{{$basepath|escape:'quotes' nofilter}}', 'default_timezone' => '{{$timezone|escape:'quotes' nofilter}}', 'language' => '{{$language|escape:'quotes' nofilter}}', From 402d45d4907c3cae20848e8e07395976267c65ee Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 18 Feb 2023 20:47:52 +0100 Subject: [PATCH 16/42] Move force_ssl behavior --- index.php | 3 ++- src/App.php | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/index.php b/index.php index 34952afcb..90df9c00e 100644 --- a/index.php +++ b/index.php @@ -48,5 +48,6 @@ $a->runFrontend( $dice->create(\Friendica\Content\Nav::class), $dice->create(Friendica\Module\Special\HTTPException::class), new \Friendica\Util\HTTPInputData($_SERVER), - $start_time + $start_time, + $_SERVER ); diff --git a/src/App.php b/src/App.php index 9df62a4e7..792df0f74 100644 --- a/src/App.php +++ b/src/App.php @@ -555,11 +555,12 @@ class App * @param ModuleHTTPException $httpException The possible HTTP Exception container * @param HTTPInputData $httpInput A library for processing PHP input streams * @param float $start_time The start time of the overall script execution + * @param array $server The $_SERVER array * * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - public function runFrontend(App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, Nav $nav, ModuleHTTPException $httpException, HTTPInputData $httpInput, float $start_time) + public function runFrontend(App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, Nav $nav, ModuleHTTPException $httpException, HTTPInputData $httpInput, float $start_time, array $server) { $this->profiler->set($start_time, 'start'); $this->profiler->set(microtime(true), 'classinit'); @@ -575,10 +576,12 @@ class App if (!$this->mode->isInstall()) { // Force SSL redirection - if ($this->baseURL->checkRedirectHttps()) { - System::externalRedirect($this->baseURL->get() . '/' . $this->args->getQueryString()); + if ($this->config->get('system', 'force_ssl') && + (empty($server['HTTPS']) || $server['HTTPS'] === 'off') && + !empty($server['REQUEST_METHOD']) && + $server['REQUEST_METHOD'] === 'GET') { + System::externalRedirect($this->baseURL . '/' . $this->args->getQueryString()); } - Core\Hook::callAll('init_1'); } From 9e6d95284bcd1ec958ac31d4dadaaf424b375bbe Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 18 Feb 2023 20:49:51 +0100 Subject: [PATCH 17/42] Adapt tests to use new BaseURL UriInterface --- tests/src/Content/Text/BBCodeTest.php | 4 +--- tests/src/Core/SystemTest.php | 2 +- tests/src/Model/User/CookieTest.php | 12 ++++++------ .../Module/Api/GnuSocial/GnuSocial/ConfigTest.php | 7 +------ tests/src/Util/EMailerTest.php | 4 ++-- tests/src/Util/Emailer/MailBuilderTest.php | 4 ++-- tests/src/Util/Emailer/SystemMailBuilderTest.php | 4 ++-- 7 files changed, 15 insertions(+), 22 deletions(-) diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index 2cdbb7239..4c1292344 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -34,13 +34,11 @@ class BBCodeTest extends FixtureTest DI::config()->set('system', 'remove_multiplicated_lines', false); DI::config()->set('system', 'no_oembed', false); DI::config()->set('system', 'allowed_link_protocols', []); - DI::config()->set('system', 'url', 'friendica.local'); + DI::config()->set('system', 'url', 'https://friendica.local'); DI::config()->set('system', 'no_smilies', false); DI::config()->set('system', 'big_emojis', false); DI::config()->set('system', 'allowed_oembed', ''); - DI::baseUrl()->save('friendica.local', DI::baseUrl()::SSL_POLICY_FULL, ''); - $config = \HTMLPurifier_HTML5Config::createDefault(); $config->set('HTML.Doctype', 'HTML5'); $config->set('Attr.AllowedRel', [ diff --git a/tests/src/Core/SystemTest.php b/tests/src/Core/SystemTest.php index 9cfbe052c..c47539c79 100644 --- a/tests/src/Core/SystemTest.php +++ b/tests/src/Core/SystemTest.php @@ -32,7 +32,7 @@ class SystemTest extends TestCase private function useBaseUrl() { $baseUrl = \Mockery::mock(BaseURL::class); - $baseUrl->shouldReceive('getHostname')->andReturn('friendica.local')->once(); + $baseUrl->shouldReceive('getHost')->andReturn('friendica.local')->once(); $dice = \Mockery::mock(Dice::class); $dice->shouldReceive('create')->with(BaseURL::class)->andReturn($baseUrl); diff --git a/tests/src/Model/User/CookieTest.php b/tests/src/Model/User/CookieTest.php index 64d5455ef..372645bf3 100644 --- a/tests/src/Model/User/CookieTest.php +++ b/tests/src/Model/User/CookieTest.php @@ -60,7 +60,7 @@ class CookieTest extends MockedTest */ public function testInstance() { - $this->baseUrl->shouldReceive('getSSLPolicy')->andReturn(true)->once(); + $this->baseUrl->shouldReceive('getScheme')->andReturn('https')->once(); $this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn('1235')->once(); $this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn('7')->once(); $this->config->shouldReceive('get')->with('proxy', 'trusted_proxies', '')->andReturn('')->once(); @@ -127,7 +127,7 @@ class CookieTest extends MockedTest */ public function testGet(array $cookieData, bool $hasValues, $uid, $hash, $ip) { - $this->baseUrl->shouldReceive('getSSLPolicy')->andReturn(true)->once(); + $this->baseUrl->shouldReceive('getScheme')->andReturn('https')->once(); $this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn('1235')->once(); $this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn('7')->once(); $this->config->shouldReceive('get')->with('proxy', 'trusted_proxies', '')->andReturn('')->once(); @@ -188,7 +188,7 @@ class CookieTest extends MockedTest */ public function testCheck(string $serverPrivateKey, string $userPrivateKey, string $password, string $assertHash, bool $assertTrue) { - $this->baseUrl->shouldReceive('getSSLPolicy')->andReturn(true)->once(); + $this->baseUrl->shouldReceive('getScheme')->andReturn('https')->once(); $this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn($serverPrivateKey)->once(); $this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn('7')->once(); $this->config->shouldReceive('get')->with('proxy', 'trusted_proxies', '')->andReturn('')->once(); @@ -248,7 +248,7 @@ class CookieTest extends MockedTest */ public function testSet($serverKey, $uid, $password, $privateKey, $assertHash, $remoteIp, $serverArray) { - $this->baseUrl->shouldReceive('getSSLPolicy')->andReturn(true)->once(); + $this->baseUrl->shouldReceive('getScheme')->andReturn('https')->once(); $this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn($serverKey)->once(); $this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn(Cookie::DEFAULT_EXPIRE)->once(); $this->config->shouldReceive('get')->with('proxy', 'trusted_proxies', '')->andReturn('')->once(); @@ -275,7 +275,7 @@ class CookieTest extends MockedTest */ public function testDoubleSet($serverKey, $uid, $password, $privateKey, $assertHash, $remoteIp, $serverArray) { - $this->baseUrl->shouldReceive('getSSLPolicy')->andReturn(true)->once(); + $this->baseUrl->shouldReceive('getScheme')->andReturn('https')->once(); $this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn($serverKey)->once(); $this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn(Cookie::DEFAULT_EXPIRE)->once(); $this->config->shouldReceive('get')->with('proxy', 'trusted_proxies', '')->andReturn('')->once(); @@ -301,7 +301,7 @@ class CookieTest extends MockedTest Cookie::NAME => 'test' ]; - $this->baseUrl->shouldReceive('getSSLPolicy')->andReturn(true)->once(); + $this->baseUrl->shouldReceive('getScheme')->andReturn('https')->once(); $this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn(24)->once(); $this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn(Cookie::DEFAULT_EXPIRE)->once(); $this->config->shouldReceive('get')->with('proxy', 'trusted_proxies', '')->andReturn('')->once(); diff --git a/tests/src/Module/Api/GnuSocial/GnuSocial/ConfigTest.php b/tests/src/Module/Api/GnuSocial/GnuSocial/ConfigTest.php index 6311175d3..b6166fc40 100644 --- a/tests/src/Module/Api/GnuSocial/GnuSocial/ConfigTest.php +++ b/tests/src/Module/Api/GnuSocial/GnuSocial/ConfigTest.php @@ -21,12 +21,9 @@ namespace Friendica\Test\src\Module\Api\GnuSocial\GnuSocial; -use Friendica\App\BaseURL; -use Friendica\App\Router; use Friendica\DI; use Friendica\Module\Api\GNUSocial\GNUSocial\Config; use Friendica\Test\src\Module\Api\ApiTest; -use Friendica\Test\Util\VFSTrait; class ConfigTest extends ApiTest { @@ -35,13 +32,11 @@ class ConfigTest extends ApiTest */ public function testApiStatusnetConfig() { - DI::config()->set('system', 'ssl_policy', BaseURL::SSL_POLICY_FULL); - $response = (new Config(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), [])) ->run($this->httpExceptionMock); $json = $this->toJson($response); - self::assertEquals(DI::config()->get('config', 'hostname'), $json->site->server); + self::assertEquals(DI::baseUrl()->getHost(), $json->site->server); self::assertEquals(DI::config()->get('system', 'theme'), $json->site->theme); self::assertEquals(DI::baseUrl() . '/images/friendica-64.png', $json->site->logo); self::assertTrue($json->site->fancy); diff --git a/tests/src/Util/EMailerTest.php b/tests/src/Util/EMailerTest.php index b43482b30..6432d5800 100644 --- a/tests/src/Util/EMailerTest.php +++ b/tests/src/Util/EMailerTest.php @@ -68,8 +68,8 @@ class EMailerTest extends MockedTest $this->pConfig = \Mockery::mock(IManagePersonalConfigValues::class); $this->l10n = \Mockery::mock(L10n::class); $this->baseUrl = \Mockery::mock(BaseURL::class); - $this->baseUrl->shouldReceive('getHostname')->andReturn('friendica.local'); - $this->baseUrl->shouldReceive('get')->andReturn('http://friendica.local'); + $this->baseUrl->shouldReceive('getHost')->andReturn('friendica.local'); + $this->baseUrl->shouldReceive('__toString')->andReturn('http://friendica.local'); } protected function tearDown(): void diff --git a/tests/src/Util/Emailer/MailBuilderTest.php b/tests/src/Util/Emailer/MailBuilderTest.php index 76d2ef191..ecfed9f08 100644 --- a/tests/src/Util/Emailer/MailBuilderTest.php +++ b/tests/src/Util/Emailer/MailBuilderTest.php @@ -60,8 +60,8 @@ class MailBuilderTest extends MockedTest $this->config = \Mockery::mock(IManageConfigValues::class); $this->l10n = \Mockery::mock(L10n::class); $this->baseUrl = \Mockery::mock(BaseURL::class); - $this->baseUrl->shouldReceive('getHostname')->andReturn('friendica.local'); - $this->baseUrl->shouldReceive('get')->andReturn('http://friendica.local'); + $this->baseUrl->shouldReceive('getHost')->andReturn('friendica.local'); + $this->baseUrl->shouldReceive('__toString')->andReturn('http://friendica.local'); $this->defaultHeaders = []; } diff --git a/tests/src/Util/Emailer/SystemMailBuilderTest.php b/tests/src/Util/Emailer/SystemMailBuilderTest.php index 13262d207..fe3b57096 100644 --- a/tests/src/Util/Emailer/SystemMailBuilderTest.php +++ b/tests/src/Util/Emailer/SystemMailBuilderTest.php @@ -54,8 +54,8 @@ class SystemMailBuilderTest extends MockedTest return $msg; }); $this->baseUrl = \Mockery::mock(BaseURL::class); - $this->baseUrl->shouldReceive('getHostname')->andReturn('friendica.local'); - $this->baseUrl->shouldReceive('get')->andReturn('http://friendica.local'); + $this->baseUrl->shouldReceive('getHost')->andReturn('friendica.local'); + $this->baseUrl->shouldReceive('__toString')->andReturn('http://friendica.local'); } /** From f0c29edcde0ab15150147a3ebae40ca628197fde Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 18 Feb 2023 20:57:30 +0100 Subject: [PATCH 18/42] Adapt BaseURL calls to new UriInterface --- mod/message.php | 6 +- src/App/Page.php | 2 +- src/Console/AutomaticInstallation.php | 3 +- src/Console/MoveToAvatarCache.php | 2 +- src/Console/Relocate.php | 5 +- src/Content/Conversation.php | 6 +- src/Content/Item.php | 2 +- src/Content/Nav.php | 2 +- src/Content/Text/BBCode.php | 6 +- src/Core/Cache/Factory/Cache.php | 2 +- src/Core/Renderer.php | 2 +- src/Core/Session/Type/Native.php | 2 +- src/Core/System.php | 4 +- src/Factory/Api/Friendica/Photo.php | 2 +- src/Model/Contact.php | 2 +- src/Model/Item.php | 6 +- src/Model/Nodeinfo.php | 2 +- src/Model/Photo.php | 4 +- src/Model/Profile.php | 8 +-- src/Model/User.php | 10 ++-- src/Model/User/Cookie.php | 2 +- src/Module/ActivityPub/Objects.php | 2 +- src/Module/Admin/Addons/Details.php | 2 +- src/Module/Admin/Addons/Index.php | 2 +- src/Module/Admin/DBSync.php | 4 +- src/Module/Admin/Features.php | 2 +- src/Module/Admin/Logs/Settings.php | 2 +- src/Module/Admin/Logs/View.php | 2 +- src/Module/Admin/Site.php | 57 ++----------------- src/Module/Admin/Storage.php | 2 +- src/Module/Admin/Summary.php | 10 ++-- src/Module/Admin/Themes/Details.php | 4 +- src/Module/Admin/Themes/Embed.php | 2 +- src/Module/Admin/Themes/Index.php | 2 +- src/Module/Api/GNUSocial/GNUSocial/Config.php | 6 +- src/Module/Api/Twitter/ContactEndpoint.php | 2 +- src/Module/Blocklist/Domain/Download.php | 2 +- src/Module/Bookmarklet.php | 2 +- src/Module/Contact.php | 2 +- src/Module/Contact/Profile.php | 2 +- src/Module/Contact/Redir.php | 2 +- src/Module/Debug/Localtime.php | 2 +- src/Module/Diaspora/Fetch.php | 2 +- src/Module/Friendica.php | 10 ++-- src/Module/HCard.php | 10 ++-- src/Module/Help.php | 2 +- src/Module/Home.php | 2 +- src/Module/Invite.php | 6 +- src/Module/Magic.php | 4 +- src/Module/Manifest.php | 18 +++--- src/Module/Moderation/Blocklist/Contact.php | 2 +- .../Moderation/Blocklist/Server/Add.php | 2 +- .../Moderation/Blocklist/Server/Import.php | 2 +- .../Moderation/Blocklist/Server/Index.php | 2 +- src/Module/Moderation/Users/Active.php | 4 +- src/Module/Moderation/Users/Blocked.php | 2 +- src/Module/Moderation/Users/Create.php | 2 +- src/Module/Moderation/Users/Deleted.php | 2 +- src/Module/Moderation/Users/Index.php | 4 +- src/Module/Moderation/Users/Pending.php | 2 +- src/Module/NodeInfo210.php | 2 +- src/Module/Notifications/Ping.php | 4 +- src/Module/OpenSearch.php | 4 +- src/Module/Profile/Profile.php | 2 +- src/Module/Profile/Schedule.php | 2 +- src/Module/Profile/UnkMail.php | 2 +- src/Module/ReallySimpleDiscovery.php | 2 +- src/Module/Register.php | 10 ++-- src/Module/Security/Login.php | 4 +- src/Module/Security/OpenID.php | 4 +- src/Module/Security/PasswordTooLong.php | 2 +- src/Module/Settings/Account.php | 4 +- src/Module/Settings/Display.php | 2 +- src/Module/Settings/OAuth.php | 2 +- src/Module/Settings/Profile/Index.php | 4 +- src/Module/WellKnown/HostMeta.php | 4 +- src/Module/WellKnown/NodeInfo.php | 4 +- src/Module/WellKnown/XSocialRelay.php | 8 +-- src/Module/Xrd.php | 6 +- .../Factory/FormattedNavNotification.php | 4 +- .../Notifications/Factory/FormattedNotify.php | 16 +++--- .../Notifications/Factory/Introduction.php | 4 +- .../Notifications/Repository/Notify.php | 10 ++-- src/Network/HTTPClient/Factory/HttpClient.php | 2 +- src/Network/Probe.php | 2 +- src/Object/Api/Mastodon/Account.php | 2 +- src/Object/Api/Mastodon/Instance.php | 4 +- src/Object/Api/Mastodon/Mention.php | 2 +- src/Protocol/ActivityPub/Transmitter.php | 2 +- src/Protocol/Delivery.php | 4 +- src/Protocol/Feed.php | 2 +- src/Protocol/OStatus.php | 4 +- src/Security/Authentication.php | 8 +-- src/Security/ExAuth.php | 4 +- src/Util/EMailer/MailBuilder.php | 6 +- src/Util/Emailer.php | 2 +- src/Worker/NodeInfo.php | 2 +- src/Worker/Notifier.php | 2 +- src/Worker/PushSubscription.php | 2 +- view/theme/frio/php/default.php | 2 +- view/theme/smoothly/theme.php | 30 +++++++++- 101 files changed, 218 insertions(+), 241 deletions(-) diff --git a/mod/message.php b/mod/message.php index 726db0a75..c5d923de0 100644 --- a/mod/message.php +++ b/mod/message.php @@ -58,7 +58,7 @@ function message_init(App $a) $head_tpl = Renderer::getMarkupTemplate('message-head.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($head_tpl, [ - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$base' => $base ]); } @@ -178,7 +178,7 @@ function message_content(App $a) $tpl = Renderer::getMarkupTemplate('msg-header.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$nickname' => $a->getLoggedInUserNickname(), '$linkurl' => DI::l10n()->t('Please enter a link URL:') ]); @@ -284,7 +284,7 @@ function message_content(App $a) $tpl = Renderer::getMarkupTemplate('msg-header.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$nickname' => $a->getLoggedInUserNickname(), '$linkurl' => DI::l10n()->t('Please enter a link URL:') ]); diff --git a/src/App/Page.php b/src/App/Page.php index a91d400ee..e22625212 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -523,7 +523,7 @@ class Page implements ArrayAccess header("X-Friendica-Version: " . App::VERSION); header("Content-type: text/html; charset=utf-8"); - if ($config->get('system', 'hsts') && ($baseURL->getSSLPolicy() == BaseURL::SSL_POLICY_FULL)) { + if ($config->get('system', 'hsts') && ($baseURL->getScheme() === 'https')) { header("Strict-Transport-Security: max-age=31536000"); } diff --git a/src/Console/AutomaticInstallation.php b/src/Console/AutomaticInstallation.php index 83c6ac4c3..1ce516e25 100644 --- a/src/Console/AutomaticInstallation.php +++ b/src/Console/AutomaticInstallation.php @@ -199,8 +199,7 @@ HELP; $this->out('The Friendica URL has to be set during CLI installation.'); return 1; } else { - $baseUrl = new BaseURL($this->config, []); - $baseUrl->saveByURL($url); + $configCache->set('system', 'url', $url); } $installer->createConfig($configCache); diff --git a/src/Console/MoveToAvatarCache.php b/src/Console/MoveToAvatarCache.php index 13a8debcb..055b0c2c0 100644 --- a/src/Console/MoveToAvatarCache.php +++ b/src/Console/MoveToAvatarCache.php @@ -94,7 +94,7 @@ HELP; $fields = ['id', 'avatar', 'photo', 'thumb', 'micro', 'uri-id', 'url', 'avatar', 'network']; $condition = ["NOT `self` AND `avatar` != ? AND `photo` LIKE ? AND `uid` = ? AND `uri-id` != ? AND NOT `uri-id` IS NULL AND NOT `network` IN (?, ?)", - '', $this->baseUrl->get() . '/photo/%', 0, 0, Protocol::MAIL, Protocol::FEED]; + '', $this->baseUrl . '/photo/%', 0, 0, Protocol::MAIL, Protocol::FEED]; $count = 0; $total = $this->dba->count('contact', $condition); diff --git a/src/Console/Relocate.php b/src/Console/Relocate.php index c63434cbb..a6fdd8bfb 100644 --- a/src/Console/Relocate.php +++ b/src/Console/Relocate.php @@ -92,9 +92,9 @@ HELP; throw new \InvalidArgumentException('Can not parse new base URL. Must have at least ://'); } - $this->out(sprintf('Relocation started from %s to %s. Could take a while to complete.', $this->baseUrl->get(true), $this->getArgument(0))); + $this->out(sprintf('Relocation started from %s to %s. Could take a while to complete.', $this->baseUrl, $this->getArgument(0))); - $old_url = $this->baseUrl->get(true); + $old_url = $this->baseUrl; // Generate host names for relocation the addresses in the format user@address.tld $new_host = str_replace('http://', '@', Strings::normaliseLink($new_url)); @@ -179,7 +179,6 @@ HELP; // update config $this->out('Updating config values'); $this->config->set('system', 'url', $new_url); - $this->baseUrl->saveByURL($new_url); $this->database->commit(); } catch (\Throwable $e) { diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index de4b69038..4dd52ebff 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -314,7 +314,7 @@ class Conversation $tpl = Renderer::getMarkupTemplate('jot-header.tpl'); $this->page['htmlhead'] .= Renderer::replaceMacros($tpl, [ '$newpost' => 'true', - '$baseurl' => $this->baseURL->get(true), + '$baseurl' => $this->baseURL, '$geotag' => $geotag, '$nickname' => $x['nickname'], '$ispublic' => $this->l10n->t('Visible to everybody'), @@ -385,7 +385,7 @@ class Conversation '$posttype' => $notes_cid ? ItemModel::PT_PERSONAL_NOTE : ItemModel::PT_ARTICLE, '$content' => $x['content'] ?? '', '$post_id' => $x['post_id'] ?? '', - '$baseurl' => $this->baseURL->get(true), + '$baseurl' => $this->baseURL, '$defloc' => $x['default_location'], '$visitor' => $x['visitor'], '$pvisit' => $notes_cid ? 'none' : $x['visitor'], @@ -784,7 +784,7 @@ class Conversation } $o = Renderer::replaceMacros($page_template, [ - '$baseurl' => $this->baseURL->get($ssl_state), + '$baseurl' => $this->baseURL, '$return_path' => $this->args->getQueryString(), '$live_update' => $live_update_div, '$remove' => $this->l10n->t('remove'), diff --git a/src/Content/Item.php b/src/Content/Item.php index 0d47cde92..2e86fb82d 100644 --- a/src/Content/Item.php +++ b/src/Content/Item.php @@ -903,7 +903,7 @@ class Item if ($post['attach']) { $post['attach'] .= ','; } - $post['attach'] .= Post\Media::getAttachElement($this->baseURL->get() . '/attach/' . $attachment['id'], + $post['attach'] .= Post\Media::getAttachElement($this->baseURL . '/attach/' . $attachment['id'], $attachment['filesize'], $attachment['filetype'], $attachment['filename'] ?? ''); $fields = ['allow_cid' => $post['allow_cid'], 'allow_gid' => $post['allow_gid'], diff --git a/src/Content/Nav.php b/src/Content/Nav.php index 63eeede89..55d9b3d51 100644 --- a/src/Content/Nav.php +++ b/src/Content/Nav.php @@ -194,7 +194,7 @@ class Nav $myident = !empty($this->session->getLocalUserNickname()) ? $this->session->getLocalUserNickname() . '@' : ''; - $sitelocation = $myident . substr($this->baseUrl->get($ssl_state), strpos($this->baseUrl->get($ssl_state), '//') + 2); + $sitelocation = $myident . substr($this->baseUrl, strpos($this->baseUrl, '//') + 2); $nav = [ 'admin' => null, diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 83056b269..6730309e6 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1274,7 +1274,7 @@ class BBCode private static function cleanPictureLinksCallback(array $match): string { // When the picture link is the own photo path then we can avoid fetching the link - $own_photo_url = preg_quote(Strings::normaliseLink(DI::baseUrl()->get()) . '/photos/'); + $own_photo_url = preg_quote(Strings::normaliseLink(DI::baseUrl()) . '/photos/'); if (preg_match('|' . $own_photo_url . '.*?/image/|', Strings::normaliseLink($match[1]))) { if (!empty($match[3])) { $text = '[img=' . str_replace('-1.', '-0.', $match[2]) . ']' . $match[3] . '[/img]'; @@ -2099,8 +2099,8 @@ class BBCode // Default iframe allowed domains/path $allowedIframeDomains = [ - DI::baseUrl()->getHostname() - . (DI::baseUrl()->getUrlPath() ? '/' . DI::baseUrl()->getUrlPath() : '') + DI::baseUrl()->getHost() + . (DI::baseUrl()->getPath() ? '/' . DI::baseUrl()->getPath() : '') . '/oembed/', # The path part has to change with the source in Content\Oembed::iframe 'www.youtube.com/embed/', 'player.vimeo.com/video/', diff --git a/src/Core/Cache/Factory/Cache.php b/src/Core/Cache/Factory/Cache.php index 715a09f4a..107c6ab21 100644 --- a/src/Core/Cache/Factory/Cache.php +++ b/src/Core/Cache/Factory/Cache.php @@ -73,7 +73,7 @@ class Cache public function __construct(BaseURL $baseURL, IManageConfigValues $config, Database $dba, Profiler $profiler, LoggerInterface $logger) { - $this->hostname = $baseURL->getHostname(); + $this->hostname = $baseURL->getHost(); $this->config = $config; $this->dba = $dba; $this->profiler = $profiler; diff --git a/src/Core/Renderer.php b/src/Core/Renderer.php index 0204d54b5..7f11f3f8e 100644 --- a/src/Core/Renderer.php +++ b/src/Core/Renderer.php @@ -76,7 +76,7 @@ class Renderer DI::profiler()->startRecording('rendering'); // pass $baseurl to all templates if it isn't set - $vars = array_merge(['$baseurl' => DI::baseUrl()->get(), '$APP' => DI::app()], $vars); + $vars = array_merge(['$baseurl' => DI::baseUrl(), '$APP' => DI::app()], $vars); $t = self::getTemplateEngine(); diff --git a/src/Core/Session/Type/Native.php b/src/Core/Session/Type/Native.php index 943050e05..2804a7346 100644 --- a/src/Core/Session/Type/Native.php +++ b/src/Core/Session/Type/Native.php @@ -37,7 +37,7 @@ class Native extends AbstractSession implements IHandleSessions ini_set('session.use_only_cookies', 1); ini_set('session.cookie_httponly', (int)Cookie::HTTPONLY); - if ($baseURL->getSSLPolicy() == App\BaseURL::SSL_POLICY_FULL) { + if ($baseURL->getScheme() === 'https') { ini_set('session.cookie_secure', 1); } diff --git a/src/Core/System.php b/src/Core/System.php index bbcb3ab09..107303d6a 100644 --- a/src/Core/System.php +++ b/src/Core/System.php @@ -401,7 +401,7 @@ class System if (is_bool($prefix) && !$prefix) { $prefix = ''; } elseif (empty($prefix)) { - $prefix = hash('crc32', DI::baseUrl()->getHostname()); + $prefix = hash('crc32', DI::baseUrl()->getHost()); } while (strlen($prefix) < ($size - 13)) { @@ -604,7 +604,7 @@ class System $temppath = BasePath::getRealPath($temppath); // To avoid any interferences with other systems we create our own directory - $new_temppath = $temppath . "/" . DI::baseUrl()->getHostname(); + $new_temppath = $temppath . "/" . DI::baseUrl()->getHost(); if (!is_dir($new_temppath)) { /// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method? mkdir($new_temppath); diff --git a/src/Factory/Api/Friendica/Photo.php b/src/Factory/Api/Friendica/Photo.php index ced0774e8..63592614e 100644 --- a/src/Factory/Api/Friendica/Photo.php +++ b/src/Factory/Api/Friendica/Photo.php @@ -90,7 +90,7 @@ class Photo extends BaseFactory } foreach ($photos as $id => $photo) { - $link = $this->baseUrl->get() . '/photo/' . $data['resource-id'] . '-' . $photo['scale'] . Images::getExtensionByMimeType($data['type']); + $link = $this->baseUrl . '/photo/' . $data['resource-id'] . '-' . $photo['scale'] . Images::getExtensionByMimeType($data['type']); if ($type == 'xml') { $data['links'][$photo['scale'] . ':link']['@attributes'] = [ 'type' => $data['type'], diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 0ff29f888..571253f42 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -570,7 +570,7 @@ class Contact { if (!parse_url($url, PHP_URL_SCHEME)) { $addr_parts = explode('@', $url); - return (count($addr_parts) == 2) && ($addr_parts[1] == DI::baseUrl()->getHostname()); + return (count($addr_parts) == 2) && ($addr_parts[1] == DI::baseUrl()->getHost()); } return Strings::compareLink(self::getBasepath($url, true), DI::baseUrl()); diff --git a/src/Model/Item.php b/src/Model/Item.php index b2daed13e..89390317f 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -408,7 +408,7 @@ class Item if ($notify) { // We have to avoid duplicates. So we create the GUID in form of a hash of the plink or uri. // We add the hash of our own host because our host is the original creator of the post. - $prefix_host = DI::baseUrl()->getHostname(); + $prefix_host = DI::baseUrl()->getHost(); } else { $prefix_host = ''; @@ -2048,7 +2048,7 @@ class Item $guid = System::createUUID(); } - return DI::baseUrl()->get() . '/objects/' . $guid; + return DI::baseUrl() . '/objects/' . $guid; } /** @@ -2288,7 +2288,7 @@ class Item } // Prevent to forward already forwarded posts - if ($datarray['app'] == DI::baseUrl()->getHostname()) { + if ($datarray['app'] == DI::baseUrl()->getHost()) { Logger::info('Already forwarded (second test)'); return false; } diff --git a/src/Model/Nodeinfo.php b/src/Model/Nodeinfo.php index 07f56dd7b..51692f016 100644 --- a/src/Model/Nodeinfo.php +++ b/src/Model/Nodeinfo.php @@ -171,7 +171,7 @@ class Nodeinfo return [ 'name' => $administrator['username'] ?? null, 'contact' => $administrator['email'] ?? null, - 'account' => $administrator['nickname'] ?? '' ? DI::baseUrl()->get() . '/profile/' . $administrator['nickname'] : null, + 'account' => $administrator['nickname'] ?? '' ? DI::baseUrl() . '/profile/' . $administrator['nickname'] : null, ]; } } diff --git a/src/Model/Photo.php b/src/Model/Photo.php index bcb5b20f9..96c82b0c1 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -918,7 +918,7 @@ class Photo */ public static function getResourceData(string $name): array { - $base = DI::baseUrl()->get(); + $base = DI::baseUrl(); $guid = str_replace([Strings::normaliseLink($base), '/photo/'], '', Strings::normaliseLink($name)); @@ -982,7 +982,7 @@ class Photo */ public static function isLocalPage(string $name): bool { - $base = DI::baseUrl()->get(); + $base = DI::baseUrl(); $guid = str_replace(Strings::normaliseLink($base), '', Strings::normaliseLink($name)); $guid = preg_replace("=/photos/.*/image/(.*)=ism", '$1', $guid); diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 8ff942ba4..b30cca8a6 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -334,7 +334,7 @@ class Profile if (!$local_user_is_self) { if (!$visitor_is_authenticated) { // Remote follow is only available for local profiles - if (!empty($profile['nickname']) && strpos($profile_url, DI::baseUrl()->get()) === 0) { + if (!empty($profile['nickname']) && strpos($profile_url, DI::baseUrl()) === 0) { $follow_link = 'profile/' . $profile['nickname'] . '/remote_follow'; } } else { @@ -756,13 +756,13 @@ class Profile $query = rtrim(str_replace($addr_request, '', DI::args()->getQueryString()), '?&'); // The other instance needs to know where to redirect. - $dest = urlencode(DI::baseUrl()->get() . '/' . $query); + $dest = urlencode(DI::baseUrl() . '/' . $query); // We need to extract the basebath from the profile url // to redirect the visitors '/magic' module. $basepath = Contact::getBasepath($contact['url']); - if ($basepath != DI::baseUrl()->get() && !strstr($dest, '/magic')) { + if ($basepath != DI::baseUrl() && !strstr($dest, '/magic')) { $magic_path = $basepath . '/magic' . '?owa=1&dest=' . $dest . '&' . $addr_request; // We have to check if the remote server does understand /magic without invoking something @@ -870,7 +870,7 @@ class Profile $a->setContactId($arr['visitor']['id']); - DI::sysmsg()->addInfo(DI::l10n()->t('OpenWebAuth: %1$s welcomes %2$s', DI::baseUrl()->getHostname(), $visitor['name'])); + DI::sysmsg()->addInfo(DI::l10n()->t('OpenWebAuth: %1$s welcomes %2$s', DI::baseUrl()->getHost(), $visitor['name'])); Logger::info('OpenWebAuth: auth success from ' . $visitor['addr']); } diff --git a/src/Model/User.php b/src/Model/User.php index 75b913250..b0ece9346 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -166,7 +166,7 @@ class User $system['region'] = ''; $system['postal-code'] = ''; $system['country-name'] = ''; - $system['homepage'] = DI::baseUrl()->get(); + $system['homepage'] = DI::baseUrl(); $system['dob'] = '0000-00-00'; // Ensure that the user contains data @@ -219,7 +219,7 @@ class User 'self' => true, 'network' => Protocol::ACTIVITYPUB, 'name' => 'System Account', - 'addr' => $system_actor_name . '@' . DI::baseUrl()->getHostname(), + 'addr' => $system_actor_name . '@' . DI::baseUrl()->getHost(), 'nick' => $system_actor_name, 'url' => DI::baseUrl() . '/friendica', 'pubkey' => $keys['pubkey'], @@ -1023,7 +1023,7 @@ class User $_SESSION['register'] = 1; $_SESSION['openid'] = $openid_url; - $openid = new LightOpenID(DI::baseUrl()->getHostname()); + $openid = new LightOpenID(DI::baseUrl()->getHost()); $openid->identity = $openid_url; $openid->returnUrl = DI::baseUrl() . '/openid'; $openid->required = ['namePerson/friendly', 'contact/email', 'namePerson']; @@ -1360,7 +1360,7 @@ class User $l10n, $user, DI::config()->get('config', 'sitename'), - DI::baseUrl()->get(), + DI::baseUrl(), ($register['password'] ?? '') ?: 'Sent in a previous email' ); } @@ -1457,7 +1457,7 @@ class User Thank you and welcome to %4$s.')); $preamble = sprintf($preamble, $user['username'], DI::config()->get('config', 'sitename')); - $body = sprintf($body, DI::baseUrl()->get(), $user['nickname'], $result['password'], DI::config()->get('config', 'sitename')); + $body = sprintf($body, DI::baseUrl(), $user['nickname'], $result['password'], DI::config()->get('config', 'sitename')); $email = DI::emailer() ->newSystemMail() diff --git a/src/Model/User/Cookie.php b/src/Model/User/Cookie.php index 96e82a3fa..aa89ae227 100644 --- a/src/Model/User/Cookie.php +++ b/src/Model/User/Cookie.php @@ -59,7 +59,7 @@ class Cookie */ public function __construct(App\Request $request, IManageConfigValues $config, App\BaseURL $baseURL, array $COOKIE = []) { - $this->sslEnabled = $baseURL->getSSLPolicy() === App\BaseURL::SSL_POLICY_FULL; + $this->sslEnabled = $baseURL->getScheme() === 'https'; $this->sitePrivateKey = $config->get('system', 'site_prvkey'); $authCookieDays = $config->get('system', 'auth_cookie_lifetime', diff --git a/src/Module/ActivityPub/Objects.php b/src/Module/ActivityPub/Objects.php index 7a396949e..34d460951 100644 --- a/src/Module/ActivityPub/Objects.php +++ b/src/Module/ActivityPub/Objects.php @@ -56,7 +56,7 @@ class Objects extends BaseModule Logger::info('Provided GUID found.', ['guid' => $this->parameters['guid'], 'uri-id' => $itemuri['id']]); } else { // The item URI does not always contain the GUID. This means that we have to search the URL instead - $url = DI::baseUrl()->get() . '/' . DI::args()->getQueryString(); + $url = DI::baseUrl() . '/' . DI::args()->getQueryString(); $nurl = Strings::normaliseLink($url); $ssl_url = str_replace('http://', 'https://', $nurl); diff --git a/src/Module/Admin/Addons/Details.php b/src/Module/Admin/Addons/Details.php index 6786d89ee..51b900d61 100644 --- a/src/Module/Admin/Addons/Details.php +++ b/src/Module/Admin/Addons/Details.php @@ -112,7 +112,7 @@ class Details extends BaseAdmin '$page' => DI::l10n()->t('Addons'), '$toggle' => DI::l10n()->t('Toggle'), '$settings' => DI::l10n()->t('Settings'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$addon' => $addon, '$status' => $status, diff --git a/src/Module/Admin/Addons/Index.php b/src/Module/Admin/Addons/Index.php index 25e6446fa..4ec7a334a 100644 --- a/src/Module/Admin/Addons/Index.php +++ b/src/Module/Admin/Addons/Index.php @@ -68,7 +68,7 @@ class Index extends BaseAdmin '$page' => DI::l10n()->t('Addons'), '$submit' => DI::l10n()->t('Save Settings'), '$reload' => DI::l10n()->t('Reload active addons'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$function' => 'addons', '$addons' => $addons, '$pcount' => count($addons), diff --git a/src/Module/Admin/DBSync.php b/src/Module/Admin/DBSync.php index cbc34eba7..0142bdd6f 100644 --- a/src/Module/Admin/DBSync.php +++ b/src/Module/Admin/DBSync.php @@ -102,13 +102,13 @@ class DBSync extends BaseAdmin if (!count($failed)) { $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/dbsync/structure_check.tpl'), [ - '$base' => DI::baseUrl()->get(true), + '$base' => DI::baseUrl(), '$banner' => DI::l10n()->t('No failed updates.'), '$check' => DI::l10n()->t('Check database structure'), ]); } else { $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/dbsync/failed_updates.tpl'), [ - '$base' => DI::baseUrl()->get(true), + '$base' => DI::baseUrl(), '$banner' => DI::l10n()->t('Failed Updates'), '$desc' => DI::l10n()->t('This does not include updates prior to 1139, which did not return a status.'), '$mark' => DI::l10n()->t("Mark success \x28if update was manually applied\x29"), diff --git a/src/Module/Admin/Features.php b/src/Module/Admin/Features.php index 8878895c8..b9e3b1f64 100644 --- a/src/Module/Admin/Features.php +++ b/src/Module/Admin/Features.php @@ -81,7 +81,7 @@ class Features extends BaseAdmin $tpl = Renderer::getMarkupTemplate('admin/features.tpl'); $o = Renderer::replaceMacros($tpl, [ '$form_security_token' => self::getFormSecurityToken("admin_manage_features"), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$title' => DI::l10n()->t('Manage Additional Features'), '$features' => $features, '$submit' => DI::l10n()->t('Save Settings'), diff --git a/src/Module/Admin/Logs/Settings.php b/src/Module/Admin/Logs/Settings.php index 7cdbfb4f5..34460e1cc 100644 --- a/src/Module/Admin/Logs/Settings.php +++ b/src/Module/Admin/Logs/Settings.php @@ -80,7 +80,7 @@ class Settings extends BaseAdmin '$page' => DI::l10n()->t('Logs'), '$submit' => DI::l10n()->t('Save Settings'), '$clear' => DI::l10n()->t('Clear'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$logname' => DI::config()->get('system', 'logfile'), // see /help/smarty3-templates#1_1 on any Friendica node '$debugging' => ['debugging', DI::l10n()->t("Enable Debugging"), DI::config()->get('system', 'debugging'), ""], diff --git a/src/Module/Admin/Logs/View.php b/src/Module/Admin/Logs/View.php index 3cd00e08c..cd98ae133 100644 --- a/src/Module/Admin/Logs/View.php +++ b/src/Module/Admin/Logs/View.php @@ -80,7 +80,7 @@ class View extends BaseAdmin } } return Renderer::replaceMacros($t, [ - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$title' => DI::l10n()->t('Administration'), '$page' => DI::l10n()->t('View Logs'), '$l10n' => [ diff --git a/src/Module/Admin/Site.php b/src/Module/Admin/Site.php index 39dc9f26d..f1ef5d764 100644 --- a/src/Module/Admin/Site.php +++ b/src/Module/Admin/Site.php @@ -118,7 +118,6 @@ class Site extends BaseAdmin $mail_enabled = !empty($_POST['mail_enabled']); $ostatus_enabled = !empty($_POST['ostatus_enabled']); $diaspora_enabled = !empty($_POST['diaspora_enabled']); - $ssl_policy = (!empty($_POST['ssl_policy']) ? intval($_POST['ssl_policy']) : 0); $force_ssl = !empty($_POST['force_ssl']); $show_help = !empty($_POST['show_help']); $dbclean = !empty($_POST['dbclean']); @@ -152,49 +151,10 @@ class Site extends BaseAdmin Worker::add(Worker::PRIORITY_LOW, 'Directory'); } - if (DI::baseUrl()->getUrlPath() != "") { + if (DI::baseUrl()->getPath() != "") { $diaspora_enabled = false; } - if ($ssl_policy != intval(DI::config()->get('system', 'ssl_policy'))) { - if ($ssl_policy == App\BaseURL::SSL_POLICY_FULL) { - DBA::e("UPDATE `contact` SET - `url` = REPLACE(`url` , 'http:' , 'https:'), - `photo` = REPLACE(`photo` , 'http:' , 'https:'), - `thumb` = REPLACE(`thumb` , 'http:' , 'https:'), - `micro` = REPLACE(`micro` , 'http:' , 'https:'), - `request` = REPLACE(`request`, 'http:' , 'https:'), - `notify` = REPLACE(`notify` , 'http:' , 'https:'), - `poll` = REPLACE(`poll` , 'http:' , 'https:'), - `confirm` = REPLACE(`confirm`, 'http:' , 'https:'), - `poco` = REPLACE(`poco` , 'http:' , 'https:') - WHERE `self` = 1" - ); - DBA::e("UPDATE `profile` SET - `photo` = REPLACE(`photo` , 'http:' , 'https:'), - `thumb` = REPLACE(`thumb` , 'http:' , 'https:') - WHERE 1 " - ); - } elseif ($ssl_policy == App\BaseURL::SSL_POLICY_SELFSIGN) { - DBA::e("UPDATE `contact` SET - `url` = REPLACE(`url` , 'https:' , 'http:'), - `photo` = REPLACE(`photo` , 'https:' , 'http:'), - `thumb` = REPLACE(`thumb` , 'https:' , 'http:'), - `micro` = REPLACE(`micro` , 'https:' , 'http:'), - `request` = REPLACE(`request`, 'https:' , 'http:'), - `notify` = REPLACE(`notify` , 'https:' , 'http:'), - `poll` = REPLACE(`poll` , 'https:' , 'http:'), - `confirm` = REPLACE(`confirm`, 'https:' , 'http:'), - `poco` = REPLACE(`poco` , 'https:' , 'http:') - WHERE `self` = 1" - ); - DBA::e("UPDATE `profile` SET - `photo` = REPLACE(`photo` , 'https:' , 'http:'), - `thumb` = REPLACE(`thumb` , 'https:' , 'http:') - WHERE 1 " - ); - } - } - $transactionConfig->set('system', 'ssl_policy' , $ssl_policy); + $transactionConfig->set('system', 'maxloadavg' , $maxloadavg); $transactionConfig->set('system', 'min_memory' , $min_memory); $transactionConfig->set('system', 'optimize_tables' , $optimize_tables); @@ -408,12 +368,6 @@ class Site extends BaseAdmin Register::OPEN => DI::l10n()->t('Open') ]; - $ssl_choices = [ - App\BaseURL::SSL_POLICY_NONE => DI::l10n()->t('No SSL policy, links will track page SSL state'), - App\BaseURL::SSL_POLICY_FULL => DI::l10n()->t('Force all links to use SSL'), - App\BaseURL::SSL_POLICY_SELFSIGN => DI::l10n()->t('Self-signed certificate, use SSL for local links only (discouraged)') - ]; - $check_git_version_choices = [ 'none' => DI::l10n()->t('Don\'t check'), 'stable' => DI::l10n()->t('check the stable version'), @@ -428,7 +382,7 @@ class Site extends BaseAdmin // ContactRelation::DISCOVERY_ALL => DI::l10n()->t('All'), ]; - $diaspora_able = (DI::baseUrl()->getUrlPath() == ''); + $diaspora_able = (DI::baseUrl()->getPath() == ''); $t = Renderer::getMarkupTemplate('admin/site.tpl'); return Renderer::replaceMacros($t, [ @@ -452,7 +406,7 @@ class Site extends BaseAdmin '$relocate' => DI::l10n()->t('Relocate Node'), '$relocate_msg' => DI::l10n()->t('Relocating your node enables you to change the DNS domain of this node and keep all the existing users and posts. This process takes a while and can only be started from the relocate console command like this:'), '$relocate_cmd' => DI::l10n()->t('(Friendica directory)# bin/console relocate https://newdomain.com'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), // name, label, value, help string, extra data... '$sitename' => ['sitename', DI::l10n()->t('Site name'), DI::config()->get('config', 'sitename'), ''], @@ -464,9 +418,8 @@ class Site extends BaseAdmin '$touch_icon' => ['touch_icon', DI::l10n()->t('Touch icon'), DI::config()->get('system', 'touch_icon'), DI::l10n()->t('Link to an icon that will be used for tablets and mobiles.')], '$additional_info' => ['additional_info', DI::l10n()->t('Additional Info'), $additional_info, DI::l10n()->t('For public servers: you can add additional information here that will be listed at %s/servers.', Search::getGlobalDirectory())], '$language' => ['language', DI::l10n()->t('System language'), DI::config()->get('system', 'language'), '', $lang_choices], - '$theme' => ['theme', DI::l10n()->t('System theme'), DI::config()->get('system', 'theme'), DI::l10n()->t('Default system theme - may be over-ridden by user profiles - Change default theme settings', DI::baseUrl()->get(true) . '/admin/themes'), $theme_choices], + '$theme' => ['theme', DI::l10n()->t('System theme'), DI::config()->get('system', 'theme'), DI::l10n()->t('Default system theme - may be over-ridden by user profiles - Change default theme settings', DI::baseUrl() . '/admin/themes'), $theme_choices], '$theme_mobile' => ['theme_mobile', DI::l10n()->t('Mobile system theme'), DI::config()->get('system', 'mobile-theme', '---'), DI::l10n()->t('Theme for mobile devices'), $theme_choices_mobile], - '$ssl_policy' => ['ssl_policy', DI::l10n()->t('SSL link policy'), DI::config()->get('system', 'ssl_policy'), DI::l10n()->t('Determines whether generated links should be forced to use SSL'), $ssl_choices], '$force_ssl' => ['force_ssl', DI::l10n()->t('Force SSL'), DI::config()->get('system', 'force_ssl'), DI::l10n()->t('Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.')], '$show_help' => ['show_help', DI::l10n()->t('Show help entry from navigation menu'), !DI::config()->get('system', 'hide_help'), DI::l10n()->t('Displays the menu entry for the Help pages from the navigation menu. It is always accessible by calling /help directly.')], '$singleuser' => ['singleuser', DI::l10n()->t('Single user instance'), DI::config()->get('system', 'singleuser', '---'), DI::l10n()->t('Make this instance multi-user or single-user for the named user'), $user_names], diff --git a/src/Module/Admin/Storage.php b/src/Module/Admin/Storage.php index ead4f6d83..8baff7ae2 100644 --- a/src/Module/Admin/Storage.php +++ b/src/Module/Admin/Storage.php @@ -144,7 +144,7 @@ class Storage extends BaseAdmin '$use' => DI::l10n()->t('Use storage backend'), '$save_reload' => DI::l10n()->t('Save & Reload'), '$noconfig' => DI::l10n()->t('This backend doesn\'t have custom settings'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$form_security_token' => self::getFormSecurityToken("admin_storage"), '$storagebackend' => $current_storage_backend instanceof ICanWriteToStorage ? $current_storage_backend::getName() : DI::l10n()->t('Database (legacy)'), '$availablestorageforms' => $available_storage_forms, diff --git a/src/Module/Admin/Summary.php b/src/Module/Admin/Summary.php index b4ea14cf0..6fea2ac6a 100644 --- a/src/Module/Admin/Summary.php +++ b/src/Module/Admin/Summary.php @@ -107,18 +107,18 @@ class Summary extends BaseAdmin // Legacy config file warning if (file_exists('.htconfig.php')) { - $warningtext[] = DI::l10n()->t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from .htconfig.php. See the Config help page for help with the transition.', DI::baseUrl()->get() . '/help/Config'); + $warningtext[] = DI::l10n()->t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from .htconfig.php. See the Config help page for help with the transition.', DI::baseUrl() . '/help/Config'); } if (file_exists('config/local.ini.php')) { - $warningtext[] = DI::l10n()->t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition.', DI::baseUrl()->get() . '/help/Config'); + $warningtext[] = DI::l10n()->t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from config/local.ini.php. See the Config help page for help with the transition.', DI::baseUrl() . '/help/Config'); } // Check server vitality if (!self::checkSelfHostMeta()) { - $well_known = DI::baseUrl()->get() . Probe::HOST_META; + $well_known = DI::baseUrl() . Probe::HOST_META; $warningtext[] = DI::l10n()->t('%s is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See the installation page for help.', - $well_known, $well_known, DI::baseUrl()->get() . '/help/Install'); + $well_known, $well_known, DI::baseUrl() . '/help/Install'); } // Check logfile permission @@ -229,7 +229,7 @@ class Summary extends BaseAdmin private static function checkSelfHostMeta() { // Fetch the host-meta to check if this really is a vital server - return DI::httpClient()->get(DI::baseUrl()->get() . Probe::HOST_META, HttpClientAccept::XRD_XML)->isSuccess(); + return DI::httpClient()->get(DI::baseUrl() . Probe::HOST_META, HttpClientAccept::XRD_XML)->isSuccess(); } } diff --git a/src/Module/Admin/Themes/Details.php b/src/Module/Admin/Themes/Details.php index e3ba26e4a..c6bf3dac3 100644 --- a/src/Module/Admin/Themes/Details.php +++ b/src/Module/Admin/Themes/Details.php @@ -76,7 +76,7 @@ class Details extends BaseAdmin require_once "view/theme/$theme/config.php"; if (function_exists('theme_admin')) { - $admin_form = ''; + $admin_form = ''; } } @@ -91,7 +91,7 @@ class Details extends BaseAdmin '$page' => DI::l10n()->t('Themes'), '$toggle' => DI::l10n()->t('Toggle'), '$settings' => DI::l10n()->t('Settings'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$addon' => $theme, '$status' => $status, '$action' => $action, diff --git a/src/Module/Admin/Themes/Embed.php b/src/Module/Admin/Themes/Embed.php index 1a7dda325..82539eeb0 100644 --- a/src/Module/Admin/Themes/Embed.php +++ b/src/Module/Admin/Themes/Embed.php @@ -95,7 +95,7 @@ class Embed extends BaseAdmin $t = Renderer::getMarkupTemplate('admin/addons/embed.tpl'); return Renderer::replaceMacros($t, [ - '$action' => DI::baseUrl()->get(true) . '/admin/themes/' . $theme . '/embed?mode=minimal', + '$action' => DI::baseUrl() . '/admin/themes/' . $theme . '/embed?mode=minimal', '$form' => $admin_form, '$form_security_token' => self::getFormSecurityToken("admin_theme_settings"), ]); diff --git a/src/Module/Admin/Themes/Index.php b/src/Module/Admin/Themes/Index.php index 9ffe2ca8f..69f516a63 100644 --- a/src/Module/Admin/Themes/Index.php +++ b/src/Module/Admin/Themes/Index.php @@ -112,7 +112,7 @@ class Index extends BaseAdmin '$page' => DI::l10n()->t('Themes'), '$submit' => DI::l10n()->t('Save Settings'), '$reload' => DI::l10n()->t('Reload active themes'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$function' => 'themes', '$addons' => $addons, '$pcount' => count($themes), diff --git a/src/Module/Api/GNUSocial/GNUSocial/Config.php b/src/Module/Api/GNUSocial/GNUSocial/Config.php index 94d155cda..5a8f6aad3 100644 --- a/src/Module/Api/GNUSocial/GNUSocial/Config.php +++ b/src/Module/Api/GNUSocial/GNUSocial/Config.php @@ -37,9 +37,9 @@ class Config extends BaseApi $config = [ 'site' => [ 'name' => DI::config()->get('config', 'sitename'), - 'server' => DI::baseUrl()->getHostname(), + 'server' => DI::baseUrl()->getHost(), 'theme' => DI::config()->get('system', 'theme'), - 'path' => DI::baseUrl()->getUrlPath(), + 'path' => DI::baseUrl()->getPath(), 'logo' => DI::baseUrl() . '/images/friendica-64.png', 'fancy' => true, 'language' => DI::config()->get('system', 'language'), @@ -52,7 +52,7 @@ class Config extends BaseApi 'private' => (bool)DI::config()->get('system', 'block_public'), 'textlimit' => (string) DI::config()->get('config', 'api_import_size', DI::config()->get('config', 'max_import_size')), 'sslserver' => null, - 'ssl' => DI::config()->get('system', 'ssl_policy') == App\BaseURL::SSL_POLICY_FULL ? 'always' : '0', + 'ssl' => DI::baseUrl()->getScheme() === 'https' ? 'always' : '0', 'friendica' => [ 'FRIENDICA_PLATFORM' => App::PLATFORM, 'FRIENDICA_VERSION' => App::VERSION, diff --git a/src/Module/Api/Twitter/ContactEndpoint.php b/src/Module/Api/Twitter/ContactEndpoint.php index d68f1a403..a338d3ce7 100644 --- a/src/Module/Api/Twitter/ContactEndpoint.php +++ b/src/Module/Api/Twitter/ContactEndpoint.php @@ -62,7 +62,7 @@ abstract class ContactEndpoint extends BaseApi if (!$screen_name) { $contact = Contact::getById($contact_id, ['nick', 'url']); // We don't have the followers of remote accounts so we check for locality - if (empty($contact) || !Strings::startsWith($contact['url'], DI::baseUrl()->get())) { + if (empty($contact) || !Strings::startsWith($contact['url'], DI::baseUrl())) { throw new HTTPException\NotFoundException(DI::l10n()->t('Contact not found')); } diff --git a/src/Module/Blocklist/Domain/Download.php b/src/Module/Blocklist/Domain/Download.php index 3a6e9439b..2f367a0aa 100644 --- a/src/Module/Blocklist/Domain/Download.php +++ b/src/Module/Blocklist/Domain/Download.php @@ -59,7 +59,7 @@ class Download extends \Friendica\BaseModule header('Content-Type: text/csv'); header('Content-Transfer-Encoding: Binary'); - header('Content-disposition: attachment; filename="' . $this->baseUrl->getHostname() . '_domain_blocklist_' . substr($hash, 0, 6) . '.csv"'); + header('Content-disposition: attachment; filename="' . $this->baseUrl->getHost() . '_domain_blocklist_' . substr($hash, 0, 6) . '.csv"'); header("Etag: $etag"); $this->blocklist->exportToFile('php://output'); diff --git a/src/Module/Bookmarklet.php b/src/Module/Bookmarklet.php index d915fbf69..959ed71a8 100644 --- a/src/Module/Bookmarklet.php +++ b/src/Module/Bookmarklet.php @@ -47,7 +47,7 @@ class Bookmarklet extends BaseModule } $referer = Strings::normaliseLink($_SERVER['HTTP_REFERER'] ?? ''); - $page = Strings::normaliseLink(DI::baseUrl()->get() . "/bookmarklet"); + $page = Strings::normaliseLink(DI::baseUrl() . "/bookmarklet"); if (!strstr($referer, $page)) { if (empty($_REQUEST["url"])) { diff --git a/src/Module/Contact.php b/src/Module/Contact.php index bc2f2f402..0e378de36 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -220,7 +220,7 @@ class Contact extends BaseModule $tpl = Renderer::getMarkupTemplate('contacts-head.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), ]); $o = ''; diff --git a/src/Module/Contact/Profile.php b/src/Module/Contact/Profile.php index e13fbd584..d56655218 100644 --- a/src/Module/Contact/Profile.php +++ b/src/Module/Contact/Profile.php @@ -236,7 +236,7 @@ class Profile extends BaseModule $_SESSION['return_path'] = $this->args->getQueryString(); $this->page['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('contact_head.tpl'), [ - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, ]); switch ($localRelationship->rel) { diff --git a/src/Module/Contact/Redir.php b/src/Module/Contact/Redir.php index 5457b7442..678019755 100644 --- a/src/Module/Contact/Redir.php +++ b/src/Module/Contact/Redir.php @@ -166,7 +166,7 @@ class Redir extends \Friendica\BaseModule } if ($this->session->getRemoteUserId()) { - $host = substr($this->baseUrl->getUrlPath() . ($this->baseUrl->getUrlPath() ? '/' . $this->baseUrl->getUrlPath() : ''), strpos($this->baseUrl->getUrlPath(), '://') + 3); + $host = substr($this->baseUrl->getPath() . ($this->baseUrl->getPath() ? '/' . $this->baseUrl->getPath() : ''), strpos($this->baseUrl->getPath(), '://') + 3); $remotehost = substr($contact['addr'], strpos($contact['addr'], '@') + 1); // On a local instance we have to check if the local user has already authenticated diff --git a/src/Module/Debug/Localtime.php b/src/Module/Debug/Localtime.php index b07658e5f..519fe751e 100644 --- a/src/Module/Debug/Localtime.php +++ b/src/Module/Debug/Localtime.php @@ -58,7 +58,7 @@ class Localtime extends BaseModule $output .= '

' . DI::l10n()->t('Converted localtime: %s', self::$mod_localtime) . '

'; } - $output .= ''; + $output .= ''; $output .= '

' . DI::l10n()->t('Please select your timezone:') . '

'; $output .= Temporal::getTimezoneSelect(($_REQUEST['timezone'] ?? '') ?: Installer::DEFAULT_TZ); $output .= ''; diff --git a/src/Module/Diaspora/Fetch.php b/src/Module/Diaspora/Fetch.php index 8f2a98a59..6e1259152 100644 --- a/src/Module/Diaspora/Fetch.php +++ b/src/Module/Diaspora/Fetch.php @@ -61,7 +61,7 @@ class Fetch extends BaseModule } $host = $parts["scheme"] . "://" . $parts["host"]; - if (Strings::normaliseLink($host) != Strings::normaliseLink(DI::baseUrl()->get())) { + if (Strings::normaliseLink($host) != Strings::normaliseLink(DI::baseUrl())) { $location = $host . "/fetch/" . DI::args()->getArgv()[1] . "/" . urlencode($guid); System::externalRedirect($location, 301); } diff --git a/src/Module/Friendica.php b/src/Module/Friendica.php index bbcccd7da..2c669e886 100644 --- a/src/Module/Friendica.php +++ b/src/Module/Friendica.php @@ -71,7 +71,7 @@ class Friendica extends BaseModule } $tos = ($config->get('system', 'tosdisplay')) ? - DI::l10n()->t('Read about the Terms of Service of this node.', DI::baseUrl()->get()) : + DI::l10n()->t('Read about the Terms of Service of this node.', DI::baseUrl()) : ''; $blockList = $config->get('system', 'blocklist'); @@ -99,7 +99,7 @@ class Friendica extends BaseModule return Renderer::replaceMacros($tpl, [ 'about' => DI::l10n()->t('This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.', '' . App::VERSION . '', - DI::baseUrl()->get(), + DI::baseUrl(), '' . $config->get('system', 'build') . '/' . DB_UPDATE_VERSION . '', '' . $keyValue->get('post_update_version') . '/' . PostUpdate::VERSION . ''), 'friendica' => DI::l10n()->t('Please visit Friendi.ca to learn more about the Friendica project.'), @@ -151,7 +151,7 @@ class Friendica extends BaseModule if (!empty($administrator)) { $admin = [ 'name' => $administrator['username'], - 'profile' => DI::baseUrl()->get() . '/profile/' . $administrator['nickname'], + 'profile' => DI::baseUrl() . '/profile/' . $administrator['nickname'], ]; } @@ -172,7 +172,7 @@ class Friendica extends BaseModule $data = [ 'version' => App::VERSION, - 'url' => DI::baseUrl()->get(), + 'url' => DI::baseUrl(), 'addons' => $visible_addons, 'locked_features' => $locked_features, 'explicit_content' => intval($config->get('system', 'explicit_content', 0)), @@ -182,7 +182,7 @@ class Friendica extends BaseModule 'site_name' => $config->get('config', 'sitename'), 'platform' => strtolower(App::PLATFORM), 'info' => $config->get('config', 'info'), - 'no_scrape_url' => DI::baseUrl()->get() . '/noscrape', + 'no_scrape_url' => DI::baseUrl() . '/noscrape', ]; System::jsonExit($data); diff --git a/src/Module/HCard.php b/src/Module/HCard.php index a6edd5100..92627125a 100644 --- a/src/Module/HCard.php +++ b/src/Module/HCard.php @@ -66,15 +66,15 @@ class HCard extends BaseModule $baseUrl = DI::baseUrl(); - $uri = urlencode('acct:' . $profile['nickname'] . '@' . $baseUrl->getHostname() . ($baseUrl->getUrlPath() ? '/' . $baseUrl->getUrlPath() : '')); + $uri = urlencode('acct:' . $profile['nickname'] . '@' . $baseUrl->getHost() . ($baseUrl->getPath() ? '/' . $baseUrl->getPath() : '')); $page['htmlhead'] .= '' . "\r\n"; - $page['htmlhead'] .= '' . "\r\n"; - $page['htmlhead'] .= '' . "\r\n"; - header('Link: <' . $baseUrl->get() . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); + $page['htmlhead'] .= '' . "\r\n"; + $page['htmlhead'] .= '' . "\r\n"; + header('Link: <' . $baseUrl . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); foreach (['request', 'confirm', 'notify', 'poll'] as $dfrn) { - $page['htmlhead'] .= "get() . "/dfrn_{$dfrn}/{$nickname}\" />\r\n"; + $page['htmlhead'] .= "\r\n"; } $block = (DI::config()->get('system', 'block_public') && !DI::userSession()->isAuthenticated()); diff --git a/src/Module/Help.php b/src/Module/Help.php index f0bd6aa9f..03392c73a 100644 --- a/src/Module/Help.php +++ b/src/Module/Help.php @@ -102,7 +102,7 @@ class Help extends BaseModule $idNum[$level] ++; - $href = DI::baseUrl()->get() . "/help/{$filename}#{$anchor}"; + $href = DI::baseUrl() . "/help/{$filename}#{$anchor}"; $toc .= "
  • " . strip_tags($line) . "
  • "; $id = implode("_", array_slice($idNum, 1, $level)); $line = "" . $line; diff --git a/src/Module/Home.php b/src/Module/Home.php index 74cc88d30..cfafc5525 100644 --- a/src/Module/Home.php +++ b/src/Module/Home.php @@ -69,7 +69,7 @@ class Home extends BaseModule $customHome = $homeFilePath; if (file_exists($cssFilePath)) { - DI::page()['htmlhead'] .= ''; + DI::page()['htmlhead'] .= ''; } } diff --git a/src/Module/Invite.php b/src/Module/Invite.php index deefc44bb..3230dfa35 100644 --- a/src/Module/Invite.php +++ b/src/Module/Invite.php @@ -149,14 +149,14 @@ class Invite extends BaseModule if ($config->get('config', 'register_policy') === Register::CLOSED) { $linkTxt = DI::l10n()->t('Visit %s for a list of public sites that you can join. Friendica members on other sites can all connect with each other, as well as with members of many other social networks.', $dirLocation . '/servers'); } else { - $linkTxt = DI::l10n()->t('To accept this invitation, please visit and register at %s or any other public Friendica website.', DI::baseUrl()->get()) + $linkTxt = DI::l10n()->t('To accept this invitation, please visit and register at %s or any other public Friendica website.', DI::baseUrl()) . "\r\n" . "\r\n" . DI::l10n()->t('Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join.', $dirLocation . '/servers'); } } else { // there is no global directory URL defined if ($config->get('config', 'register_policy') === Register::CLOSED) { return DI::l10n()->t('Our apologies. This system is not currently configured to connect with other public sites or invite members.'); } else { - $linkTxt = DI::l10n()->t('To accept this invitation, please visit and register at %s.', DI::baseUrl()->get() + $linkTxt = DI::l10n()->t('To accept this invitation, please visit and register at %s.', DI::baseUrl() . "\r\n" . "\r\n" . DI::l10n()->t('Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks.')); } } @@ -172,7 +172,7 @@ class Invite extends BaseModule DI::l10n()->t('You are cordially invited to join me and other close friends on Friendica - and help us to create a better social web.') . "\r\n" . "\r\n" . $linkTxt . "\r\n" . "\r\n" . (($inviteOnly) ? DI::l10n()->t('You will need to supply this invitation code: $invite_code') . "\r\n" . "\r\n" : '') . DI::l10n()->t('Once you have registered, please connect with me via my profile page at:') - . "\r\n" . "\r\n" . DI::baseUrl()->get() . '/profile/' . $app->getLoggedInUserNickname() + . "\r\n" . "\r\n" . DI::baseUrl() . '/profile/' . $app->getLoggedInUserNickname() . "\r\n" . "\r\n" . DI::l10n()->t('For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca') . "\r\n" . "\r\n", ], '$submit' => DI::l10n()->t('Submit') diff --git a/src/Module/Magic.php b/src/Module/Magic.php index 8fa67ec97..1012dc72b 100644 --- a/src/Module/Magic.php +++ b/src/Module/Magic.php @@ -88,7 +88,7 @@ class Magic extends BaseModule $contact = $this->dba->selectFirst('contact', ['id', 'nurl', 'url'], ['id' => $cid]); // Redirect if the contact is already authenticated on this site. - if ($this->app->getContactId() && strpos($contact['nurl'], Strings::normaliseLink($this->baseUrl->get())) !== false) { + if ($this->app->getContactId() && strpos($contact['nurl'], Strings::normaliseLink($this->baseUrl)) !== false) { $this->logger->info('Contact is already authenticated'); System::externalRedirect($dest); } @@ -113,7 +113,7 @@ class Magic extends BaseModule $header = HTTPSignature::createSig( $header, $user['prvkey'], - 'acct:' . $user['nickname'] . '@' . $this->baseUrl->getHostname() . ($this->baseUrl->getUrlPath() ? '/' . $this->baseUrl->getUrlPath() : '') + 'acct:' . $user['nickname'] . '@' . $this->baseUrl->getHost() . ($this->baseUrl->getPath() ? '/' . $this->baseUrl->getPath() : '') ); // Try to get an authentication token from the other instance. diff --git a/src/Module/Manifest.php b/src/Module/Manifest.php index 4148b0ddf..e98c83a61 100644 --- a/src/Module/Manifest.php +++ b/src/Module/Manifest.php @@ -35,7 +35,7 @@ class Manifest extends BaseModule $manifest = [ 'name' => $config->get('config', 'sitename', 'Friendica'), - 'start_url' => DI::baseUrl()->get(), + 'start_url' => DI::baseUrl(), 'display' => 'standalone', 'description' => $config->get('config', 'info', DI::l10n()->t('A Decentralized Social Network')), 'short_name' => 'Friendica', @@ -74,12 +74,12 @@ class Manifest extends BaseModule if($touch_icon){ $manifest['icons'] = [ [ - 'src' => DI::baseUrl()->get() . '/' . $touch_icon, + 'src' => DI::baseUrl() . '/' . $touch_icon, 'sizes' => '192x192', 'type' => 'image/png', ], [ - 'src' => DI::baseUrl()->get() . '/' . $touch_icon, + 'src' => DI::baseUrl() . '/' . $touch_icon, 'sizes' => '512x512', 'type' => 'image/png', ], @@ -87,37 +87,37 @@ class Manifest extends BaseModule } else { $manifest['icons'] = [ [ - 'src' => DI::baseUrl()->get() . '/images/friendica.svg', + 'src' => DI::baseUrl() . '/images/friendica.svg', 'sizes' => 'any', 'type' => 'image/svg+xml', 'purpose' => 'any', ], [ - 'src' => DI::baseUrl()->get() . '/images/friendica-192.png', + 'src' => DI::baseUrl() . '/images/friendica-192.png', 'sizes' => '192x192', 'type' => 'image/png', 'purpose' => 'any', ], [ - 'src' => DI::baseUrl()->get() . '/images/friendica-512.png', + 'src' => DI::baseUrl() . '/images/friendica-512.png', 'sizes' => '512x512', 'type' => 'image/png', 'purpose' => 'any', ], [ - 'src' => DI::baseUrl()->get() . '/images/friendica-maskable.svg', + 'src' => DI::baseUrl() . '/images/friendica-maskable.svg', 'sizes' => 'any', 'type' => 'image/svg+xml', 'purpose' => 'maskable', ], [ - 'src' => DI::baseUrl()->get() . '/images/friendica-maskable-192.png', + 'src' => DI::baseUrl() . '/images/friendica-maskable-192.png', 'sizes' => '192x192', 'type' => 'image/png', 'purpose' => 'maskable', ], [ - 'src' => DI::baseUrl()->get() . '/images/friendica-maskable-512.png', + 'src' => DI::baseUrl() . '/images/friendica-maskable-512.png', 'sizes' => '512x512', 'type' => 'image/png', 'purpose' => 'maskable', diff --git a/src/Module/Moderation/Blocklist/Contact.php b/src/Module/Moderation/Blocklist/Contact.php index 2303906da..9c0a4a2d0 100644 --- a/src/Module/Moderation/Blocklist/Contact.php +++ b/src/Module/Moderation/Blocklist/Contact.php @@ -124,7 +124,7 @@ class Contact extends BaseModeration '$form_security_token' => self::getFormSecurityToken('moderation_contactblock'), // values // - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$contacts' => $contacts, '$total_contacts' => $this->tt('%s total blocked contact', '%s total blocked contacts', $total), diff --git a/src/Module/Moderation/Blocklist/Server/Add.php b/src/Module/Moderation/Blocklist/Server/Add.php index 7a7d3dacf..864e1e036 100644 --- a/src/Module/Moderation/Blocklist/Server/Add.php +++ b/src/Module/Moderation/Blocklist/Server/Add.php @@ -138,7 +138,7 @@ class Add extends BaseModeration '$newreason' => ['reason', $this->t('Block reason'), $request['reason'] ?? '', $this->t('The reason why you blocked this server domain pattern. This reason will be shown publicly in the server information page.'), $this->t('Required'), '', ''], '$pattern' => $pattern, '$gservers' => $gservers, - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$form_security_token' => self::getFormSecurityToken('moderation_blocklist_add') ]); } diff --git a/src/Module/Moderation/Blocklist/Server/Import.php b/src/Module/Moderation/Blocklist/Server/Import.php index 62086e7cc..dee2b87e3 100644 --- a/src/Module/Moderation/Blocklist/Server/Import.php +++ b/src/Module/Moderation/Blocklist/Server/Import.php @@ -130,7 +130,7 @@ class Import extends \Friendica\Module\BaseModeration '$mode_append' => ['mode', $this->t('Append'), 'append', $this->t('Imports patterns from the file that weren\'t already existing in the current blocklist.'), 'checked="checked"'], '$mode_replace' => ['mode', $this->t('Replace'), 'replace', $this->t('Replaces the current blocklist by the imported patterns.')], '$blocklist' => $this->blocklist, - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$form_security_token' => self::getFormSecurityToken('moderation_blocklist_import') ]); } diff --git a/src/Module/Moderation/Blocklist/Server/Index.php b/src/Module/Moderation/Blocklist/Server/Index.php index b52641c67..f5ef428a8 100644 --- a/src/Module/Moderation/Blocklist/Server/Index.php +++ b/src/Module/Moderation/Blocklist/Server/Index.php @@ -115,7 +115,7 @@ class Index extends BaseModeration '$listfile' => ['listfile', $this->t('Server domain pattern blocklist CSV file'), '', '', $this->t('Required'), '', 'file'], '$newdomain' => ['pattern', $this->t('Server Domain Pattern'), '', $this->t('The domain pattern of the new server to add to the blocklist. Do not include the protocol.'), $this->t('Required'), '', ''], '$entries' => $blocklistform, - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$form_security_token' => self::getFormSecurityToken('moderation_blocklist'), '$form_security_token_import' => self::getFormSecurityToken('moderation_blocklist_import'), diff --git a/src/Module/Moderation/Users/Active.php b/src/Module/Moderation/Users/Active.php index 4e6b17bfa..c4805b7b0 100644 --- a/src/Module/Moderation/Users/Active.php +++ b/src/Module/Moderation/Users/Active.php @@ -32,7 +32,7 @@ class Active extends BaseUsers { $this->checkModerationAccess(); - self::checkFormSecurityTokenRedirectOnError($this->baseUrl->get(true), 'moderation_users_active'); + self::checkFormSecurityTokenRedirectOnError($this->baseUrl, 'moderation_users_active'); $users = $request['user'] ?? []; @@ -150,7 +150,7 @@ class Active extends BaseUsers '$form_security_token' => self::getFormSecurityToken('moderation_users_active'), // values // - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$query_string' => $this->args->getQueryString(), '$users' => $users, diff --git a/src/Module/Moderation/Users/Blocked.php b/src/Module/Moderation/Users/Blocked.php index 5fac107f0..8eef0eaef 100644 --- a/src/Module/Moderation/Users/Blocked.php +++ b/src/Module/Moderation/Users/Blocked.php @@ -149,7 +149,7 @@ class Blocked extends BaseUsers '$form_security_token' => self::getFormSecurityToken('moderation_users_blocked'), // values // - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$query_string' => $this->args->getQueryString(), '$users' => $users, diff --git a/src/Module/Moderation/Users/Create.php b/src/Module/Moderation/Users/Create.php index 1c8a5cb05..48a9b1eef 100644 --- a/src/Module/Moderation/Users/Create.php +++ b/src/Module/Moderation/Users/Create.php @@ -65,7 +65,7 @@ class Create extends BaseUsers '$form_security_token' => self::getFormSecurityToken('admin_users_create'), // values // - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$query_string' => $this->args->getQueryString(), '$newusername' => ['new_user_name', $this->t('Name'), '', $this->t('Name of the new user.')], diff --git a/src/Module/Moderation/Users/Deleted.php b/src/Module/Moderation/Users/Deleted.php index 6989af98b..478110287 100644 --- a/src/Module/Moderation/Users/Deleted.php +++ b/src/Module/Moderation/Users/Deleted.php @@ -85,7 +85,7 @@ class Deleted extends BaseUsers '$form_security_token' => self::getFormSecurityToken('moderation_users_deleted'), // values // - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$query_string' => $this->args->getQueryString(), '$users' => $users, diff --git a/src/Module/Moderation/Users/Index.php b/src/Module/Moderation/Users/Index.php index 5457917db..0df32c509 100644 --- a/src/Module/Moderation/Users/Index.php +++ b/src/Module/Moderation/Users/Index.php @@ -83,7 +83,7 @@ class Index extends BaseUsers switch ($action) { case 'delete': if ($this->session->getLocalUserId() != $uid) { - self::checkFormSecurityTokenRedirectOnError($this->baseUrl->get(true), 'moderation_users', 't'); + self::checkFormSecurityTokenRedirectOnError($this->baseUrl, 'moderation_users', 't'); // delete user User::remove($uid); @@ -168,7 +168,7 @@ class Index extends BaseUsers '$form_security_token' => self::getFormSecurityToken('moderation_users'), // values // - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$query_string' => $this->args->getQueryString(), '$users' => $users, diff --git a/src/Module/Moderation/Users/Pending.php b/src/Module/Moderation/Users/Pending.php index f3fc26822..40e64bb8a 100644 --- a/src/Module/Moderation/Users/Pending.php +++ b/src/Module/Moderation/Users/Pending.php @@ -105,7 +105,7 @@ class Pending extends BaseUsers '$form_security_token' => self::getFormSecurityToken('admin_users_pending'), // values // - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$query_string' => $this->args->getQueryString(), '$pending' => $pending, diff --git a/src/Module/NodeInfo210.php b/src/Module/NodeInfo210.php index 98f114fb3..ea55a33f1 100644 --- a/src/Module/NodeInfo210.php +++ b/src/Module/NodeInfo210.php @@ -52,7 +52,7 @@ class NodeInfo210 extends BaseModule $nodeinfo = [ 'version' => '1.0', 'server' => [ - 'baseUrl' => $this->baseUrl->get(), + 'baseUrl' => $this->baseUrl, 'name' => $this->config->get('config', 'sitename'), 'software' => 'friendica', 'version' => App::VERSION . '-' . DB_UPDATE_VERSION, diff --git a/src/Module/Notifications/Ping.php b/src/Module/Notifications/Ping.php index 15c775d20..3cd4d7020 100644 --- a/src/Module/Notifications/Ping.php +++ b/src/Module/Notifications/Ping.php @@ -244,7 +244,7 @@ class Ping extends BaseModule $registration['url'], $this->l10n->t('{0} requested registration'), new \DateTime($registration['created'], new \DateTimeZone('UTC')), - new Uri($this->baseUrl->get(true) . '/moderation/users/pending') + new Uri($this->baseUrl . '/moderation/users/pending') ); } } else { @@ -253,7 +253,7 @@ class Ping extends BaseModule $registrations[0]['url'], $this->l10n->t('{0} and %d others requested registration', count($registrations) - 1), new \DateTime($registrations[0]['created'], new \DateTimeZone('UTC')), - new Uri($this->baseUrl->get(true) . '/moderation/users/pending') + new Uri($this->baseUrl . '/moderation/users/pending') ); } diff --git a/src/Module/OpenSearch.php b/src/Module/OpenSearch.php index 36e8713d9..f01baafad 100644 --- a/src/Module/OpenSearch.php +++ b/src/Module/OpenSearch.php @@ -39,8 +39,8 @@ class OpenSearch extends BaseModule */ protected function rawContent(array $request = []) { - $hostname = DI::baseUrl()->getHostname(); - $baseUrl = DI::baseUrl()->get(); + $hostname = DI::baseUrl()->getHost(); + $baseUrl = DI::baseUrl(); /** @var DOMDocument $xml */ XML::fromArray([ diff --git a/src/Module/Profile/Profile.php b/src/Module/Profile/Profile.php index 92ab321b8..6fb44c300 100644 --- a/src/Module/Profile/Profile.php +++ b/src/Module/Profile/Profile.php @@ -352,7 +352,7 @@ class Profile extends BaseProfile $htmlhead .= '' . "\n"; $htmlhead .= '' . "\n"; $htmlhead .= '' . "\n"; - $uri = urlencode('acct:' . $profile['nickname'] . '@' . $this->baseUrl->getHostname() . ($this->baseUrl->getUrlPath() ? '/' . $this->baseUrl->getUrlPath() : '')); + $uri = urlencode('acct:' . $profile['nickname'] . '@' . $this->baseUrl->getHost() . ($this->baseUrl->getPath() ? '/' . $this->baseUrl->getPath() : '')); $htmlhead .= '' . "\n"; header('Link: <' . $this->baseUrl . '/xrd/?uri=' . $uri . '>; rel="lrdd"; type="application/xrd+xml"', false); diff --git a/src/Module/Profile/Schedule.php b/src/Module/Profile/Schedule.php index b6d5fa182..cc4f13441 100644 --- a/src/Module/Profile/Schedule.php +++ b/src/Module/Profile/Schedule.php @@ -78,7 +78,7 @@ class Schedule extends BaseProfile $tpl = Renderer::getMarkupTemplate('profile/schedule.tpl'); $o .= Renderer::replaceMacros($tpl, [ '$form_security_token' => BaseModule::getFormSecurityToken("profile_schedule"), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$title' => DI::l10n()->t('Scheduled Posts'), '$nickname' => $this->parameters['nickname'] ?? '', '$scheduled_at' => DI::l10n()->t('Scheduled'), diff --git a/src/Module/Profile/UnkMail.php b/src/Module/Profile/UnkMail.php index 8fd64a17a..839332725 100644 --- a/src/Module/Profile/UnkMail.php +++ b/src/Module/Profile/UnkMail.php @@ -141,7 +141,7 @@ class UnkMail extends \Friendica\BaseModule $tpl = Renderer::getMarkupTemplate('profile/unkmail-header.tpl'); $this->page['htmlhead'] .= Renderer::replaceMacros($tpl, [ - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$nickname' => $user['nickname'], '$linkurl' => $this->l10n->t('Please enter a link URL:') ]); diff --git a/src/Module/ReallySimpleDiscovery.php b/src/Module/ReallySimpleDiscovery.php index d76094003..6d608063e 100644 --- a/src/Module/ReallySimpleDiscovery.php +++ b/src/Module/ReallySimpleDiscovery.php @@ -48,7 +48,7 @@ class ReallySimpleDiscovery extends BaseModule '@attributes' => [ 'name' => 'Twitter', 'preferred' => 'true', - 'apiLink' => DI::baseUrl()->get(), + 'apiLink' => DI::baseUrl(), 'blogID' => '', ], 'settings' => [ diff --git a/src/Module/Register.php b/src/Module/Register.php index 6b21a0c7e..e5c5840d2 100644 --- a/src/Module/Register.php +++ b/src/Module/Register.php @@ -161,7 +161,7 @@ class Register extends BaseModule '$ask_password' => $ask_password, '$password1' => ['password1', DI::l10n()->t('New Password:'), '', DI::l10n()->t('Leave empty for an auto generated password.')], '$password2' => ['confirm', DI::l10n()->t('Confirm:'), '', ''], - '$nickdesc' => DI::l10n()->t('Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be "nickname@%s".', DI::baseUrl()->getHostname()), + '$nickdesc' => DI::l10n()->t('Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be "nickname@%s".', DI::baseUrl()->getHost()), '$nicklabel' => DI::l10n()->t('Choose a nickname: '), '$photo' => $photo, '$publish' => $profile_publish, @@ -169,7 +169,7 @@ class Register extends BaseModule '$username' => $username, '$email' => $email, '$nickname' => $nickname, - '$sitename' => DI::baseUrl()->getHostname(), + '$sitename' => DI::baseUrl()->getHost(), '$importh' => DI::l10n()->t('Import'), '$importt' => DI::l10n()->t('Import your profile to this friendica instance'), '$showtoslink' => DI::config()->get('system', 'tosdisplay'), @@ -298,7 +298,7 @@ class Register extends BaseModule $user = $result['user']; - $base_url = DI::baseUrl()->get(); + $base_url = DI::baseUrl(); if ($netpublish && intval(DI::config()->get('config', 'register_policy')) !== self::APPROVE) { $url = $base_url . '/profile/' . $user['nickname']; @@ -404,11 +404,11 @@ class Register extends BaseModule 'type' => Model\Notification\Type::SYSTEM, 'event' => $event, 'uid' => $admin['uid'], - 'link' => DI::baseUrl()->get(true) . '/moderation/users/', + 'link' => DI::baseUrl() . '/moderation/users/', 'source_name' => $user['username'], 'source_mail' => $user['email'], 'source_nick' => $user['nickname'], - 'source_link' => DI::baseUrl()->get(true) . '/moderation/users/', + 'source_link' => DI::baseUrl() . '/moderation/users/', 'source_photo' => User::getAvatarUrl($user, Proxy::SIZE_THUMB), 'show_in_notification_page' => false ]); diff --git a/src/Module/Security/Login.php b/src/Module/Security/Login.php index d1da83b2c..634123a8e 100644 --- a/src/Module/Security/Login.php +++ b/src/Module/Security/Login.php @@ -132,7 +132,7 @@ class Login extends BaseModule DI::page()['htmlhead'] .= Renderer::replaceMacros( Renderer::getMarkupTemplate('login_head.tpl'), [ - '$baseurl' => DI::baseUrl()->get(true) + '$baseurl' => DI::baseUrl() ] ); @@ -154,7 +154,7 @@ class Login extends BaseModule $o = Renderer::replaceMacros( $tpl, [ - '$dest_url' => DI::baseUrl()->get(true) . '/login', + '$dest_url' => DI::baseUrl() . '/login', '$logout' => DI::l10n()->t('Logout'), '$login' => DI::l10n()->t('Login'), diff --git a/src/Module/Security/OpenID.php b/src/Module/Security/OpenID.php index b3f869e2f..e0a13954d 100644 --- a/src/Module/Security/OpenID.php +++ b/src/Module/Security/OpenID.php @@ -43,7 +43,7 @@ class OpenID extends BaseModule if (!empty($_GET['openid_mode']) && !empty($session->get('openid'))) { - $openid = new LightOpenID(DI::baseUrl()->getHostname()); + $openid = new LightOpenID(DI::baseUrl()->getHost()); $l10n = DI::l10n(); @@ -82,7 +82,7 @@ class OpenID extends BaseModule $session->set('openid_identity', $authId); // Detect the server URL - $open_id_obj = new LightOpenID(DI::baseUrl()->getHostname()); + $open_id_obj = new LightOpenID(DI::baseUrl()->getHost()); $open_id_obj->identity = $authId; $session->set('openid_server', $open_id_obj->discover($open_id_obj->identity)); diff --git a/src/Module/Security/PasswordTooLong.php b/src/Module/Security/PasswordTooLong.php index 53fafea41..b4117a506 100644 --- a/src/Module/Security/PasswordTooLong.php +++ b/src/Module/Security/PasswordTooLong.php @@ -93,7 +93,7 @@ class PasswordTooLong extends \Friendica\BaseModule 'submit' => $this->l10n->t('Update Password'), ], - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$form_security_token' => self::getFormSecurityToken('security/password_too_long'), '$return_url' => $request['return_url'] ?? '', diff --git a/src/Module/Settings/Account.php b/src/Module/Settings/Account.php index f8f65e720..4e756a849 100644 --- a/src/Module/Settings/Account.php +++ b/src/Module/Settings/Account.php @@ -555,10 +555,10 @@ class Account extends BaseSettings $tpl = Renderer::getMarkupTemplate('settings/account.tpl'); $o = Renderer::replaceMacros($tpl, [ '$ptitle' => DI::l10n()->t('Account Settings'), - '$desc' => DI::l10n()->t("Your Identity Address is '%s' or '%s'.", $nickname . '@' . DI::baseUrl()->getHostname() . DI::baseUrl()->getUrlPath(), DI::baseUrl() . '/profile/' . $nickname), + '$desc' => DI::l10n()->t("Your Identity Address is '%s' or '%s'.", $nickname . '@' . DI::baseUrl()->getHost() . DI::baseUrl()->getPath(), DI::baseUrl() . '/profile/' . $nickname), '$submit' => DI::l10n()->t('Save Settings'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$uid' => DI::userSession()->getLocalUserId(), '$form_security_token' => self::getFormSecurityToken('settings'), '$open' => $this->parameters['open'] ?? 'password', diff --git a/src/Module/Settings/Display.php b/src/Module/Settings/Display.php index cb9ec09ee..c614eccd0 100644 --- a/src/Module/Settings/Display.php +++ b/src/Module/Settings/Display.php @@ -252,7 +252,7 @@ class Display extends BaseSettings '$calendar_title' => $this->t('Calendar'), '$form_security_token' => self::getFormSecurityToken('settings_display'), - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$uid' => $uid, '$theme' => ['theme', $this->t('Display Theme:'), $theme_selected, '', $themes, true], diff --git a/src/Module/Settings/OAuth.php b/src/Module/Settings/OAuth.php index 00f4075b0..50ac3e95d 100644 --- a/src/Module/Settings/OAuth.php +++ b/src/Module/Settings/OAuth.php @@ -68,7 +68,7 @@ class OAuth extends BaseSettings $tpl = Renderer::getMarkupTemplate('settings/oauth.tpl'); return Renderer::replaceMacros($tpl, [ '$form_security_token' => BaseSettings::getFormSecurityToken('settings_oauth'), - '$baseurl' => $this->baseUrl->get(true), + '$baseurl' => $this->baseUrl, '$title' => $this->t('Connected Apps'), '$name' => $this->t('Name'), '$website' => $this->t('Home Page'), diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index 450be0331..baf4a71f3 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -208,7 +208,7 @@ class Index extends BaseSettings ]; DI::page()['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('settings/profile/index_head.tpl'), [ - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), ]); $personal_account = ($profile['account-type'] != User::ACCOUNT_TYPE_COMMUNITY); @@ -241,7 +241,7 @@ class Index extends BaseSettings '$lbl_profile_photo' => DI::l10n()->t('Upload Profile Photo'), - '$baseurl' => DI::baseUrl()->get(true), + '$baseurl' => DI::baseUrl(), '$nickname' => $profile['nickname'], '$name' => ['name', DI::l10n()->t('Display name:'), $profile['name']], '$about' => ['about', DI::l10n()->t('Description:'), $profile['about']], diff --git a/src/Module/WellKnown/HostMeta.php b/src/Module/WellKnown/HostMeta.php index 512ff8dd0..75976ac36 100644 --- a/src/Module/WellKnown/HostMeta.php +++ b/src/Module/WellKnown/HostMeta.php @@ -46,14 +46,14 @@ class HostMeta extends BaseModule $config->set('system', 'site_pubkey', $res['pubkey']); } - $domain = DI::baseUrl()->get(); + $domain = DI::baseUrl(); XML::fromArray([ 'XRD' => [ '@attributes' => [ 'xmlns' => 'http://docs.oasis-open.org/ns/xri/xrd-1.0', ], - 'hm:Host' => DI::baseUrl()->getHostname(), + 'hm:Host' => DI::baseUrl()->getHost(), '1:link' => [ '@attributes' => [ 'rel' => 'lrdd', diff --git a/src/Module/WellKnown/NodeInfo.php b/src/Module/WellKnown/NodeInfo.php index e1c486c2e..9ae641d41 100644 --- a/src/Module/WellKnown/NodeInfo.php +++ b/src/Module/WellKnown/NodeInfo.php @@ -46,9 +46,9 @@ class NodeInfo extends BaseModule $nodeinfo = [ 'links' => [ ['rel' => 'http://nodeinfo.diaspora.software/ns/schema/1.0', - 'href' => DI::baseUrl()->get() . '/nodeinfo/1.0'], + 'href' => DI::baseUrl() . '/nodeinfo/1.0'], ['rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.0', - 'href' => DI::baseUrl()->get() . '/nodeinfo/2.0'], + 'href' => DI::baseUrl() . '/nodeinfo/2.0'], ] ]; diff --git a/src/Module/WellKnown/XSocialRelay.php b/src/Module/WellKnown/XSocialRelay.php index 4ee495984..11835ec35 100644 --- a/src/Module/WellKnown/XSocialRelay.php +++ b/src/Module/WellKnown/XSocialRelay.php @@ -64,17 +64,17 @@ class XSocialRelay extends BaseModule 'tags' => $tagList, 'protocols' => [ 'activitypub' => [ - 'actor' => DI::baseUrl()->get() . '/friendica', - 'receive' => DI::baseUrl()->get() . '/inbox' + 'actor' => DI::baseUrl() . '/friendica', + 'receive' => DI::baseUrl() . '/inbox' ], 'dfrn' => [ - 'receive' => DI::baseUrl()->get() . '/dfrn_notify' + 'receive' => DI::baseUrl() . '/dfrn_notify' ] ] ]; if (DI::config()->get("system", "diaspora_enabled")) { - $relay['protocols']['diaspora'] = ['receive' => DI::baseUrl()->get() . '/receive/public']; + $relay['protocols']['diaspora'] = ['receive' => DI::baseUrl() . '/receive/public']; } System::jsonExit($relay); diff --git a/src/Module/Xrd.php b/src/Module/Xrd.php index ad2b25902..098d69e23 100644 --- a/src/Module/Xrd.php +++ b/src/Module/Xrd.php @@ -105,7 +105,7 @@ class Xrd extends BaseModule private function printSystemJSON(array $owner) { - $baseURL = $this->baseUrl->get(); + $baseURL = $this->baseUrl; $json = [ 'subject' => 'acct:' . $owner['addr'], 'aliases' => [$owner['url']], @@ -151,7 +151,7 @@ class Xrd extends BaseModule private function printJSON(string $alias, array $owner, array $avatar) { - $baseURL = $this->baseUrl->get(); + $baseURL = $this->baseUrl; $json = [ 'subject' => 'acct:' . $owner['addr'], @@ -228,7 +228,7 @@ class Xrd extends BaseModule private function printXML(string $alias, array $owner, array $avatar) { - $baseURL = $this->baseUrl->get(); + $baseURL = $this->baseUrl; $xmlString = XML::fromArray([ 'XRD' => [ diff --git a/src/Navigation/Notifications/Factory/FormattedNavNotification.php b/src/Navigation/Notifications/Factory/FormattedNavNotification.php index 638640321..b4e48172c 100644 --- a/src/Navigation/Notifications/Factory/FormattedNavNotification.php +++ b/src/Navigation/Notifications/Factory/FormattedNavNotification.php @@ -136,7 +136,7 @@ class FormattedNavNotification extends BaseFactory self::$contacts[$notification->actorId]['url'], $message['notification'], $notification->created, - new Uri($this->baseUrl->get() . '/notification/' . $notification->id), + new Uri($this->baseUrl . '/notification/' . $notification->id), $notification->seen, ); } @@ -168,7 +168,7 @@ class FormattedNavNotification extends BaseFactory self::$contacts[$intro->cid]['url'], $msg, $intro->datetime, - new Uri($this->baseUrl->get() . '/notifications/intros/' . $intro->id) + new Uri($this->baseUrl . '/notifications/intros/' . $intro->id) ); } } diff --git a/src/Navigation/Notifications/Factory/FormattedNotify.php b/src/Navigation/Notifications/Factory/FormattedNotify.php index aa2ff1d91..792bf91d3 100644 --- a/src/Navigation/Notifications/Factory/FormattedNotify.php +++ b/src/Navigation/Notifications/Factory/FormattedNotify.php @@ -90,7 +90,7 @@ class FormattedNotify extends BaseFactory case Activity::LIKE: return new ValueObject\FormattedNotify( 'like', - $this->baseUrl->get(true) . '/display/' . $formattedItem['parent-guid'], + $this->baseUrl . '/display/' . $formattedItem['parent-guid'], $formattedItem['author-avatar'], $formattedItem['author-link'], $this->l10n->t("%s liked %s's post", $formattedItem['author-name'], $formattedItem['parent-author-name']), @@ -102,7 +102,7 @@ class FormattedNotify extends BaseFactory case Activity::DISLIKE: return new ValueObject\FormattedNotify( 'dislike', - $this->baseUrl->get(true) . '/display/' . $formattedItem['parent-guid'], + $this->baseUrl . '/display/' . $formattedItem['parent-guid'], $formattedItem['author-avatar'], $formattedItem['author-link'], $this->l10n->t("%s disliked %s's post", $formattedItem['author-name'], $formattedItem['parent-author-name']), @@ -114,7 +114,7 @@ class FormattedNotify extends BaseFactory case Activity::ATTEND: return new ValueObject\FormattedNotify( 'attend', - $this->baseUrl->get(true) . '/display/' . $formattedItem['parent-guid'], + $this->baseUrl . '/display/' . $formattedItem['parent-guid'], $formattedItem['author-avatar'], $formattedItem['author-link'], $this->l10n->t("%s is attending %s's event", $formattedItem['author-name'], $formattedItem['parent-author-name']), @@ -126,7 +126,7 @@ class FormattedNotify extends BaseFactory case Activity::ATTENDNO: return new ValueObject\FormattedNotify( 'attendno', - $this->baseUrl->get(true) . '/display/' . $formattedItem['parent-guid'], + $this->baseUrl . '/display/' . $formattedItem['parent-guid'], $formattedItem['author-avatar'], $formattedItem['author-link'], $this->l10n->t("%s is not attending %s's event", $formattedItem['author-name'], $formattedItem['parent-author-name']), @@ -138,7 +138,7 @@ class FormattedNotify extends BaseFactory case Activity::ATTENDMAYBE: return new ValueObject\FormattedNotify( 'attendmaybe', - $this->baseUrl->get(true) . '/display/' . $formattedItem['parent-guid'], + $this->baseUrl . '/display/' . $formattedItem['parent-guid'], $formattedItem['author-avatar'], $formattedItem['author-link'], $this->l10n->t("%s may attending %s's event", $formattedItem['author-name'], $formattedItem['parent-author-name']), @@ -168,7 +168,7 @@ class FormattedNotify extends BaseFactory return new ValueObject\FormattedNotify( 'friend', - $this->baseUrl->get(true) . '/display/' . $formattedItem['parent-guid'], + $this->baseUrl . '/display/' . $formattedItem['parent-guid'], $formattedItem['author-avatar'], $formattedItem['author-link'], $this->l10n->t("%s is now friends with %s", $formattedItem['author-name'], $formattedItem['fname']), @@ -219,7 +219,7 @@ class FormattedNotify extends BaseFactory foreach ($Notifies as $Notify) { $formattedNotifications[] = new ValueObject\FormattedNotify( 'notification', - $this->baseUrl->get(true) . '/notify/' . $Notify->id, + $this->baseUrl . '/notify/' . $Notify->id, Contact::getAvatarUrlForUrl($Notify->url, $Notify->uid, Proxy::SIZE_MICRO), $Notify->url, strip_tags(BBCode::toPlaintext($Notify->msg)), @@ -369,7 +369,7 @@ class FormattedNotify extends BaseFactory } $item['label'] = (($item['gravity'] == Item::GRAVITY_PARENT) ? 'post' : 'comment'); - $item['link'] = $this->baseUrl->get(true) . '/display/' . $item['parent-guid']; + $item['link'] = $this->baseUrl . '/display/' . $item['parent-guid']; $item['image'] = $item['author-avatar']; $item['url'] = $item['author-link']; $item['when'] = DateTimeFormat::local($item['created'], 'r'); diff --git a/src/Navigation/Notifications/Factory/Introduction.php b/src/Navigation/Notifications/Factory/Introduction.php index 1b8dda48d..bc5affd69 100644 --- a/src/Navigation/Notifications/Factory/Introduction.php +++ b/src/Navigation/Notifications/Factory/Introduction.php @@ -125,8 +125,8 @@ class Introduction extends BaseFactory continue; } $return_addr = bin2hex($this->nick . '@' . - $this->baseUrl->getHostname() . - (($this->baseUrl->getUrlPath()) ? '/' . $this->baseUrl->getUrlPath() : '')); + $this->baseUrl->getHost() . + (($this->baseUrl->getPath()) ? '/' . $this->baseUrl->getPath() : '')); $formattedIntroductions[] = new ValueObject\Introduction([ 'label' => 'friend_suggestion', diff --git a/src/Navigation/Notifications/Repository/Notify.php b/src/Navigation/Notifications/Repository/Notify.php index 2d15dd85c..d1256f7d9 100644 --- a/src/Navigation/Notifications/Repository/Notify.php +++ b/src/Navigation/Notifications/Repository/Notify.php @@ -264,7 +264,7 @@ class Notify extends BaseRepository } } - $siteurl = $this->baseUrl->get(true); + $siteurl = $this->baseUrl; $sitename = $this->config->get('config', 'sitename'); // with $params['show_in_notification_page'] == false, the notification isn't inserted into @@ -539,7 +539,7 @@ class Notify extends BaseRepository $nickname = $user['nickname']; - $hostname = $this->baseUrl->getHostname(); + $hostname = $this->baseUrl->getHost(); if (strpos($hostname, ':')) { $hostname = substr($hostname, 0, strpos($hostname, ':')); } @@ -590,7 +590,7 @@ class Notify extends BaseRepository $Notify->updateMsgFromPreamble($epreamble); $Notify = $this->save($Notify); - $itemlink = $this->baseUrl->get() . '/notify/' . $Notify->id; + $itemlink = $this->baseUrl . '/notify/' . $Notify->id; $notify_id = $Notify->id; } @@ -747,7 +747,7 @@ class Notify extends BaseRepository $params['item'] = $item; $params['parent'] = $item['parent']; - $params['link'] = $this->baseUrl->get() . '/display/' . urlencode($item['guid']); + $params['link'] = $this->baseUrl . '/display/' . urlencode($item['guid']); $subjectPrefix = $l10n->t('[Friendica:Notify]'); @@ -807,7 +807,7 @@ class Notify extends BaseRepository $epreamble = $msg['rich']; $sitename = $this->config->get('config', 'sitename'); - $siteurl = $this->baseUrl->get(true); + $siteurl = $this->baseUrl; $sitelink = $l10n->t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); diff --git a/src/Network/HTTPClient/Factory/HttpClient.php b/src/Network/HTTPClient/Factory/HttpClient.php index 5d01d3e12..65f90dab8 100644 --- a/src/Network/HTTPClient/Factory/HttpClient.php +++ b/src/Network/HTTPClient/Factory/HttpClient.php @@ -90,7 +90,7 @@ class HttpClient extends BaseFactory App::CODENAME . "' " . App::VERSION . '-' . DB_UPDATE_VERSION . '; ' . - $this->baseUrl->get(); + $this->baseUrl; $guzzle = new GuzzleHttp\Client([ RequestOptions::ALLOW_REDIRECTS => [ diff --git a/src/Network/Probe.php b/src/Network/Probe.php index 4a1e1ba77..88c256fe0 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -178,7 +178,7 @@ class Probe */ private static function ownHost(string $host): bool { - $own_host = DI::baseUrl()->getHostname(); + $own_host = DI::baseUrl()->getHost(); $parts = parse_url($host); diff --git a/src/Object/Api/Mastodon/Account.php b/src/Object/Api/Mastodon/Account.php index 958e95c17..5a6620977 100644 --- a/src/Object/Api/Mastodon/Account.php +++ b/src/Object/Api/Mastodon/Account.php @@ -95,7 +95,7 @@ class Account extends BaseDataTransferObject $this->id = (string)$account['pid']; $this->username = $account['nick']; $this->acct = - strpos($account['url'], $baseUrl->get() . '/') === 0 ? + strpos($account['url'], $baseUrl . '/') === 0 ? $account['nick'] : $account['addr']; $this->display_name = $account['name']; diff --git a/src/Object/Api/Mastodon/Instance.php b/src/Object/Api/Mastodon/Instance.php index 14914cd7f..b6239550a 100644 --- a/src/Object/Api/Mastodon/Instance.php +++ b/src/Object/Api/Mastodon/Instance.php @@ -84,14 +84,14 @@ class Instance extends BaseDataTransferObject { $register_policy = intval($config->get('config', 'register_policy')); - $this->uri = $baseUrl->get(); + $this->uri = $baseUrl; $this->title = $config->get('config', 'sitename'); $this->short_description = $this->description = $config->get('config', 'info'); $this->email = implode(',', User::getAdminEmailList()); $this->version = '2.8.0 (compatible; Friendica ' . App::VERSION . ')'; $this->urls = null; // Not supported $this->stats = new Stats($config, $database); - $this->thumbnail = $baseUrl->get() . 'images/friendica-banner.jpg'; + $this->thumbnail = $baseUrl . 'images/friendica-banner.jpg'; $this->languages = [$config->get('system', 'language')]; $this->max_toot_chars = (int)$config->get('config', 'api_import_size', $config->get('config', 'max_import_size')); $this->registrations = ($register_policy != Register::CLOSED); diff --git a/src/Object/Api/Mastodon/Mention.php b/src/Object/Api/Mastodon/Mention.php index 6ff1c987f..dca2c44f9 100644 --- a/src/Object/Api/Mastodon/Mention.php +++ b/src/Object/Api/Mastodon/Mention.php @@ -56,7 +56,7 @@ class Mention extends BaseDataTransferObject if (!empty($contact)) { $this->acct = - strpos($contact['url'], $baseUrl->get() . '/') === 0 ? + strpos($contact['url'], $baseUrl . '/') === 0 ? $contact['nick'] : $contact['addr']; diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 4b63463b4..02dc7ff54 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -330,7 +330,7 @@ class Transmitter return [ 'type' => 'Service', 'name' => App::PLATFORM . " '" . App::CODENAME . "' " . App::VERSION . '-' . DB_UPDATE_VERSION, - 'url' => DI::baseUrl()->get() + 'url' => DI::baseUrl() ]; } diff --git a/src/Protocol/Delivery.php b/src/Protocol/Delivery.php index a4fe943da..c8039344e 100644 --- a/src/Protocol/Delivery.php +++ b/src/Protocol/Delivery.php @@ -161,7 +161,7 @@ class Delivery // if $parent['wall'] == 1 we will already have the parent message in our array // and we will relay the whole lot. - $localhost = DI::baseUrl()->getHostname(); + $localhost = DI::baseUrl()->getHost(); if (strpos($localhost, ':')) { $localhost = substr($localhost, 0, strpos($localhost, ':')); } @@ -556,7 +556,7 @@ class Delivery $headers = 'From: ' . Email::encodeHeader($local_user['username'],'UTF-8') . ' <' . $local_user['email'] . '>' . "\n"; } } else { - $sender = DI::config()->get('config', 'sender_email', 'noreply@' . DI::baseUrl()->getHostname()); + $sender = DI::config()->get('config', 'sender_email', 'noreply@' . DI::baseUrl()->getHost()); $headers = 'From: '. Email::encodeHeader($local_user['username'], 'UTF-8') . ' <' . $sender . '>' . "\n"; } diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index f7bc282c1..7d778ee58 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -629,7 +629,7 @@ class Feed // Distributed items should have a well-formatted URI. // Additionally, we have to avoid conflicts with identical URI between imported feeds and these items. if ($notify) { - $item['guid'] = Item::guidFromUri($orig_plink, DI::baseUrl()->getHostname()); + $item['guid'] = Item::guidFromUri($orig_plink, DI::baseUrl()->getHost()); $item['uri'] = Item::newURI($item['guid']); unset($item['plink']); unset($item['thr-parent']); diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 2a160724b..80644329f 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -1395,8 +1395,8 @@ class OStatus } $item['uri'] = $item['parent-uri'] = $item['thr-parent'] - = 'tag:' . DI::baseUrl()->getHostname(). - ','.date('Y-m-d').':'.$action.':'.$owner['uid']. + = 'tag:' . DI::baseUrl()->getHost() . + ','.date('Y-m-d').':'.$action.':'.$owner['uid']. ':person:'.$connect_id.':'.$item['created']; $item['body'] = sprintf($message, $owner['nick'], $contact['nick']); diff --git a/src/Security/Authentication.php b/src/Security/Authentication.php index d21e0bcef..4db5fdfed 100644 --- a/src/Security/Authentication.php +++ b/src/Security/Authentication.php @@ -230,11 +230,11 @@ class Authentication // Otherwise it's probably an openid. try { - $openid = new LightOpenID($this->baseUrl->getHostname()); + $openid = new LightOpenID($this->baseUrl->getHost()); $openid->identity = $openid_url; $this->session->set('openid', $openid_url); $this->session->set('remember', $remember); - $openid->returnUrl = $this->baseUrl->get(true) . '/openid'; + $openid->returnUrl = $this->baseUrl . '/openid'; $openid->optional = ['namePerson/friendly', 'contact/email', 'namePerson', 'namePerson/first', 'media/image/aspect11', 'media/image/default']; System::externalRedirect($openid->authUrl()); } catch (Exception $e) { @@ -329,8 +329,8 @@ class Authentication 'mobile-theme' => $this->pConfig->get($user_record['uid'], 'system', 'mobile_theme'), 'authenticated' => 1, 'page_flags' => $user_record['page-flags'], - 'my_url' => $this->baseUrl->get() . '/profile/' . $user_record['nickname'], - 'my_address' => $user_record['nickname'] . '@' . substr($this->baseUrl->get(), strpos($this->baseUrl->get(), '://') + 3), + 'my_url' => $this->baseUrl . '/profile/' . $user_record['nickname'], + 'my_address' => $user_record['nickname'] . '@' . substr($this->baseUrl, strpos($this->baseUrl, '://') + 3), 'addr' => $this->remoteAddress, 'nickname' => $user_record['nickname'], ]); diff --git a/src/Security/ExAuth.php b/src/Security/ExAuth.php index 602acb0cb..af04e8013 100644 --- a/src/Security/ExAuth.php +++ b/src/Security/ExAuth.php @@ -201,7 +201,7 @@ class ExAuth $sUser = str_replace(['%20', '(a)'], [' ', '@'], $aCommand[1]); // Does the hostname match? So we try directly - if ($this->baseURL->getHostname() == $aCommand[2]) { + if ($this->baseURL->getHost() == $aCommand[2]) { $this->writeLog(LOG_INFO, 'internal user check for ' . $sUser . '@' . $aCommand[2]); $found = $this->dba->exists('user', ['nickname' => $sUser]); } else { @@ -282,7 +282,7 @@ class ExAuth $Error = false; // Does the hostname match? So we try directly - if ($this->baseURL->getHostname() == $aCommand[2]) { + if ($this->baseURL->getHost() == $aCommand[2]) { try { $this->writeLog(LOG_INFO, 'internal auth for ' . $sUser . '@' . $aCommand[2]); User::getIdFromPasswordAuthentication($sUser, $aCommand[3], true); diff --git a/src/Util/EMailer/MailBuilder.php b/src/Util/EMailer/MailBuilder.php index 1310fee87..96e3a0928 100644 --- a/src/Util/EMailer/MailBuilder.php +++ b/src/Util/EMailer/MailBuilder.php @@ -72,7 +72,7 @@ abstract class MailBuilder $this->config = $config; $this->logger = $logger; - $hostname = $baseUrl->getHostname(); + $hostname = $baseUrl->getHost(); if (strpos($hostname, ':')) { $hostname = substr($hostname, 0, strpos($hostname, ':')); } @@ -83,7 +83,7 @@ abstract class MailBuilder 'X-Friendica-Platform' => [App::PLATFORM], 'X-Friendica-Version' => [App::VERSION], 'List-ID' => [''], - 'List-Archive' => ['<' . $baseUrl->get() . '/notifications/system>'], + 'List-Archive' => ['<' . $baseUrl . '/notifications/system>'], ]; } @@ -262,7 +262,7 @@ abstract class MailBuilder '$htmlversion' => $msgHtml, '$sitename' => $this->config->get('config', 'sitename'), '$banner' => $this->config->get('system', 'email_banner', - $this->baseUrl->get(true) . DIRECTORY_SEPARATOR . self::DEFAULT_EMAIL_BANNER), + $this->baseUrl . DIRECTORY_SEPARATOR . self::DEFAULT_EMAIL_BANNER), ]); } diff --git a/src/Util/Emailer.php b/src/Util/Emailer.php index d1973237d..5e4d98d4c 100644 --- a/src/Util/Emailer.php +++ b/src/Util/Emailer.php @@ -65,7 +65,7 @@ class Emailer $this->siteEmailAddress = $this->config->get('config', 'sender_email'); if (empty($this->siteEmailAddress)) { - $hostname = $this->baseUrl->getHostname(); + $hostname = $this->baseUrl->getHost(); if (strpos($hostname, ':')) { $hostname = substr($hostname, 0, strpos($hostname, ':')); } diff --git a/src/Worker/NodeInfo.php b/src/Worker/NodeInfo.php index f42a832b3..81007b237 100644 --- a/src/Worker/NodeInfo.php +++ b/src/Worker/NodeInfo.php @@ -33,7 +33,7 @@ class NodeInfo Logger::info('start'); ModelNodeInfo::update(); // Now trying to register - $url = 'http://the-federation.info/register/' . DI::baseUrl()->getHostname(); + $url = 'http://the-federation.info/register/' . DI::baseUrl()->getHost(); Logger::debug('Check registering url', ['url' => $url]); $ret = DI::httpClient()->fetch($url, HttpClientAccept::HTML); Logger::debug('Check registering answer', ['answer' => $ret]); diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index e4189c2c7..93c6c180a 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -212,7 +212,7 @@ class Notifier // if $parent['wall'] == 1 we will already have the parent message in our array // and we will relay the whole lot. - $localhost = str_replace('www.','', DI::baseUrl()->getHostname()); + $localhost = str_replace('www.','', DI::baseUrl()->getHost()); if (strpos($localhost,':')) { $localhost = substr($localhost,0,strpos($localhost,':')); } diff --git a/src/Worker/PushSubscription.php b/src/Worker/PushSubscription.php index 895a0d0d2..17b47f1cb 100644 --- a/src/Worker/PushSubscription.php +++ b/src/Worker/PushSubscription.php @@ -115,7 +115,7 @@ class PushSubscription $auth = [ 'VAPID' => [ - 'subject' => DI::baseUrl()->getHostname(), + 'subject' => DI::baseUrl()->getHost(), 'publicKey' => ModelSubscription::getPublicVapidKey(), 'privateKey' => ModelSubscription::getPrivateVapidKey(), ], diff --git a/view/theme/frio/php/default.php b/view/theme/frio/php/default.php index c6092393b..0677ff900 100644 --- a/view/theme/frio/php/default.php +++ b/view/theme/frio/php/default.php @@ -35,7 +35,7 @@ if (!isset($minimal)) { $minimal = false; } -$basepath = DI::baseUrl()->getUrlPath() ? "/" . DI::baseUrl()->getUrlPath() . "/" : "/"; +$basepath = DI::baseUrl()->getPath() ? "/" . DI::baseUrl()->getPath() . "/" : "/"; $frio = "view/theme/frio"; $view_mode_class = (DI::mode()->isMobile() || DI::mode()->isMobile()) ? 'mobile-view' : 'desktop-view'; $is_singleuser = DI::config()->get('system', 'singleuser'); diff --git a/view/theme/smoothly/theme.php b/view/theme/smoothly/theme.php index 994fe8c85..c87ec9abe 100644 --- a/view/theme/smoothly/theme.php +++ b/view/theme/smoothly/theme.php @@ -1,4 +1,30 @@ . + * + * Name: Vier + * Version: 1.2 + * Author: Fabio + * Author: Ike + * Author: Beanow + * Maintainer: Ike + * Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/ + */ /* * Name: Smoothly @@ -23,7 +49,7 @@ function smoothly_init(App $a) { $cssFile = null; $ssl_state = false; - $baseurl = DI::baseUrl()->get($ssl_state); + $baseurl = DI::baseUrl(); DI::page()['htmlhead'] .= <<< EOT