Add: _misskey_licenseの送受信 (#968)

This commit is contained in:
KMY(雪あすか) 2025-01-23 18:50:38 +09:00 committed by GitHub
parent 9c14810881
commit c139f8947e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 110 additions and 3 deletions

View file

@ -34,6 +34,7 @@ module ContextHelper
license: { 'schema' => 'http://schema.org#', 'license' => 'schema:license' }, license: { 'schema' => 'http://schema.org#', 'license' => 'schema:license' },
suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' }, suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' },
attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } }, attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } },
misskey_license: { 'misskey' => 'https://misskey-hub.net/ns#', '_misskey_license' => 'misskey:_misskey_license' },
}.freeze }.freeze
def full_context def full_context

View file

@ -4,6 +4,7 @@ module ActivityPub::CaseTransform
class << self class << self
NO_CONVERT_VALUES = %w( NO_CONVERT_VALUES = %w(
_misskey_content _misskey_content
_misskey_license
_misskey_quote _misskey_quote
).freeze ).freeze

View file

@ -34,6 +34,6 @@ class ActivityPub::Parser::CustomEmojiParser
end end
def license def license
@json['license'] || @json['licence'] @json.dig('_misskey_license', 'freeText') || @json['license'] || @json['licence']
end end
end end

View file

@ -0,0 +1,5 @@
# frozen_string_literal: true
class ActivityPub::MisskeyEmojiLicensePresenter < ActiveModelSerializers::Model
attributes :free_text
end

View file

@ -3,11 +3,12 @@
class ActivityPub::EmojiSerializer < ActivityPub::Serializer class ActivityPub::EmojiSerializer < ActivityPub::Serializer
include RoutingHelper include RoutingHelper
context_extensions :emoji, :license, :keywords context_extensions :emoji, :license, :keywords, :misskey_license
attributes :id, :type, :name, :keywords, :is_sensitive, :updated attributes :id, :type, :name, :keywords, :is_sensitive, :updated
attribute :license, if: -> { object.license.present? } attribute :license, if: :license?
has_one :misskey_license, key: :_misskey_license, if: :license?, serializer: ActivityPub::MisskeyEmojiLicenseSerializer
has_one :icon, serializer: ActivityPub::ImageSerializer has_one :icon, serializer: ActivityPub::ImageSerializer
@ -34,4 +35,12 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer
def name def name
":#{object.shortcode}:" ":#{object.shortcode}:"
end end
def misskey_license
ActivityPub::MisskeyEmojiLicensePresenter.new(free_text: object.license)
end
def license?
object.license.present?
end
end end

View file

@ -0,0 +1,5 @@
# frozen_string_literal: true
class ActivityPub::MisskeyEmojiLicenseSerializer < ActivityPub::Serializer
attribute :free_text, key: :freeText
end

View file

@ -0,0 +1,53 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe ActivityPub::Parser::CustomEmojiParser do
subject { described_class.new(json) }
context 'with fedibird license' do
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: ['https://example.com/#foo'].join,
name: 'ohagi',
license: 'Ohagi is ohagi',
}.with_indifferent_access
end
it 'load license' do
expect(subject.license).to eq 'Ohagi is ohagi'
end
end
context 'with misskey license' do
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: ['https://example.com/#foo'].join,
name: 'ohagi',
_misskey_license: {
freeText: 'Ohagi is ohagi',
},
}.with_indifferent_access
end
it 'load license' do
expect(subject.license).to eq 'Ohagi is ohagi'
end
end
context 'without license' do
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: ['https://example.com/#foo'].join,
name: 'ohagi',
}.with_indifferent_access
end
it 'do not load license' do
expect(subject.license).to be_nil
end
end
end

View file

@ -0,0 +1,33 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe ActivityPub::EmojiSerializer do
describe '.serializer_for' do
subject { serialized_record_json(model, described_class, adapter: ActivityPub::Adapter) }
let(:model) { Fabricate(:custom_emoji) }
context 'without license' do
it 'does not have information' do
expect(subject).to_not include({
'_misskey_license' => { 'freeText' => 'Ohagi' },
})
expect(subject).to_not include({
'license' => 'Ohagi',
})
end
end
context 'with license' do
let(:model) { Fabricate(:custom_emoji, license: 'Ohagi') }
it 'has information' do
expect(subject).to include({
'license' => 'Ohagi',
'_misskey_license' => { 'freeText' => 'Ohagi' },
})
end
end
end
end