Replace AnonymousUser with User.new.
* Replace AnonymousUser null object with a readonly, unpersisted User object. * Default always_resize_images to true (previously it was true for anonymous users, but false for new members). * Default comment_threshold to -1 for anonymous users (previously it was 0 for anonymous but -1 for new members).
This commit is contained in:
@@ -1,297 +0,0 @@
|
||||
# This is a proxy class to make various nil checks unnecessary
|
||||
class AnonymousUser
|
||||
def id
|
||||
nil
|
||||
end
|
||||
|
||||
def level
|
||||
0
|
||||
end
|
||||
|
||||
def level_string
|
||||
"Anonymous"
|
||||
end
|
||||
|
||||
def comment_threshold
|
||||
0
|
||||
end
|
||||
|
||||
def created_at
|
||||
Time.now
|
||||
end
|
||||
|
||||
def updated_at
|
||||
Time.now
|
||||
end
|
||||
|
||||
def dmail_filter
|
||||
nil
|
||||
end
|
||||
|
||||
def name
|
||||
"Anonymous"
|
||||
end
|
||||
|
||||
def pretty_name
|
||||
"Anonymous"
|
||||
end
|
||||
|
||||
def is_anonymous?
|
||||
true
|
||||
end
|
||||
|
||||
def is_banned_or_ip_banned?
|
||||
false
|
||||
end
|
||||
|
||||
def has_mail?
|
||||
false
|
||||
end
|
||||
|
||||
def has_forum_been_updated?
|
||||
false
|
||||
end
|
||||
|
||||
def has_permission?(obj, foreign_key = :user_id)
|
||||
false
|
||||
end
|
||||
|
||||
def ban
|
||||
false
|
||||
end
|
||||
|
||||
def always_resize_images?
|
||||
true
|
||||
end
|
||||
|
||||
def show_samples?
|
||||
true
|
||||
end
|
||||
|
||||
def favorite_tags
|
||||
nil
|
||||
end
|
||||
|
||||
def upload_limit
|
||||
0
|
||||
end
|
||||
|
||||
def base_upload_limit
|
||||
0
|
||||
end
|
||||
|
||||
def uploaded_tags
|
||||
""
|
||||
end
|
||||
|
||||
def uploaded_tags_with_types
|
||||
[]
|
||||
end
|
||||
|
||||
def recent_tags
|
||||
""
|
||||
end
|
||||
|
||||
def recent_tags_with_types
|
||||
[]
|
||||
end
|
||||
|
||||
def can_upload?
|
||||
false
|
||||
end
|
||||
|
||||
def can_comment?
|
||||
false
|
||||
end
|
||||
|
||||
def is_comment_limited?
|
||||
true
|
||||
end
|
||||
|
||||
def can_remove_from_pools?
|
||||
false
|
||||
end
|
||||
|
||||
def can_view_flagger?(flagger_id)
|
||||
false
|
||||
end
|
||||
|
||||
def can_view_flagger_on_post?(flag)
|
||||
false
|
||||
end
|
||||
|
||||
def can_approve_posts?
|
||||
false
|
||||
end
|
||||
|
||||
def blacklisted_tags
|
||||
["spoilers", "guro", "scat", "furry -rating:s"].join("\n")
|
||||
end
|
||||
|
||||
def time_zone
|
||||
"Eastern Time (US & Canada)"
|
||||
end
|
||||
|
||||
def default_image_size
|
||||
"large"
|
||||
end
|
||||
|
||||
def email
|
||||
""
|
||||
end
|
||||
|
||||
def last_forum_read_at
|
||||
Time.now
|
||||
end
|
||||
|
||||
def update_column(*params)
|
||||
end
|
||||
|
||||
def increment!(field)
|
||||
end
|
||||
|
||||
def decrement!(field)
|
||||
end
|
||||
|
||||
def role
|
||||
:anonymous
|
||||
end
|
||||
|
||||
def tag_query_limit
|
||||
2
|
||||
end
|
||||
|
||||
def favorite_limit
|
||||
0
|
||||
end
|
||||
|
||||
def favorite_count
|
||||
0
|
||||
end
|
||||
|
||||
def enable_post_navigation
|
||||
true
|
||||
end
|
||||
|
||||
def new_post_navigation_layout
|
||||
true
|
||||
end
|
||||
|
||||
def enable_privacy_mode
|
||||
false
|
||||
end
|
||||
|
||||
def hide_favorites?
|
||||
false
|
||||
end
|
||||
|
||||
def enable_sequential_post_navigation
|
||||
true
|
||||
end
|
||||
|
||||
def api_regen_multiplier
|
||||
1
|
||||
end
|
||||
|
||||
def api_burst_limit
|
||||
5
|
||||
end
|
||||
|
||||
def statement_timeout
|
||||
3_000
|
||||
end
|
||||
|
||||
def per_page
|
||||
Danbooru.config.posts_per_page
|
||||
end
|
||||
|
||||
def hide_deleted_posts?
|
||||
false
|
||||
end
|
||||
|
||||
def style_usernames?
|
||||
false
|
||||
end
|
||||
|
||||
def dmail_count
|
||||
""
|
||||
end
|
||||
|
||||
def enable_auto_complete
|
||||
true
|
||||
end
|
||||
|
||||
def custom_style
|
||||
""
|
||||
end
|
||||
|
||||
def show_deleted_children?
|
||||
false
|
||||
end
|
||||
|
||||
def post_disapprovals
|
||||
PostDisapproval.none
|
||||
end
|
||||
|
||||
def saved_searches
|
||||
SavedSearch.none
|
||||
end
|
||||
|
||||
def has_saved_searches?
|
||||
false
|
||||
end
|
||||
|
||||
def show_saved_searches?
|
||||
false
|
||||
end
|
||||
|
||||
def favorite_groups
|
||||
[]
|
||||
end
|
||||
|
||||
def can_upload_free?
|
||||
false
|
||||
end
|
||||
|
||||
def disable_categorized_saved_searches?
|
||||
false
|
||||
end
|
||||
|
||||
def disable_tagged_filenames?
|
||||
false
|
||||
end
|
||||
|
||||
def ban_expired?
|
||||
false
|
||||
end
|
||||
|
||||
def disable_cropped_thumbnails?
|
||||
false
|
||||
end
|
||||
|
||||
def disable_mobile_gestures?
|
||||
false
|
||||
end
|
||||
|
||||
def enable_safe_mode?
|
||||
false
|
||||
end
|
||||
|
||||
def disable_responsive_mode?
|
||||
false
|
||||
end
|
||||
|
||||
def disable_post_tooltips?
|
||||
false
|
||||
end
|
||||
|
||||
def enable_recommended_posts?
|
||||
false
|
||||
end
|
||||
|
||||
User::Roles.reject {|r| r == :anonymous}.each do |name|
|
||||
define_method("is_#{name}?") do
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -11,7 +11,7 @@ class SessionLoader
|
||||
end
|
||||
|
||||
def load
|
||||
CurrentUser.user = AnonymousUser.new
|
||||
CurrentUser.user = User.anonymous
|
||||
CurrentUser.ip_addr = request.remote_ip
|
||||
|
||||
if Rails.env.test? && Thread.current[:test_user_id]
|
||||
|
||||
@@ -6,6 +6,7 @@ class User < ApplicationRecord
|
||||
class PrivilegeError < Exception ; end
|
||||
|
||||
module Levels
|
||||
ANONYMOUS = 0
|
||||
BLOCKED = 10
|
||||
MEMBER = 20
|
||||
GOLD = 30
|
||||
@@ -17,7 +18,6 @@ class User < ApplicationRecord
|
||||
|
||||
# Used for `before_action :<role>_only`. Must have a corresponding `is_<role>?` method.
|
||||
Roles = Levels.constants.map(&:downcase) + [
|
||||
:anonymous,
|
||||
:banned,
|
||||
:approver,
|
||||
:voter,
|
||||
@@ -289,6 +289,12 @@ class User < ApplicationRecord
|
||||
User.find_by!(name: Danbooru.config.system_user)
|
||||
end
|
||||
|
||||
def anonymous
|
||||
user = User.new(name: "Anonymous", created_at: Time.now)
|
||||
user.freeze.readonly!
|
||||
user
|
||||
end
|
||||
|
||||
def level_hash
|
||||
return {
|
||||
"Member" => Levels::MEMBER,
|
||||
@@ -302,6 +308,9 @@ class User < ApplicationRecord
|
||||
|
||||
def level_string(value)
|
||||
case value
|
||||
when Levels::ANONYMOUS
|
||||
"Anonymous"
|
||||
|
||||
when Levels::BLOCKED
|
||||
"Banned"
|
||||
|
||||
@@ -363,11 +372,11 @@ class User < ApplicationRecord
|
||||
end
|
||||
|
||||
def is_anonymous?
|
||||
false
|
||||
level == Levels::ANONYMOUS
|
||||
end
|
||||
|
||||
def is_member?
|
||||
true
|
||||
level >= Levels::MEMBER
|
||||
end
|
||||
|
||||
def is_blocked?
|
||||
@@ -917,6 +926,7 @@ class User < ApplicationRecord
|
||||
self.new_post_navigation_layout = true
|
||||
self.enable_sequential_post_navigation = true
|
||||
self.enable_auto_complete = true
|
||||
self.always_resize_images = true
|
||||
end
|
||||
|
||||
def presenter
|
||||
|
||||
Reference in New Issue
Block a user