diff options
author | Marin Jankovski <marin@gitlab.com> | 2015-03-03 19:53:20 +0000 |
---|---|---|
committer | Marin Jankovski <marin@gitlab.com> | 2015-03-03 19:53:20 +0000 |
commit | a7fad44bd361c68c6f4ff0fbeb5ad067ef2b74b1 (patch) | |
tree | 8c91c212ef8cabc38604270f474debeec3e5a36a | |
parent | c5b66532df4acc102c0c62c320ca8a8cf6115ff3 (diff) | |
parent | 3702c4ad80614d71fc5ac3ea1af7c3789ec8146d (diff) | |
download | gitlab-ce-a7fad44bd361c68c6f4ff0fbeb5ad067ef2b74b1.tar.gz |
Merge branch 'go-import' into 'master'
Render go-import meta tag for private repos.
The previously solution (626f5bab3580926842aa6247e052008ddf1ca571) required a change to nginx config and broke visits from Googlebot and other clients including "go" in their user agent.
See merge request !1587
-rw-r--r-- | app/controllers/projects_controller.rb | 11 | ||||
-rw-r--r-- | app/views/projects/go_import.html.haml | 5 | ||||
-rw-r--r-- | lib/support/nginx/gitlab | 10 | ||||
-rw-r--r-- | lib/support/nginx/gitlab-ssl | 10 | ||||
-rw-r--r-- | spec/controllers/projects_controller_spec.rb | 16 |
5 files changed, 32 insertions, 20 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5486a97e51d..82b8a1cc13a 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,4 +1,5 @@ class ProjectsController < ApplicationController + prepend_before_filter :render_go_import, only: [:show] skip_before_filter :authenticate_user!, only: [:show] before_filter :project, except: [:new, :create] before_filter :repository, except: [:new, :create] @@ -184,4 +185,14 @@ class ProjectsController < ApplicationController end 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 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/lib/support/nginx/gitlab b/lib/support/nginx/gitlab index fd5b2664786..62a4276536c 100644 --- a/lib/support/nginx/gitlab +++ b/lib/support/nginx/gitlab @@ -77,16 +77,6 @@ server { proxy_pass http://gitlab; } - ## If ``go get`` detected, return go-import meta tag. - ## This works for public and for private repositories. - ## See also http://golang.org/cmd/go/#hdr-Remote_import_paths - if ($http_user_agent ~* "Go") { - return 200 " - <!DOCTYPE html> - <head><meta content='$host$uri git $scheme://$host$uri.git' name='go-import'></head> - </html>"; - } - ## If a file, which is not found in the root folder is requested, ## then the proxy passes the request to the upsteam (gitlab unicorn). location @gitlab { diff --git a/lib/support/nginx/gitlab-ssl b/lib/support/nginx/gitlab-ssl index a9699bac611..2aefc944698 100644 --- a/lib/support/nginx/gitlab-ssl +++ b/lib/support/nginx/gitlab-ssl @@ -123,16 +123,6 @@ server { proxy_pass http://gitlab; } - ## If ``go get`` detected, return go-import meta tag. - ## This works for public and for private repositories. - ## See also http://golang.org/cmd/go/#hdr-Remote_import_paths - if ($http_user_agent ~* "Go") { - return 200 " - <!DOCTYPE html> - <head><meta content='$host$uri git $scheme://$host$uri.git' name='go-import'></head> - </html>"; - } - ## If a file, which is not found in the root folder is requested, ## then the proxy passes the request to the upsteam (gitlab unicorn). location @gitlab { diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 89bb35de8fc..a1b82a32150 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -7,6 +7,22 @@ describe ProjectsController do let(:jpg) { fixture_file_upload(Rails.root + 'spec/fixtures/rails_sample.jpg', 'image/jpg') } let(:txt) { fixture_file_upload(Rails.root + 'spec/fixtures/doc_sample.txt', 'text/plain') } + describe "GET show" do + + context "when requested by `go get`" do + render_views + + it "renders the go-import meta tag" do + get :show, "go-get" => "1", namespace_id: "bogus_namespace", id: "bogus_project" + + expect(response.body).to include("name='go-import'") + + content = "localhost/bogus_namespace/bogus_project git http://localhost/bogus_namespace/bogus_project.git" + expect(response.body).to include("content='#{content}'") + end + end + end + describe "POST #toggle_star" do it "toggles star if user is signed in" do sign_in(user) |