Merge branch 'master' into glitch-soc/merge-upstream
Conflicts manually resolved: - app/services/post_status_service.rb - config/locales/simple_form.pl.yml - config/routes.rb - config/webpack/loaders/sass.js - config/webpack/shared.js - package.json - yarn.lock
This commit is contained in:
@@ -75,6 +75,7 @@ class ActivityPub::ProcessAccountService < BaseService
|
||||
@account.note = @json['summary'] || ''
|
||||
@account.locked = @json['manuallyApprovesFollowers'] || false
|
||||
@account.fields = property_values || {}
|
||||
@account.also_known_as = as_array(@json['alsoKnownAs'] || []).map { |item| value_or_id(item) }
|
||||
@account.actor_type = actor_type
|
||||
end
|
||||
|
||||
|
@@ -27,7 +27,7 @@ class ActivityPub::ProcessCollectionService < BaseService
|
||||
private
|
||||
|
||||
def different_actor?
|
||||
@json['actor'].present? && value_or_id(@json['actor']) != @account.uri && @json['signature'].present?
|
||||
@json['actor'].present? && value_or_id(@json['actor']) != @account.uri
|
||||
end
|
||||
|
||||
def process_items(items)
|
||||
|
@@ -31,11 +31,11 @@ class AfterBlockDomainFromAccountService < BaseService
|
||||
|
||||
return unless follow.account.activitypub?
|
||||
|
||||
json = Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
json = ActiveModelSerializers::SerializableResource.new(
|
||||
follow,
|
||||
serializer: ActivityPub::RejectFollowSerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(@account))
|
||||
).to_json
|
||||
|
||||
ActivityPub::DeliveryWorker.perform_async(json, @account.id, follow.account.inbox_url)
|
||||
end
|
||||
|
23
app/services/app_sign_up_service.rb
Normal file
23
app/services/app_sign_up_service.rb
Normal file
@@ -0,0 +1,23 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class AppSignUpService < BaseService
|
||||
def call(app, params)
|
||||
return unless allowed_registrations?
|
||||
|
||||
user_params = params.slice(:email, :password, :agreement)
|
||||
account_params = params.slice(:username)
|
||||
user = User.create!(user_params.merge(created_by_application: app, password_confirmation: user_params[:password], account_attributes: account_params))
|
||||
|
||||
Doorkeeper::AccessToken.create!(application: app,
|
||||
resource_owner_id: user.id,
|
||||
scopes: app.scopes,
|
||||
expires_in: Doorkeeper.configuration.access_token_expires_in,
|
||||
use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def allowed_registrations?
|
||||
Setting.open_registrations && !Rails.configuration.x.single_user_mode
|
||||
end
|
||||
end
|
@@ -24,11 +24,11 @@ class AuthorizeFollowService < BaseService
|
||||
end
|
||||
|
||||
def build_json(follow_request)
|
||||
Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
follow_request,
|
||||
serializer: ActivityPub::AcceptFollowSerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(follow_request.target_account))
|
||||
).to_json
|
||||
end
|
||||
|
||||
def build_xml(follow_request)
|
||||
|
@@ -1,8 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class BlockService < BaseService
|
||||
include StreamEntryRenderer
|
||||
|
||||
def call(account, target_account)
|
||||
return if account.id == target_account.id
|
||||
|
||||
@@ -27,11 +25,11 @@ class BlockService < BaseService
|
||||
end
|
||||
|
||||
def build_json(block)
|
||||
Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
block,
|
||||
serializer: ActivityPub::BlockSerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(block.account))
|
||||
).to_json
|
||||
end
|
||||
|
||||
def build_xml(block)
|
||||
|
@@ -1,8 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class FollowService < BaseService
|
||||
include StreamEntryRenderer
|
||||
|
||||
# Follow a remote user, notify remote user about the follow
|
||||
# @param [Account] source_account From which to follow
|
||||
# @param [String, Account] uri User URI to follow in the form of username@domain (or account record)
|
||||
@@ -12,7 +10,7 @@ class FollowService < BaseService
|
||||
target_account = ResolveAccountService.new.call(target_account, skip_webfinger: true)
|
||||
|
||||
raise ActiveRecord::RecordNotFound if target_account.nil? || target_account.id == source_account.id || target_account.suspended?
|
||||
raise Mastodon::NotPermittedError if target_account.blocking?(source_account) || source_account.blocking?(target_account)
|
||||
raise Mastodon::NotPermittedError if target_account.blocking?(source_account) || source_account.blocking?(target_account) || target_account.moved?
|
||||
|
||||
if source_account.following?(target_account)
|
||||
# We're already following this account, but we'll call follow! again to
|
||||
@@ -82,10 +80,10 @@ class FollowService < BaseService
|
||||
end
|
||||
|
||||
def build_json(follow_request)
|
||||
Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
follow_request,
|
||||
serializer: ActivityPub::FollowSerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(follow_request.account))
|
||||
).to_json
|
||||
end
|
||||
end
|
||||
|
@@ -26,13 +26,16 @@ class PostStatusService < BaseService
|
||||
text = media.find(&:video?) ? '📹' : '🖼' if media.size > 0
|
||||
end
|
||||
|
||||
visibility = options[:visibility] || account.user&.setting_default_privacy
|
||||
visibility = :unlisted if visibility == :public && account.silenced
|
||||
|
||||
ApplicationRecord.transaction do
|
||||
status = account.statuses.create!(text: text,
|
||||
media_attachments: media || [],
|
||||
thread: in_reply_to,
|
||||
sensitive: (options[:sensitive].nil? ? account.user&.setting_default_sensitive : options[:sensitive]) || options[:spoiler_text].present?,
|
||||
spoiler_text: options[:spoiler_text] || '',
|
||||
visibility: options[:visibility] || account.user&.setting_default_privacy,
|
||||
visibility: visibility,
|
||||
language: language_from_option(options[:language]) || account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(text, account),
|
||||
application: options[:application])
|
||||
end
|
||||
@@ -46,7 +49,6 @@ class PostStatusService < BaseService
|
||||
unless status.local_only?
|
||||
Pubsubhubbub::DistributionWorker.perform_async(status.stream_entry.id)
|
||||
ActivityPub::DistributionWorker.perform_async(status.id)
|
||||
ActivityPub::ReplyDistributionWorker.perform_async(status.id) if status.reply? && status.thread.account.local?
|
||||
end
|
||||
|
||||
if options[:idempotency].present?
|
||||
|
@@ -60,11 +60,13 @@ class ProcessMentionsService < BaseService
|
||||
end
|
||||
|
||||
def activitypub_json
|
||||
@activitypub_json ||= Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
return @activitypub_json if defined?(@activitypub_json)
|
||||
payload = ActiveModelSerializers::SerializableResource.new(
|
||||
@status,
|
||||
serializer: ActivityPub::ActivitySerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(@status.account))
|
||||
).as_json
|
||||
@activitypub_json = Oj.dump(@status.distributable? ? ActivityPub::LinkedDataSignature.new(payload).sign!(@status.account) : payload)
|
||||
end
|
||||
|
||||
def resolve_account_service
|
||||
|
@@ -19,11 +19,11 @@ class RejectFollowService < BaseService
|
||||
end
|
||||
|
||||
def build_json(follow_request)
|
||||
Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
follow_request,
|
||||
serializer: ActivityPub::RejectFollowSerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(follow_request.target_account))
|
||||
).to_json
|
||||
end
|
||||
|
||||
def build_xml(follow_request)
|
||||
|
@@ -19,6 +19,7 @@ class ResolveAccountService < BaseService
|
||||
@account = uri
|
||||
@username = @account.username
|
||||
@domain = @account.domain
|
||||
uri = "#{@username}@#{@domain}"
|
||||
|
||||
return @account if @account.local? || !webfinger_update_due?
|
||||
else
|
||||
|
@@ -34,6 +34,8 @@ class SearchService < BaseService
|
||||
.compact
|
||||
|
||||
statuses.reject { |status| StatusFilter.new(status, account).filtered? }
|
||||
rescue Faraday::ConnectionFailed
|
||||
[]
|
||||
end
|
||||
|
||||
def perform_hashtags_search!
|
||||
|
@@ -20,11 +20,11 @@ class UnblockService < BaseService
|
||||
end
|
||||
|
||||
def build_json(unblock)
|
||||
Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
unblock,
|
||||
serializer: ActivityPub::UndoBlockSerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(unblock.account))
|
||||
).to_json
|
||||
end
|
||||
|
||||
def build_xml(block)
|
||||
|
@@ -43,11 +43,11 @@ class UnfollowService < BaseService
|
||||
end
|
||||
|
||||
def build_json(follow)
|
||||
Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
follow,
|
||||
serializer: ActivityPub::UndoFollowSerializer,
|
||||
adapter: ActivityPub::Adapter
|
||||
).as_json).sign!(follow.account))
|
||||
).to_json
|
||||
end
|
||||
|
||||
def build_xml(follow)
|
||||
|
@@ -10,7 +10,6 @@ class VerifyLinkService < BaseService
|
||||
return unless link_back_present?
|
||||
|
||||
field.mark_verified!
|
||||
field.account.save!
|
||||
rescue HTTP::Error, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e
|
||||
Rails.logger.debug "Error fetching link #{@url}: #{e}"
|
||||
nil
|
||||
|
Reference in New Issue
Block a user