Redirect project.wiki.git to project wiki home

https://gitlab.com/gitlab-org/gitlab-ce/issues/19186
This commit is contained in:
Luke Duncalfe 2019-07-24 13:53:06 +12:00
parent 513daf3dd6
commit 634a03bf60
4 changed files with 45 additions and 0 deletions

View file

@ -0,0 +1,5 @@
---
title: Redirect from a project wiki git route to the project wiki home
merge_request: 31085
author:
type: added

View file

@ -34,6 +34,18 @@ scope(path: '*namespace_id/:project_id',
end
end
# Redirect /group/project.wiki.git to the project wiki
scope(format: true, constraints: { project_id: Gitlab::PathRegex.project_wiki_git_route_regex, format: :git }) do
wiki_redirect = redirect do |params, request|
project_id = params[:project_id].delete_suffix('.wiki')
path = [params[:namespace_id], project_id, 'wikis'].join('/')
path << "?#{request.query_string}" unless request.query_string.blank?
path
end
get '/', to: wiki_redirect
end
# Redirect /group/project/info/refs to /group/project.git/info/refs
scope(constraints: { project_id: Gitlab::PathRegex.project_route_regex }) do
# Allow /info/refs, /info/refs?service=git-upload-pack, and

View file

@ -175,6 +175,10 @@ module Gitlab
@project_git_route_regex ||= /#{project_route_regex}\.git/.freeze
end
def project_wiki_git_route_regex
@project_wiki_git_route_regex ||= /#{PATH_REGEX_STR}\.wiki/.freeze
end
def full_namespace_path_regex
@full_namespace_path_regex ||= %r{\A#{full_namespace_route_regex}/\z}
end

View file

@ -0,0 +1,24 @@
# frozen_string_literal: true
require 'spec_helper'
describe 'git_http routing' do
include RSpec::Rails::RequestExampleGroup
describe 'wiki.git routing', 'routing' do
let(:wiki_path) { '/gitlab/gitlabhq/wikis' }
it 'redirects namespace/project.wiki.git to the project wiki' do
expect(get('/gitlab/gitlabhq.wiki.git')).to redirect_to(wiki_path)
end
it 'preserves query parameters' do
expect(get('/gitlab/gitlabhq.wiki.git?foo=bar&baz=qux')).to redirect_to("#{wiki_path}?foo=bar&baz=qux")
end
it 'only redirects when the format is .git' do
expect(get('/gitlab/gitlabhq.wiki')).not_to redirect_to(wiki_path)
expect(get('/gitlab/gitlabhq.wiki.json')).not_to redirect_to(wiki_path)
end
end
end