Skip to content
Extraits de code Groupes Projets
Non vérifiée Valider 17340365 rédigé par Eugen Rochko's avatar Eugen Rochko Validation de GitHub
Parcourir les fichiers

Add featured hashtags as an ActivityPub collection (#11595)

parent abc91e5f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -12,7 +12,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController ...@@ -12,7 +12,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
def show def show
expires_in 3.minutes, public: public_fetch_mode? expires_in 3.minutes, public: public_fetch_mode?
render_with_cache json: collection_presenter, content_type: 'application/activity+json', serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, skip_activities: true render_with_cache json: collection_presenter, content_type: 'application/activity+json', serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter
end end
private private
...@@ -20,17 +20,9 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController ...@@ -20,17 +20,9 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
def set_items def set_items
case params[:id] case params[:id]
when 'featured' when 'featured'
@items = begin @items = for_signed_account { cache_collection(@account.pinned_statuses, Status) }
# Because in public fetch mode we cache the response, there would be no when 'tags'
# benefit from performing the check below, since a blocked account or domain @items = for_signed_account { @account.featured_tags }
# would likely be served the cache from the reverse proxy anyway
if authorized_fetch_mode? && !signed_request_account.nil? && (@account.blocking?(signed_request_account) || (!signed_request_account.domain.nil? && @account.domain_blocking?(signed_request_account.domain)))
[]
else
cache_collection(@account.pinned_statuses, Status)
end
end
when 'devices' when 'devices'
@items = @account.devices @items = @account.devices
else else
...@@ -40,7 +32,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController ...@@ -40,7 +32,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
def set_size def set_size
case params[:id] case params[:id]
when 'featured', 'devices' when 'featured', 'devices', 'tags'
@size = @items.size @size = @items.size
else else
not_found not_found
...@@ -51,7 +43,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController ...@@ -51,7 +43,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
case params[:id] case params[:id]
when 'featured' when 'featured'
@type = :ordered @type = :ordered
when 'devices' when 'devices', 'tags'
@type = :unordered @type = :unordered
else else
not_found not_found
...@@ -66,4 +58,16 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController ...@@ -66,4 +58,16 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
items: @items items: @items
) )
end end
def for_signed_account
# Because in public fetch mode we cache the response, there would be no
# benefit from performing the check below, since a blocked account or domain
# would likely be served the cache from the reverse proxy anyway
if authorized_fetch_mode? && !signed_request_account.nil? && (@account.blocking?(signed_request_account) || (!signed_request_account.domain.nil? && @account.domain_blocking?(signed_request_account.domain)))
[]
else
yield
end
end
end end
...@@ -13,7 +13,7 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base ...@@ -13,7 +13,7 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base
moved_to: { 'movedTo' => { '@id' => 'as:movedTo', '@type' => '@id' } }, moved_to: { 'movedTo' => { '@id' => 'as:movedTo', '@type' => '@id' } },
also_known_as: { 'alsoKnownAs' => { '@id' => 'as:alsoKnownAs', '@type' => '@id' } }, also_known_as: { 'alsoKnownAs' => { '@id' => 'as:alsoKnownAs', '@type' => '@id' } },
emoji: { 'toot' => 'http://joinmastodon.org/ns#', 'Emoji' => 'toot:Emoji' }, emoji: { 'toot' => 'http://joinmastodon.org/ns#', 'Emoji' => 'toot:Emoji' },
featured: { 'toot' => 'http://joinmastodon.org/ns#', 'featured' => { '@id' => 'toot:featured', '@type' => '@id' } }, featured: { 'toot' => 'http://joinmastodon.org/ns#', 'featured' => { '@id' => 'toot:featured', '@type' => '@id' }, 'featuredTags' => { '@id' => 'toot:featuredTags', '@type' => '@id' } },
property_value: { 'schema' => 'http://schema.org#', 'PropertyValue' => 'schema:PropertyValue', 'value' => 'schema:value' }, property_value: { 'schema' => 'http://schema.org#', 'PropertyValue' => 'schema:PropertyValue', 'value' => 'schema:value' },
atom_uri: { 'ostatus' => 'http://ostatus.org#', 'atomUri' => 'ostatus:atomUri' }, atom_uri: { 'ostatus' => 'http://ostatus.org#', 'atomUri' => 'ostatus:atomUri' },
conversation: { 'ostatus' => 'http://ostatus.org#', 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri', 'conversation' => 'ostatus:conversation' }, conversation: { 'ostatus' => 'http://ostatus.org#', 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri', 'conversation' => 'ostatus:conversation' },
......
...@@ -10,7 +10,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer ...@@ -10,7 +10,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer
:discoverable, :olm :discoverable, :olm
attributes :id, :type, :following, :followers, attributes :id, :type, :following, :followers,
:inbox, :outbox, :featured, :inbox, :outbox, :featured, :featured_tags,
:preferred_username, :name, :summary, :preferred_username, :name, :summary,
:url, :manually_approves_followers, :url, :manually_approves_followers,
:discoverable :discoverable
...@@ -81,6 +81,10 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer ...@@ -81,6 +81,10 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer
account_collection_url(object, :featured) account_collection_url(object, :featured)
end end
def featured_tags
account_collection_url(object, :tags)
end
def endpoints def endpoints
object object
end end
......
...@@ -16,6 +16,8 @@ class ActivityPub::CollectionSerializer < ActivityPub::Serializer ...@@ -16,6 +16,8 @@ class ActivityPub::CollectionSerializer < ActivityPub::Serializer
ActivityPub::NoteSerializer ActivityPub::NoteSerializer
when 'Device' when 'Device'
ActivityPub::DeviceSerializer ActivityPub::DeviceSerializer
when 'FeaturedTag'
ActivityPub::HashtagSerializer
when 'ActivityPub::CollectionPresenter' when 'ActivityPub::CollectionPresenter'
ActivityPub::CollectionSerializer ActivityPub::CollectionSerializer
when 'String' when 'String'
......
# frozen_string_literal: true
class ActivityPub::HashtagSerializer < ActivityPub::Serializer
include RoutingHelper
attributes :type, :href, :name
def type
'Hashtag'
end
def name
"##{object.name}"
end
def href
if object.class.name == 'FeaturedTag'
short_account_tag_url(object.account, object.tag)
else
tag_url(object)
end
end
end
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter