Pages internal API: Make domain lookup case-insensitive
What does this MR do?
If custom Pages domain is created with mixed case (we have 63 of these for GitLab.com) our Pages internal API is performing case-sensitive lookup and if the input is all in lower case (which is something browsers do automatically) we fail to find the domain and return 204 No Content
.
This MR is alternative of the solution in !25613 (closed), it updates the lookup to be case-insensitive (using LOWER()
) and adds functional index on pages_domains (LOWER(domain))
to make it fast, example execution plan here - https://explain.depesz.com/s/QKEQ.
We have case-insensitive validation for uniqueness on pages_domains.domain
at the Rails side (https://gitlab.com/gitlab-org/gitlab/-/blob/37c42f87d56e92eb15158c0c896bbb84ac0b2bb2/app/models/pages_domain.rb#L16) and currently have no domains that are duplicates when downcased. We should additionally enforce this with UNIQUE
index but this can be done in an additional MR.
Screenshots
Does this MR meet the acceptance criteria?
Conformity
-
Changelog entry - [-] Documentation (if required)
-
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides - [-] Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. - [-] Tested in all supported browsers
- [-] Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
- [-] Label as security and @ mention
@gitlab-com/gl-security/appsec
- [-] The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
- [-] Security reports checked/validated by a reviewer from the AppSec team
Related to #207390 (closed)