diff --git a/lib/proposals_discussion_plugin/api.rb b/lib/proposals_discussion_plugin/api.rb index da8257d..a61d346 100644 --- a/lib/proposals_discussion_plugin/api.rb +++ b/lib/proposals_discussion_plugin/api.rb @@ -1,5 +1,6 @@ class ProposalsDiscussionPlugin::API < Grape::API + resource :proposals_discussion_plugin do paginate per_page: 10, max_per_page: 20 @@ -23,6 +24,8 @@ class ProposalsDiscussionPlugin::API < Grape::API end post ':id/propose' do + sanitize_params_hash(params) + parent_article = environment.articles.find(params[:id]) proposal_task = ProposalsDiscussionPlugin::ProposalTask.new @@ -37,7 +40,5 @@ class ProposalsDiscussionPlugin::API < Grape::API {:success => true} #present proposal_task, :with => Entities::Task, :fields => params[:fields] end - end - end diff --git a/test/unit/api_test.rb b/test/unit/api_test.rb index e352fd3..9399eb6 100644 --- a/test/unit/api_test.rb +++ b/test/unit/api_test.rb @@ -45,4 +45,22 @@ class APITest < ActiveSupport::TestCase assert json['success'] end + should 'sanitize proposal' do + discussion = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => user.person.id) + topic = fast_create(ProposalsDiscussionPlugin::Topic, + :profile_id => user.person.id, + :parent_id => discussion.id) + params[:article] = {:name => "Proposal name", :abstract => "Proposal abstract", + :type => 'ProposalsDiscussionPlugin::Proposal', + :body => "This is a malicious body SearchParam"} + assert_difference "ProposalsDiscussionPlugin::ProposalTask.count" do + post "/api/v1/proposals_discussion_plugin/#{topic.id}/propose?#{params.to_query}" + end + json = JSON.parse(last_response.body) + assert json['success'] + task = Task.last + assert_equal "Proposal Test abstract", task.abstract + assert_equal "This is a malicious body SearchParam", task.article.body + end + end -- libgit2 0.21.2