app controller: move safe mode from app controller to SessionLoader.

This commit is contained in:
evazion
2019-08-24 22:55:36 -05:00
parent f151285038
commit 1a964f7a10
7 changed files with 55 additions and 48 deletions

View File

@@ -7,7 +7,6 @@ class ApplicationController < ActionController::Base
before_action :normalize_search before_action :normalize_search
before_action :set_started_at_session before_action :set_started_at_session
before_action :api_check before_action :api_check
before_action :set_safe_mode
before_action :set_variant before_action :set_variant
before_action :track_only_param before_action :track_only_param
layout "default" layout "default"
@@ -168,6 +167,7 @@ class ApplicationController < ActionController::Base
def reset_current_user def reset_current_user
CurrentUser.user = nil CurrentUser.user = nil
CurrentUser.ip_addr = nil CurrentUser.ip_addr = nil
CurrentUser.safe_mode = false
CurrentUser.root_url = root_url.chomp("/") CurrentUser.root_url = root_url.chomp("/")
end end
@@ -211,8 +211,4 @@ class ApplicationController < ActionController::Base
def search_params def search_params
params.fetch(:search, {}).permit! params.fetch(:search, {}).permit!
end end
def set_safe_mode
CurrentUser.set_safe_mode(request)
end
end end

View File

@@ -96,8 +96,8 @@ class CurrentUser
RequestStore[:admin_mode] = false RequestStore[:admin_mode] = false
end end
def self.set_safe_mode(req) def self.safe_mode=(safe_mode)
RequestStore[:safe_mode] = Danbooru.config.enable_safe_mode?(req, CurrentUser.user) RequestStore[:safe_mode] = safe_mode
end end
def self.method_missing(method, *params, &block) def self.method_missing(method, *params, &block)

View File

@@ -21,7 +21,7 @@ class DanbooruLogger
end end
def self.initialize(request, session, user) def self.initialize(request, session, user)
add_attributes("request.params", request.params) add_attributes("request.params", request.parameters)
add_attributes("session.params", session.to_h) add_attributes("session.params", session.to_h)
add_attributes("user", { id: user.id, name: user.name, level: user.level_string, ip: request.remote_ip }) add_attributes("user", { id: user.id, name: user.name, level: user.level_string, ip: request.remote_ip })
end end

View File

@@ -26,6 +26,7 @@ class SessionLoader
update_last_logged_in_at update_last_logged_in_at
update_last_ip_addr update_last_ip_addr
set_time_zone set_time_zone
set_safe_mode
CurrentUser.user.unban! if CurrentUser.user.ban_expired? CurrentUser.user.unban! if CurrentUser.user.ban_expired?
DanbooruLogger.initialize(request, session, CurrentUser.user) DanbooruLogger.initialize(request, session, CurrentUser.user)
end end
@@ -104,5 +105,9 @@ private
def set_time_zone def set_time_zone
Time.zone = CurrentUser.user.time_zone Time.zone = CurrentUser.user.time_zone
end end
end
def set_safe_mode
safe_mode = request.host.match?(/safebooru/i) || params[:safe_mode].to_s.truthy? || CurrentUser.user.enable_safe_mode?
CurrentUser.safe_mode = safe_mode
end
end

View File

@@ -144,11 +144,6 @@ module Danbooru
100 100
end end
# Whether safe mode should be enabled. Safe mode hides all non-rating:safe posts from view.
def enable_safe_mode?(request, user)
!!(request.host =~ /safe/ || request.params[:safe_mode] || user.enable_safe_mode?)
end
# Determines who can see ads. # Determines who can see ads.
def can_see_ads?(user) def can_see_ads?(user)
!user.is_gold? !user.is_gold?

View File

@@ -6,40 +6,6 @@ class CurrentUserTest < ActiveSupport::TestCase
CurrentUser.ip_addr = nil CurrentUser.ip_addr = nil
end end
teardown do
RequestStore[:safe_mode] = false
end
context ".safe_mode?" do
should "return true if the host contains the string host" do
req = mock()
req.stubs(:host).returns("safebooru")
req.stubs(:params).returns({})
CurrentUser.set_safe_mode(req)
assert_equal(true, CurrentUser.safe_mode?)
end
should "return false if the host does not contain the string host" do
req = mock()
req.stubs(:host).returns("danbooru")
req.stubs(:params).returns({})
CurrentUser.user = FactoryBot.create(:user)
CurrentUser.set_safe_mode(req)
assert_equal(false, CurrentUser.safe_mode?)
end
should "return true if the user has enabled the safe mode account setting" do
req = mock
req.stubs(:host).returns("danbooru")
req.stubs(:params).returns({})
CurrentUser.user = FactoryBot.create(:user, enable_safe_mode: true)
CurrentUser.set_safe_mode(req)
assert_equal(true, CurrentUser.safe_mode?)
end
end
context "The current user" do context "The current user" do
should "be set only within the scope of the block" do should "be set only within the scope of the block" do
user = FactoryBot.create(:user) user = FactoryBot.create(:user)

View File

@@ -0,0 +1,45 @@
require 'test_helper'
class SessionLoaderTest < ActiveSupport::TestCase
context "SessionLoader" do
setup do
@request = mock
@request.stubs(:host).returns("danbooru")
@request.stubs(:remote_ip).returns("127.0.0.1")
@request.stubs(:authorization).returns(nil)
@request.stubs(:cookie_jar).returns({})
@request.stubs(:parameters).returns({})
@request.stubs(:session).returns({})
end
teardown do
CurrentUser.user = nil
CurrentUser.ip_addr = nil
CurrentUser.safe_mode = nil
end
context ".safe_mode?" do
should "return true if the host contains the string safebooru" do
@request.stubs(:host).returns("safebooru")
SessionLoader.new(@request).load
assert_equal(true, CurrentUser.safe_mode?)
end
should "return false if the host contains the string danbooru" do
@request.stubs(:host).returns("danbooru")
SessionLoader.new(@request).load
assert_equal(false, CurrentUser.safe_mode?)
end
should "return true if the user has enabled the safe mode account setting" do
@user = create(:user, enable_safe_mode: true)
@request.stubs(:session).returns(user_id: @user.id)
SessionLoader.new(@request).load
assert_equal(true, CurrentUser.safe_mode?)
end
end
end
end