From d6c1e85b5fe1a110ece698434e4b2010c16cb2ac Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 16 Feb 2023 08:05:32 -0500 Subject: [PATCH 01/35] 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 5efaf4930e..c121bad666 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 1d04dec625..64cd84366e 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/35] 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 a5f1f97f32..82b96e698f 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 a8de13056e..378e3eeaaf 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/35] 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 c121bad666..5efaf4930e 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 378e3eeaaf..a8de13056e 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 083d9867ed..968e34dbb9 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/35] 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 d466800594..362df49ec7 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 810ab002d9..b084797c80 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/35] 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 b084797c80..21e078b237 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/35] 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 5cf2ed4710..e2a1600875 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 cf287e59c3..6ae9c83dd5 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/35] 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 362df49ec7..0e891f9c6f 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/35] 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 6a41198473..f8524b524e 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/35] 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 e2a1600875..bfb3531478 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 6ae9c83dd5..884319aa48 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 21e078b237..2190a2e3c9 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/35] 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 e3f322778d..bcbe1deebc 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 0000000000..1a63f7606c --- /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/35] 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 c803835d1d..6020870254 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/35] 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 6020870254..38eeb877c6 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/35] 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 564527a652..8c046fda3e 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 0000000000..e45b30b20a --- /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 a72ffc607b..0000000000 --- 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/35] 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 2e9c02b421..069e5834f3 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 e890d7421a..053f0c7279 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 66e80a8097..2da6b2a1ab 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 379ddf185d..16426f932d 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 dcab1d0c87..83c890915d 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 86735f864c..63afae8d83 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/35] 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 fd86634719..b3d6e29119 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 c1c3cda355..e8093095b0 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 26f47daad5..9e8f2b4dbe 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 a8a6c0ab96..b1269cd32e 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 e41975a94e..20eeab5134 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 ff857f4c05..4ced7ed272 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 24b33b8cd4..753698a3f2 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/35] 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 34952afcb0..90df9c00e9 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 9df62a4e77..792df0f748 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/35] 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 2cdbb7239e..4c1292344c 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 9cfbe052ca..c47539c79f 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 64d5455ef3..372645bf3f 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 6311175d34..b6166fc400 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 b43482b304..6432d58008 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 76d2ef1918..ecfed9f084 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 13262d2072..fe3b570968 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/35] 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 726db0a754..c5d923de0b 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 a91d400ee8..e226252124 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 83c6ac4c38..1ce516e25f 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 13a8debcb4..055b0c2c0d 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 c63434cbb7..a6fdd8bfbd 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 de4b690388..4dd52ebff5 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 0d47cde92f..2e86fb82d6 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 63eeede89f..55d9b3d51b 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 83056b2692..6730309e60 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 715a09f4ac..107c6ab216 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 0204d54b5d..7f11f3f8e2 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 943050e05d..2804a7346f 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 bbcb3ab09e..107303d6a6 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 ced0774e8c..63592614e0 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 0ff29f8886..571253f425 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 b2daed13e4..89390317fe 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 07f56dd7bb..51692f0163 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 bcb5b20f95..96c82b0c17 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 8ff942ba46..b30cca8a6e 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 75b913250c..b0ece93464 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 96e82a3fa3..aa89ae2275 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 7a396949ee..34d4609511 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 6786d89eea..51b900d611 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 25e6446fa9..4ec7a334a9 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 cbc34eba7e..0142bdd6f1 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 8878895c80..b9e3b1f64a 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 7cdbfb4f51..34460e1cce 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 3cd00e08ca..cd98ae1336 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 39dc9f26da..f1ef5d7642 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 ead4f6d83b..8baff7ae24 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 b4ea14cf02..6fea2ac6a5 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 e3ba26e4a3..c6bf3dac38 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 1a7dda3255..82539eeb0d 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 9ffe2ca8fe..69f516a63d 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 94d155cda4..5a8f6aad30 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 d68f1a4037..a338d3ce70 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 3a6e9439be..2f367a0aac 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 d915fbf69e..959ed71a8d 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 bc2f2f402c..0e378de36e 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 e13fbd584c..d56655218e 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 5457b74427..6780197555 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 b07658e5f6..519fe751e0 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 8f2a98a597..6e1259152f 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 bbcccd7dad..2c669e886c 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 a6edd5100f..92627125ab 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 f0bd6aa9f5..03392c73a6 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 74cc88d30d..cfafc55251 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 deefc44bbb..3230dfa354 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 8fa67ec979..1012dc72ba 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 4148b0ddf4..e98c83a613 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 2303906dad..9c0a4a2d09 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 7a7d3dacf0..864e1e036b 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 62086e7ccd..dee2b87e3b 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 b52641c676..f5ef428a88 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 4e6b17bfa5..c4805b7b00 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 5fac107f09..8eef0eaef4 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 1c8a5cb05d..48a9b1eef4 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 6989af98b0..4781102876 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 5457917db3..0df32c5097 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 f3fc26822c..40e64bb8af 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 98f114fb34..ea55a33f16 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 15c775d201..3cd4d70201 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 36e8713d99..f01baafada 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 92ab321b89..6fb44c3002 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 b6d5fa182f..cc4f134414 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 8fd64a17a8..8393327251 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 d76094003f..6d608063e7 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 6b21a0c7e7..e5c5840d22 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 d1da83b2c9..634123a8e3 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 b3f869e2f1..e0a13954dd 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 53fafea41e..b4117a5060 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 f8f65e7206..4e756a849d 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 cb9ec09ee3..c614eccd04 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 00f4075b06..50ac3e95dc 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 450be03315..baf4a71f31 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 512ff8dd0e..75976ac36b 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 e1c486c2eb..9ae641d41d 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 4ee495984f..11835ec351 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 ad2b259025..098d69e23c 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 638640321b..b4e48172c5 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 aa2ff1d91a..792bf91d31 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 1b8dda48dd..bc5affd696 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 2d15dd85c1..d1256f7d9f 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 5d01d3e126..65f90dab83 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 4a1e1ba778..88c256fe08 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 958e95c178..5a66209777 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 14914cd7fc..b6239550a8 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 6ff1c987f4..dca2c44f91 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 4b63463b48..02dc7ff544 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 a4fe943da5..c8039344ed 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 f7bc282c1e..7d778ee582 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 2a160724b4..80644329ff 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 d21e0bcef3..4db5fdfed5 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 602acb0cb1..af04e80131 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 1310fee874..96e3a0928e 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 d1973237d1..5e4d98d4c9 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 f42a832b37..81007b2372 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 e4189c2c75..93c6c180ab 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 895a0d0d2d..17b47f1cbd 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 c6092393bd..0677ff900a 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 994fe8c856..c87ec9abe1 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