From e71318a013513d3a5151d2aeca34104cb582bb5c Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Wed, 16 Oct 2019 01:04:21 +0300 Subject: [PATCH 01/12] Added .well-known/terraform.json route --- app/controllers/well_known_controller.rb | 9 +++++++++ config/routes.rb | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 app/controllers/well_known_controller.rb diff --git a/app/controllers/well_known_controller.rb b/app/controllers/well_known_controller.rb new file mode 100644 index 00000000000000..eec289265b0dc7 --- /dev/null +++ b/app/controllers/well_known_controller.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class WellKnownController < ApplicationController + skip_before_action :authenticate_user! + + def terraform + render json: '{ "modules.v1":"/api/v4/terraform/modules/" }' + end +end diff --git a/config/routes.rb b/config/routes.rb index 5bfae777f1768d..b90d6af4ea774b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -69,6 +69,9 @@ # Health check get 'health_check(/:checks)' => 'health_check#index', as: :health_check + + # .well-known + get '.well-known/terraform.json' => 'well_known#terraform' scope path: '-' do # '/-/health' implemented by BasicHealthCheck middleware -- GitLab From 4d41eda11807ae00b98398771adcc96305b8892f Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Wed, 16 Oct 2019 04:48:26 +0300 Subject: [PATCH 02/12] Added versions handler --- .../terraform_modules_controller.rb | 44 +++++++++++++++++++ app/controllers/well_known_controller.rb | 4 +- config/routes.rb | 3 ++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 app/controllers/terraform_modules_controller.rb diff --git a/app/controllers/terraform_modules_controller.rb b/app/controllers/terraform_modules_controller.rb new file mode 100644 index 00000000000000..98271e5fbc2d4a --- /dev/null +++ b/app/controllers/terraform_modules_controller.rb @@ -0,0 +1,44 @@ +class TerraformModulesController < ApplicationController + include RoutableActions + + skip_before_action :authenticate_user! + + def versions + project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + + if project.nil? + head 404, "content_type" => 'text/plain' + return + end + + tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() + + answer = { + "modules" => [ + { + "source" => project.web_url(), + "versions" => [] + } + ] + } + tags.each do |tag| + version = { + "version" => tag.name.delete_prefix("v"), + "submodules" => [], + "root" => { + "dependencies" => [], + "providers" => [ + { + "name" => params['provider'], + "version" => "" + } + ] + } + } + answer['modules'][0]['versions'].push(version) + end + + render json: answer + end + end + \ No newline at end of file diff --git a/app/controllers/well_known_controller.rb b/app/controllers/well_known_controller.rb index eec289265b0dc7..22d42953b68efb 100644 --- a/app/controllers/well_known_controller.rb +++ b/app/controllers/well_known_controller.rb @@ -2,8 +2,8 @@ class WellKnownController < ApplicationController skip_before_action :authenticate_user! - + def terraform - render json: '{ "modules.v1":"/api/v4/terraform/modules/" }' + render json: '{ "modules.v1":"/terraform/modules/" }' end end diff --git a/config/routes.rb b/config/routes.rb index b90d6af4ea774b..64389927e30a0a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -73,6 +73,9 @@ # .well-known get '.well-known/terraform.json' => 'well_known#terraform' + # TerraformModiles + get 'terraform/modules/:namespace/:name/:provider/versions' => 'terraform_modules#versions' + scope path: '-' do # '/-/health' implemented by BasicHealthCheck middleware get 'liveness' => 'health#liveness' -- GitLab From 5c6307c977a47b24fdba474759acd6b170a98ba8 Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Sat, 19 Oct 2019 03:12:59 +0300 Subject: [PATCH 03/12] Move terraform module registry handlers from separate controller to API --- .../terraform_modules_controller.rb | 44 --------------- app/controllers/well_known_controller.rb | 2 +- config/routes.rb | 3 -- lib/api/api.rb | 1 + lib/api/terraform_modules.rb | 53 +++++++++++++++++++ 5 files changed, 55 insertions(+), 48 deletions(-) delete mode 100644 app/controllers/terraform_modules_controller.rb create mode 100644 lib/api/terraform_modules.rb diff --git a/app/controllers/terraform_modules_controller.rb b/app/controllers/terraform_modules_controller.rb deleted file mode 100644 index 98271e5fbc2d4a..00000000000000 --- a/app/controllers/terraform_modules_controller.rb +++ /dev/null @@ -1,44 +0,0 @@ -class TerraformModulesController < ApplicationController - include RoutableActions - - skip_before_action :authenticate_user! - - def versions - project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) - - if project.nil? - head 404, "content_type" => 'text/plain' - return - end - - tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() - - answer = { - "modules" => [ - { - "source" => project.web_url(), - "versions" => [] - } - ] - } - tags.each do |tag| - version = { - "version" => tag.name.delete_prefix("v"), - "submodules" => [], - "root" => { - "dependencies" => [], - "providers" => [ - { - "name" => params['provider'], - "version" => "" - } - ] - } - } - answer['modules'][0]['versions'].push(version) - end - - render json: answer - end - end - \ No newline at end of file diff --git a/app/controllers/well_known_controller.rb b/app/controllers/well_known_controller.rb index 22d42953b68efb..a8f60d2c380b74 100644 --- a/app/controllers/well_known_controller.rb +++ b/app/controllers/well_known_controller.rb @@ -4,6 +4,6 @@ class WellKnownController < ApplicationController skip_before_action :authenticate_user! def terraform - render json: '{ "modules.v1":"/terraform/modules/" }' + render json: '{ "modules.v1":"/api/v4/terraform/modules/" }' end end diff --git a/config/routes.rb b/config/routes.rb index 64389927e30a0a..b90d6af4ea774b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -73,9 +73,6 @@ # .well-known get '.well-known/terraform.json' => 'well_known#terraform' - # TerraformModiles - get 'terraform/modules/:namespace/:name/:provider/versions' => 'terraform_modules#versions' - scope path: '-' do # '/-/health' implemented by BasicHealthCheck middleware get 'liveness' => 'health#liveness' diff --git a/lib/api/api.rb b/lib/api/api.rb index d71f0c38ce6874..fd35b7451ba42c 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -169,6 +169,7 @@ class API < Grape::API mount ::API::SystemHooks mount ::API::Tags mount ::API::Templates + mount ::API::TerraformModules mount ::API::Todos mount ::API::Triggers mount ::API::UserCounts diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb new file mode 100644 index 00000000000000..a8fd0478f5144b --- /dev/null +++ b/lib/api/terraform_modules.rb @@ -0,0 +1,53 @@ +# class TerraformModulesController < ApplicationController +# include RoutableActions + +# skip_before_action :authenticate_user! + +# def versions + +# end +# end + +module API + class TerraformModules < Grape::API + include RoutableActions + resource :terraform do + resource :modules do + get ':namespace/:name/:provider/versions' do + project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + + not_found! unless project + + tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() + + answer = { + "modules" => [ + { + "source" => project.web_url(), + "versions" => [] + } + ] + } + tags.each do |tag| + version = { + "version" => tag.name.delete_prefix("v"), + "submodules" => [], + "root" => { + "dependencies" => [], + "providers" => [ + { + "name" => params['provider'], + "version" => "" + } + ] + } + } + answer['modules'][0]['versions'].push(version) + end + + answer + end + end + end + end +end -- GitLab From 09b5d1b687a95ae7ce1fa1b90486809b77bcebe7 Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Sat, 19 Oct 2019 04:19:27 +0300 Subject: [PATCH 04/12] Added download api method for terraform modules registry --- lib/api/terraform_modules.rb | 92 +++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index a8fd0478f5144b..bcdbcdea9536d9 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -1,53 +1,57 @@ -# class TerraformModulesController < ApplicationController -# include RoutableActions - -# skip_before_action :authenticate_user! - -# def versions - -# end -# end - module API - class TerraformModules < Grape::API - include RoutableActions - resource :terraform do - resource :modules do - get ':namespace/:name/:provider/versions' do - project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + class TerraformModules < Grape::API + include RoutableActions + resource :terraform do + resource :modules do + namespace ':namespace/:name/:provider' do + get 'versions' do + project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) - not_found! unless project - - tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() - - answer = { - "modules" => [ + not_found! unless project + + tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() + + answer = { + "modules" => [ + { + "source" => project.web_url(), + "versions" => [] + } + ] + } + tags.each do |tag| + version = { + "version" => tag.name.delete_prefix("v"), + "submodules" => [], + "root" => { + "dependencies" => [], + "providers" => [ { - "source" => project.web_url(), - "versions" => [] + "name" => params['provider'], + "version" => "" } ] - } - tags.each do |tag| - version = { - "version" => tag.name.delete_prefix("v"), - "submodules" => [], - "root" => { - "dependencies" => [], - "providers" => [ - { - "name" => params['provider'], - "version" => "" - } - ] - } - } - answer['modules'][0]['versions'].push(version) - end - - answer - end + } + } + answer['modules'][0]['versions'].push(version) end + + answer + end + + get ':tag/download', :requirements => { :tag => /.*/ } do + project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + not_found! unless project + + tag = project.repository.find_tag(params['tag']) + tag = project.repository.find_tag('v' + params['tag']) unless tag + not_found! unless tag + + header 'X-Terraform-Get', ActionDispatch::Http::URL.full_url_for(Rails.application.routes.default_url_options.merge(path: "/api/v4/projects/#{project.id}/repository/archive?archive=tar.gz&sha=#{tag.name}")) + status :no_content + end end + end end + end end -- GitLab From fbe03c4d85f2890b0a49a735c510ca2d3e86eed3 Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Mon, 13 Jan 2020 16:58:27 +0300 Subject: [PATCH 05/12] Added authorization to api methods --- lib/api/terraform_modules.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index bcdbcdea9536d9..7093d9bbb1886b 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -6,8 +6,8 @@ class TerraformModules < Grape::API namespace ':namespace/:name/:provider' do get 'versions' do project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) - not_found! unless project + authorize!(:read_package, project) tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() @@ -42,6 +42,7 @@ class TerraformModules < Grape::API get ':tag/download', :requirements => { :tag => /.*/ } do project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) not_found! unless project + authorize!(:read_package, project) tag = project.repository.find_tag(params['tag']) tag = project.repository.find_tag('v' + params['tag']) unless tag -- GitLab From 968b5a31f846174a0651c47f93589a141cb81e0a Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Mon, 13 Jan 2020 17:19:39 +0300 Subject: [PATCH 06/12] Move project find logic to helper --- lib/api/terraform_modules.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index 7093d9bbb1886b..5969feedf4d0f6 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -5,7 +5,7 @@ class TerraformModules < Grape::API resource :modules do namespace ':namespace/:name/:provider' do get 'versions' do - project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + project = project() not_found! unless project authorize!(:read_package, project) @@ -40,7 +40,7 @@ class TerraformModules < Grape::API end get ':tag/download', :requirements => { :tag => /.*/ } do - project = Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + project = project() not_found! unless project authorize!(:read_package, project) @@ -54,5 +54,11 @@ class TerraformModules < Grape::API end end end + + helpers do + def project + Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + end + end end end -- GitLab From c4f6e1f5a0400de02cbde54011e5d0c63aa28c31 Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Tue, 14 Jan 2020 18:30:55 +0300 Subject: [PATCH 07/12] Migrate anwer forming for terraform versions call to entity/presenter --- app/presenters/terraform_presenter.rb | 40 +++++++++++++++++++++++++++ lib/api/entities.rb | 4 +++ lib/api/terraform_modules.rb | 29 ++----------------- 3 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 app/presenters/terraform_presenter.rb diff --git a/app/presenters/terraform_presenter.rb b/app/presenters/terraform_presenter.rb new file mode 100644 index 00000000000000..10e436735ec7f4 --- /dev/null +++ b/app/presenters/terraform_presenter.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +class TerraformPresenter < Gitlab::View::Presenter::Simple + attr_accessor :project, :tags, :provider + + presents :modules + + def initialize(project, tags, provider) + @project = project + @tags = tags + @provider = provider + end + + def modules + modules = [ + { + "source" => @project.web_url(), + "versions" => [] + } + ] + @tags.each do |tag| + version = { + "version" => tag.name.delete_prefix("v"), + "submodules" => [], + "root" => { + "dependencies" => [], + "providers" => [ + { + "name" => @provider, + "version" => "" + } + ] + } + } + modules[0]['versions'].push(version) + end + + return modules + end +end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 74f8edb07847ff..fa254e5cde27a2 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1927,6 +1927,10 @@ class Response < Grape::Entity expose :reference_counter_decreased end end + + class TerraformVersions < Grape::Entity + expose :modules + end end end diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index 5969feedf4d0f6..08a8e4c9b13da3 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -10,33 +10,8 @@ class TerraformModules < Grape::API authorize!(:read_package, project) tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() - - answer = { - "modules" => [ - { - "source" => project.web_url(), - "versions" => [] - } - ] - } - tags.each do |tag| - version = { - "version" => tag.name.delete_prefix("v"), - "submodules" => [], - "root" => { - "dependencies" => [], - "providers" => [ - { - "name" => params['provider'], - "version" => "" - } - ] - } - } - answer['modules'][0]['versions'].push(version) - end - - answer + presenter = TerraformPresenter.new(project, tags, params['provider']) + present presenter, with: Entities::TerraformVersions end get ':tag/download', :requirements => { :tag => /.*/ } do -- GitLab From 86ad1ab643bd1a8de22a07599c2d5ea7f9e76687 Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Tue, 14 Jan 2020 21:25:45 +0300 Subject: [PATCH 08/12] Move terraform registry service discovery to TerraformRegistryController --- ...l_known_controller.rb => terraform_registry_controller.rb} | 4 ++-- config/routes.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename app/controllers/{well_known_controller.rb => terraform_registry_controller.rb} (67%) diff --git a/app/controllers/well_known_controller.rb b/app/controllers/terraform_registry_controller.rb similarity index 67% rename from app/controllers/well_known_controller.rb rename to app/controllers/terraform_registry_controller.rb index a8f60d2c380b74..00e66cdba4911f 100644 --- a/app/controllers/well_known_controller.rb +++ b/app/controllers/terraform_registry_controller.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -class WellKnownController < ApplicationController +class TerraformRegistryController < ApplicationController skip_before_action :authenticate_user! - def terraform + def index render json: '{ "modules.v1":"/api/v4/terraform/modules/" }' end end diff --git a/config/routes.rb b/config/routes.rb index 9b73f290bf47b5..b7900b12639e7d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -71,7 +71,7 @@ get 'health_check(/:checks)' => 'health_check#index', as: :health_check # .well-known - get '.well-known/terraform.json' => 'well_known#terraform' + get '.well-known/terraform.json' => 'terraform_registry#index' scope path: '-' do # '/-/health' implemented by BasicHealthCheck middleware -- GitLab From 4f3be817b3ccde66872ef3ccbe022903f8f2b3be Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Tue, 14 Jan 2020 23:07:15 +0300 Subject: [PATCH 09/12] Fix liniting issues --- app/presenters/terraform_presenter.rb | 6 +++--- config/routes.rb | 4 ++-- lib/api/entities.rb | 4 ++-- lib/api/terraform_modules.rb | 16 +++++++++------- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/presenters/terraform_presenter.rb b/app/presenters/terraform_presenter.rb index 10e436735ec7f4..124298ec05b3b3 100644 --- a/app/presenters/terraform_presenter.rb +++ b/app/presenters/terraform_presenter.rb @@ -14,7 +14,7 @@ def initialize(project, tags, provider) def modules modules = [ { - "source" => @project.web_url(), + "source" => @project.web_url, "versions" => [] } ] @@ -34,7 +34,7 @@ def modules } modules[0]['versions'].push(version) end - - return modules + + modules end end diff --git a/config/routes.rb b/config/routes.rb index b7900b12639e7d..89aacf5ecb28bb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -69,8 +69,8 @@ # Health check get 'health_check(/:checks)' => 'health_check#index', as: :health_check - - # .well-known + + # Terraform sevice discovery get '.well-known/terraform.json' => 'terraform_registry#index' scope path: '-' do diff --git a/lib/api/entities.rb b/lib/api/entities.rb index fa254e5cde27a2..122d29d850a9dd 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1927,10 +1927,10 @@ class Response < Grape::Entity expose :reference_counter_decreased end end - + class TerraformVersions < Grape::Entity expose :modules - end + end end end diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index 08a8e4c9b13da3..823d5f34e44011 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module API class TerraformModules < Grape::API include RoutableActions @@ -8,22 +10,22 @@ class TerraformModules < Grape::API project = project() not_found! unless project authorize!(:read_package, project) - - tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute() + + tags = ::TagsFinder.new(project.repository, sort: "name_desc").execute presenter = TerraformPresenter.new(project, tags, params['provider']) - present presenter, with: Entities::TerraformVersions + present presenter, with: Entities::TerraformVersions end - get ':tag/download', :requirements => { :tag => /.*/ } do + get ':tag/download', 'requirements' => { 'tag' => /.*/ } do project = project() not_found! unless project authorize!(:read_package, project) tag = project.repository.find_tag(params['tag']) - tag = project.repository.find_tag('v' + params['tag']) unless tag + tag ||= project.repository.find_tag('v' + params['tag']) not_found! unless tag - header 'X-Terraform-Get', ActionDispatch::Http::URL.full_url_for(Rails.application.routes.default_url_options.merge(path: "/api/v4/projects/#{project.id}/repository/archive?archive=tar.gz&sha=#{tag.name}")) + header 'X-Terraform-Get', ActionDispatch::Http::URL.full_url_for(Rails.application.routes.default_url_options.merge(path: "/api/v4/projects/#{project.id}/repository/archive?archive=tar.gz&sha=#{tag.name}")) status :no_content end end @@ -32,7 +34,7 @@ class TerraformModules < Grape::API helpers do def project - Project.find_by_full_path(URI.decode(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + Project.find_by_full_path(CGI.unescape(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) end end end -- GitLab From 4b204bc62c26f4f2e1486a3900ecefccb0c2d42a Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Tue, 21 Jan 2020 03:19:04 +0300 Subject: [PATCH 10/12] Added strong memorize for project argument for lib/api/terraform_modules.rb --- lib/api/terraform_modules.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index 823d5f34e44011..6f5f53529ff92b 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -7,7 +7,6 @@ class TerraformModules < Grape::API resource :modules do namespace ':namespace/:name/:provider' do get 'versions' do - project = project() not_found! unless project authorize!(:read_package, project) @@ -17,7 +16,6 @@ class TerraformModules < Grape::API end get ':tag/download', 'requirements' => { 'tag' => /.*/ } do - project = project() not_found! unless project authorize!(:read_package, project) @@ -33,8 +31,12 @@ class TerraformModules < Grape::API end helpers do + include Gitlab::Utils::StrongMemoize + def project - Project.find_by_full_path(CGI.unescape(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + strong_memoize(:project) do + Project.find_by_full_path(CGI.unescape(params['namespace']) + "/terraform-" + params['provider'] + "-" + params['name']) + end end end end -- GitLab From b6987f03a758afa9d0de7ec5b95e0d38be2356fb Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Thu, 20 Aug 2020 19:31:27 +0300 Subject: [PATCH 11/12] Make gitlab work --- lib/api/terraform_modules.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index 6f5f53529ff92b..0eb59e5306d2c2 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -15,7 +15,7 @@ class TerraformModules < Grape::API present presenter, with: Entities::TerraformVersions end - get ':tag/download', 'requirements' => { 'tag' => /.*/ } do + get ':tag/download' do not_found! unless project authorize!(:read_package, project) -- GitLab From e7db1a42b677752d91ec40054a3924c3f926d16c Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Thu, 20 Aug 2020 20:19:56 +0300 Subject: [PATCH 12/12] Make existing routes work --- lib/api/terraform_modules.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/api/terraform_modules.rb b/lib/api/terraform_modules.rb index 0eb59e5306d2c2..b99107120fedb3 100644 --- a/lib/api/terraform_modules.rb +++ b/lib/api/terraform_modules.rb @@ -5,8 +5,8 @@ class TerraformModules < Grape::API include RoutableActions resource :terraform do resource :modules do - namespace ':namespace/:name/:provider' do - get 'versions' do + namespace ":namespace/:name/:provider" do + get "versions" do not_found! unless project authorize!(:read_package, project) @@ -15,7 +15,7 @@ class TerraformModules < Grape::API present presenter, with: Entities::TerraformVersions end - get ':tag/download' do + get ":tag/download", requirements: { tag: /.*/ } do not_found! unless project authorize!(:read_package, project) -- GitLab