forked from AkkomaGang/akkoma
Merge branch 'builder-note' into 'develop'
CommonAPI.Utils.make_note_data/1 --> ActivityPub.Builder.note/1 See merge request pleroma/pleroma!3511
This commit is contained in:
commit
773708cfe8
5 changed files with 84 additions and 63 deletions
|
@ -15,6 +15,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do
|
||||||
alias Pleroma.Web.ActivityPub.Relay
|
alias Pleroma.Web.ActivityPub.Relay
|
||||||
alias Pleroma.Web.ActivityPub.Utils
|
alias Pleroma.Web.ActivityPub.Utils
|
||||||
alias Pleroma.Web.ActivityPub.Visibility
|
alias Pleroma.Web.ActivityPub.Visibility
|
||||||
|
alias Pleroma.Web.CommonAPI.ActivityDraft
|
||||||
|
|
||||||
require Pleroma.Constants
|
require Pleroma.Constants
|
||||||
|
|
||||||
|
@ -125,6 +126,37 @@ def create(actor, object, recipients) do
|
||||||
|> Pleroma.Maps.put_if_present("context", context), []}
|
|> Pleroma.Maps.put_if_present("context", context), []}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec note(ActivityDraft.t()) :: {:ok, map(), keyword()}
|
||||||
|
def note(%ActivityDraft{} = draft) do
|
||||||
|
data =
|
||||||
|
%{
|
||||||
|
"type" => "Note",
|
||||||
|
"to" => draft.to,
|
||||||
|
"cc" => draft.cc,
|
||||||
|
"content" => draft.content_html,
|
||||||
|
"summary" => draft.summary,
|
||||||
|
"sensitive" => draft.sensitive,
|
||||||
|
"context" => draft.context,
|
||||||
|
"attachment" => draft.attachments,
|
||||||
|
"actor" => draft.user.ap_id,
|
||||||
|
"tag" => Keyword.values(draft.tags) |> Enum.uniq()
|
||||||
|
}
|
||||||
|
|> add_in_reply_to(draft.in_reply_to)
|
||||||
|
|> Map.merge(draft.extra)
|
||||||
|
|
||||||
|
{:ok, data, []}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp add_in_reply_to(object, nil), do: object
|
||||||
|
|
||||||
|
defp add_in_reply_to(object, in_reply_to) do
|
||||||
|
with %Object{} = in_reply_to_object <- Object.normalize(in_reply_to, fetch: false) do
|
||||||
|
Map.put(object, "inReplyTo", in_reply_to_object.data["id"])
|
||||||
|
else
|
||||||
|
_ -> object
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def chat_message(actor, recipient, content, opts \\ []) do
|
def chat_message(actor, recipient, content, opts \\ []) do
|
||||||
basic = %{
|
basic = %{
|
||||||
"id" => Utils.generate_object_id(),
|
"id" => Utils.generate_object_id(),
|
||||||
|
|
|
@ -6,6 +6,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.Conversation.Participation
|
alias Pleroma.Conversation.Participation
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
|
alias Pleroma.Web.ActivityPub.Builder
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
alias Pleroma.Web.CommonAPI.Utils
|
alias Pleroma.Web.CommonAPI.Utils
|
||||||
|
|
||||||
|
@ -213,8 +214,10 @@ defp object(draft) do
|
||||||
|
|
||||||
emoji = Map.merge(emoji, summary_emoji)
|
emoji = Map.merge(emoji, summary_emoji)
|
||||||
|
|
||||||
|
{:ok, note_data, _meta} = Builder.note(draft)
|
||||||
|
|
||||||
object =
|
object =
|
||||||
Utils.make_note_data(draft)
|
note_data
|
||||||
|> Map.put("emoji", emoji)
|
|> Map.put("emoji", emoji)
|
||||||
|> Map.put("source", draft.status)
|
|> Map.put("source", draft.status)
|
||||||
|> Map.put("generator", draft.params[:generator])
|
|> Map.put("generator", draft.params[:generator])
|
||||||
|
|
|
@ -291,33 +291,6 @@ def format_input(text, "text/markdown", options) do
|
||||||
|> Formatter.html_escape("text/html")
|
|> Formatter.html_escape("text/html")
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_note_data(%ActivityDraft{} = draft) do
|
|
||||||
%{
|
|
||||||
"type" => "Note",
|
|
||||||
"to" => draft.to,
|
|
||||||
"cc" => draft.cc,
|
|
||||||
"content" => draft.content_html,
|
|
||||||
"summary" => draft.summary,
|
|
||||||
"sensitive" => draft.sensitive,
|
|
||||||
"context" => draft.context,
|
|
||||||
"attachment" => draft.attachments,
|
|
||||||
"actor" => draft.user.ap_id,
|
|
||||||
"tag" => Keyword.values(draft.tags) |> Enum.uniq()
|
|
||||||
}
|
|
||||||
|> add_in_reply_to(draft.in_reply_to)
|
|
||||||
|> Map.merge(draft.extra)
|
|
||||||
end
|
|
||||||
|
|
||||||
defp add_in_reply_to(object, nil), do: object
|
|
||||||
|
|
||||||
defp add_in_reply_to(object, in_reply_to) do
|
|
||||||
with %Object{} = in_reply_to_object <- Object.normalize(in_reply_to, fetch: false) do
|
|
||||||
Map.put(object, "inReplyTo", in_reply_to_object.data["id"])
|
|
||||||
else
|
|
||||||
_ -> object
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def format_naive_asctime(date) do
|
def format_naive_asctime(date) do
|
||||||
date |> DateTime.from_naive!("Etc/UTC") |> format_asctime
|
date |> DateTime.from_naive!("Etc/UTC") |> format_asctime
|
||||||
end
|
end
|
||||||
|
|
48
test/pleroma/web/activity_pub/builder_test.exs
Normal file
48
test/pleroma/web/activity_pub/builder_test.exs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.ActivityPub.BuilderTest do
|
||||||
|
alias Pleroma.Web.ActivityPub.Builder
|
||||||
|
alias Pleroma.Web.CommonAPI.ActivityDraft
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
describe "note/1" do
|
||||||
|
test "returns note data" do
|
||||||
|
user = insert(:user)
|
||||||
|
note = insert(:note)
|
||||||
|
user2 = insert(:user)
|
||||||
|
user3 = insert(:user)
|
||||||
|
|
||||||
|
draft = %ActivityDraft{
|
||||||
|
user: user,
|
||||||
|
to: [user2.ap_id],
|
||||||
|
context: "2hu",
|
||||||
|
content_html: "<h1>This is :moominmamma: note</h1>",
|
||||||
|
in_reply_to: note.id,
|
||||||
|
tags: [name: "jimm"],
|
||||||
|
summary: "test summary",
|
||||||
|
cc: [user3.ap_id],
|
||||||
|
extra: %{"custom_tag" => "test"}
|
||||||
|
}
|
||||||
|
|
||||||
|
expected = %{
|
||||||
|
"actor" => user.ap_id,
|
||||||
|
"attachment" => [],
|
||||||
|
"cc" => [user3.ap_id],
|
||||||
|
"content" => "<h1>This is :moominmamma: note</h1>",
|
||||||
|
"context" => "2hu",
|
||||||
|
"sensitive" => false,
|
||||||
|
"summary" => "test summary",
|
||||||
|
"tag" => ["jimm"],
|
||||||
|
"to" => [user2.ap_id],
|
||||||
|
"type" => "Note",
|
||||||
|
"custom_tag" => "test"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, ^expected, []} = Builder.note(draft)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -681,41 +681,6 @@ test "returns original params when list not found" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "make_note_data/1" do
|
|
||||||
test "returns note data" do
|
|
||||||
user = insert(:user)
|
|
||||||
note = insert(:note)
|
|
||||||
user2 = insert(:user)
|
|
||||||
user3 = insert(:user)
|
|
||||||
|
|
||||||
draft = %ActivityDraft{
|
|
||||||
user: user,
|
|
||||||
to: [user2.ap_id],
|
|
||||||
context: "2hu",
|
|
||||||
content_html: "<h1>This is :moominmamma: note</h1>",
|
|
||||||
in_reply_to: note.id,
|
|
||||||
tags: [name: "jimm"],
|
|
||||||
summary: "test summary",
|
|
||||||
cc: [user3.ap_id],
|
|
||||||
extra: %{"custom_tag" => "test"}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert Utils.make_note_data(draft) == %{
|
|
||||||
"actor" => user.ap_id,
|
|
||||||
"attachment" => [],
|
|
||||||
"cc" => [user3.ap_id],
|
|
||||||
"content" => "<h1>This is :moominmamma: note</h1>",
|
|
||||||
"context" => "2hu",
|
|
||||||
"sensitive" => false,
|
|
||||||
"summary" => "test summary",
|
|
||||||
"tag" => ["jimm"],
|
|
||||||
"to" => [user2.ap_id],
|
|
||||||
"type" => "Note",
|
|
||||||
"custom_tag" => "test"
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "maybe_add_attachments/3" do
|
describe "maybe_add_attachments/3" do
|
||||||
test "returns parsed results when attachment_links is false" do
|
test "returns parsed results when attachment_links is false" do
|
||||||
assert Utils.maybe_add_attachments(
|
assert Utils.maybe_add_attachments(
|
||||||
|
|
Loading…
Reference in a new issue