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