Skip to content

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

Availability and Testing

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)

Edited by Yorick Peterse

Merge request reports