1 # frozen_string_literal: true
4 class UserBlocksController < ApiController
5 before_action :check_api_writable, :only => :create
6 before_action :authorize, :only => :create
10 before_action :set_request_formats
13 raise OSM::APIBadUserInput, "No id was given" unless params[:id]
15 @user_block = UserBlock.find(params[:id])
16 rescue ActiveRecord::RecordNotFound
17 raise OSM::APINotFoundError
21 raise OSM::APIBadUserInput, "No user was given" unless params[:user]
23 user = User.visible.find_by(:id => params[:user])
24 raise OSM::APINotFoundError unless user
25 raise OSM::APIBadUserInput, "No reason was given" unless params[:reason]
26 raise OSM::APIBadUserInput, "No period was given" unless params[:period]
28 period = Integer(params[:period], :exception => false)
29 raise OSM::APIBadUserInput, "Period should be a number of hours" unless period
31 max_period = UserBlock::PERIODS.max
32 raise OSM::APIBadUserInput, "Period must be between 0 and #{max_period}" if period.negative? || period > max_period
33 raise OSM::APIBadUserInput, "Needs_view must be true if provided" unless params[:needs_view].nil? || params[:needs_view] == "true"
35 ends_at = Time.now.utc + period.hours
36 needs_view = params[:needs_view] == "true"
37 @user_block = UserBlock.create(
39 :creator => current_user,
40 :reason => params[:reason],
42 :deactivates_at => (ends_at unless needs_view),
43 :needs_view => needs_view