forked from AkkomaGang/akkoma
Merge branch 'features/glitch-soc-frontend' into 'develop'
Empty 2.4.x endpoints and ``api/v2/search`` See merge request pleroma/pleroma!214
This commit is contained in:
commit
c3002c583e
5 changed files with 67 additions and 2 deletions
|
@ -6,7 +6,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
|
||||||
|
|
||||||
@accept Keyword.get(@mrf_policy, :accept)
|
@accept Keyword.get(@mrf_policy, :accept)
|
||||||
defp check_accept(actor_info, object) do
|
defp check_accept(actor_info, object) do
|
||||||
if length(@accept) > 0 and not actor_info.host in @accept do
|
if length(@accept) > 0 and not (actor_info.host in @accept) do
|
||||||
{:reject, nil}
|
{:reject, nil}
|
||||||
else
|
else
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
|
|
|
@ -621,6 +621,58 @@ def unblock_domain(%{assigns: %{user: blocker}} = conn, %{"domain" => domain}) d
|
||||||
json(conn, %{})
|
json(conn, %{})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def search2(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do
|
||||||
|
accounts = User.search(query, params["resolve"] == "true")
|
||||||
|
|
||||||
|
fetched =
|
||||||
|
if Regex.match?(~r/https?:/, query) do
|
||||||
|
with {:ok, activities} <- OStatus.fetch_activity_from_url(query) do
|
||||||
|
activities
|
||||||
|
|> Enum.filter(fn
|
||||||
|
%{data: %{"type" => "Create"}} -> true
|
||||||
|
_ -> false
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
_e -> []
|
||||||
|
end
|
||||||
|
end || []
|
||||||
|
|
||||||
|
q =
|
||||||
|
from(
|
||||||
|
a in Activity,
|
||||||
|
where: fragment("?->>'type' = 'Create'", a.data),
|
||||||
|
where: "https://www.w3.org/ns/activitystreams#Public" in a.recipients,
|
||||||
|
where:
|
||||||
|
fragment(
|
||||||
|
"to_tsvector('english', ?->'object'->>'content') @@ plainto_tsquery('english', ?)",
|
||||||
|
a.data,
|
||||||
|
^query
|
||||||
|
),
|
||||||
|
limit: 20,
|
||||||
|
order_by: [desc: :id]
|
||||||
|
)
|
||||||
|
|
||||||
|
statuses = Repo.all(q) ++ fetched
|
||||||
|
|
||||||
|
tags_path = Web.base_url() <> "/tag/"
|
||||||
|
|
||||||
|
tags =
|
||||||
|
String.split(query)
|
||||||
|
|> Enum.uniq()
|
||||||
|
|> Enum.filter(fn tag -> String.starts_with?(tag, "#") end)
|
||||||
|
|> Enum.map(fn tag -> String.slice(tag, 1..-1) end)
|
||||||
|
|> Enum.map(fn tag -> %{name: tag, url: tags_path <> tag} end)
|
||||||
|
|
||||||
|
res = %{
|
||||||
|
"accounts" => AccountView.render("accounts.json", users: accounts, for: user, as: :user),
|
||||||
|
"statuses" =>
|
||||||
|
StatusView.render("index.json", activities: statuses, for: user, as: :activity),
|
||||||
|
"hashtags" => tags
|
||||||
|
}
|
||||||
|
|
||||||
|
json(conn, res)
|
||||||
|
end
|
||||||
|
|
||||||
def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do
|
def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do
|
||||||
accounts = User.search(query, params["resolve"] == "true")
|
accounts = User.search(query, params["resolve"] == "true")
|
||||||
|
|
||||||
|
@ -812,7 +864,9 @@ def index(%{assigns: %{user: user}} = conn, _params) do
|
||||||
boost_modal: false,
|
boost_modal: false,
|
||||||
delete_modal: true,
|
delete_modal: true,
|
||||||
auto_play_gif: false,
|
auto_play_gif: false,
|
||||||
reduce_motion: false
|
display_sensitive_media: false,
|
||||||
|
reduce_motion: false,
|
||||||
|
max_toot_chars: Keyword.get(@instance, :limit)
|
||||||
},
|
},
|
||||||
compose: %{
|
compose: %{
|
||||||
me: "#{user.id}",
|
me: "#{user.id}",
|
||||||
|
|
|
@ -30,6 +30,8 @@ def render("account.json", %{user: user}) do
|
||||||
avatar_static: image,
|
avatar_static: image,
|
||||||
header: header,
|
header: header,
|
||||||
header_static: header,
|
header_static: header,
|
||||||
|
emojis: [],
|
||||||
|
fields: [],
|
||||||
source: %{
|
source: %{
|
||||||
note: "",
|
note: "",
|
||||||
privacy: "public",
|
privacy: "public",
|
||||||
|
|
|
@ -170,9 +170,16 @@ def user_fetcher(username) do
|
||||||
get("/accounts/:id/following", MastodonAPIController, :following)
|
get("/accounts/:id/following", MastodonAPIController, :following)
|
||||||
get("/accounts/:id", MastodonAPIController, :user)
|
get("/accounts/:id", MastodonAPIController, :user)
|
||||||
|
|
||||||
|
get("/trends", MastodonAPIController, :empty_array)
|
||||||
|
|
||||||
get("/search", MastodonAPIController, :search)
|
get("/search", MastodonAPIController, :search)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scope "/api/v2", Pleroma.Web.MastodonAPI do
|
||||||
|
pipe_through(:api)
|
||||||
|
get("/search", MastodonAPIController, :search2)
|
||||||
|
end
|
||||||
|
|
||||||
scope "/api", Pleroma.Web do
|
scope "/api", Pleroma.Web do
|
||||||
pipe_through(:config)
|
pipe_through(:config)
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@ test "Represent a user account" do
|
||||||
avatar_static: "http://localhost:4001/images/avi.png",
|
avatar_static: "http://localhost:4001/images/avi.png",
|
||||||
header: "http://localhost:4001/images/banner.png",
|
header: "http://localhost:4001/images/banner.png",
|
||||||
header_static: "http://localhost:4001/images/banner.png",
|
header_static: "http://localhost:4001/images/banner.png",
|
||||||
|
emojis: [],
|
||||||
|
fields: [],
|
||||||
source: %{
|
source: %{
|
||||||
note: "",
|
note: "",
|
||||||
privacy: "public",
|
privacy: "public",
|
||||||
|
|
Loading…
Reference in a new issue