2012-06-17 03:15:46 +02:00
|
|
|
class ApplicationController < ActionController::Base
|
|
|
|
protect_from_forgery
|
2012-07-01 00:43:45 +02:00
|
|
|
before_filter :authenticate_user
|
2012-08-16 23:11:30 +02:00
|
|
|
before_filter :increase_traffic_counter
|
|
|
|
|
2014-01-09 03:41:12 +01:00
|
|
|
TRAFFIC_DECREMENTER = 0.25
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2013-08-05 09:16:33 +02:00
|
|
|
TAG_FILTER_COOKIE = :tag_filters
|
|
|
|
|
2012-07-01 00:43:45 +02:00
|
|
|
def authenticate_user
|
2014-01-12 20:27:52 +01:00
|
|
|
if session[:u] &&
|
2014-01-12 22:09:32 +01:00
|
|
|
(user = User.where(:session_token => session[:u].to_s).first) &&
|
2014-01-13 17:12:17 +01:00
|
|
|
user.is_active?
|
2014-01-12 22:09:32 +01:00
|
|
|
@user = user
|
2014-01-12 20:27:52 +01:00
|
|
|
Rails.logger.info " Logged in as user #{@user.id} (#{@user.username})"
|
2012-06-17 03:15:46 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
2012-08-16 23:11:30 +02:00
|
|
|
def increase_traffic_counter
|
|
|
|
@traffic = 1.0
|
|
|
|
|
2012-12-17 03:01:39 +01:00
|
|
|
if user_is_spider? || [ "json", "rss" ].include?(params[:format])
|
2012-12-17 01:46:38 +01:00
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2012-08-16 23:11:30 +02:00
|
|
|
Keystore.transaction do
|
2014-01-09 06:01:54 +01:00
|
|
|
now_i = Time.now.to_i
|
|
|
|
date_kv = Keystore.find_or_create_key_for_update("traffic:date", now_i)
|
|
|
|
traffic_kv = Keystore.find_or_create_key_for_update("traffic:hits", 0)
|
2012-08-16 23:11:30 +02:00
|
|
|
|
2014-01-09 06:01:54 +01:00
|
|
|
# increment traffic counter on each request
|
|
|
|
traffic = traffic_kv.value.to_i + 100
|
2012-08-16 23:11:30 +02:00
|
|
|
# every second, decrement traffic by some amount
|
2014-01-09 06:01:54 +01:00
|
|
|
traffic -= (100.0 * (now_i - date_kv.value) * TRAFFIC_DECREMENTER).to_i
|
|
|
|
# clamp
|
|
|
|
traffic = [ 100, traffic ].max
|
2012-08-16 23:11:30 +02:00
|
|
|
|
2014-01-09 06:01:54 +01:00
|
|
|
@traffic = traffic * 0.01
|
|
|
|
|
|
|
|
traffic_kv.value = traffic
|
|
|
|
traffic_kv.save!
|
|
|
|
|
|
|
|
date_kv.value = now_i
|
|
|
|
date_kv.save!
|
2012-08-16 23:11:30 +02:00
|
|
|
end
|
2012-08-17 20:36:30 +02:00
|
|
|
|
|
|
|
Rails.logger.info " Traffic level: #{@traffic}"
|
|
|
|
|
|
|
|
true
|
2012-08-16 23:11:30 +02:00
|
|
|
end
|
|
|
|
|
2012-07-01 00:43:45 +02:00
|
|
|
def require_logged_in_user
|
|
|
|
if @user
|
2012-06-17 03:15:46 +02:00
|
|
|
true
|
|
|
|
else
|
|
|
|
redirect_to "/login"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def require_logged_in_user_or_400
|
|
|
|
if @user
|
|
|
|
true
|
|
|
|
else
|
|
|
|
render :text => "not logged in", :status => 400
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
2012-12-17 01:46:38 +01:00
|
|
|
|
2013-08-05 09:16:33 +02:00
|
|
|
@_tags_filtered = nil
|
|
|
|
def tags_filtered_by_cookie
|
2013-12-24 04:20:06 +01:00
|
|
|
@_tags_filtered ||= Tag.where(
|
|
|
|
:tag => cookies[TAG_FILTER_COOKIE].to_s.split(",")
|
|
|
|
)
|
2013-08-05 09:16:33 +02:00
|
|
|
end
|
|
|
|
|
2012-12-17 01:46:38 +01:00
|
|
|
def user_is_spider?
|
2014-06-12 02:34:41 +02:00
|
|
|
ua = request.env["HTTP_USER_AGENT"].to_s
|
|
|
|
(ua == "" || ua.match(/(Google|bing)bot/))
|
2012-12-17 01:46:38 +01:00
|
|
|
end
|
2013-01-14 04:39:52 +01:00
|
|
|
|
|
|
|
def find_user_from_rss_token
|
|
|
|
if !@user && request[:format] == "rss" && params[:token].to_s.present?
|
2013-12-24 04:20:06 +01:00
|
|
|
@user = User.where(:rss_token => params[:token].to_s).first
|
2013-01-14 04:39:52 +01:00
|
|
|
end
|
|
|
|
end
|
2012-06-17 03:15:46 +02:00
|
|
|
end
|