Support Golang subpackage fetching

Closes #13805
This commit is contained in:
Stan Hu 2016-03-12 01:09:37 -08:00
parent f7da99aef7
commit cc065fbeaa
3 changed files with 53 additions and 0 deletions

View File

@ -1,6 +1,7 @@
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

View File

@ -0,0 +1 @@
Rails.application.config.middleware.use(Gitlab::Middleware::Go)

View File

@ -0,0 +1,51 @@
# 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)
return request["go-get"].to_i == 1
end
def go_body(request)
base_url = Settings.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('http://', '').
gsub('https://', '')
end
end
end
end