From 1a964f7a10dd8a14c3adbb316f8e5c537f25f7f9 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 24 Aug 2019 22:55:36 -0500 Subject: [PATCH] app controller: move safe mode from app controller to SessionLoader. --- app/controllers/application_controller.rb | 6 +-- app/logical/current_user.rb | 4 +- app/logical/danbooru_logger.rb | 2 +- app/logical/session_loader.rb | 7 +++- config/danbooru_default_config.rb | 5 --- test/unit/current_user_test.rb | 34 ----------------- test/unit/session_loader_test.rb | 45 +++++++++++++++++++++++ 7 files changed, 55 insertions(+), 48 deletions(-) create mode 100644 test/unit/session_loader_test.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0f0300cce..13c6caca6 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -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 diff --git a/app/logical/current_user.rb b/app/logical/current_user.rb index 61b1f4088..0f439b3fb 100644 --- a/app/logical/current_user.rb +++ b/app/logical/current_user.rb @@ -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) diff --git a/app/logical/danbooru_logger.rb b/app/logical/danbooru_logger.rb index 2811124cf..de0efcfbf 100644 --- a/app/logical/danbooru_logger.rb +++ b/app/logical/danbooru_logger.rb @@ -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 diff --git a/app/logical/session_loader.rb b/app/logical/session_loader.rb index ea3f6cdfb..3b724d4f0 100644 --- a/app/logical/session_loader.rb +++ b/app/logical/session_loader.rb @@ -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 diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index 537e467b0..24b59af43 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -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? diff --git a/test/unit/current_user_test.rb b/test/unit/current_user_test.rb index 610491a5c..5561a6226 100644 --- a/test/unit/current_user_test.rb +++ b/test/unit/current_user_test.rb @@ -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) diff --git a/test/unit/session_loader_test.rb b/test/unit/session_loader_test.rb new file mode 100644 index 000000000..9dcc88ba2 --- /dev/null +++ b/test/unit/session_loader_test.rb @@ -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