Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F74469118
controller_helper.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
controller_helper.ex
View Options
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule
Pleroma.Web.ControllerHelper
do
use
Pleroma.Web
,
:controller
alias
Pleroma.Config
# As in Mastodon API, per https://api.rubyonrails.org/classes/ActiveModel/Type/Boolean.html
@falsy_param_values
[
false
,
0
,
"0"
,
"f"
,
"F"
,
"false"
,
"False"
,
"FALSE"
,
"off"
,
"OFF"
]
def
explicitly_falsy_param?
(
value
),
do
:
value
in
@falsy_param_values
# Note: `nil` and `""` are considered falsy values in Pleroma
def
falsy_param?
(
value
),
do
:
explicitly_falsy_param?
(
value
)
or
value
in
[
nil
,
""
]
def
truthy_param?
(
value
),
do
:
not
falsy_param?
(
value
)
def
json_response
(
conn
,
status
,
json
)
do
conn
|>
put_status
(
status
)
|>
json
(
json
)
end
@spec
fetch_integer_param
(
map
(),
String
.
t
(),
integer
()
|
nil
)
::
integer
()
|
nil
def
fetch_integer_param
(
params
,
name
,
default
\\
nil
)
do
params
|>
Map
.
get
(
name
,
default
)
|>
param_to_integer
(
default
)
end
defp
param_to_integer
(
val
,
_
)
when
is_integer
(
val
),
do
:
val
defp
param_to_integer
(
val
,
default
)
when
is_binary
(
val
)
do
case
Integer
.
parse
(
val
)
do
{
res
,
_
}
->
res
_
->
default
end
end
defp
param_to_integer
(
_
,
default
),
do
:
default
def
add_link_headers
(
conn
,
activities
,
extra_params
\\
%{})
def
add_link_headers
(%{
assigns
:
%{
skip_link_headers
:
true
}}
=
conn
,
_activities
,
_extra_params
),
do
:
conn
def
add_link_headers
(
conn
,
activities
,
extra_params
)
do
case
List
.
last
(
activities
)
do
%{
id
:
max_id
}
->
params
=
conn
.
params
|>
Map
.
drop
(
Map
.
keys
(
conn
.
path_params
))
|>
Map
.
drop
([
"since_id"
,
"max_id"
,
"min_id"
])
|>
Map
.
merge
(
extra_params
)
limit
=
params
|>
Map
.
get
(
"limit"
,
"20"
)
|>
String
.
to_integer
()
min_id
=
if
length
(
activities
)
<=
limit
do
activities
|>
List
.
first
()
|>
Map
.
get
(
:id
)
else
activities
|>
Enum
.
at
(
limit
*
-
1
)
|>
Map
.
get
(
:id
)
end
next_url
=
current_url
(
conn
,
Map
.
merge
(
params
,
%{
max_id
:
max_id
}))
prev_url
=
current_url
(
conn
,
Map
.
merge
(
params
,
%{
min_id
:
min_id
}))
put_resp_header
(
conn
,
"link"
,
"<
#{
next_url
}
>; rel=\"next\", <
#{
prev_url
}
>; rel=\"prev\""
)
_
->
conn
end
end
def
assign_account_by_id
(
conn
,
_
)
do
# TODO: use `conn.params[:id]` only after moving to OpenAPI
case
Pleroma.User
.
get_cached_by_id
(
conn
.
params
[
:id
]
||
conn
.
params
[
"id"
])
do
%
Pleroma.User
{}
=
account
->
assign
(
conn
,
:account
,
account
)
nil
->
Pleroma.Web.MastodonAPI.FallbackController
.
call
(
conn
,
{
:error
,
:not_found
})
|>
halt
()
end
end
def
try_render
(
conn
,
target
,
params
)
when
is_binary
(
target
)
do
case
render
(
conn
,
target
,
params
)
do
nil
->
render_error
(
conn
,
:not_implemented
,
"Can't display this activity"
)
res
->
res
end
end
def
try_render
(
conn
,
_
,
_
)
do
render_error
(
conn
,
:not_implemented
,
"Can't display this activity"
)
end
@spec
put_if_exist
(
map
(),
atom
()
|
String
.
t
(),
any
)
::
map
()
def
put_if_exist
(
map
,
_key
,
nil
),
do
:
map
def
put_if_exist
(
map
,
key
,
value
),
do
:
Map
.
put
(
map
,
key
,
value
)
@doc
"Whether to skip rendering `[:account][:pleroma][:relationship]`for statuses/notifications"
def
skip_relationships?
(
params
)
do
if
Config
.
get
([
:extensions
,
:output_relationships_in_statuses_by_default
])
do
false
else
# BREAKING: older PleromaFE versions do not send this param but _do_ expect relationships.
not
truthy_param?
(
params
[
"with_relationships"
])
end
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Sat, Apr 25, 1:14 PM (19 h, 36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1287653
Default Alt Text
controller_helper.ex (3 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline
Log In to Comment