]> git.openstreetmap.org Git - rails.git/blob - app/controllers/api/user_blocks_controller.rb
Merge pull request #5677 from tomhughes/user-list-enhancements
[rails.git] / app / controllers / api / user_blocks_controller.rb
1 module Api
2   class UserBlocksController < ApiController
3     before_action :check_api_writable, :only => :create
4     before_action :authorize, :only => :create
5
6     authorize_resource
7
8     before_action :set_request_formats
9
10     def show
11       raise OSM::APIBadUserInput, "No id was given" unless params[:id]
12
13       @user_block = UserBlock.find(params[:id])
14     rescue ActiveRecord::RecordNotFound
15       raise OSM::APINotFoundError
16     end
17
18     def create
19       raise OSM::APIBadUserInput, "No user was given" unless params[:user]
20
21       user = User.visible.find_by(:id => params[:user])
22       raise OSM::APINotFoundError unless user
23       raise OSM::APIBadUserInput, "No reason was given" unless params[:reason]
24       raise OSM::APIBadUserInput, "No period was given" unless params[:period]
25
26       period = Integer(params[:period], :exception => false)
27       raise OSM::APIBadUserInput, "Period should be a number of hours" unless period
28
29       max_period = UserBlock::PERIODS.max
30       raise OSM::APIBadUserInput, "Period must be between 0 and #{max_period}" if period.negative? || period > max_period
31       raise OSM::APIBadUserInput, "Needs_view must be true if provided" unless params[:needs_view].nil? || params[:needs_view] == "true"
32
33       ends_at = Time.now.utc + period.hours
34       needs_view = params[:needs_view] == "true"
35       @user_block = UserBlock.create(
36         :user => user,
37         :creator => current_user,
38         :reason => params[:reason],
39         :ends_at => ends_at,
40         :deactivates_at => (ends_at unless needs_view),
41         :needs_view => needs_view
42       )
43       render :show
44     end
45   end
46 end