From 888d2ef4b8b5d74dcce1300a43ba757f2a26309c Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 6 May 2022 17:21:11 +0200 Subject: [PATCH] Expose correct relay address in federation Signed-off-by: Thomas Citharel --- js/src/graphql/admin.ts | 1 + js/src/types/instance.model.ts | 1 + js/src/views/Admin/Instance.vue | 6 +++--- lib/graphql/resolvers/admin.ex | 8 ++++++-- lib/graphql/schema/admin.ex | 4 ++++ lib/mobilizon/actors/actors.ex | 10 ---------- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/js/src/graphql/admin.ts b/js/src/graphql/admin.ts index f970d7879..0d47b0fa7 100644 --- a/js/src/graphql/admin.ts +++ b/js/src/graphql/admin.ts @@ -74,6 +74,7 @@ export const INSTANCE_FRAGMENT = gql` fragment InstanceFragment on Instance { domain hasRelay + relayAddress followerStatus followedStatus eventCount diff --git a/js/src/types/instance.model.ts b/js/src/types/instance.model.ts index 5936f6ba6..165c4bb56 100644 --- a/js/src/types/instance.model.ts +++ b/js/src/types/instance.model.ts @@ -3,6 +3,7 @@ import { InstanceFollowStatus } from "./enums"; export interface IInstance { domain: string; hasRelay: boolean; + relayAddress: string | null; followerStatus: InstanceFollowStatus; followedStatus: InstanceFollowStatus; personCount: number; diff --git a/js/src/views/Admin/Instance.vue b/js/src/views/Admin/Instance.vue index eb91f580e..f20ef224b 100644 --- a/js/src/views/Admin/Instance.vue +++ b/js/src/views/Admin/Instance.vue @@ -162,7 +162,7 @@ export default class Instance extends Vue { await this.$apollo.mutate({ mutation: ACCEPT_RELAY, variables: { - address: `relay@${this.domain}`, + address: this.instance.relayAddress, }, update(cache: ApolloCache) { cache.writeFragment({ @@ -194,7 +194,7 @@ export default class Instance extends Vue { await this.$apollo.mutate({ mutation: REJECT_RELAY, variables: { - address: `relay@${this.domain}`, + address: this.instance.relayAddress, }, update(cache: ApolloCache) { cache.writeFragment({ @@ -242,7 +242,7 @@ export default class Instance extends Vue { await this.$apollo.mutate({ mutation: REMOVE_RELAY, variables: { - address: `relay@${this.domain}`, + address: this.instance.relayAddress, }, update(cache: ApolloCache) { cache.writeFragment({ diff --git a/lib/graphql/resolvers/admin.ex b/lib/graphql/resolvers/admin.ex index a362fd819..0bbe46c82 100644 --- a/lib/graphql/resolvers/admin.ex +++ b/lib/graphql/resolvers/admin.ex @@ -468,12 +468,16 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do context: %{current_user: %User{role: role}} }) when is_admin(role) do - has_relay = Actors.has_relay?(domain) remote_relay = Actors.get_relay(domain) local_relay = Relay.get_actor() result = %{ - has_relay: has_relay, + has_relay: !is_nil(remote_relay), + relay_address: + if(is_nil(remote_relay), + do: nil, + else: "#{remote_relay.preferred_username}@#{remote_relay.domain}" + ), follower_status: follow_status(remote_relay, local_relay), followed_status: follow_status(local_relay, remote_relay) } diff --git a/lib/graphql/schema/admin.ex b/lib/graphql/schema/admin.ex index 5bb65d032..ddd287e97 100644 --- a/lib/graphql/schema/admin.ex +++ b/lib/graphql/schema/admin.ex @@ -216,6 +216,10 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do description: "Whether this instance has a relay, meaning that it's a Mobilizon instance that we can follow" ) + + field(:relay_address, :string, + description: "If this instance has a relay, it's federated username" + ) end @desc """ diff --git a/lib/mobilizon/actors/actors.ex b/lib/mobilizon/actors/actors.ex index 5ee184e0f..2a6c84047 100644 --- a/lib/mobilizon/actors/actors.ex +++ b/lib/mobilizon/actors/actors.ex @@ -1297,16 +1297,6 @@ defmodule Mobilizon.Actors do :ok end - @spec has_relay?(String.t()) :: boolean() - def has_relay?(domain) do - Actor - |> where( - [a], - a.preferred_username == "relay" and a.domain == ^domain and a.type == :Application - ) - |> Repo.exists?() - end - @doc """ Returns a relay actor, either `relay@domain` (Mobilizon) or `domain@domain` (Mastodon) """