X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fmix%2Ftasks%2Fpleroma%2Fuser.ex;h=217a52fddcdcfcb7fdd9e415db5cc7c539fa3493;hb=b73a1a33de76dc848037a5d0e951866bd21f92c4;hp=39825762d97b69d80cde75db7c715b40cb895a61;hpb=03b2d1016d25ab2b17a5a511249b4df59c4743fd;p=akkoma diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 39825762d..217a52fdd 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -1,6 +1,12 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Mix.Tasks.Pleroma.User do use Mix.Task + import Ecto.Changeset alias Pleroma.{Repo, User} + alias Mix.Tasks.Pleroma.Common @shortdoc "Manages Pleroma users" @moduledoc """ @@ -18,8 +24,8 @@ defmodule Mix.Tasks.Pleroma.User do - `--admin`/`--no-admin` - whether the user is an admin ## Generate an invite link. - - mix pleroma.user invite + + mix pleroma.user invite ## Delete the user's account. @@ -29,6 +35,10 @@ defmodule Mix.Tasks.Pleroma.User do mix pleroma.user toggle_activated NICKNAME + ## Unsubscribe local users from user's account and deactivate it + + mix pleroma.user unsubscribe NICKNAME + ## Create a password reset link. mix pleroma.user reset_password NICKNAME @@ -42,7 +52,6 @@ defmodule Mix.Tasks.Pleroma.User do - `--moderator`/`--no-moderator` - whether the user is a moderator - `--admin`/`--no-admin` - whether the user is an admin """ - def run(["new", nickname, email | rest]) do {options, [], []} = OptionParser.parse( @@ -87,21 +96,19 @@ defmodule Mix.Tasks.Pleroma.User do proceed? = Mix.shell().yes?("Continue?") unless not proceed? do - Mix.Task.run("app.start") - - params = - %{ - nickname: nickname, - email: email, - password: password, - password_confirmation: password, - name: name, - bio: bio - } - |> IO.inspect() - - user = User.register_changeset(%User{}, params) - Repo.insert!(user) + Common.start_pleroma() + + params = %{ + nickname: nickname, + email: email, + password: password, + password_confirmation: password, + name: name, + bio: bio + } + + changeset = User.register_changeset(%User{}, params, confirmed: true) + {:ok, _user} = User.register(changeset) Mix.shell().info("User #{nickname} created") @@ -122,7 +129,7 @@ defmodule Mix.Tasks.Pleroma.User do end def run(["rm", nickname]) do - Mix.Task.run("app.start") + Common.start_pleroma() with %User{local: true} = user <- User.get_by_nickname(nickname) do User.delete(user) @@ -134,11 +141,14 @@ defmodule Mix.Tasks.Pleroma.User do end def run(["toggle_activated", nickname]) do - Mix.Task.run("app.start") + Common.start_pleroma() with %User{} = user <- User.get_by_nickname(nickname) do - User.deactivate(user, !user.info["deactivated"]) - Mix.shell().info("Activation status of #{nickname}: #{user.info["deactivated"]}") + {:ok, user} = User.deactivate(user, !user.info.deactivated) + + Mix.shell().info( + "Activation status of #{nickname}: #{if(user.info.deactivated, do: "de", else: "")}activated" + ) else _ -> Mix.shell().error("No user #{nickname}") @@ -146,7 +156,7 @@ defmodule Mix.Tasks.Pleroma.User do end def run(["reset_password", nickname]) do - Mix.Task.run("app.start") + Common.start_pleroma() with %User{local: true} = user <- User.get_by_nickname(nickname), {:ok, token} <- Pleroma.PasswordResetToken.create_token(user) do @@ -168,7 +178,7 @@ defmodule Mix.Tasks.Pleroma.User do end def run(["unsubscribe", nickname]) do - Mix.Task.run("app.start") + Common.start_pleroma() with %User{} = user <- User.get_by_nickname(nickname) do Mix.shell().info("Deactivating #{user.nickname}") @@ -197,6 +207,8 @@ defmodule Mix.Tasks.Pleroma.User do end def run(["set", nickname | rest]) do + Common.start_pleroma() + {options, [], []} = OptionParser.parse( rest, @@ -207,52 +219,24 @@ defmodule Mix.Tasks.Pleroma.User do ] ) - case Keyword.get(options, :moderator) do - nil -> nil - value -> set_moderator(nickname, value) - end - - case Keyword.get(options, :locked) do - nil -> nil - value -> set_locked(nickname, value) - end - - case Keyword.get(options, :admin) do - nil -> nil - value -> set_admin(nickname, value) - end - end - - defp set_moderator(nickname, value) do - Application.ensure_all_started(:pleroma) - - with %User{local: true} = user <- User.get_by_nickname(nickname) do - info = - user.info - |> Map.put("is_moderator", value) - - cng = User.info_changeset(user, %{info: info}) - {:ok, user} = User.update_and_set_cache(cng) - - Mix.shell().info("Moderator status of #{nickname}: #{user.info["is_moderator"]}") - else - _ -> - Mix.shell().error("No local user #{nickname}") - end - end - - defp set_admin(nickname, value) do - Application.ensure_all_started(:pleroma) - with %User{local: true} = user <- User.get_by_nickname(nickname) do - info = - user.info - |> Map.put("is_admin", value) - - cng = User.info_changeset(user, %{info: info}) - {:ok, user} = User.update_and_set_cache(cng) - - Mix.shell().info("Admin status of #{nickname}: #{user.info["is_admin"]}") + user = + case Keyword.get(options, :moderator) do + nil -> user + value -> set_moderator(user, value) + end + + user = + case Keyword.get(options, :locked) do + nil -> user + value -> set_locked(user, value) + end + + _user = + case Keyword.get(options, :admin) do + nil -> user + value -> set_admin(user, value) + end else _ -> Mix.shell().error("No local user #{nickname}") @@ -260,7 +244,7 @@ defmodule Mix.Tasks.Pleroma.User do end def run(["invite"]) do - Mix.Task.run("app.start") + Common.start_pleroma() with {:ok, token} <- Pleroma.UserInviteToken.create_token() do Mix.shell().info("Generated user invite token") @@ -279,21 +263,42 @@ defmodule Mix.Tasks.Pleroma.User do end end - defp set_locked(nickname, value) do - Mix.Ecto.ensure_started(Repo, []) + defp set_moderator(user, value) do + info_cng = User.Info.admin_api_update(user.info, %{is_moderator: value}) - with %User{local: true} = user <- User.get_by_nickname(nickname) do - info = - user.info - |> Map.put("locked", value) + user_cng = + Ecto.Changeset.change(user) + |> put_embed(:info, info_cng) - cng = User.info_changeset(user, %{info: info}) - user = Repo.update!(cng) + {:ok, user} = User.update_and_set_cache(user_cng) - IO.puts("Locked status of #{nickname}: #{user.info["locked"]}") - else - _ -> - IO.puts("No local user #{nickname}") - end + Mix.shell().info("Moderator status of #{user.nickname}: #{user.info.is_moderator}") + user + end + + defp set_admin(user, value) do + info_cng = User.Info.admin_api_update(user.info, %{is_admin: value}) + + user_cng = + Ecto.Changeset.change(user) + |> put_embed(:info, info_cng) + + {:ok, user} = User.update_and_set_cache(user_cng) + + Mix.shell().info("Admin status of #{user.nickname}: #{user.info.is_admin}") + user + end + + defp set_locked(user, value) do + info_cng = User.Info.user_upgrade(user.info, %{locked: value}) + + user_cng = + Ecto.Changeset.change(user) + |> put_embed(:info, info_cng) + + {:ok, user} = User.update_and_set_cache(user_cng) + + Mix.shell().info("Locked status of #{user.nickname}: #{user.info.locked}") + user end end