31 lines
852 B
Ruby
31 lines
852 B
Ruby
# This controller is exclusively used to track hit counts on works.
|
|
#
|
|
# Note that we deliberately only accept JSON requests because JSON requests
|
|
# bypass a lot of the usual before_action hooks, many of which can trigger
|
|
# database queries. We want this action to avoid hitting the database if at
|
|
# all possible.
|
|
class HitCountController < ApplicationController
|
|
skip_around_action :set_current_user
|
|
|
|
skip_before_action :logout_if_not_user_credentials
|
|
|
|
skip_after_action :ensure_user_credentials,
|
|
:ensure_admin_credentials
|
|
|
|
def create
|
|
respond_to do |format|
|
|
format.json do
|
|
if ENV["REQUEST_FROM_BOT"]
|
|
head :forbidden
|
|
else
|
|
RedisHitCounter.add(
|
|
params[:work_id].to_i,
|
|
request.remote_ip
|
|
)
|
|
|
|
head :ok
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|