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 :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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
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