32 lines
852 B
Ruby
32 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
|