TwitterAPI: Remove unused read notification function
[akkoma] / lib / pleroma / web / twitter_api / controllers / util_controller.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.TwitterAPI.UtilController do
6 use Pleroma.Web, :controller
7
8 require Logger
9
10 alias Pleroma.Config
11 alias Pleroma.Emoji
12 alias Pleroma.Healthcheck
13 alias Pleroma.User
14 alias Pleroma.Web.CommonAPI
15 alias Pleroma.Web.Plugs.OAuthScopesPlug
16 alias Pleroma.Web.WebFinger
17
18 plug(Pleroma.Web.Plugs.FederatingPlug when action == :remote_subscribe)
19
20 plug(
21 OAuthScopesPlug,
22 %{scopes: ["write:accounts"]}
23 when action in [
24 :change_email,
25 :change_password,
26 :delete_account,
27 :update_notificaton_settings,
28 :disable_account
29 ]
30 )
31
32
33 def remote_subscribe(conn, %{"nickname" => nick, "profile" => _}) do
34 with %User{} = user <- User.get_cached_by_nickname(nick),
35 avatar = User.avatar_url(user) do
36 conn
37 |> render("subscribe.html", %{nickname: nick, avatar: avatar, error: false})
38 else
39 _e ->
40 render(conn, "subscribe.html", %{
41 nickname: nick,
42 avatar: nil,
43 error: "Could not find user"
44 })
45 end
46 end
47
48 def remote_subscribe(conn, %{"user" => %{"nickname" => nick, "profile" => profile}}) do
49 with {:ok, %{"subscribe_address" => template}} <- WebFinger.finger(profile),
50 %User{ap_id: ap_id} <- User.get_cached_by_nickname(nick) do
51 conn
52 |> Phoenix.Controller.redirect(external: String.replace(template, "{uri}", ap_id))
53 else
54 _e ->
55 render(conn, "subscribe.html", %{
56 nickname: nick,
57 avatar: nil,
58 error: "Something went wrong."
59 })
60 end
61 end
62
63 def frontend_configurations(conn, _params) do
64 render(conn, "frontend_configurations.json")
65 end
66
67 def emoji(conn, _params) do
68 emoji =
69 Enum.reduce(Emoji.get_all(), %{}, fn {code, %Emoji{file: file, tags: tags}}, acc ->
70 Map.put(acc, code, %{image_url: file, tags: tags})
71 end)
72
73 json(conn, emoji)
74 end
75
76 def update_notificaton_settings(%{assigns: %{user: user}} = conn, params) do
77 with {:ok, _} <- User.update_notification_settings(user, params) do
78 json(conn, %{status: "success"})
79 end
80 end
81
82 def change_password(%{assigns: %{user: user}} = conn, params) do
83 case CommonAPI.Utils.confirm_current_password(user, params["password"]) do
84 {:ok, user} ->
85 with {:ok, _user} <-
86 User.reset_password(user, %{
87 password: params["new_password"],
88 password_confirmation: params["new_password_confirmation"]
89 }) do
90 json(conn, %{status: "success"})
91 else
92 {:error, changeset} ->
93 {_, {error, _}} = Enum.at(changeset.errors, 0)
94 json(conn, %{error: "New password #{error}."})
95
96 _ ->
97 json(conn, %{error: "Unable to change password."})
98 end
99
100 {:error, msg} ->
101 json(conn, %{error: msg})
102 end
103 end
104
105 def change_email(%{assigns: %{user: user}} = conn, params) do
106 case CommonAPI.Utils.confirm_current_password(user, params["password"]) do
107 {:ok, user} ->
108 with {:ok, _user} <- User.change_email(user, params["email"]) do
109 json(conn, %{status: "success"})
110 else
111 {:error, changeset} ->
112 {_, {error, _}} = Enum.at(changeset.errors, 0)
113 json(conn, %{error: "Email #{error}."})
114
115 _ ->
116 json(conn, %{error: "Unable to change email."})
117 end
118
119 {:error, msg} ->
120 json(conn, %{error: msg})
121 end
122 end
123
124 def delete_account(%{assigns: %{user: user}} = conn, params) do
125 password = params["password"] || ""
126
127 case CommonAPI.Utils.confirm_current_password(user, password) do
128 {:ok, user} ->
129 User.delete(user)
130 json(conn, %{status: "success"})
131
132 {:error, msg} ->
133 json(conn, %{error: msg})
134 end
135 end
136
137 def disable_account(%{assigns: %{user: user}} = conn, params) do
138 case CommonAPI.Utils.confirm_current_password(user, params["password"]) do
139 {:ok, user} ->
140 User.set_activation_async(user, false)
141 json(conn, %{status: "success"})
142
143 {:error, msg} ->
144 json(conn, %{error: msg})
145 end
146 end
147
148 def captcha(conn, _params) do
149 json(conn, Pleroma.Captcha.new())
150 end
151
152 def healthcheck(conn, _params) do
153 with true <- Config.get([:instance, :healthcheck]),
154 %{healthy: true} = info <- Healthcheck.system_info() do
155 json(conn, info)
156 else
157 %{healthy: false} = info ->
158 service_unavailable(conn, info)
159
160 _ ->
161 service_unavailable(conn, %{})
162 end
163 end
164
165 defp service_unavailable(conn, info) do
166 conn
167 |> put_status(:service_unavailable)
168 |> json(info)
169 end
170 end