fix compile warnings
[akkoma] / lib / pleroma / web / admin_api / admin_api_controller.ex
1 defmodule Pleroma.Web.AdminAPI.AdminAPIController do
2 use Pleroma.Web, :controller
3 alias Pleroma.{User, Repo}
4 alias Pleroma.Web.ActivityPub.Relay
5
6 import Pleroma.Web.ControllerHelper, only: [json_response: 3]
7
8 require Logger
9
10 action_fallback(:errors)
11
12 def user_delete(conn, %{"nickname" => nickname}) do
13 user = User.get_by_nickname(nickname)
14
15 if user.local == true do
16 User.delete(user)
17 else
18 User.delete(user)
19 end
20
21 conn
22 |> json(nickname)
23 end
24
25 def user_create(
26 conn,
27 %{"nickname" => nickname, "email" => email, "password" => password}
28 ) do
29 new_user = %{
30 nickname: nickname,
31 name: nickname,
32 email: email,
33 password: password,
34 password_confirmation: password,
35 bio: "."
36 }
37
38 User.register_changeset(%User{}, new_user)
39 |> Repo.insert!()
40
41 conn
42 |> json(new_user.nickname)
43 end
44
45 def tag_users(conn, %{"nicknames" => nicknames, "tags" => tags}) do
46 with {:ok, _} <- User.tag(nicknames, tags),
47 do: json_response(conn, :no_content, "")
48 end
49
50 def untag_users(conn, %{"nicknames" => nicknames, "tags" => tags}) do
51 with {:ok, _} <- User.untag(nicknames, tags),
52 do: json_response(conn, :no_content, "")
53 end
54
55 def right_add(conn, %{"permission_group" => permission_group, "nickname" => nickname})
56 when permission_group in ["moderator", "admin"] do
57 user = User.get_by_nickname(nickname)
58
59 info =
60 %{}
61 |> Map.put("is_" <> permission_group, true)
62
63 info_cng = User.Info.admin_api_update(user.info, info)
64
65 cng =
66 Ecto.Changeset.change(user)
67 |> Ecto.Changeset.put_embed(:info, info_cng)
68
69 {:ok, _user} = User.update_and_set_cache(cng)
70
71 json(conn, info)
72 end
73
74 def right_add(conn, _) do
75 conn
76 |> put_status(404)
77 |> json(%{error: "No such permission_group"})
78 end
79
80 def right_get(conn, %{"nickname" => nickname}) do
81 user = User.get_by_nickname(nickname)
82
83 conn
84 |> json(%{
85 is_moderator: user.info.is_moderator,
86 is_admin: user.info.is_admin
87 })
88 end
89
90 def right_delete(
91 %{assigns: %{user: %User{:nickname => admin_nickname}}} = conn,
92 %{
93 "permission_group" => permission_group,
94 "nickname" => nickname
95 }
96 )
97 when permission_group in ["moderator", "admin"] do
98 if admin_nickname == nickname do
99 conn
100 |> put_status(403)
101 |> json(%{error: "You can't revoke your own admin status."})
102 else
103 user = User.get_by_nickname(nickname)
104
105 info =
106 %{}
107 |> Map.put("is_" <> permission_group, false)
108
109 info_cng = User.Info.admin_api_update(user.info, info)
110
111 cng =
112 Ecto.Changeset.change(user)
113 |> Ecto.Changeset.put_embed(:info, info_cng)
114
115 {:ok, _user} = User.update_and_set_cache(cng)
116
117 json(conn, info)
118 end
119 end
120
121 def right_delete(conn, _) do
122 conn
123 |> put_status(404)
124 |> json(%{error: "No such permission_group"})
125 end
126
127 def relay_follow(conn, %{"relay_url" => target}) do
128 with {:ok, _message} <- Relay.follow(target) do
129 json(conn, target)
130 else
131 _ ->
132 conn
133 |> put_status(500)
134 |> json(target)
135 end
136 end
137
138 def relay_unfollow(conn, %{"relay_url" => target}) do
139 with {:ok, _message} <- Relay.unfollow(target) do
140 json(conn, target)
141 else
142 _ ->
143 conn
144 |> put_status(500)
145 |> json(target)
146 end
147 end
148
149 @doc "Get a account registeration invite token (base64 string)"
150 def get_invite_token(conn, _params) do
151 {:ok, token} = Pleroma.UserInviteToken.create_token()
152
153 conn
154 |> json(token.token)
155 end
156
157 @doc "Get a password reset token (base64 string) for given nickname"
158 def get_password_reset(conn, %{"nickname" => nickname}) do
159 (%User{local: true} = user) = User.get_by_nickname(nickname)
160 {:ok, token} = Pleroma.PasswordResetToken.create_token(user)
161
162 conn
163 |> json(token.token)
164 end
165
166 def errors(conn, {:param_cast, _}) do
167 conn
168 |> put_status(400)
169 |> json("Invalid parameters")
170 end
171
172 def errors(conn, _) do
173 conn
174 |> put_status(500)
175 |> json("Something went wrong")
176 end
177 end