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

View File

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

View File

@@ -21,7 +21,7 @@ class DanbooruLogger
end
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("user", { id: user.id, name: user.name, level: user.level_string, ip: request.remote_ip })
end

View File

@@ -26,6 +26,7 @@ class SessionLoader
update_last_logged_in_at
update_last_ip_addr
set_time_zone
set_safe_mode
CurrentUser.user.unban! if CurrentUser.user.ban_expired?
DanbooruLogger.initialize(request, session, CurrentUser.user)
end
@@ -104,5 +105,9 @@ private
def set_time_zone
Time.zone = CurrentUser.user.time_zone
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
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.
def can_see_ads?(user)
!user.is_gold?

View File

@@ -6,40 +6,6 @@ class CurrentUserTest < ActiveSupport::TestCase
CurrentUser.ip_addr = nil
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
should "be set only within the scope of the block" do
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