diff --git a/app/logical/anonymous_user.rb b/app/logical/anonymous_user.rb deleted file mode 100644 index 8d51dc5dd..000000000 --- a/app/logical/anonymous_user.rb +++ /dev/null @@ -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 diff --git a/app/logical/session_loader.rb b/app/logical/session_loader.rb index 33f8460de..6726894ad 100644 --- a/app/logical/session_loader.rb +++ b/app/logical/session_loader.rb @@ -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] diff --git a/app/models/user.rb b/app/models/user.rb index 4405a1dd8..4731764c9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 :_only`. Must have a corresponding `is_?` 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