Remove fallback to wcf's custom URLs in ControllerMap::resolve()
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 24 Jun 2022 10:02:10 +0000 (12:02 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 24 Jun 2022 10:31:16 +0000 (12:31 +0200)
commit3b07ca6079fbb7ff2b608dd07c547dc930b57323
tree5bb3685c6a5711736805d983c4e699a29ad448cd
parentb0c68663983a65d16974eccab84e05fc7d87343e
Remove fallback to wcf's custom URLs in ControllerMap::resolve()

This fallback was introduced in the very first version of the forced redirect
to the custom URL for requests that directly request the controller class name
in c2de61fb187cf357cd9653693a8fa7cad39ca6ef.

However this might make controllers entirely inaccessible, because the custom
URLs are scoped to the application without any fallback to 'wcf'. This is
reproducible even in the 5.5 branch before the refactoring of the routing
logic.

Consider the following example:

- 'wcf' has the AccountManagementForm
- 'blog' also has an AccountManagement controller
- wcf's AccountManagementForm has the custom controller 'kontoverwaltung'

Now the following happens:

- Links to wcf's AccountManagement will be generated as /index.php?kontoverwaltung
- Links to blog's AccountManagement will be generated as /blog/index.php?account-management

So far so good, this is the expected behavior. Further:

- Accessing /index.php?account-management redirects to /index.php?kontoverwaltung

This is correct: The canonical URL is 'kontoverwaltung' and the page loads, however:

- Accessing /blog/index.php?account-management redirects to /blog/index.php?kontoverwaltung

This is not correct: The blog does not have a custom controller
'kontoverwaltung'. Due to the fallback in LookupRequestRoute, this will route
to wcf's AccountManagement. This fallback will be removed in PR #4873. If that
PR is merged, then instead of routing to wcf's AccountManagement, this will
result in a 404.

Either way: Blog's AccountManagement will be entirely inaccessible and
LinkHandler will generate broken links.

Fix this by removing this incorrect fallback. Accessing
/blog/index.php?account-management will now behave as if wcf's
AccountManagement wasn't renamed.
wcfsetup/install/files/lib/system/request/ControllerMap.class.php