summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2016-10-24 12:42:43 +0000
committerSean McGivern <sean@mcgivern.me.uk>2016-10-24 12:42:43 +0000
commitf2644adf8b2352ddadc14687ee0dc172a8416d1c (patch)
tree0bbef746bf3a314e967b1e851125b5c53771cba4
parent4028022f56f81f9cbe1227dae53c878f702bd8fa (diff)
parentccd81a872cbb28fe1dc3f8722fa2a8b85fd16ee8 (diff)
downloadgitlab-ce-f2644adf8b2352ddadc14687ee0dc172a8416d1c.tar.gz
Merge branch 'dz-fix-constrainer-for-relative-url' into 'master'
Fix constrainers for relative url Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/23675 See merge request !7071
-rw-r--r--CHANGELOG.md1
-rw-r--r--lib/constraints/namespace_url_constrainer.rb13
-rw-r--r--spec/lib/constraints/namespace_url_constrainer_spec.rb10
3 files changed, 23 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bee10eb4101..5cef2aab364 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@ Please view this file on the master branch, on stable branches it's out of date.
- Fix error in generating labels
- Fix reply-by-email not working due to queue name mismatch
- Expire and build repository cache after project import
+ - Fix 404 for group pages when GitLab setup uses relative url
## 8.13.0 (2016-10-22)
- Removes extra line for empty issue description. (!7045)
diff --git a/lib/constraints/namespace_url_constrainer.rb b/lib/constraints/namespace_url_constrainer.rb
index 23920193743..91b70143f11 100644
--- a/lib/constraints/namespace_url_constrainer.rb
+++ b/lib/constraints/namespace_url_constrainer.rb
@@ -1,6 +1,9 @@
class NamespaceUrlConstrainer
def matches?(request)
- id = request.path.sub(/\A\/+/, '').split('/').first.sub(/.atom\z/, '')
+ id = request.path
+ id = id.sub(/\A#{relative_url_root}/, '') if relative_url_root
+ id = id.sub(/\A\/+/, '').split('/').first
+ id = id.sub(/.atom\z/, '') if id
if id =~ Gitlab::Regex.namespace_regex
find_resource(id)
@@ -10,4 +13,12 @@ class NamespaceUrlConstrainer
def find_resource(id)
Namespace.find_by_path(id)
end
+
+ private
+
+ def relative_url_root
+ if defined?(Gitlab::Application.config.relative_url_root)
+ Gitlab::Application.config.relative_url_root
+ end
+ end
end
diff --git a/spec/lib/constraints/namespace_url_constrainer_spec.rb b/spec/lib/constraints/namespace_url_constrainer_spec.rb
index a5feaacb8ee..7814711fe27 100644
--- a/spec/lib/constraints/namespace_url_constrainer_spec.rb
+++ b/spec/lib/constraints/namespace_url_constrainer_spec.rb
@@ -17,6 +17,16 @@ describe NamespaceUrlConstrainer, lib: true do
it { expect(subject.matches?(request '/g/gitlab')).to be_falsey }
it { expect(subject.matches?(request '/.gitlab')).to be_falsey }
end
+
+ context 'relative url' do
+ before do
+ allow(Gitlab::Application.config).to receive(:relative_url_root) { '/gitlab' }
+ end
+
+ it { expect(subject.matches?(request '/gitlab/gitlab')).to be_truthy }
+ it { expect(subject.matches?(request '/gitlab/gitlab-ce')).to be_falsey }
+ it { expect(subject.matches?(request '/gitlab/')).to be_falsey }
+ end
end
def request(path)