X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fadmin_api%2Fadmin_api_controller.ex;h=2c67d9cdaf3011d25255fb6b9dd83594a80ea452;hb=ce98d5eb9b4d9c5a09b91a9d4d13bb48ba2b8453;hp=1618a83725bd1f37122b17d5e037d7a763476700;hpb=ee2e1328addb2b3a9f67eb47c983c63e496bc040;p=akkoma diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 1618a8372..2c67d9cda 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -1,25 +1,171 @@ -defmodule Pleroma.Web.AdminAPI.Controller do +defmodule Pleroma.Web.AdminAPI.AdminAPIController do use Pleroma.Web, :controller + alias Pleroma.{User, Repo} + alias Pleroma.Web.ActivityPub.Relay require Logger action_fallback(:errors) - def user_delete(%{assigns: %{user: user}} = conn, _params) do + def user_delete(conn, %{"nickname" => nickname}) do + user = User.get_by_nickname(nickname) + + if user.local == true do + User.delete(user) + else + User.delete(user) + end + + conn + |> json(nickname) end - def user_create(%{assigns: %{user: user}} = conn, _params) do + def user_create( + conn, + %{"nickname" => nickname, "email" => email, "password" => password} + ) do + new_user = %{ + nickname: nickname, + name: nickname, + email: email, + password: password, + password_confirmation: password, + bio: "." + } + + User.register_changeset(%User{}, new_user) + |> Repo.insert!() + + conn + |> json(new_user.nickname) end - def relay_follow(%{assigns: %{user: user}} = conn, _params) do + def right_add(conn, %{"permission_group" => permission_group, "nickname" => nickname}) + when permission_group in ["moderator", "admin"] do + user = User.get_by_nickname(nickname) + + info = + %{} + |> Map.put("is_" <> permission_group, true) + + info_cng = User.Info.admin_api_update(user.info, info) + + cng = + Ecto.Changeset.change(user) + |> Ecto.Changeset.put_embed(:info, info_cng) + + {:ok, user} = User.update_and_set_cache(cng) + + conn + |> json(info) end - def relay_unfollow(%{assigns: %{user: user}} = conn, _params) do + def right_get(conn, %{"nickname" => nickname}) do + user = User.get_by_nickname(nickname) + + conn + |> json(%{ + is_moderator: user.info.is_moderator, + is_admin: user.info.is_admin + }) + end + + def right_add(conn, _) do + conn + |> put_status(404) + |> json(%{error: "No such permission_group"}) + end + + def right_delete( + %{assigns: %{user: %User{:nickname => admin_nickname}}} = conn, + %{ + "permission_group" => permission_group, + "nickname" => nickname + } + ) + when permission_group in ["moderator", "admin"] do + if admin_nickname == nickname do + conn + |> put_status(403) + |> json(%{error: "You can't revoke your own admin status."}) + else + user = User.get_by_nickname(nickname) + + info = + %{} + |> Map.put("is_" <> permission_group, false) + + info_cng = User.Info.admin_api_update(user.info, info) + + cng = + Ecto.Changeset.change(user) + |> Ecto.Changeset.put_embed(:info, info_cng) + + {:ok, user} = User.update_and_set_cache(cng) + + conn + |> json(info) + end + end + + def right_delete(conn, _) do + conn + |> put_status(404) + |> json(%{error: "No such permission_group"}) + end + + def relay_follow(conn, %{"relay_url" => target}) do + {status, message} = Relay.follow(target) + + if status == :ok do + conn + |> json(target) + else + conn + |> put_status(500) + |> json(target) + end + end + + def relay_unfollow(conn, %{"relay_url" => target}) do + {status, message} = Relay.unfollow(target) + + if status == :ok do + conn + |> json(target) + else + conn + |> put_status(500) + |> json(target) + end + end + + @shortdoc "Get a account registeration invite token (base64 string)" + def get_invite_token(conn, _params) do + {:ok, token} = Pleroma.UserInviteToken.create_token() + + conn + |> json(token.token) + end + + @shortdoc "Get a password reset token (base64 string) for given nickname" + def get_password_reset(conn, %{"nickname" => nickname}) do + (%User{local: true} = user) = User.get_by_nickname(nickname) + {:ok, token} = Pleroma.PasswordResetToken.create_token(user) + + conn + |> json(token.token) end - def user_delete(%{assigns: %{user: user}} = conn, _params) do + def errors(conn, {:param_cast, _}) do + conn + |> put_status(400) + |> json("Invalid parameters") end - def user_delete(%{assigns: %{user: user}} = conn, _params) do + def errors(conn, _) do + conn + |> put_status(500) + |> json("Something went wrong") end end