156 lines
6.7 KiB
Ruby
156 lines
6.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
module Concerns
|
|
module Packages
|
|
module DebianDistributionEndpoints
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
include PaginationParams
|
|
|
|
feature_category :package_registry
|
|
|
|
helpers ::API::Helpers::PackagesHelpers
|
|
helpers ::API::Helpers::Packages::BasicAuthHelpers
|
|
include ::API::Helpers::Authentication
|
|
|
|
namespace 'debian_distributions' do
|
|
helpers do
|
|
params :optional_distribution_params do
|
|
optional :suite, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Suite'
|
|
optional :origin, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Origin'
|
|
optional :label, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Label'
|
|
optional :version, type: String, regexp: Gitlab::Regex.debian_version_regex, desc: 'The Debian Version'
|
|
optional :description, type: String, desc: 'The Debian Description'
|
|
optional :valid_time_duration_seconds, type: Integer, desc: 'The duration before the Release file should be considered expired by the client'
|
|
|
|
optional :components, type: Array[String],
|
|
coerce_with: ::API::Validations::Types::CommaSeparatedToArray.coerce,
|
|
regexp: Gitlab::Regex.debian_component_regex,
|
|
desc: 'The list of Components'
|
|
optional :architectures, type: Array[String],
|
|
coerce_with: ::API::Validations::Types::CommaSeparatedToArray.coerce,
|
|
regexp: Gitlab::Regex.debian_architecture_regex,
|
|
desc: 'The list of Architectures'
|
|
end
|
|
end
|
|
|
|
authenticate_with do |accept|
|
|
accept.token_types(:personal_access_token, :deploy_token, :job_token)
|
|
.sent_through(:http_basic_auth)
|
|
end
|
|
|
|
content_type :json, 'application/json'
|
|
format :json
|
|
|
|
# POST {projects|groups}/:id/debian_distributions
|
|
desc 'Create a Debian Distribution' do
|
|
detail 'This feature was introduced in 14.0'
|
|
success ::API::Entities::Packages::Debian::Distribution
|
|
end
|
|
|
|
params do
|
|
requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
|
|
use :optional_distribution_params
|
|
end
|
|
post '/' do
|
|
authorize_create_package!(project_or_group)
|
|
|
|
distribution_params = declared_params(include_missing: false)
|
|
result = ::Packages::Debian::CreateDistributionService.new(project_or_group, current_user, distribution_params).execute
|
|
distribution = result.payload[:distribution]
|
|
|
|
if result.success?
|
|
present distribution, with: ::API::Entities::Packages::Debian::Distribution
|
|
else
|
|
render_validation_error!(distribution)
|
|
end
|
|
end
|
|
|
|
# GET {projects|groups}/:id/debian_distributions
|
|
desc 'Get a list of Debian Distributions' do
|
|
detail 'This feature was introduced in 14.0'
|
|
success ::API::Entities::Packages::Debian::Distribution
|
|
end
|
|
|
|
params do
|
|
use :pagination
|
|
optional :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
|
|
use :optional_distribution_params
|
|
end
|
|
get '/' do
|
|
authorize_read_package!(project_or_group)
|
|
|
|
distribution_params = declared_params(include_missing: false)
|
|
distributions = ::Packages::Debian::DistributionsFinder.new(project_or_group, distribution_params).execute
|
|
|
|
present paginate(distributions), with: ::API::Entities::Packages::Debian::Distribution
|
|
end
|
|
|
|
# GET {projects|groups}/:id/debian_distributions/:codename
|
|
desc 'Get a Debian Distribution' do
|
|
detail 'This feature was introduced in 14.0'
|
|
success ::API::Entities::Packages::Debian::Distribution
|
|
end
|
|
|
|
params do
|
|
requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
|
|
end
|
|
get '/:codename' do
|
|
authorize_read_package!(project_or_group)
|
|
|
|
distribution = ::Packages::Debian::DistributionsFinder.new(project_or_group, codename: params[:codename]).execute.last!
|
|
|
|
present distribution, with: ::API::Entities::Packages::Debian::Distribution
|
|
end
|
|
|
|
# PUT {projects|groups}/:id/debian_distributions/:codename
|
|
desc 'Update a Debian Distribution' do
|
|
detail 'This feature was introduced in 14.0'
|
|
success ::API::Entities::Packages::Debian::Distribution
|
|
end
|
|
|
|
params do
|
|
requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
|
|
use :optional_distribution_params
|
|
end
|
|
put '/:codename' do
|
|
authorize_create_package!(project_or_group)
|
|
|
|
distribution = ::Packages::Debian::DistributionsFinder.new(project_or_group, codename: params[:codename]).execute.last!
|
|
distribution_params = declared_params(include_missing: false).except(:codename)
|
|
result = ::Packages::Debian::UpdateDistributionService.new(distribution, distribution_params).execute
|
|
distribution = result.payload[:distribution]
|
|
|
|
if result.success?
|
|
present distribution, with: ::API::Entities::Packages::Debian::Distribution
|
|
else
|
|
render_validation_error!(distribution)
|
|
end
|
|
end
|
|
|
|
# DELETE {projects|groups}/:id/debian_distributions/:codename
|
|
desc 'Delete a Debian Distribution' do
|
|
detail 'This feature was introduced in 14.0'
|
|
end
|
|
|
|
params do
|
|
requires :codename, type: String, regexp: Gitlab::Regex.debian_distribution_regex, desc: 'The Debian Codename'
|
|
use :optional_distribution_params
|
|
end
|
|
delete '/:codename' do
|
|
authorize_destroy_package!(project_or_group)
|
|
|
|
distribution = ::Packages::Debian::DistributionsFinder.new(project_or_group, codename: params[:codename]).execute.last!
|
|
|
|
accepted! if distribution.destroy
|
|
|
|
render_api_error!('Failed to delete distribution', 400)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|