Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F12552613
emoji_reaction_controller.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
emoji_reaction_controller.ex
View Options
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule
Pleroma.Web.PleromaAPI.EmojiReactionController
do
use
Pleroma.Web
,
:controller
alias
Pleroma.Activity
alias
Pleroma.Object
alias
Pleroma.User
alias
Pleroma.Web.CommonAPI
alias
Pleroma.Web.MastodonAPI.StatusView
alias
Pleroma.Web.Plugs.OAuthScopesPlug
plug
(
Pleroma.Web.ApiSpec.CastAndValidate
)
plug
(
OAuthScopesPlug
,
%{
scopes
:
[
"write:statuses"
]}
when
action
in
[
:create
,
:delete
])
plug
(
OAuthScopesPlug
,
%{
scopes
:
[
"read:statuses"
],
fallback
:
:proceed_unauthenticated
}
when
action
==
:index
)
defdelegate
open_api_operation
(
action
),
to
:
Pleroma.Web.ApiSpec.EmojiReactionOperation
action_fallback
(
Pleroma.Web.MastodonAPI.FallbackController
)
def
index
(%{
assigns
:
%{
user
:
user
}}
=
conn
,
%{
id
:
activity_id
}
=
params
)
do
with
true
<-
Pleroma.Config
.
get
([
:instance
,
:show_reactions
]),
%
Activity
{}
=
activity
<-
Activity
.
get_by_id_with_object
(
activity_id
),
%
Object
{}
=
object
<-
Object
.
normalize
(
activity
,
fetch
:
false
),
reactions
<-
Object
.
get_emoji_reactions
(
object
)
do
reactions
=
reactions
|>
filter
(
params
)
|>
filter_allowed_users
(
user
,
Map
.
get
(
params
,
:with_muted
,
false
))
render
(
conn
,
"index.json"
,
emoji_reactions
:
reactions
,
user
:
user
)
else
_e
->
json
(
conn
,
[])
end
end
def
filter_allowed_users
(
reactions
,
user
,
with_muted
)
do
exclude_ap_ids
=
if
is_nil
(
user
)
do
[]
else
User
.
cached_blocked_users_ap_ids
(
user
)
++
if
not
with_muted
,
do
:
User
.
cached_muted_users_ap_ids
(
user
),
else
:
[]
end
filter_emoji
=
fn
emoji
,
users
,
url
->
case
Enum
.
reject
(
users
,
&
(
&1
in
exclude_ap_ids
))
do
[]
->
nil
users
->
{
emoji
,
users
,
url
}
end
end
reactions
|>
Stream
.
map
(
fn
[
emoji
,
users
,
url
]
when
is_list
(
users
)
->
filter_emoji
.
(
emoji
,
users
,
url
)
end
)
|>
Stream
.
reject
(
&
is_nil
/
1
)
end
defp
filter
(
reactions
,
%{
emoji
:
emoji
})
when
is_binary
(
emoji
)
do
Enum
.
filter
(
reactions
,
fn
[
e
,
_
,
_
]
->
e
==
emoji
end
)
end
defp
filter
(
reactions
,
_
),
do
:
reactions
def
create
(%{
assigns
:
%{
user
:
user
}}
=
conn
,
%{
id
:
activity_id
,
emoji
:
emoji
})
do
emoji
=
emoji
|>
Pleroma.Emoji
.
fully_qualify_emoji
()
|>
Pleroma.Emoji
.
maybe_quote
()
with
{
:ok
,
_activity
}
<-
CommonAPI
.
react_with_emoji
(
activity_id
,
user
,
emoji
)
do
activity
=
Activity
.
get_by_id
(
activity_id
)
conn
|>
put_view
(
StatusView
)
|>
render
(
"show.json"
,
activity
:
activity
,
for
:
user
,
as
:
:activity
)
end
end
def
delete
(%{
assigns
:
%{
user
:
user
}}
=
conn
,
%{
id
:
activity_id
,
emoji
:
emoji
})
do
emoji
=
emoji
|>
Pleroma.Emoji
.
fully_qualify_emoji
()
|>
Pleroma.Emoji
.
maybe_quote
()
with
{
:ok
,
_activity
}
<-
CommonAPI
.
unreact_with_emoji
(
activity_id
,
user
,
emoji
)
do
activity
=
Activity
.
get_by_id
(
activity_id
)
conn
|>
put_view
(
StatusView
)
|>
render
(
"show.json"
,
activity
:
activity
,
for
:
user
,
as
:
:activity
)
end
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Sat, Nov 15, 12:44 AM (1 d, 16 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
632968
Default Alt Text
emoji_reaction_controller.ex (3 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline
Log In to Comment