Skip to content
GitLab
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
fa485323
Commit
fa485323
authored
Apr 19, 2019
by
Eugenij
Browse files
Handle `reblogs` on the first follow request in MastoAPI
parent
9da8b287
Changes
4
Hide whitespace changes
Inline
Side-by-side
CHANGELOG.md
View file @
fa485323
...
...
@@ -71,6 +71,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
-
Mastodon API: Reblogs having
`in_reply_to_id`
-
`null`
even when they are replies
-
Mastodon API: Streaming API broadcasting wrong activity id
-
Mastodon API: 500 errors when requesting a card for a private conversation
-
Mastodon API: Handling of
`reblogs`
in
`/api/v1/accounts/:id/follow`
## [0.9.9999] - 2019-04-05
### Security
...
...
lib/pleroma/web/mastodon_api/mastodon_api.ex
View file @
fa485323
...
...
@@ -7,6 +7,31 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
alias
Pleroma
.
Pagination
alias
Pleroma
.
ScheduledActivity
alias
Pleroma
.
User
alias
Pleroma
.
Web
.
CommonAPI
def
follow
(
follower
,
followed
,
params
\\
%{})
do
options
=
cast_params
(
params
)
reblogs
=
options
[
:reblogs
]
result
=
if
not
User
.
following?
(
follower
,
followed
)
do
CommonAPI
.
follow
(
follower
,
followed
)
else
{
:ok
,
follower
,
followed
,
nil
}
end
with
{
:ok
,
follower
,
followed
,
_
}
<-
result
do
reblogs
|>
case
do
false
->
CommonAPI
.
hide_reblogs
(
follower
,
followed
)
_
->
CommonAPI
.
show_reblogs
(
follower
,
followed
)
end
|>
case
do
{
:ok
,
follower
}
->
{
:ok
,
follower
}
_
->
{
:ok
,
follower
}
end
end
end
def
get_followers
(
user
,
params
\\
%{})
do
user
...
...
@@ -37,7 +62,8 @@ def get_scheduled_activities(user, params \\ %{}) do
defp
cast_params
(
params
)
do
param_types
=
%{
exclude_types:
{
:array
,
:string
}
exclude_types:
{
:array
,
:string
},
reblogs:
:boolean
}
changeset
=
cast
({%{},
param_types
},
params
,
Map
.
keys
(
param_types
))
...
...
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
fa485323
...
...
@@ -821,8 +821,7 @@ def reject_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) d
def
follow
(%{
assigns:
%{
user:
follower
}}
=
conn
,
%{
"id"
=>
id
})
do
with
{
_
,
%
User
{}
=
followed
}
<-
{
:followed
,
User
.
get_cached_by_id
(
id
)},
{
_
,
true
}
<-
{
:followed
,
follower
.
id
!=
followed
.
id
},
false
<-
User
.
following?
(
follower
,
followed
),
{
:ok
,
follower
,
followed
,
_
}
<-
CommonAPI
.
follow
(
follower
,
followed
)
do
{
:ok
,
follower
}
<-
MastodonAPI
.
follow
(
follower
,
followed
,
conn
.
params
)
do
conn
|>
put_view
(
AccountView
)
|>
render
(
"relationship.json"
,
%{
user:
follower
,
target:
followed
})
...
...
@@ -830,19 +829,6 @@ def follow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
{
:followed
,
_
}
->
{
:error
,
:not_found
}
true
->
followed
=
User
.
get_cached_by_id
(
id
)
{
:ok
,
follower
}
=
case
conn
.
params
[
"reblogs"
]
do
true
->
CommonAPI
.
show_reblogs
(
follower
,
followed
)
false
->
CommonAPI
.
hide_reblogs
(
follower
,
followed
)
end
conn
|>
put_view
(
AccountView
)
|>
render
(
"relationship.json"
,
%{
user:
follower
,
target:
followed
})
{
:error
,
message
}
->
conn
|>
put_resp_content_type
(
"application/json"
)
...
...
test/web/mastodon_api/mastodon_api_controller_test.exs
View file @
fa485323
...
...
@@ -1620,6 +1620,44 @@ test "following / unfollowing a user", %{conn: conn} do
assert
id
==
to_string
(
other_user
.
id
)
end
test
"following without reblogs"
do
follower
=
insert
(
:user
)
followed
=
insert
(
:user
)
other_user
=
insert
(
:user
)
conn
=
build_conn
()
|>
assign
(
:user
,
follower
)
|>
post
(
"/api/v1/accounts/
#{
followed
.
id
}
/follow?reblogs=false"
)
assert
%{
"showing_reblogs"
=>
false
}
=
json_response
(
conn
,
200
)
{
:ok
,
activity
}
=
CommonAPI
.
post
(
other_user
,
%{
"status"
=>
"hey"
})
{
:ok
,
reblog
,
_
}
=
CommonAPI
.
repeat
(
activity
.
id
,
followed
)
conn
=
build_conn
()
|>
assign
(
:user
,
User
.
get_cached_by_id
(
follower
.
id
))
|>
get
(
"/api/v1/timelines/home"
)
assert
[]
==
json_response
(
conn
,
200
)
conn
=
build_conn
()
|>
assign
(
:user
,
follower
)
|>
post
(
"/api/v1/accounts/
#{
followed
.
id
}
/follow?reblogs=true"
)
assert
%{
"showing_reblogs"
=>
true
}
=
json_response
(
conn
,
200
)
conn
=
build_conn
()
|>
assign
(
:user
,
User
.
get_cached_by_id
(
follower
.
id
))
|>
get
(
"/api/v1/timelines/home"
)
expected_activity_id
=
reblog
.
id
assert
[%{
"id"
=>
^
expected_activity_id
}]
=
json_response
(
conn
,
200
)
end
test
"following / unfollowing errors"
do
user
=
insert
(
:user
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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