Pārlūkot izejas kodu

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 pirms 4 gadiem
vecāks
revīzija
01a3f145d5
7 mainītis faili ar 39 papildinājumiem un 11 dzēšanām
  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 Parādīt failu

@@ -276,16 +276,12 @@ defmodule Pleroma.User do
end end
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_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{follower_address: fa}) when is_binary(fa), do: fa
def ap_followers(%User{} = user), do: "#{ap_id(user)}/followers" 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{following_address: fa}) when is_binary(fa), do: fa
def ap_following(%User{} = user), do: "#{ap_id(user)}/following" def ap_following(%User{} = user), do: "#{ap_id(user)}/following"




+ 13
- 0
lib/pleroma/web/activity_pub/activity_pub.ex Parādīt failu

@@ -1380,6 +1380,18 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end end
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 defp object_to_user_data(data) do
avatar = avatar =
data["icon"]["url"] && data["icon"]["url"] &&
@@ -1409,6 +1421,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do


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


+ 2
- 2
lib/pleroma/web/mastodon_api/views/account_view.ex Parādīt failu

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


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


+ 1
- 1
lib/pleroma/web/metadata/opengraph.ex Parādīt failu

@@ -68,7 +68,7 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraph do
property: "og:title", property: "og:title",
content: Utils.user_name_string(user) 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:description", content: truncated_bio], []},
{:meta, [property: "og:type", content: "website"], []}, {:meta, [property: "og:type", content: "website"], []},
{:meta, [property: "og:image", content: Utils.attachment_url(User.avatar_url(user))], []}, {: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 Parādīt failu

@@ -1,5 +1,5 @@
<div class="p-author h-card"> <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"> <div class="avatar">
<img src="<%= User.avatar_url(@user) |> MediaProxy.url %>" width="48" height="48" alt=""> <img src="<%= User.avatar_url(@user) |> MediaProxy.url %>" width="48" height="48" alt="">
</div> </div>


+ 1
- 1
lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex Parādīt failu

@@ -8,7 +8,7 @@
<button type="submit" class="collapse">Remote follow</button> <button type="submit" class="collapse">Remote follow</button>
</form> </form>
<%= raw Formatter.emojify(@user.name, emoji_for_user(@user)) %> | <%= 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> </h3>
<p><%= raw @user.bio %></p> <p><%= raw @user.bio %></p>
</header> </header>


+ 20
- 1
test/web/mastodon_api/views/account_view_test.exs Parādīt failu

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


defmodule Pleroma.Web.MastodonAPI.AccountViewTest do defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
use Pleroma.DataCase use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.User alias Pleroma.User
alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI
alias Pleroma.Web.MastodonAPI.AccountView 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 test "Represent a user account" do
source_data = %{ source_data = %{
"tag" => [ "tag" => [
@@ -161,6 +169,17 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
assert expected == AccountView.render("show.json", %{user: user}) assert expected == AccountView.render("show.json", %{user: user})
end 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 test "Represent a deactivated user for an admin" do
admin = insert(:user, is_admin: true) admin = insert(:user, is_admin: true)
deactivated_user = insert(:user, deactivated: true) deactivated_user = insert(:user, deactivated: true)


Notiek ielāde…
Atcelt
Saglabāt