projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'feature/mastofe-redurect-to-referer-after-login' into 'develop'
[akkoma]
/
lib
/
pleroma
/
web
/
mastodon_api
/
mastodon_api_controller.ex
diff --git
a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
index 68b7d8b49dd62ffc67857ad25218c98b597d1c95..bcc79b08a03152bf60670dbd5a0834bc7f62f1c4 100644
(file)
--- a/
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
+++ b/
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
@@
-18,6
+18,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
alias Pleroma.Web.ActivityPub.Visibility
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.ActivityPub.Visibility
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.MastodonAPI.AccountView
+ alias Pleroma.Web.MastodonAPI.AppView
alias Pleroma.Web.MastodonAPI.FilterView
alias Pleroma.Web.MastodonAPI.ListView
alias Pleroma.Web.MastodonAPI.MastodonAPI
alias Pleroma.Web.MastodonAPI.FilterView
alias Pleroma.Web.MastodonAPI.ListView
alias Pleroma.Web.MastodonAPI.MastodonAPI
@@
-51,16
+52,9
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
with cs <- App.register_changeset(%App{}, app_attrs),
false <- cs.changes[:client_name] == @local_mastodon_name,
{:ok, app} <- Repo.insert(cs) do
with cs <- App.register_changeset(%App{}, app_attrs),
false <- cs.changes[:client_name] == @local_mastodon_name,
{:ok, app} <- Repo.insert(cs) do
- res = %{
- id: app.id |> to_string,
- name: app.client_name,
- client_id: app.client_id,
- client_secret: app.client_secret,
- redirect_uri: app.redirect_uris,
- website: app.website
- }
-
- json(conn, res)
+ conn
+ |> put_view(AppView)
+ |> render("show.json", %{app: app})
end
end
end
end
@@
-132,6
+126,14
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
json(conn, account)
end
json(conn, account)
end
+ def verify_app_credentials(%{assigns: %{user: _user, token: token}} = conn, _) do
+ with %Token{app: %App{} = app} <- Repo.preload(token, :app) do
+ conn
+ |> put_view(AppView)
+ |> render("short.json", %{app: app})
+ end
+ end
+
def user(%{assigns: %{user: for_user}} = conn, %{"id" => nickname_or_id}) do
with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id),
true <- User.auth_active?(user) || user.id == for_user.id || User.superuser?(for_user) do
def user(%{assigns: %{user: for_user}} = conn, %{"id" => nickname_or_id}) do
with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id),
true <- User.auth_active?(user) || user.id == for_user.id || User.superuser?(for_user) do
@@
-161,6
+163,9
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
},
stats: Stats.get_stats(),
thumbnail: Web.base_url() <> "/instance/thumbnail.jpeg",
},
stats: Stats.get_stats(),
thumbnail: Web.base_url() <> "/instance/thumbnail.jpeg",
+ languages: ["en"],
+ registrations: Pleroma.Config.get([:instance, :registrations_open]),
+ # Extra (not present in Mastodon):
max_toot_chars: Keyword.get(instance, :limit)
}
max_toot_chars: Keyword.get(instance, :limit)
}
@@
-280,7
+285,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def user_statuses(%{assigns: %{user: reading_user}} = conn, params) do
end
def user_statuses(%{assigns: %{user: reading_user}} = conn, params) do
- with %User{} = user <-
Repo.get(User,
params["id"]) do
+ with %User{} = user <-
User.get_by_id(
params["id"]) do
activities = ActivityPub.fetch_user_activities(user, reading_user, params)
conn
activities = ActivityPub.fetch_user_activities(user, reading_user, params)
conn
@@
-314,7
+319,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def get_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
end
def get_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
- with %Activity{} = activity <-
Repo.get(Activity,
id),
+ with %Activity{} = activity <-
Activity.get_by_id(
id),
true <- Visibility.visible_for_user?(activity, user) do
conn
|> put_view(StatusView)
true <- Visibility.visible_for_user?(activity, user) do
conn
|> put_view(StatusView)
@@
-323,7
+328,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def get_context(%{assigns: %{user: user}} = conn, %{"id" => id}) do
end
def get_context(%{assigns: %{user: user}} = conn, %{"id" => id}) do
- with %Activity{} = activity <-
Repo.get(Activity,
id),
+ with %Activity{} = activity <-
Activity.get_by_id(
id),
activities <-
ActivityPub.fetch_activities_for_context(activity.data["context"], %{
"blocking_user" => user,
activities <-
ActivityPub.fetch_activities_for_context(activity.data["context"], %{
"blocking_user" => user,
@@
-455,7
+460,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def bookmark_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
end
def bookmark_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
- with %Activity{} = activity <-
Repo.get(Activity,
id),
+ with %Activity{} = activity <-
Activity.get_by_id(
id),
%User{} = user <- User.get_by_nickname(user.nickname),
true <- Visibility.visible_for_user?(activity, user),
{:ok, user} <- User.bookmark(user, activity.data["object"]["id"]) do
%User{} = user <- User.get_by_nickname(user.nickname),
true <- Visibility.visible_for_user?(activity, user),
{:ok, user} <- User.bookmark(user, activity.data["object"]["id"]) do
@@
-466,7
+471,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def unbookmark_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
end
def unbookmark_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
- with %Activity{} = activity <-
Repo.get(Activity,
id),
+ with %Activity{} = activity <-
Activity.get_by_id(
id),
%User{} = user <- User.get_by_nickname(user.nickname),
true <- Visibility.visible_for_user?(activity, user),
{:ok, user} <- User.unbookmark(user, activity.data["object"]["id"]) do
%User{} = user <- User.get_by_nickname(user.nickname),
true <- Visibility.visible_for_user?(activity, user),
{:ok, user} <- User.unbookmark(user, activity.data["object"]["id"]) do
@@
-502,7
+507,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def notifications(%{assigns: %{user: user}} = conn, params) do
end
def notifications(%{assigns: %{user: user}} = conn, params) do
- notifications =
Notification.for_user
(user, params)
+ notifications =
MastodonAPI.get_notifications
(user, params)
conn
|> add_link_headers(:notifications, notifications)
conn
|> add_link_headers(:notifications, notifications)
@@
-588,7
+593,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def favourited_by(conn, %{"id" => id}) do
end
def favourited_by(conn, %{"id" => id}) do
- with %Activity{data: %{"object" => %{"likes" => likes}}} <-
Repo.get(Activity,
id) do
+ with %Activity{data: %{"object" => %{"likes" => likes}}} <-
Activity.get_by_id(
id) do
q = from(u in User, where: u.ap_id in ^likes)
users = Repo.all(q)
q = from(u in User, where: u.ap_id in ^likes)
users = Repo.all(q)
@@
-601,7
+606,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def reblogged_by(conn, %{"id" => id}) do
end
def reblogged_by(conn, %{"id" => id}) do
- with %Activity{data: %{"object" => %{"announcements" => announces}}} <-
Repo.get(Activity,
id) do
+ with %Activity{data: %{"object" => %{"announcements" => announces}}} <-
Activity.get_by_id(
id) do
q = from(u in User, where: u.ap_id in ^announces)
users = Repo.all(q)
q = from(u in User, where: u.ap_id in ^announces)
users = Repo.all(q)
@@
-652,7
+657,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def followers(%{assigns: %{user: for_user}} = conn, %{"id" => id} = params) do
end
def followers(%{assigns: %{user: for_user}} = conn, %{"id" => id} = params) do
- with %User{} = user <-
Repo.get(User,
id),
+ with %User{} = user <-
User.get_by_id(
id),
followers <- MastodonAPI.get_followers(user, params) do
followers =
cond do
followers <- MastodonAPI.get_followers(user, params) do
followers =
cond do
@@
-669,7
+674,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def following(%{assigns: %{user: for_user}} = conn, %{"id" => id} = params) do
end
def following(%{assigns: %{user: for_user}} = conn, %{"id" => id} = params) do
- with %User{} = user <-
Repo.get(User,
id),
+ with %User{} = user <-
User.get_by_id(
id),
followers <- MastodonAPI.get_friends(user, params) do
followers =
cond do
followers <- MastodonAPI.get_friends(user, params) do
followers =
cond do
@@
-694,7
+699,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def authorize_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) do
end
def authorize_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) do
- with %User{} = follower <-
Repo.get(User,
id),
+ with %User{} = follower <-
User.get_by_id(
id),
{:ok, follower} <- CommonAPI.accept_follow_request(follower, followed) do
conn
|> put_view(AccountView)
{:ok, follower} <- CommonAPI.accept_follow_request(follower, followed) do
conn
|> put_view(AccountView)
@@
-708,7
+713,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def reject_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) do
end
def reject_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) do
- with %User{} = follower <-
Repo.get(User,
id),
+ with %User{} = follower <-
User.get_by_id(
id),
{:ok, follower} <- CommonAPI.reject_follow_request(follower, followed) do
conn
|> put_view(AccountView)
{:ok, follower} <- CommonAPI.reject_follow_request(follower, followed) do
conn
|> put_view(AccountView)
@@
-722,7
+727,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def follow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
end
def follow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
- with %User{} = followed <-
Repo.get(User,
id),
+ with %User{} = followed <-
User.get_by_id(
id),
false <- User.following?(follower, followed),
{:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do
conn
false <- User.following?(follower, followed),
{:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do
conn
@@
-730,13
+735,14
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|> render("relationship.json", %{user: follower, target: followed})
else
true ->
|> render("relationship.json", %{user: follower, target: followed})
else
true ->
- case conn.params["reblogs"] do
- true -> CommonAPI.show_reblogs(follower, id)
- false -> CommonAPI.hide_reblogs(follower, id)
- end
-
followed = User.get_cached_by_id(id)
followed = User.get_cached_by_id(id)
+ {:ok, follower} =
+ case conn.params["reblogs"] do
+ true -> CommonAPI.show_reblogs(follower, followed)
+ false -> CommonAPI.hide_reblogs(follower, followed)
+ end
+
conn
|> put_view(AccountView)
|> render("relationship.json", %{user: follower, target: followed})
conn
|> put_view(AccountView)
|> render("relationship.json", %{user: follower, target: followed})
@@
-749,7
+755,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def follow(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do
end
def follow(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do
- with %User{} = followed <-
Repo.get_by(User, nickname:
uri),
+ with %User{} = followed <-
User.get_by_nickname(
uri),
{:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do
conn
|> put_view(AccountView)
{:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do
conn
|> put_view(AccountView)
@@
-763,7
+769,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
end
def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
- with %User{} = followed <-
Repo.get(User,
id),
+ with %User{} = followed <-
User.get_by_id(
id),
{:ok, follower} <- CommonAPI.unfollow(follower, followed) do
conn
|> put_view(AccountView)
{:ok, follower} <- CommonAPI.unfollow(follower, followed) do
conn
|> put_view(AccountView)
@@
-772,7
+778,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def mute(%{assigns: %{user: muter}} = conn, %{"id" => id}) do
end
def mute(%{assigns: %{user: muter}} = conn, %{"id" => id}) do
- with %User{} = muted <-
Repo.get(User,
id),
+ with %User{} = muted <-
User.get_by_id(
id),
{:ok, muter} <- User.mute(muter, muted) do
conn
|> put_view(AccountView)
{:ok, muter} <- User.mute(muter, muted) do
conn
|> put_view(AccountView)
@@
-786,7
+792,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def unmute(%{assigns: %{user: muter}} = conn, %{"id" => id}) do
end
def unmute(%{assigns: %{user: muter}} = conn, %{"id" => id}) do
- with %User{} = muted <-
Repo.get(User,
id),
+ with %User{} = muted <-
User.get_by_id(
id),
{:ok, muter} <- User.unmute(muter, muted) do
conn
|> put_view(AccountView)
{:ok, muter} <- User.unmute(muter, muted) do
conn
|> put_view(AccountView)
@@
-807,7
+813,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def block(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
end
def block(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
- with %User{} = blocked <-
Repo.get(User,
id),
+ with %User{} = blocked <-
User.get_by_id(
id),
{:ok, blocker} <- User.block(blocker, blocked),
{:ok, _activity} <- ActivityPub.block(blocker, blocked) do
conn
{:ok, blocker} <- User.block(blocker, blocked),
{:ok, _activity} <- ActivityPub.block(blocker, blocked) do
conn
@@
-822,7
+828,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def unblock(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
end
def unblock(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
- with %User{} = blocked <-
Repo.get(User,
id),
+ with %User{} = blocked <-
User.get_by_id(
id),
{:ok, blocker} <- User.unblock(blocker, blocked),
{:ok, _activity} <- ActivityPub.unblock(blocker, blocked) do
conn
{:ok, blocker} <- User.unblock(blocker, blocked),
{:ok, _activity} <- ActivityPub.unblock(blocker, blocked) do
conn
@@
-943,12
+949,14
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def favourites(%{assigns: %{user: user}} = conn, params) do
end
def favourites(%{assigns: %{user: user}} = conn, params) do
-
activitie
s =
+
param
s =
params
|> Map.put("type", "Create")
|> Map.put("favorited_by", user.ap_id)
|> Map.put("blocking_user", user)
params
|> Map.put("type", "Create")
|> Map.put("favorited_by", user.ap_id)
|> Map.put("blocking_user", user)
- |> ActivityPub.fetch_public_activities()
+
+ activities =
+ ActivityPub.fetch_activities([], params)
|> Enum.reverse()
conn
|> Enum.reverse()
conn
@@
-958,7
+966,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def bookmarks(%{assigns: %{user: user}} = conn, _) do
end
def bookmarks(%{assigns: %{user: user}} = conn, _) do
- user =
Repo.get(User,
user.id)
+ user =
User.get_by_id(
user.id)
activities =
user.bookmarks
activities =
user.bookmarks
@@
-1015,7
+1023,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
accounts
|> Enum.each(fn account_id ->
with %Pleroma.List{} = list <- Pleroma.List.get(id, user),
accounts
|> Enum.each(fn account_id ->
with %Pleroma.List{} = list <- Pleroma.List.get(id, user),
- %User{} = followed <-
Repo.get(User,
account_id) do
+ %User{} = followed <-
User.get_by_id(
account_id) do
Pleroma.List.follow(list, followed)
end
end)
Pleroma.List.follow(list, followed)
end
end)
@@
-1027,7
+1035,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
accounts
|> Enum.each(fn account_id ->
with %Pleroma.List{} = list <- Pleroma.List.get(id, user),
accounts
|> Enum.each(fn account_id ->
with %Pleroma.List{} = list <- Pleroma.List.get(id, user),
- %User{} = followed <-
Repo.get(Pleroma.User,
account_id) do
+ %User{} = followed <-
Pleroma.User.get_by_id(
account_id) do
Pleroma.List.unfollow(list, followed)
end
end)
Pleroma.List.unfollow(list, followed)
end
end)
@@
-1083,9
+1091,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def index(%{assigns: %{user: user}} = conn, _params) do
end
def index(%{assigns: %{user: user}} = conn, _params) do
- token =
- conn
- |> get_session(:oauth_token)
+ token = get_session(conn, :oauth_token)
if user && token do
mastodon_emoji = mastodonized_emoji()
if user && token do
mastodon_emoji = mastodonized_emoji()
@@
-1113,7
+1119,8
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
auto_play_gif: false,
display_sensitive_media: false,
reduce_motion: false,
auto_play_gif: false,
display_sensitive_media: false,
reduce_motion: false,
- max_toot_chars: limit
+ max_toot_chars: limit,
+ mascot: "/images/pleroma-fox-tan-smol.png"
},
rights: %{
delete_others_notice: present?(user.info.is_moderator),
},
rights: %{
delete_others_notice: present?(user.info.is_moderator),
@@
-1185,6
+1192,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|> render("index.html", %{initial_state: initial_state, flavour: flavour})
else
conn
|> render("index.html", %{initial_state: initial_state, flavour: flavour})
else
conn
+ |> put_session(:return_to, conn.request_path)
|> redirect(to: "/web/login")
end
end
|> redirect(to: "/web/login")
end
end
@@
-1241,16
+1249,22
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
"glitch"
end
"glitch"
end
- def login(conn, %{"code" => code}) do
+ def login(%{assigns: %{user: %User{}}} = conn, _params) do
+ redirect(conn, to: local_mastodon_root_path(conn))
+ end
+
+ @doc "Local Mastodon FE login init action"
+ def login(conn, %{"code" => auth_token}) do
with {:ok, app} <- get_or_make_app(),
with {:ok, app} <- get_or_make_app(),
- %Authorization{} = auth <- Repo.get_by(Authorization, token:
code
, app_id: app.id),
+ %Authorization{} = auth <- Repo.get_by(Authorization, token:
auth_token
, app_id: app.id),
{:ok, token} <- Token.exchange_token(app, auth) do
conn
|> put_session(:oauth_token, token.token)
{:ok, token} <- Token.exchange_token(app, auth) do
conn
|> put_session(:oauth_token, token.token)
- |> redirect(to:
"/web/getting-started"
)
+ |> redirect(to:
local_mastodon_root_path(conn)
)
end
end
end
end
+ @doc "Local Mastodon FE callback action"
def login(conn, _) do
with {:ok, app} <- get_or_make_app() do
path =
def login(conn, _) do
with {:ok, app} <- get_or_make_app() do
path =
@@
-1263,8
+1277,18
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
scope: Enum.join(app.scopes, " ")
)
scope: Enum.join(app.scopes, " ")
)
- conn
- |> redirect(to: path)
+ redirect(conn, to: path)
+ end
+ end
+
+ defp local_mastodon_root_path(conn) do
+ case get_session(conn, :return_to) do
+ nil ->
+ mastodon_api_path(conn, :index, ["getting-started"])
+
+ return_to ->
+ delete_session(conn, :return_to)
+ return_to
end
end
end
end
@@
-1304,7
+1328,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
def relationship_noop(%{assigns: %{user: user}} = conn, %{"id" => id}) do
Logger.debug("Unimplemented, returning unmodified relationship")
def relationship_noop(%{assigns: %{user: user}} = conn, %{"id" => id}) do
Logger.debug("Unimplemented, returning unmodified relationship")
- with %User{} = target <-
Repo.get(User,
id) do
+ with %User{} = target <-
User.get_by_id(
id) do
conn
|> put_view(AccountView)
|> render("relationship.json", %{user: user, target: target})
conn
|> put_view(AccountView)
|> render("relationship.json", %{user: user, target: target})
@@
-1446,7
+1470,7
@@
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
def status_card(%{assigns: %{user: user}} = conn, %{"id" => status_id}) do
end
def status_card(%{assigns: %{user: user}} = conn, %{"id" => status_id}) do
- with %Activity{} = activity <-
Repo.get(Activity,
status_id),
+ with %Activity{} = activity <-
Activity.get_by_id(
status_id),
true <- Visibility.visible_for_user?(activity, user) do
data =
StatusView.render(
true <- Visibility.visible_for_user?(activity, user) do
data =
StatusView.render(