diff --git a/src/api/app/controllers/request_controller.rb b/src/api/app/controllers/request_controller.rb index 31c4a630489..d14c868ad25 100644 --- a/src/api/app/controllers/request_controller.rb +++ b/src/api/app/controllers/request_controller.rb @@ -485,9 +485,11 @@ def check_action_permission(action) return false end if tprj.class == Project and (a = tprj.find_attribute("OBS", "RejectRequests") and a.values.first) - render_error :status => 403, :errorcode => 'request_rejected', - :message => "The target project #{action.target_project} is not accepting requests because: #{a.values.first.value.to_s}" - return false + if a.values.length < 2 or a.values.find_by_value(action.action_type) + render_error :status => 403, :errorcode => 'request_rejected', + :message => "The target project #{action.target_project} is not accepting requests because: #{a.values.first.value.to_s}" + return false + end end if action.target_package if Package.exists_by_project_and_name(action.target_project, action.target_package) or [:delete, :change_devel, :add_role, :set_bugowner].include? action.action_type @@ -495,9 +497,11 @@ def check_action_permission(action) end if tpkg && (a = tpkg.find_attribute("OBS", "RejectRequests") and a.values.first) - render_error :status => 403, :errorcode => 'request_rejected', - :message => "The target package #{action.target_project} / #{action.target_package} is not accepting requests because: #{a.values.first.value.to_s}" - return false + if a.values.length < 2 or a.values.find_by_value(action.action_type) + render_error :status => 403, :errorcode => 'request_rejected', + :message => "The target package #{action.target_project} / #{action.target_package} is not accepting requests because: #{a.values.first.value.to_s}" + return false + end end end end diff --git a/src/api/db/migrate/20130220160000_make_obs_rejectrequests_configurable.rb b/src/api/db/migrate/20130220160000_make_obs_rejectrequests_configurable.rb new file mode 100644 index 00000000000..4a7f1161fe5 --- /dev/null +++ b/src/api/db/migrate/20130220160000_make_obs_rejectrequests_configurable.rb @@ -0,0 +1,16 @@ +class MakeObsRejectrequestsConfigurable < ActiveRecord::Migration + + def self.up + a = AttribType.find_by_id(AttribType.find_by_name("OBS:RejectRequests")) + a.value_count = nil + a.save! + end + + + def self.down + a = AttribType.find_by_id(AttribType.find_by_name("OBS:RejectRequests")) + a.value_count = 1 + a.save! + end + +end diff --git a/src/api/db/seeds.rb b/src/api/db/seeds.rb index 16d8cc3afc7..97a832a0515 100644 --- a/src/api/db/seeds.rb +++ b/src/api/db/seeds.rb @@ -65,7 +65,7 @@ at.attrib_type_modifiable_bies.find_or_create_by_bs_user_id(admin.id) at = AttribType.find_or_create_by_attrib_namespace_id_and_name(ans.id, "UpdateProject", :value_count => 1) at.attrib_type_modifiable_bies.find_or_create_by_bs_user_id(admin.id) -at = AttribType.find_or_create_by_attrib_namespace_id_and_name(ans.id, "RejectRequests", :value_count => 1) +at = AttribType.find_or_create_by_attrib_namespace_id_and_name(ans.id, "RejectRequests") at.attrib_type_modifiable_bies.find_or_create_by_bs_user_id(admin.id) at = AttribType.find_or_create_by_attrib_namespace_id_and_name(ans.id, "ApprovedRequestSource", :value_count => 0) at.attrib_type_modifiable_bies.find_or_create_by_bs_user_id(admin.id) diff --git a/src/api/db/structure.sql b/src/api/db/structure.sql index e386940974b..f51a54e1eb0 100644 --- a/src/api/db/structure.sql +++ b/src/api/db/structure.sql @@ -1043,6 +1043,8 @@ INSERT INTO schema_migrations (version) VALUES ('20121220151549'); INSERT INTO schema_migrations (version) VALUES ('20130111085930'); +INSERT INTO schema_migrations (version) VALUES ('20130220160000'); + INSERT INTO schema_migrations (version) VALUES ('21'); INSERT INTO schema_migrations (version) VALUES ('22'); diff --git a/src/api/test/fixtures/attrib_types.yml b/src/api/test/fixtures/attrib_types.yml index 4d0a553fb3d..c47d9acb2f7 100644 --- a/src/api/test/fixtures/attrib_types.yml +++ b/src/api/test/fixtures/attrib_types.yml @@ -49,7 +49,6 @@ OBS_QualityCategory: OBS_RejectRequests: id: 64 name: RejectRequests - value_count: 1 attrib_namespace_id: 9 OBS_RequestCloned: id: 60 diff --git a/src/api/test/functional/request_controller_test.rb b/src/api/test/functional/request_controller_test.rb index 64bf2f54227..7e19d0d8b63 100644 --- a/src/api/test/functional/request_controller_test.rb +++ b/src/api/test/functional/request_controller_test.rb @@ -870,26 +870,52 @@ def test_reject_request_creation assert_match(/Go Away/, @response.body) assert_xml_tag :tag => "status", :attributes => { :code => "request_rejected" } + # just for submit actions + post "/source/home:Iggy/_attribute", " No Submits submit " + assert_response :success + post "/request?cmd=create", rq + assert_response 403 + assert_match(/No Submits/, @response.body) + assert_xml_tag :tag => "status", :attributes => { :code => "request_rejected" } + # but it works when blocking only for others + post "/source/home:Iggy/_attribute", " Submits welcome delete set_bugowner " + assert_response :success + post "/request?cmd=create", rq + assert_response :success + + # block request creation in package post "/source/home:Iggy/TestPack/_attribute", " Package blocked " assert_response :success post "/request?cmd=create", rq assert_response 403 - assert_match(/Go Away/, @response.body) + assert_match(/Package blocked/, @response.body) assert_xml_tag :tag => "status", :attributes => { :code => "request_rejected" } - -#FIXME: test with request without target - # remove project attribute lock delete "/source/home:Iggy/_attribute/OBS:RejectRequests" assert_response :success - + # still not working post "/request?cmd=create", rq assert_response 403 assert_match(/Package blocked/, @response.body) assert_xml_tag :tag => "status", :attributes => { :code => "request_rejected" } + # just for submit actions + post "/source/home:Iggy/TestPack/_attribute", " No Submits submit " + assert_response :success + post "/request?cmd=create", rq + assert_response 403 + assert_match(/No Submits/, @response.body) + assert_xml_tag :tag => "status", :attributes => { :code => "request_rejected" } + # but it works when blocking only for others + post "/source/home:Iggy/TestPack/_attribute", " Submits welcome delete set_bugowner " + assert_response :success + post "/request?cmd=create", rq + assert_response :success + +#FIXME: test with request without target + #cleanup delete "/source/home:Iggy/TestPack/_attribute/OBS:RejectRequests" assert_response :success