diff options
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/activitypub/process_account_service.rb | 1 | ||||
-rw-r--r-- | app/services/activitypub/process_collection_service.rb | 2 | ||||
-rw-r--r-- | app/services/after_block_domain_from_account_service.rb | 4 | ||||
-rw-r--r-- | app/services/app_sign_up_service.rb | 23 | ||||
-rw-r--r-- | app/services/authorize_follow_service.rb | 4 | ||||
-rw-r--r-- | app/services/block_service.rb | 6 | ||||
-rw-r--r-- | app/services/follow_service.rb | 8 | ||||
-rw-r--r-- | app/services/post_status_service.rb | 6 | ||||
-rw-r--r-- | app/services/process_mentions_service.rb | 6 | ||||
-rw-r--r-- | app/services/reject_follow_service.rb | 4 | ||||
-rw-r--r-- | app/services/resolve_account_service.rb | 1 | ||||
-rw-r--r-- | app/services/search_service.rb | 2 | ||||
-rw-r--r-- | app/services/unblock_service.rb | 4 | ||||
-rw-r--r-- | app/services/unfollow_service.rb | 4 | ||||
-rw-r--r-- | app/services/verify_link_service.rb | 1 |
15 files changed, 51 insertions, 25 deletions
diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 5c865dae2..d6480028f 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -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 diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index 79cdca297..5c54aad89 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -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) diff --git a/app/services/after_block_domain_from_account_service.rb b/app/services/after_block_domain_from_account_service.rb index 56cc819fb..180f13403 100644 --- a/app/services/after_block_domain_from_account_service.rb +++ b/app/services/after_block_domain_from_account_service.rb @@ -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 diff --git a/app/services/app_sign_up_service.rb b/app/services/app_sign_up_service.rb new file mode 100644 index 000000000..1878587e8 --- /dev/null +++ b/app/services/app_sign_up_service.rb @@ -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 diff --git a/app/services/authorize_follow_service.rb b/app/services/authorize_follow_service.rb index 1674239df..f2e3ebe7d 100644 --- a/app/services/authorize_follow_service.rb +++ b/app/services/authorize_follow_service.rb @@ -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) diff --git a/app/services/block_service.rb b/app/services/block_service.rb index b39c3eef2..140b238df 100644 --- a/app/services/block_service.rb +++ b/app/services/block_service.rb @@ -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) diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index 0020bc9fe..9d36a1449 100644 --- a/app/services/follow_service.rb +++ b/app/services/follow_service.rb @@ -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 diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index d7d7770e9..28ecc848d 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -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? diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index ec7d33b1d..2595c5fd3 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -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 diff --git a/app/services/reject_follow_service.rb b/app/services/reject_follow_service.rb index c1f7bcb60..a91266aa4 100644 --- a/app/services/reject_follow_service.rb +++ b/app/services/reject_follow_service.rb @@ -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) diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index c3064211d..4ff351c5f 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -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 diff --git a/app/services/search_service.rb b/app/services/search_service.rb index cc1fcb52f..1c31e0509 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -34,6 +34,8 @@ class SearchService < BaseService .compact statuses.reject { |status| StatusFilter.new(status, account).filtered? } + rescue Faraday::ConnectionFailed + [] end def perform_hashtags_search! diff --git a/app/services/unblock_service.rb b/app/services/unblock_service.rb index 869f62d1c..72fc5ab15 100644 --- a/app/services/unblock_service.rb +++ b/app/services/unblock_service.rb @@ -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) diff --git a/app/services/unfollow_service.rb b/app/services/unfollow_service.rb index 73a64929f..03e45912d 100644 --- a/app/services/unfollow_service.rb +++ b/app/services/unfollow_service.rb @@ -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) diff --git a/app/services/verify_link_service.rb b/app/services/verify_link_service.rb index 9f56249c7..c65578761 100644 --- a/app/services/verify_link_service.rb +++ b/app/services/verify_link_service.rb @@ -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 |