# have we identified the user?
if @user
# check if the user has been banned
- if @user.blocks.active.exists?
- # NOTE: need slightly more helpful message than this.
+ user_block = @user.blocks.active.take
+ unless user_block.nil?
set_locale
- report_error t("application.setup_user_auth.blocked"), :forbidden
+ if user_block.zero_hour?
+ report_error t("application.setup_user_auth.blocked_zero_hour"), :forbidden
+ else
+ report_error t("application.setup_user_auth.blocked"), :forbidden
+ end
end
# if the user hasn't seen the contributor terms then don't
needs_view || ends_at > Time.now.getutc
end
+ ##
+ # returns true if the block is a "zero hour" block
+ def zero_hour?
+ # if the times differ more than 1 minute we probably have more important issues
+ needs_view && (ends_at.to_i - updated_at.to_i) < 60
+ end
+
##
# revokes the block, allowing the user to use the API again. the argument
# is the user object who is revoking the ban.
require_moderator:
not_a_moderator: "You need to be a moderator to perform that action."
setup_user_auth:
+ blocked_zero_hour: "You have an urgent message on the OpenStreetMap web site. You need to read the message before you will be able to save your edits."
blocked: "Your access to the API has been blocked. Please log-in to the web interface to find out more."
need_to_see_terms: "Your access to the API is temporarily suspended. Please log-in to the web interface to view the Contributor Terms. You do not need to agree, but you must view them."
oauth: