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
|
|
|
|
date = (Keystore.value_for("traffic:date") || Time.now.to_i)
|
|
|
|
traffic = (Keystore.incremented_value_for("traffic:hits", 0).
|
|
|
|
to_f / 100.0) + 1.0
|
|
|
|
|
|
|
|
# every second, decrement traffic by some amount
|
|
|
|
@traffic = [ 1.0, traffic.to_f -
|
|
|
|
((Time.now.to_i - date) * TRAFFIC_DECREMENTER) ].max
|
|
|
|
|
|
|
|
Keystore.put("traffic:date", Time.now.to_i)
|
|
|
|
Keystore.put("traffic:hits", (@traffic * 100.0).to_i)
|
|
|
|
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?
|
|
|
|
!!request.env["HTTP_USER_AGENT"].to_s.match(/Googlebot/)
|
|
|
|
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
|