Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
b76de1ec
Commit
b76de1ec
authored
Feb 25, 2018
by
lain
Browse files
Some fixes to AP fetching.
parent
0e9bd6d1
Pipeline
#841
failed with stage
in 2 minutes and 52 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/activity_pub/transmogrifier.ex
View file @
b76de1ec
...
...
@@ -20,8 +20,24 @@ def fix_object(object) do
|>
Map
.
put
(
"actor"
,
object
[
"attributedTo"
])
|>
fix_attachments
|>
fix_context
|>
fix_in_reply_to
end
def
fix_in_reply_to
(%{
"inReplyTo"
=>
in_reply_to_id
}
=
object
)
when
not
is_nil
(
in_reply_to_id
)
do
case
ActivityPub
.
fetch_object_from_id
(
object
[
"inReplyToAtomUri"
]
||
in_reply_to_id
)
do
{
:ok
,
replied_object
}
->
activity
=
Activity
.
get_create_activity_by_object_ap_id
(
replied_object
.
data
[
"id"
])
object
|>
Map
.
put
(
"inReplyTo"
,
replied_object
.
data
[
"id"
])
|>
Map
.
put
(
"inReplyToAtomUri"
,
object
[
"inReplyToAtomUri"
]
||
in_reply_to_id
)
|>
Map
.
put
(
"inReplyToStatusId"
,
activity
.
id
)
e
->
Logger
.
error
(
"Couldn't fetch
#{
object
[
"inReplyTo"
]
}
#{
inspect
(
e
)
}
"
)
object
end
end
def
fix_in_reply_to
(
object
),
do
:
object
def
fix_context
(
object
)
do
object
|>
Map
.
put
(
"context"
,
object
[
"conversation"
])
...
...
@@ -46,19 +62,6 @@ def handle_incoming(%{"type" => "Create", "object" => %{"type" => "Note"} = obje
%
User
{}
=
user
<-
User
.
get_or_fetch_by_ap_id
(
data
[
"actor"
])
do
object
=
fix_object
(
data
[
"object"
])
replied_to_id
=
if
object
[
"inReplyTo"
]
do
case
ActivityPub
.
fetch_object_from_id
(
object
[
"inReplyTo"
])
do
{
:ok
,
object
}
->
object
.
data
[
"id"
]
e
->
Logger
.
error
(
"Couldn't fetch
#{
object
[
"inReplyTo"
]
}
#{
inspect
(
e
)
}
"
)
nil
end
else
nil
end
object
=
Map
.
put
(
object
,
"inReplyTo"
,
replied_to_id
||
object
[
"inReplyTo"
])
params
=
%{
to:
data
[
"to"
],
object:
object
,
...
...
@@ -139,7 +142,6 @@ def prepare_object(object) do
def
prepare_outgoing
(%{
"type"
=>
"Create"
,
"object"
=>
%{
"type"
=>
"Note"
}
=
object
}
=
data
)
do
object
=
object
|>
prepare_object
data
=
data
|>
Map
.
put
(
"object"
,
object
)
|>
Map
.
put
(
"@context"
,
"https://www.w3.org/ns/activitystreams"
)
...
...
test/web/activity_pub/transmogrifier_test.exs
View file @
b76de1ec
...
...
@@ -36,7 +36,27 @@ test "it fetches replied-to activities if we don't have them" do
{
:ok
,
returned_activity
}
=
Transmogrifier
.
handle_incoming
(
data
)
assert
Activity
.
get_create_activity_by_object_ap_id
(
"tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
)
assert
activity
=
Activity
.
get_create_activity_by_object_ap_id
(
"tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
)
assert
returned_activity
.
data
[
"object"
][
"inReplyToAtomUri"
]
==
"https://shitposter.club/notice/2827873"
assert
returned_activity
.
data
[
"object"
][
"inReplyToStatusId"
]
==
activity
.
id
end
test
"it works if the activity id isn't an url but an atom-uri is given"
do
data
=
File
.
read!
(
"test/fixtures/mastodon-post-activity.json"
)
|>
Poison
.
decode!
object
=
data
[
"object"
]
|>
Map
.
put
(
"inReplyToAtomUri"
,
"https://shitposter.club/notice/2827873"
)
|>
Map
.
put
(
"inReplyTo"
,
"tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
)
data
=
data
|>
Map
.
put
(
"object"
,
object
)
{
:ok
,
returned_activity
}
=
Transmogrifier
.
handle_incoming
(
data
)
assert
activity
=
Activity
.
get_create_activity_by_object_ap_id
(
"tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
)
assert
returned_activity
.
data
[
"object"
][
"inReplyToAtomUri"
]
==
"https://shitposter.club/notice/2827873"
assert
returned_activity
.
data
[
"object"
][
"inReplyToStatusId"
]
==
activity
.
id
end
test
"it works for incoming notices"
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment