8192 drop relay example and implementation

This commit is contained in:
Thorsten Claus 2021-05-12 23:23:46 +02:00
parent 85bb022b2a
commit 61de6e117d
8 changed files with 1 additions and 249 deletions

View file

@ -1,9 +0,0 @@
# frozen_string_literal: true
class SocialRelayController < ApplicationController
respond_to :json
def well_known
render json: SocialRelayPresenter.new
end
end

View file

@ -1,26 +0,0 @@
# frozen_string_literal: true
class SocialRelayPresenter
def as_json(*)
{
"subscribe" => AppConfig.relay.inbound.subscribe?,
"scope" => AppConfig.relay.inbound.scope,
"tags" => tags
}
end
def tags
return [] unless AppConfig.relay.inbound.scope == "tags"
tags = AppConfig.relay.inbound.pod_tags.present? ? AppConfig.relay.inbound.pod_tags.split(",").map(&:strip) : []
add_user_tags(tags)
tags.uniq
end
def add_user_tags(tags)
if AppConfig.relay.inbound.include_user_tags?
user_ids = User.halfyear_actives.pluck(:id)
tag_ids = TagFollowing.where(user: user_ids).select(:tag_id).distinct.pluck(:tag_id)
tags.concat ActsAsTaggableOn::Tag.where(id: tag_ids).pluck(:name)
end
end
end

View file

@ -173,15 +173,6 @@ defaults:
admins:
account:
podmin_email:
relay:
outbound:
send: false
url: 'https://relay.iliketoast.net/receive/public'
inbound:
subscribe: false
scope: tags
include_user_tags: false
pod_tags:
development:
environment:

View file

@ -586,35 +586,6 @@
## E-mail address via which the administrator can be contacted.
#podmin_email = "podmin@example.org"
## Settings related to relays
## Relays are applications that exist to push public posts around to
## pods which want to subscribe to them but would not otherwise
## receive them due to not having direct contact with the remote pods.
##
## See more regarding relays: https://wiki.diasporafoundation.org/Relay_servers_for_public_posts
[configuration.relay]
## Enable this setting to send out public posts from this pod to a relay
#outbound.send = true
## Change default remote relay url used for sending out here
#outbound.url = "https://relay.iliketoast.net/receive/public"
## Enable this to receive public posts from relays
#inbound.subscribe = true
## Scope is either "all" or "tags" (default="tags").
## - "all", means this pod wants to receive all public posts from a relay
## - "tags", means this pod wants only posts tagged with certain tags
#inbound.scope = "tags"
## If scope is "tags", should we include tags that users on this pod follow?
## These are added in addition to "pod_tags", if set.
#inbound.include_user_tags = false
## If scope is "tags", a comma separated list of tags here can be set.
## For example "linux,diaspora", to receive posts related to these tags
#inbound.pod_tags = "linux,diaspora"
## Advanced - ignore unless you know better
## You can override settings defined above if you need

View file

@ -12,7 +12,7 @@ module Diaspora
end
def deliver_to_remote(people)
targets = target_urls(people) + additional_target_urls
targets = target_urls(people)
return if targets.empty?
@ -25,11 +25,6 @@ module Diaspora
active.map {|pod| pod.url_to("/receive/public") }
end
def additional_target_urls
return [] unless AppConfig.relay.outbound.send? && object.instance_of?(StatusMessage)
[AppConfig.relay.outbound.url]
end
def deliver_to_hub
logger.debug "deliver to pubsubhubbub sender: #{sender.diaspora_handle}"
Workers::PublishToHub.perform_async(sender.atom_url)

View file

@ -1,16 +0,0 @@
# frozen_string_literal: true
describe SocialRelayController, type: :controller do
describe "#well_known" do
it "responds to format json" do
get :well_known, format: "json"
expect(response.code).to eq("200")
end
it "contains json" do
get :well_known, format: "json"
json = JSON.parse(response.body)
expect(json["scope"]).to be_present
end
end
end

View file

@ -17,38 +17,6 @@ describe Diaspora::Federation::Dispatcher::Public do
end
end
context "relay functionality" do
before do
AppConfig.relay.outbound.url = "https://relay.iliketoast.net/receive/public"
end
it "delivers public post to relay when relay is enabled" do
AppConfig.relay.outbound.send = true
expect(Workers::SendPublic).to receive(:perform_async) do |_user_id, _entity_string, urls, _xml|
expect(urls).to include("https://relay.iliketoast.net/receive/public")
end
Diaspora::Federation::Dispatcher.build(alice, post).dispatch
end
it "does not deliver post to relay when relay is disabled" do
AppConfig.relay.outbound.send = false
expect(Workers::SendPublic).not_to receive(:perform_async)
Diaspora::Federation::Dispatcher.build(alice, post).dispatch
end
it "does not deliver comments to relay" do
AppConfig.relay.outbound.send = true
expect(Workers::SendPublic).not_to receive(:perform_async)
Diaspora::Federation::Dispatcher.build(alice, comment).dispatch
end
end
context "deliver to remote user" do
let(:encryption_key) { double }
let(:magic_env) { double }

View file

@ -1,122 +0,0 @@
# frozen_string_literal: true
describe SocialRelayPresenter do
before do
@presenter = SocialRelayPresenter.new
end
describe "#as_json" do
it "works" do
expect(@presenter.as_json).to be_present
expect(@presenter.as_json).to be_a Hash
end
end
describe "#social relay well-known contents" do
describe "defaults" do
it "provides valid detault data" do
expect(@presenter.as_json).to eq(
"subscribe" => false,
"scope" => "tags",
"tags" => []
)
end
end
describe "pod tags" do
before do
AppConfig.relay.inbound.pod_tags = "foo, bar"
AppConfig.relay.inbound.include_user_tags = false
end
it "provides pod tags" do
expect(@presenter.as_json).to match(
"subscribe" => false,
"scope" => "tags",
"tags" => a_collection_containing_exactly("foo", "bar")
)
end
end
describe "user tags" do
before do
AppConfig.relay.inbound.pod_tags = ""
AppConfig.relay.inbound.include_user_tags = true
ceetag = FactoryBot.create(:tag, name: "cee")
lootag = FactoryBot.create(:tag, name: "loo")
FactoryBot.create(:tag_following, user: alice, tag: ceetag)
FactoryBot.create(:tag_following, user: alice, tag: lootag)
alice.last_seen = Time.zone.now - 2.months
alice.save
end
it "provides user tags" do
expect(@presenter.as_json).to match(
"subscribe" => false,
"scope" => "tags",
"tags" => a_collection_containing_exactly("cee", "loo")
)
end
end
describe "pod tags combined with user tags" do
before do
AppConfig.relay.inbound.pod_tags = "foo, bar"
AppConfig.relay.inbound.include_user_tags = true
ceetag = FactoryBot.create(:tag, name: "cee")
lootag = FactoryBot.create(:tag, name: "loo")
FactoryBot.create(:tag_following, user: alice, tag: ceetag)
FactoryBot.create(:tag_following, user: alice, tag: lootag)
alice.last_seen = Time.zone.now - 2.months
alice.save
end
it "provides combined pod and user tags" do
expect(@presenter.as_json).to match(
"subscribe" => false,
"scope" => "tags",
"tags" => a_collection_containing_exactly("foo", "bar", "cee", "loo")
)
end
end
describe "user tags for inactive user" do
before do
AppConfig.relay.inbound.pod_tags = ""
AppConfig.relay.inbound.include_user_tags = true
ceetag = FactoryBot.create(:tag, name: "cee")
lootag = FactoryBot.create(:tag, name: "loo")
FactoryBot.create(:tag_following, user: alice, tag: ceetag)
FactoryBot.create(:tag_following, user: alice, tag: lootag)
alice.last_seen = Time.zone.now - 8.months
alice.save
end
it "ignores user tags" do
expect(@presenter.as_json).to eq(
"subscribe" => false,
"scope" => "tags",
"tags" => []
)
end
end
describe "when scope is all" do
before do
AppConfig.relay.inbound.scope = "all"
AppConfig.relay.inbound.pod_tags = "foo,bar"
AppConfig.relay.inbound.include_user_tags = true
ceetag = FactoryBot.create(:tag, name: "cee")
FactoryBot.create(:tag_following, user: alice, tag: ceetag)
end
it "provides empty tags list" do
expect(@presenter.as_json).to eq(
"subscribe" => false,
"scope" => "all",
"tags" => []
)
end
end
end
end