Fix #4670: Replace RequestStore with AS::CurrentAttributes.

This also requires replacing CurrentUser.name with CurrentUser.user.name
because the `name` method had a conflict with CurrentAttributes.
This commit is contained in:
evazion
2021-01-16 12:43:20 -06:00
parent 6f6ec6592d
commit 6ca007ee1f
11 changed files with 32 additions and 91 deletions

View File

@@ -1,16 +1,13 @@
class CurrentUser
def self.scoped(user, ip_addr = "127.0.0.1")
old_user = self.user
old_ip_addr = self.ip_addr
class CurrentUser < ActiveSupport::CurrentAttributes
attribute :user, :ip_addr, :country, :root_url, :safe_mode
self.user = user
self.ip_addr = ip_addr
alias_method :safe_mode?, :safe_mode
delegate :id, to: :user, allow_nil: true
delegate_missing_to :user
begin
yield
ensure
self.user = old_user
self.ip_addr = old_ip_addr
def self.scoped(user, ip_addr = "127.0.0.1", &block)
set(user: user, ip_addr: ip_addr) do
yield user
end
end
@@ -24,59 +21,7 @@ class CurrentUser
scoped(user, &block)
end
def self.user
RequestStore[:current_user]
end
def self.user=(user)
RequestStore[:current_user] = user
end
def self.ip_addr
RequestStore[:current_ip_addr]
end
def self.ip_addr=(ip_addr)
RequestStore[:current_ip_addr] = ip_addr
end
def self.country
RequestStore[:country]
end
def self.country=(country)
RequestStore[:country] = country
end
def self.root_url
RequestStore[:current_root_url] || "https://#{Danbooru.config.hostname}"
end
def self.root_url=(root_url)
RequestStore[:current_root_url] = root_url
end
def self.id
if user.nil?
nil
else
user.id
end
end
def self.name
user.name
end
def self.safe_mode?
RequestStore[:safe_mode]
end
def self.safe_mode=(safe_mode)
RequestStore[:safe_mode] = safe_mode
end
def self.method_missing(method, *params, &block)
user.__send__(method, *params, &block)
attributes[:root_url] || "https://#{Danbooru.config.hostname}"
end
end