diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 11 | ||||
-rw-r--r-- | app/views/projects/go_import.html.haml | 5 | ||||
-rw-r--r-- | config/initializers/go_get.rb | 1 | ||||
-rw-r--r-- | lib/gitlab/middleware/go.rb | 50 | ||||
-rw-r--r-- | spec/lib/gitlab/middleware/go_spec.rb | 30 |
6 files changed, 16 insertions, 82 deletions
diff --git a/CHANGELOG b/CHANGELOG index 07b187b31a2..d4554b96190 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,6 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.6.0 (unreleased) - - Support Golang subpackage fetching (Stan Hu) - Contributions to forked projects are included in calendar - Improve the formatting for the user page bio (Connor Shea) - Removed the default password from the initial admin account created during diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index c70add86a20..aea08ecce3e 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,6 +1,7 @@ class ProjectsController < ApplicationController include ExtractsPath + prepend_before_action :render_go_import, only: [:show] skip_before_action :authenticate_user!, only: [:show, :activity] before_action :project, except: [:new, :create] before_action :repository, except: [:new, :create] @@ -241,6 +242,16 @@ class ProjectsController < ApplicationController end end + def render_go_import + return unless params["go-get"] == "1" + + @namespace = params[:namespace_id] + @id = params[:project_id] || params[:id] + @id = @id.gsub(/\.git\Z/, "") + + render "go_import", layout: false + end + def repo_exists? project.repository_exists? && !project.empty_repo? end diff --git a/app/views/projects/go_import.html.haml b/app/views/projects/go_import.html.haml new file mode 100644 index 00000000000..87ac75a350f --- /dev/null +++ b/app/views/projects/go_import.html.haml @@ -0,0 +1,5 @@ +!!! 5 +%html + %head + - web_url = [Gitlab.config.gitlab.url, @namespace, @id].join('/') + %meta{name: "go-import", content: "#{web_url.split('://')[1]} git #{web_url}.git"} diff --git a/config/initializers/go_get.rb b/config/initializers/go_get.rb deleted file mode 100644 index 7e7896b4900..00000000000 --- a/config/initializers/go_get.rb +++ /dev/null @@ -1 +0,0 @@ -Rails.application.config.middleware.use(Gitlab::Middleware::Go) diff --git a/lib/gitlab/middleware/go.rb b/lib/gitlab/middleware/go.rb deleted file mode 100644 index 50b0dd32380..00000000000 --- a/lib/gitlab/middleware/go.rb +++ /dev/null @@ -1,50 +0,0 @@ -# A dumb middleware that returns a Go HTML document if the go-get=1 query string -# is used irrespective if the namespace/project exists -module Gitlab - module Middleware - class Go - def initialize(app) - @app = app - end - - def call(env) - request = Rack::Request.new(env) - - if go_request?(request) - render_go_doc(request) - else - @app.call(env) - end - end - - private - - def render_go_doc(request) - body = go_body(request) - response = Rack::Response.new(body, 200, { 'Content-Type' => 'text/html' }) - response.finish - end - - def go_request?(request) - request["go-get"].to_i == 1 && request.env["PATH_INFO"].present? - end - - def go_body(request) - base_url = Gitlab.config.gitlab.url - # Go subpackages may be in the form of namespace/project/path1/path2/../pathN - # We can just ignore the paths and leave the namespace/project - path_info = request.env["PATH_INFO"] - path_info.sub!(/^\//, '') - project_path = path_info.split('/').first(2).join('/') - request_url = URI.join(base_url, project_path) - domain_path = strip_url(request_url.to_s) - - "<!DOCTYPE html><html><head><meta content='#{domain_path} git #{request_url}.git' name='go-import'></head></html>\n"; - end - - def strip_url(url) - url.gsub(/\Ahttps?:\/\//, '') - end - end - end -end diff --git a/spec/lib/gitlab/middleware/go_spec.rb b/spec/lib/gitlab/middleware/go_spec.rb deleted file mode 100644 index 117a15264da..00000000000 --- a/spec/lib/gitlab/middleware/go_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'spec_helper' - -describe Gitlab::Middleware::Go, lib: true do - let(:app) { double(:app) } - let(:middleware) { described_class.new(app) } - - describe '#call' do - describe 'when go-get=0' do - it 'skips go-import generation' do - env = { 'rack.input' => '', - 'QUERY_STRING' => 'go-get=0' } - expect(app).to receive(:call).with(env).and_return('no-go') - middleware.call(env) - end - end - - describe 'when go-get=1' do - it 'returns a document' do - env = { 'rack.input' => '', - 'QUERY_STRING' => 'go-get=1', - 'PATH_INFO' => '/group/project/path' } - resp = middleware.call(env) - expect(resp[0]).to eq(200) - expect(resp[1]['Content-Type']).to eq('text/html') - expected_body = "<!DOCTYPE html><html><head><meta content='localhost/group/project git http://localhost/group/project.git' name='go-import'></head></html>\n" - expect(resp[2].body).to eq([expected_body]) - end - end - end -end |