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
434601a5
Commit
434601a5
authored
May 20, 2018
by
lain
Browse files
Return private / direct posts on user timelines, too.
parent
bdfe0991
Pipeline
#1920
passed with stages
in 4 minutes and 41 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/activity_pub/activity_pub.ex
View file @
434601a5
...
...
@@ -260,6 +260,25 @@ def fetch_public_activities(opts \\ %{}) do
|>
Enum
.
reverse
()
end
def
fetch_user_activities
(
user
,
reading_user
,
params
\\
%{})
do
params
=
params
|>
Map
.
put
(
"type"
,
[
"Create"
,
"Announce"
])
|>
Map
.
put
(
"actor_id"
,
user
.
ap_id
)
|>
Map
.
put
(
"whole_db"
,
true
)
recipients
=
if
reading_user
do
[
"https://www.w3.org/ns/activitystreams#Public"
]
++
[
reading_user
.
ap_id
|
reading_user
.
following
]
else
[
"https://www.w3.org/ns/activitystreams#Public"
]
end
fetch_activities
(
recipients
,
params
)
|>
Enum
.
reverse
()
end
defp
restrict_since
(
query
,
%{
"since_id"
=>
since_id
})
do
from
(
activity
in
query
,
where:
activity
.
id
>
^
since_id
)
end
...
...
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
434601a5
...
...
@@ -204,21 +204,14 @@ def public_timeline(%{assigns: %{user: user}} = conn, params) do
|>
render
(
StatusView
,
"index.json"
,
%{
activities:
activities
,
for:
user
,
as:
:activity
})
end
def
user_statuses
(%{
assigns:
%{
user:
user
}}
=
conn
,
params
)
do
with
%
User
{
ap_id:
ap_id
}
<-
Repo
.
get
(
User
,
params
[
"id"
])
do
params
=
params
|>
Map
.
put
(
"type"
,
[
"Create"
,
"Announce"
])
|>
Map
.
put
(
"actor_id"
,
ap_id
)
|>
Map
.
put
(
"whole_db"
,
true
)
def
user_statuses
(%{
assigns:
%{
user:
reading_user
}}
=
conn
,
params
)
do
with
%
User
{}
=
user
<-
Repo
.
get
(
User
,
params
[
"id"
])
do
# Since Pleroma has no "pinned" posts feature, we'll just set an empty list here
activities
=
if
params
[
"pinned"
]
==
"true"
do
# Since Pleroma has no "pinned" posts feature, we'll just set an empty list here
[]
else
ActivityPub
.
fetch_public_activities
(
params
)
|>
Enum
.
reverse
()
ActivityPub
.
fetch_user_activities
(
user
,
reading_user
,
params
)
end
conn
...
...
lib/pleroma/web/twitter_api/twitter_api_controller.ex
View file @
434601a5
...
...
@@ -96,13 +96,7 @@ def show_user(conn, params) do
def
user_timeline
(%{
assigns:
%{
user:
user
}}
=
conn
,
params
)
do
case
TwitterAPI
.
get_user
(
user
,
params
)
do
{
:ok
,
target_user
}
->
params
=
params
|>
Map
.
put
(
"type"
,
[
"Create"
,
"Announce"
])
|>
Map
.
put
(
"actor_id"
,
target_user
.
ap_id
)
|>
Map
.
put
(
"whole_db"
,
true
)
activities
=
ActivityPub
.
fetch_public_activities
(
params
)
activities
=
ActivityPub
.
fetch_user_activities
(
target_user
,
user
,
params
)
conn
|>
render
(
ActivityView
,
"index.json"
,
%{
activities:
activities
,
for:
user
})
...
...
test/web/mastodon_api/mastodon_api_controller_test.exs
View file @
434601a5
...
...
@@ -354,18 +354,47 @@ test "unfavorites a status and returns it", %{conn: conn} do
describe
"user timelines"
do
test
"gets a users statuses"
,
%{
conn:
conn
}
do
_note
=
insert
(
:note_activity
)
note_two
=
insert
(
:note_activity
)
user_one
=
insert
(
:user
)
user_two
=
insert
(
:user
)
user_three
=
insert
(
:user
)
user
=
User
.
get_by_ap_id
(
note_two
.
data
[
"actor"
]
)
{
:ok
,
user_three
}
=
User
.
follow
(
user_three
,
user_one
)
conn
=
{
:ok
,
activity
}
=
CommonAPI
.
post
(
user_one
,
%{
"status"
=>
"HI!!!"
})
{
:ok
,
direct_activity
}
=
CommonAPI
.
post
(
user_one
,
%{
"status"
=>
"Hi, @
#{
user_two
.
nickname
}
."
,
"visibility"
=>
"direct"
})
{
:ok
,
private_activity
}
=
CommonAPI
.
post
(
user_one
,
%{
"status"
=>
"private"
,
"visibility"
=>
"private"
})
resp
=
conn
|>
get
(
"/api/v1/accounts/
#{
user
.
id
}
/statuses"
)
|>
get
(
"/api/v1/accounts/
#{
user
_one
.
id
}
/statuses"
)
assert
[%{
"id"
=>
id
}]
=
json_response
(
conn
,
200
)
assert
[%{
"id"
=>
id
}]
=
json_response
(
resp
,
200
)
assert
id
==
to_string
(
activity
.
id
)
resp
=
conn
|>
assign
(
:user
,
user_two
)
|>
get
(
"/api/v1/accounts/
#{
user_one
.
id
}
/statuses"
)
assert
[%{
"id"
=>
id_one
},
%{
"id"
=>
id_two
}]
=
json_response
(
resp
,
200
)
assert
id_one
==
to_string
(
direct_activity
.
id
)
assert
id_two
==
to_string
(
activity
.
id
)
resp
=
conn
|>
assign
(
:user
,
user_three
)
|>
get
(
"/api/v1/accounts/
#{
user_one
.
id
}
/statuses"
)
assert
id
==
to_string
(
note_two
.
id
)
assert
[%{
"id"
=>
id_one
},
%{
"id"
=>
id_two
}]
=
json_response
(
resp
,
200
)
assert
id_one
==
to_string
(
private_activity
.
id
)
assert
id_two
==
to_string
(
activity
.
id
)
end
test
"unimplemented pinned statuses feature"
,
%{
conn:
conn
}
do
...
...
Hakaba Hitoyo
@hakabahitoyo
mentioned in issue
#191 (closed)
·
May 23, 2018
mentioned in issue
#191 (closed)
mentioned in issue #191
Toggle commit list
Write
Preview
Supports
Markdown
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