From 5cbb522c415c646890365983cb19e59812e53d02 Mon Sep 17 00:00:00 2001 From: Krzysztof Kotlarek Date: Fri, 22 Jan 2021 08:43:14 +1100 Subject: [PATCH] FIX: broken URL when username contains subfolder. (#11786) The bug was mentioned on [meta](https://meta.discourse.org/t/two-bugs-with-usernames-starting-with-subfolder-name/169505) When discourse is installed on `/subfolder` and username is containing subfolder name like for example `subfolderadmin` - user URLs were incorrect. Instead of having `/subfolder/u/subfolderadmin/summary/` we were leading to `/subfolder/uadmin/summary`. The reason for that was incorrect check in `getUrl` helper: ```javascript const found = url.indexOf(baseUri); if (found >= 0 && found < 3) { return url; } return baseUri + url; ``` baseUri is `/subfolder`, url is `/u/subfolderadmin` and indexOf returned position which in the end returned incorrect URL. I think that we should check if the URL starts with baseUri and not if contains baseUri. --- .../javascripts/discourse-common/addon/lib/get-url.js | 4 ++-- .../javascripts/discourse/tests/unit/lib/get-url-test.js | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse-common/addon/lib/get-url.js b/app/assets/javascripts/discourse-common/addon/lib/get-url.js index 1981a38bfbe..29a9e56ce14 100644 --- a/app/assets/javascripts/discourse-common/addon/lib/get-url.js +++ b/app/assets/javascripts/discourse-common/addon/lib/get-url.js @@ -15,9 +15,9 @@ export default function getURL(url) { return url; } - const found = url.indexOf(baseUri); + const found = url.startsWith(baseUri); - if (found >= 0 && found < 3) { + if (found) { return url; } if (url[0] !== "/") { diff --git a/app/assets/javascripts/discourse/tests/unit/lib/get-url-test.js b/app/assets/javascripts/discourse/tests/unit/lib/get-url-test.js index 82d86b838a9..626de266790 100644 --- a/app/assets/javascripts/discourse/tests/unit/lib/get-url-test.js +++ b/app/assets/javascripts/discourse/tests/unit/lib/get-url-test.js @@ -60,6 +60,12 @@ module("Unit | Utility | get-url", function () { "relative url has subfolder" ); + assert.equal( + getURL("/u/forumadmin"), + "/forum/u/forumadmin", + "relative url has subfolder even if username contains subfolder" + ); + assert.equal( getURL(""), "/forum",