Skip to content

Commit

Permalink
Create excluded request API
Browse files Browse the repository at this point in the history
Co-authored-by: Moisés Déniz Alemán <mdeniz@suse.com>
  • Loading branch information
Ana06 and Moisés Déniz Alemán committed Nov 22, 2018
1 parent 53eb602 commit e4aa4e9
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
54 changes: 54 additions & 0 deletions src/api/app/controllers/staging/excluded_requests_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
class Staging::ExcludedRequestsController < ApplicationController
before_action :require_login
before_action :set_staging_workflow, only: :create
before_action :set_request_exclusion, only: :destroy

def create
request = @staging_workflow.target_of_bs_requests.find_by!(number: params[:number])
request_exclusion = @staging_workflow.request_exclusions.build(bs_request: request, description: params[:description])

authorize request_exclusion

if request_exclusion.save
render_ok
else
render_error(
status: 400,
errorcode: 'invalid_request',
message: request_exclusion.errors.full_messages.to_sentence
)
end
end

def destroy
authorize @request_exclusion

if @request_exclusion.destroy
render_ok
else
render_error(
status: 400,
errorcode: 'invalid_request',
message: "Request #{@request_exclusion.number} couldn't be unexcluded"
)
end
end

private

def set_staging_workflow
project = Project.get_by_name(params[:project_name])
@staging_workflow = project.staging
return if @staging_workflow

raise InvalidParameterError, "Project #{params[:project_name]} doesn't have an asociated Staging Workflow"
end

def set_request_exclusion
request = BsRequest.find_by!(number: params[:number])
@request_exclusion = request.request_exclusion
return if @request_exclusion

raise InvalidParameterError, "Request #{params[:number]} is not excluded"
end
end
11 changes: 11 additions & 0 deletions src/api/app/policies/staging/request_exclusion_policy.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class Staging::RequestExclusionPolicy < ApplicationPolicy
def create?
group = record.staging_workflow.managers_group
user.groups_users.where(group: group).exists? ||
ProjectPolicy.new(user, record.staging_workflow.project).update?
end

def destroy?
create?
end
end
6 changes: 6 additions & 0 deletions src/api/config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -737,6 +737,12 @@ def self.public_or_about_path?(request)
resource :staged_requests, controller: 'staged_requests', only: [:create, :destroy], constraints: cons
end
end

controller 'staging/excluded_requests' do
post 'staging_excluded_requests/:number/:project_name' => :create, constraints: cons
delete 'staging_excluded_requests/:number' => :destroy, constraints: cons
end

controller :source_attribute do
get 'source/:project(/:package(/:binary))/_attribute(/:attribute)' => :show, constraints: cons
post 'source/:project(/:package(/:binary))/_attribute(/:attribute)' => :update, constraints: cons, as: :change_attribute
Expand Down

0 comments on commit e4aa4e9

Please sign in to comment.