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
f41f017b
Commit
f41f017b
authored
Sep 05, 2018
by
vaartis
Browse files
Implement muting, add it to the mastodon API
parent
1dd718e8
Changes
5
Show whitespace changes
Inline
Side-by-side
lib/pleroma/user.ex
View file @
f41f017b
...
@@ -888,6 +888,28 @@ def blocks_import(%User{} = blocker, blocked_identifiers) when is_list(blocked_i
...
@@ -888,6 +888,28 @@ def blocks_import(%User{} = blocker, blocked_identifiers) when is_list(blocked_i
)
)
end
end
def
mute
(
muter
,
%
User
{
ap_id:
ap_id
}
=
muted
)
do
if
following?
(
muter
,
muter
)
do
unfollow
(
muter
,
muter
)
end
mutes
=
muter
.
info
[
"mutes"
]
||
[]
new_mutes
=
Enum
.
uniq
([
ap_id
|
mutes
])
new_info
=
Map
.
put
(
muter
.
info
,
"mutes"
,
new_mutes
)
cs
=
User
.
info_changeset
(
muter
,
%{
info:
new_info
})
update_and_set_cache
(
cs
)
end
def
unmute
(
user
,
%{
ap_id:
ap_id
})
do
mutes
=
user
.
info
[
"mutes"
]
||
[]
new_mutes
=
List
.
delete
(
mutes
,
ap_id
)
new_info
=
Map
.
put
(
user
.
info
,
"mutes"
,
new_mutes
)
cs
=
User
.
info_changeset
(
user
,
%{
info:
new_info
})
update_and_set_cache
(
cs
)
end
def
block
(
blocker
,
%
User
{
ap_id:
ap_id
}
=
blocked
)
do
def
block
(
blocker
,
%
User
{
ap_id:
ap_id
}
=
blocked
)
do
# sever any follow relationships to prevent leaks per activitypub (Pleroma issue #213)
# sever any follow relationships to prevent leaks per activitypub (Pleroma issue #213)
blocker
=
blocker
=
...
@@ -930,6 +952,8 @@ def unblock(blocker, %{ap_id: ap_id}) do
...
@@ -930,6 +952,8 @@ def unblock(blocker, %{ap_id: ap_id}) do
update_and_set_cache
(
cng
)
update_and_set_cache
(
cng
)
end
end
def
mutes?
(
user
,
%{
ap_id:
ap_id
}),
do
:
Enum
.
member?
(
user
.
info
[
"mutes"
]
||
[],
ap_id
)
def
blocks?
(
user
,
%{
ap_id:
ap_id
})
do
def
blocks?
(
user
,
%{
ap_id:
ap_id
})
do
blocks
=
user
.
info
.
blocks
blocks
=
user
.
info
.
blocks
domain_blocks
=
user
.
info
.
domain_blocks
domain_blocks
=
user
.
info
.
domain_blocks
...
...
lib/pleroma/web/activity_pub/activity_pub.ex
View file @
f41f017b
...
@@ -576,6 +576,18 @@ defp restrict_reblogs(query, %{"exclude_reblogs" => val}) when val == "true" or
...
@@ -576,6 +576,18 @@ defp restrict_reblogs(query, %{"exclude_reblogs" => val}) when val == "true" or
defp
restrict_reblogs
(
query
,
_
),
do
:
query
defp
restrict_reblogs
(
query
,
_
),
do
:
query
defp
restrict_muted
(
query
,
%{
"muting_user"
=>
%
User
{
info:
info
}})
do
mutes
=
info
[
"mutes"
]
||
[]
from
(
activity
in
query
,
where:
fragment
(
"not (? = ANY(?))"
,
activity
.
actor
,
^
mutes
),
where:
fragment
(
"not (?->'to'
\\
?| ?)"
,
activity
.
data
,
^
mutes
)
)
end
defp
restrict_muted
(
query
,
_
),
do
:
query
defp
restrict_blocked
(
query
,
%{
"blocking_user"
=>
%
User
{
info:
info
}})
do
defp
restrict_blocked
(
query
,
%{
"blocking_user"
=>
%
User
{
info:
info
}})
do
blocks
=
info
.
blocks
||
[]
blocks
=
info
.
blocks
||
[]
domain_blocks
=
info
.
domain_blocks
||
[]
domain_blocks
=
info
.
domain_blocks
||
[]
...
@@ -629,6 +641,7 @@ def fetch_activities_query(recipients, opts \\ %{}) do
...
@@ -629,6 +641,7 @@ def fetch_activities_query(recipients, opts \\ %{}) do
|>
restrict_type
(
opts
)
|>
restrict_type
(
opts
)
|>
restrict_favorited_by
(
opts
)
|>
restrict_favorited_by
(
opts
)
|>
restrict_blocked
(
opts
)
|>
restrict_blocked
(
opts
)
|>
restrict_muted
(
opts
)
|>
restrict_media
(
opts
)
|>
restrict_media
(
opts
)
|>
restrict_visibility
(
opts
)
|>
restrict_visibility
(
opts
)
|>
restrict_replies
(
opts
)
|>
restrict_replies
(
opts
)
...
...
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
f41f017b
...
@@ -232,6 +232,7 @@ def home_timeline(%{assigns: %{user: user}} = conn, params) do
...
@@ -232,6 +232,7 @@ def home_timeline(%{assigns: %{user: user}} = conn, params) do
params
params
|>
Map
.
put
(
"type"
,
[
"Create"
,
"Announce"
])
|>
Map
.
put
(
"type"
,
[
"Create"
,
"Announce"
])
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"muting_user"
,
user
)
|>
Map
.
put
(
"user"
,
user
)
|>
Map
.
put
(
"user"
,
user
)
activities
=
activities
=
...
@@ -254,6 +255,7 @@ def public_timeline(%{assigns: %{user: user}} = conn, params) do
...
@@ -254,6 +255,7 @@ def public_timeline(%{assigns: %{user: user}} = conn, params) do
|>
Map
.
put
(
"type"
,
[
"Create"
,
"Announce"
])
|>
Map
.
put
(
"type"
,
[
"Create"
,
"Announce"
])
|>
Map
.
put
(
"local_only"
,
local_only
)
|>
Map
.
put
(
"local_only"
,
local_only
)
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"muting_user"
,
user
)
|>
ActivityPub
.
fetch_public_activities
()
|>
ActivityPub
.
fetch_public_activities
()
|>
Enum
.
reverse
()
|>
Enum
.
reverse
()
...
@@ -620,6 +622,7 @@ def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do
...
@@ -620,6 +622,7 @@ def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do
|>
Map
.
put
(
"type"
,
"Create"
)
|>
Map
.
put
(
"type"
,
"Create"
)
|>
Map
.
put
(
"local_only"
,
local_only
)
|>
Map
.
put
(
"local_only"
,
local_only
)
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"muting_user"
,
user
)
|>
Map
.
put
(
"tag"
,
tags
)
|>
Map
.
put
(
"tag"
,
tags
)
|>
Map
.
put
(
"tag_all"
,
tag_all
)
|>
Map
.
put
(
"tag_all"
,
tag_all
)
|>
Map
.
put
(
"tag_reject"
,
tag_reject
)
|>
Map
.
put
(
"tag_reject"
,
tag_reject
)
...
@@ -763,6 +766,20 @@ def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
...
@@ -763,6 +766,20 @@ def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
end
end
end
end
def
mute
(%{
assigns:
%{
user:
muter
}}
=
conn
,
%{
"id"
=>
id
})
do
with
%
User
{}
=
muted
<-
Repo
.
get
(
User
,
id
),
{
:ok
,
muter
}
<-
User
.
mute
(
muter
,
muted
)
do
render
(
conn
,
AccountView
,
"relationship.json"
,
%{
user:
muter
,
target:
muted
})
end
end
def
unmute
(%{
assigns:
%{
user:
muter
}}
=
conn
,
%{
"id"
=>
id
})
do
with
%
User
{}
=
muted
<-
Repo
.
get
(
User
,
id
),
{
:ok
,
muter
}
<-
User
.
unmute
(
muter
,
muted
)
do
render
(
conn
,
AccountView
,
"relationship.json"
,
%{
user:
muter
,
target:
muted
})
end
end
def
block
(%{
assigns:
%{
user:
blocker
}}
=
conn
,
%{
"id"
=>
id
})
do
def
block
(%{
assigns:
%{
user:
blocker
}}
=
conn
,
%{
"id"
=>
id
})
do
with
%
User
{}
=
blocked
<-
Repo
.
get
(
User
,
id
),
with
%
User
{}
=
blocked
<-
Repo
.
get
(
User
,
id
),
{
:ok
,
blocker
}
<-
User
.
block
(
blocker
,
blocked
),
{
:ok
,
blocker
}
<-
User
.
block
(
blocker
,
blocked
),
...
@@ -1018,6 +1035,7 @@ def list_timeline(%{assigns: %{user: user}} = conn, %{"list_id" => id} = params)
...
@@ -1018,6 +1035,7 @@ def list_timeline(%{assigns: %{user: user}} = conn, %{"list_id" => id} = params)
params
params
|>
Map
.
put
(
"type"
,
"Create"
)
|>
Map
.
put
(
"type"
,
"Create"
)
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"muting_user"
,
user
)
# we must filter the following list for the user to avoid leaking statuses the user
# we must filter the following list for the user to avoid leaking statuses the user
# does not actually have permission to see (for more info, peruse security issue #270).
# does not actually have permission to see (for more info, peruse security issue #270).
...
...
lib/pleroma/web/mastodon_api/views/account_view.ex
View file @
f41f017b
...
@@ -47,6 +47,7 @@ def render("relationship.json", %{user: user, target: target}) do
...
@@ -47,6 +47,7 @@ def render("relationship.json", %{user: user, target: target}) do
following:
User
.
following?
(
user
,
target
),
following:
User
.
following?
(
user
,
target
),
followed_by:
User
.
following?
(
target
,
user
),
followed_by:
User
.
following?
(
target
,
user
),
blocking:
User
.
blocks?
(
user
,
target
),
blocking:
User
.
blocks?
(
user
,
target
),
muting:
User
.
mutes?
(
user
,
target
),
muting:
false
,
muting:
false
,
muting_notifications:
false
,
muting_notifications:
false
,
requested:
requested
,
requested:
requested
,
...
...
lib/pleroma/web/router.ex
View file @
f41f017b
...
@@ -166,8 +166,8 @@ defmodule Pleroma.Web.Router do
...
@@ -166,8 +166,8 @@ defmodule Pleroma.Web.Router do
post
(
"/accounts/:id/unfollow"
,
MastodonAPIController
,
:unfollow
)
post
(
"/accounts/:id/unfollow"
,
MastodonAPIController
,
:unfollow
)
post
(
"/accounts/:id/block"
,
MastodonAPIController
,
:block
)
post
(
"/accounts/:id/block"
,
MastodonAPIController
,
:block
)
post
(
"/accounts/:id/unblock"
,
MastodonAPIController
,
:unblock
)
post
(
"/accounts/:id/unblock"
,
MastodonAPIController
,
:unblock
)
post
(
"/accounts/:id/mute"
,
MastodonAPIController
,
:
relationship_noop
)
post
(
"/accounts/:id/mute"
,
MastodonAPIController
,
:
mute
)
post
(
"/accounts/:id/unmute"
,
MastodonAPIController
,
:
relationship_noop
)
post
(
"/accounts/:id/unmute"
,
MastodonAPIController
,
:
unmute
)
get
(
"/accounts/:id/lists"
,
MastodonAPIController
,
:account_lists
)
get
(
"/accounts/:id/lists"
,
MastodonAPIController
,
:account_lists
)
get
(
"/follow_requests"
,
MastodonAPIController
,
:follow_requests
)
get
(
"/follow_requests"
,
MastodonAPIController
,
:follow_requests
)
...
...
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