# frozen_string_literal: true class ActivityPub::ActorSerializer < ActivityPub::Serializer include RoutingHelper context :security context_extensions :manually_approves_followers, :featured, :also_known_as, :moved_to, :property_value, :hashtag, :emoji, :adult_content, :gently, :kobold, :froze, :big, :trans, :chest attributes :id, :type, :following, :followers, :inbox, :outbox, :featured, :preferred_username, :name, :summary, :url, :manually_approves_followers, :gently, :kobold, :adult_content, :froze, :tails_never_fail, :trans, :chest has_one :public_key, serializer: ActivityPub::PublicKeySerializer has_many :virtual_tags, key: :tag has_many :virtual_attachments, key: :attachment attribute :moved_to, if: :moved? attribute :also_known_as, if: :also_known_as? class EndpointsSerializer < ActivityPub::Serializer include RoutingHelper attributes :shared_inbox def shared_inbox inbox_url end end has_one :endpoints, serializer: EndpointsSerializer has_one :icon, serializer: ActivityPub::ImageSerializer, if: :avatar_exists? has_one :image, serializer: ActivityPub::ImageSerializer, if: :header_exists? delegate :moved?, to: :object def trans 'rights' end def chest 'floof' end def id object.instance_actor? ? instance_actor_url : account_url(object) end def type if object.instance_actor? 'Application' elsif object.bot? 'Service' else 'Person' end end def following account_following_index_url(object) end def followers account_followers_url(object) end def inbox object.instance_actor? ? instance_actor_inbox_url : account_inbox_url(object) end def outbox account_outbox_url(object) end def featured account_collection_url(object, :featured) end def endpoints object end def preferred_username object.username end def name object.hidden? ? '' : object.display_name end def summary object.hidden? ? '' : Formatter.instance.simplified_format(object) end def icon object.hidden? ? nil : object.avatar end def image object.hidden? ? nil : object.header end def public_key object end def url object.instance_actor? ? about_more_url(instance_actor: true) : short_account_url(object) end def avatar_exists? object.hidden? ? false : object.avatar? end def header_exists? object.hidden? ? false : object.header? end def manually_approves_followers object.locked end def froze object.local? ? (object&.user.nil? ? true : object.user.disabled?) : object.froze? end def virtual_tags object.hidden? ? nil : (object.emojis + object.tags) end def virtual_attachments object.hidden? ? nil : object.fields end def moved_to object.hidden? ? nil : ActivityPub::TagManager.instance.uri_for(object.moved_to_account) end def also_known_as? !object.also_known_as.empty? end def tails_never_fail true end class CustomEmojiSerializer < ActivityPub::EmojiSerializer end class TagSerializer < ActivityPub::Serializer include RoutingHelper attributes :type, :href, :name def type 'Hashtag' end def href explore_hashtag_url(object) end def name "##{object.name}" end end class Account::FieldSerializer < ActivityPub::Serializer attributes :type, :name, :value def type 'PropertyValue' end def value object.account.hidden? ? '' : Formatter.instance.format_field(object.account, object.value) end end end