app controller: move safe mode from app controller to SessionLoader.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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)
|
||||
|
||||
45
test/unit/session_loader_test.rb
Normal file
45
test/unit/session_loader_test.rb
Normal 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
|
||||
Reference in New Issue
Block a user