diff options
Diffstat (limited to 'config/routes')
-rw-r--r-- | config/routes/admin.rb | 2 | ||||
-rw-r--r-- | config/routes/git_http.rb | 105 | ||||
-rw-r--r-- | config/routes/group.rb | 3 | ||||
-rw-r--r-- | config/routes/import.rb | 9 | ||||
-rw-r--r-- | config/routes/merge_requests.rb | 1 | ||||
-rw-r--r-- | config/routes/repository_scoped.rb | 1 | ||||
-rw-r--r-- | config/routes/user.rb | 7 |
7 files changed, 53 insertions, 75 deletions
diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 2db2caafcd8..71a927f59b9 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -18,6 +18,7 @@ namespace :admin do put :unlock put :confirm put :approve + delete :reject post :impersonate patch :disable_two_factor delete 'remove/:email_id', action: 'remove_email', as: 'remove_email' @@ -126,6 +127,7 @@ namespace :admin do resources :integrations, only: [:edit, :update] do member do put :test + post :reset end end diff --git a/config/routes/git_http.rb b/config/routes/git_http.rb index fb8119904ea..715d4b5cc59 100644 --- a/config/routes/git_http.rb +++ b/config/routes/git_http.rb @@ -1,60 +1,47 @@ -concern :gitactionable do - scope(controller: :git_http) do - get '/info/refs', action: :info_refs - post '/git-upload-pack', action: :git_upload_pack - post '/git-receive-pack', action: :git_receive_pack - end -end - -concern :lfsable do - # Git LFS API (metadata) - scope(path: 'info/lfs/objects', controller: :lfs_api) do - post :batch - post '/', action: :deprecated - get '/*oid', action: :deprecated - end - - scope(path: 'info/lfs') do - resources :lfs_locks, controller: :lfs_locks_api, path: 'locks' do - post :unlock, on: :member - post :verify, on: :collection - end - end - - # GitLab LFS object storage - scope(path: 'gitlab-lfs/objects/*oid', controller: :lfs_storage, constraints: { oid: /[a-f0-9]{64}/ }) do - get '/', action: :download - - scope constraints: { size: /[0-9]+/ } do - put '/*size/authorize', action: :upload_authorize - put '/*size', action: :upload_finalize - end - end -end - -# Git route for personal and project snippets -scope(path: ':namespace_id/:repository_id', - format: nil, - constraints: { namespace_id: Gitlab::PathRegex.personal_and_project_snippets_path_regex, repository_id: /\d+\.git/ }, - module: :repositories) do - concerns :gitactionable -end - -scope(path: '*namespace_id/:repository_id', - format: nil, - constraints: { namespace_id: Gitlab::PathRegex.full_namespace_route_regex }) do - scope(constraints: { repository_id: Gitlab::PathRegex.project_git_route_regex }) do +scope(path: '*repository_path', format: false) do + constraints(repository_path: Gitlab::PathRegex.repository_git_route_regex) do scope(module: :repositories) do - concerns :gitactionable - concerns :lfsable + # Git HTTP API + scope(controller: :git_http) do + get '/info/refs', action: :info_refs + post '/git-upload-pack', action: :git_upload_pack + post '/git-receive-pack', action: :git_receive_pack + end + + # NOTE: LFS routes are exposed on all repository types, but we still check for + # LFS availability on the repository container in LfsRequest#lfs_check_access! + + # Git LFS API (metadata) + scope(path: 'info/lfs/objects', controller: :lfs_api) do + post :batch + post '/', action: :deprecated + get '/*oid', action: :deprecated + end + + scope(path: 'info/lfs') do + resources :lfs_locks, controller: :lfs_locks_api, path: 'locks' do + post :unlock, on: :member + post :verify, on: :collection + end + end + + # GitLab LFS object storage + scope(path: 'gitlab-lfs/objects/*oid', controller: :lfs_storage, constraints: { oid: /[a-f0-9]{64}/ }) do + get '/', action: :download + + constraints(size: /[0-9]+/) do + put '/*size/authorize', action: :upload_authorize + put '/*size', action: :upload_finalize + end + end end end # Redirect /group/project.wiki.git to the project wiki - scope(format: true, constraints: { repository_id: Gitlab::PathRegex.project_wiki_git_route_regex, format: :git }) do + constraints(repository_path: Gitlab::PathRegex.repository_wiki_git_route_regex) do wiki_redirect = redirect do |params, request| - project_id = params[:repository_id].delete_suffix('.wiki') - path = [params[:namespace_id], project_id, 'wikis'].join('/') + container_path = params[:repository_path].delete_suffix('.wiki.git') + path = File.join(container_path, '-', 'wikis') path << "?#{request.query_string}" unless request.query_string.blank? path end @@ -63,22 +50,14 @@ scope(path: '*namespace_id/:repository_id', end # Redirect /group/project/info/refs to /group/project.git/info/refs - scope(constraints: { repository_id: Gitlab::PathRegex.project_route_regex }) do - # Allow /info/refs, /info/refs?service=git-upload-pack, and - # /info/refs?service=git-receive-pack, but nothing else. - # - git_http_handshake = lambda do |request| - ::Constraints::ProjectUrlConstrainer.new.matches?(request, existence_check: false) && - (request.query_string.blank? || - request.query_string.match(/\Aservice=git-(upload|receive)-pack\z/)) - end - + # This allows cloning a repository without the trailing `.git` + constraints(repository_path: Gitlab::PathRegex.repository_route_regex) do ref_redirect = redirect do |params, request| - path = "#{params[:namespace_id]}/#{params[:repository_id]}.git/info/refs" + path = "#{params[:repository_path]}.git/info/refs" path << "?#{request.query_string}" unless request.query_string.blank? path end - get '/info/refs', constraints: git_http_handshake, to: ref_redirect + get '/info/refs', constraints: ::Constraints::RepositoryRedirectUrlConstrainer.new, to: ref_redirect end end diff --git a/config/routes/group.rb b/config/routes/group.rb index e90be482bbd..38c04369d2f 100644 --- a/config/routes/group.rb +++ b/config/routes/group.rb @@ -46,6 +46,7 @@ constraints(::Constraints::GroupUrlConstrainer.new) do resources :integrations, only: [:index, :edit, :update] do member do put :test + post :reset end end end @@ -124,7 +125,7 @@ end # Dependency proxy for containers # Because docker adds v2 prefix to URI this need to be outside of usual group routes scope format: false do - get 'v2', to: proc { [200, {}, ['']] } # rubocop:disable Cop/PutGroupRoutesUnderScope + get 'v2' => 'groups/dependency_proxy_auth#authenticate' # rubocop:disable Cop/PutGroupRoutesUnderScope constraints image: Gitlab::PathRegex.container_image_regex, sha: Gitlab::PathRegex.container_image_blob_sha_regex do get 'v2/*group_id/dependency_proxy/containers/*image/manifests/*tag' => 'groups/dependency_proxy_for_containers#manifest' # rubocop:todo Cop/PutGroupRoutesUnderScope diff --git a/config/routes/import.rb b/config/routes/import.rb index 557d7fe7143..6c99b0320de 100644 --- a/config/routes/import.rb +++ b/config/routes/import.rb @@ -42,15 +42,6 @@ namespace :import do get :realtime_changes end - resource :google_code, only: [:create, :new], controller: :google_code do - get :status - post :callback - get :jobs - - get :new_user_map, path: :user_map - post :create_user_map, path: :user_map - end - resource :fogbugz, only: [:create, :new], controller: :fogbugz do get :status post :callback diff --git a/config/routes/merge_requests.rb b/config/routes/merge_requests.rb index c11e5a5c3d9..41d831f239e 100644 --- a/config/routes/merge_requests.rb +++ b/config/routes/merge_requests.rb @@ -17,6 +17,7 @@ resources :merge_requests, concerns: :awardable, except: [:new, :create, :show], get :accessibility_reports get :coverage_reports get :terraform_reports + get :codequality_reports scope constraints: ->(req) { req.format == :json }, as: :json do get :commits diff --git a/config/routes/repository_scoped.rb b/config/routes/repository_scoped.rb index 865a5bdb5a9..7fabf3ff895 100644 --- a/config/routes/repository_scoped.rb +++ b/config/routes/repository_scoped.rb @@ -34,6 +34,7 @@ scope format: false do scope constraints: { id: /[^\0]+?/ } do scope controller: :static_site_editor do get '/sse/:id(/*vueroute)', action: :show, as: :show_sse + get '/sse', as: :root_sse, action: :index end end end diff --git a/config/routes/user.rb b/config/routes/user.rb index 63329277e33..515a9a23360 100644 --- a/config/routes/user.rb +++ b/config/routes/user.rb @@ -54,8 +54,11 @@ scope(constraints: { username: Gitlab::PathRegex.root_namespace_route_regex }) d end constraints(::Constraints::UserUrlConstrainer.new) do - # Get all keys of user - get ':username.keys' => 'profiles/keys#get_keys', constraints: { username: Gitlab::PathRegex.root_namespace_route_regex } + # Get all SSH keys of user + get ':username.keys' => 'users#ssh_keys', constraints: { username: Gitlab::PathRegex.root_namespace_route_regex } + + # Get all GPG keys of user + get ':username.gpg' => 'users#gpg_keys', constraints: { username: Gitlab::PathRegex.root_namespace_route_regex } scope(path: ':username', as: :user, |