diff options
Diffstat (limited to 'lib/api/rpm_project_packages.rb')
-rw-r--r-- | lib/api/rpm_project_packages.rb | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/api/rpm_project_packages.rb b/lib/api/rpm_project_packages.rb index d17470ae92d..40b8d022c6c 100644 --- a/lib/api/rpm_project_packages.rb +++ b/lib/api/rpm_project_packages.rb @@ -21,7 +21,7 @@ module API end params do - requires :id, type: String, desc: 'The ID of a project' + requires :id, types: [String, Integer], desc: 'The ID or URL-encoded path of the project' end resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do namespace ':id/packages/rpm' do @@ -30,7 +30,14 @@ module API requires :file_name, type: String, desc: 'Repository metadata file name' end get 'repodata/*file_name', requirements: { file_name: API::NO_SLASH_URL_PART_REGEX } do - not_found! + authorize_read_package!(authorized_user_project) + + repository_file = Packages::Rpm::RepositoryFile.find_by_project_id_and_file_name!( + authorized_user_project.id, + "#{params['file_name']}.#{params['format']}" + ) + + present_carrierwave_file!(repository_file.file) end desc 'Download RPM package files' @@ -39,6 +46,13 @@ module API requires :file_name, type: String, desc: 'RPM package file name' end get '*package_file_id/*file_name', requirements: { file_name: API::NO_SLASH_URL_PART_REGEX } do + track_package_event( + 'pull_package', + :rpm, + category: self.class.name, + project: authorized_user_project, + namespace: authorized_user_project.namespace + ) not_found! end @@ -50,6 +64,15 @@ module API bad_request!('File is too large') end + track_package_event( + 'push_package', + :rpm, + user: current_user, + category: self.class.name, + project: authorized_user_project, + namespace: authorized_user_project.namespace + ) + not_found! end |