Browse Source

Merge branch 'bugfix/funkwhale-channel' into 'develop'

Fix profile url for funkwhale channels, removes one source_data use

Closes #1653

See merge request pleroma/pleroma!2333
tags/v2.0.2^2
Haelwenn rinpatch 4 years ago
parent
commit
01a3f145d5
7 changed files with 39 additions and 11 deletions
  1. +1
    -5
      lib/pleroma/user.ex
  2. +13
    -0
      lib/pleroma/web/activity_pub/activity_pub.ex
  3. +2
    -2
      lib/pleroma/web/mastodon_api/views/account_view.ex
  4. +1
    -1
      lib/pleroma/web/metadata/opengraph.ex
  5. +1
    -1
      lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex
  6. +1
    -1
      lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex
  7. +20
    -1
      test/web/mastodon_api/views/account_view_test.exs

+ 1
- 5
lib/pleroma/user.ex View File

@@ -276,16 +276,12 @@ defmodule Pleroma.User do
end
end

def profile_url(%User{source_data: %{"url" => url}}), do: url
def profile_url(%User{ap_id: ap_id}), do: ap_id
def profile_url(_), do: nil

def ap_id(%User{nickname: nickname}), do: "#{Web.base_url()}/users/#{nickname}"

def ap_followers(%User{follower_address: fa}) when is_binary(fa), do: fa
def ap_followers(%User{} = user), do: "#{ap_id(user)}/followers"

@spec ap_following(User.t()) :: Sring.t()
@spec ap_following(User.t()) :: String.t()
def ap_following(%User{following_address: fa}) when is_binary(fa), do: fa
def ap_following(%User{} = user), do: "#{ap_id(user)}/following"



+ 13
- 0
lib/pleroma/web/activity_pub/activity_pub.ex View File

@@ -1380,6 +1380,18 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end

@spec get_actor_url(any()) :: binary() | nil
defp get_actor_url(url) when is_binary(url), do: url
defp get_actor_url(%{"href" => href}) when is_binary(href), do: href

defp get_actor_url(url) when is_list(url) do
url
|> List.first()
|> get_actor_url()
end

defp get_actor_url(_url), do: nil

defp object_to_user_data(data) do
avatar =
data["icon"]["url"] &&
@@ -1409,6 +1421,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do

user_data = %{
ap_id: data["id"],
uri: get_actor_url(data["url"]),
ap_enabled: true,
source_data: data,
banner: banner,


+ 2
- 2
lib/pleroma/web/mastodon_api/views/account_view.ex View File

@@ -27,7 +27,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
id: to_string(user.id),
acct: user.nickname,
username: username_from_nickname(user.nickname),
url: User.profile_url(user)
url: user.uri || user.ap_id
}
end

@@ -113,7 +113,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
following_count: following_count,
statuses_count: user.note_count,
note: user.bio || "",
url: User.profile_url(user),
url: user.uri || user.ap_id,
avatar: image,
avatar_static: image,
header: header,


+ 1
- 1
lib/pleroma/web/metadata/opengraph.ex View File

@@ -68,7 +68,7 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraph do
property: "og:title",
content: Utils.user_name_string(user)
], []},
{:meta, [property: "og:url", content: User.profile_url(user)], []},
{:meta, [property: "og:url", content: user.uri || user.ap_id], []},
{:meta, [property: "og:description", content: truncated_bio], []},
{:meta, [property: "og:type", content: "website"], []},
{:meta, [property: "og:image", content: Utils.attachment_url(User.avatar_url(user))], []},


+ 1
- 1
lib/pleroma/web/templates/static_fe/static_fe/_user_card.html.eex View File

@@ -1,5 +1,5 @@
<div class="p-author h-card">
<a class="u-url" rel="author noopener" href="<%= User.profile_url(@user) %>">
<a class="u-url" rel="author noopener" href="<%= (@user.uri || @user.ap_id) %>">
<div class="avatar">
<img src="<%= User.avatar_url(@user) |> MediaProxy.url %>" width="48" height="48" alt="">
</div>


+ 1
- 1
lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex View File

@@ -8,7 +8,7 @@
<button type="submit" class="collapse">Remote follow</button>
</form>
<%= raw Formatter.emojify(@user.name, emoji_for_user(@user)) %> |
<%= link "@#{@user.nickname}@#{Endpoint.host()}", to: User.profile_url(@user) %>
<%= link "@#{@user.nickname}@#{Endpoint.host()}", to: (@user.uri || @user.ap_id) %>
</h3>
<p><%= raw @user.bio %></p>
</header>


+ 20
- 1
test/web/mastodon_api/views/account_view_test.exs View File

@@ -4,11 +4,19 @@

defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.User
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.MastodonAPI.AccountView

import Pleroma.Factory
import Tesla.Mock

setup do
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
:ok
end

test "Represent a user account" do
source_data = %{
"tag" => [
@@ -161,6 +169,17 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
assert expected == AccountView.render("show.json", %{user: user})
end

test "Represent a Funkwhale channel" do
{:ok, user} =
User.get_or_fetch_by_ap_id(
"https://channels.tests.funkwhale.audio/federation/actors/compositions"
)

assert represented = AccountView.render("show.json", %{user: user})
assert represented.acct == "compositions@channels.tests.funkwhale.audio"
assert represented.url == "https://channels.tests.funkwhale.audio/channels/compositions"
end

test "Represent a deactivated user for an admin" do
admin = insert(:user, is_admin: true)
deactivated_user = insert(:user, deactivated: true)


Loading…
Cancel
Save