mix pleroma.user toggle_activated NICKNAME
- ## Disable or enable the user's account.
-
- mix pleroma.user toggle_disabled NICKNAME
-
## Unsubscribe local users from user's account and deactivate it
mix pleroma.user unsubscribe NICKNAME
end
end
- def run(["toggle_disabled", nickname]) do
- Common.start_pleroma()
-
- case User.get_by_nickname(nickname) do
- %User{} = user ->
- {:ok, user} = User.disable(user, !user.info.disabled)
- status = if(user.info.disabled, do: "ON", else: "OFF")
- Mix.shell().info("Disabled status of #{nickname}: #{status}")
-
- _ ->
- Mix.shell().error("No user #{nickname}")
- end
- end
-
def run(["reset_password", nickname]) do
Common.start_pleroma()
def get_by_id(id) do
Activity
|> where([a], a.id == ^id)
- |> restrict_disabled_users()
+ |> restrict_deactivated_users()
|> Repo.one()
end
def get_create_by_object_ap_id(ap_id) when is_binary(ap_id) do
create_by_object_ap_id(ap_id)
- |> restrict_disabled_users()
+ |> restrict_deactivated_users()
|> Repo.one()
end
end
end
- def restrict_disabled_users(query) do
+ def restrict_deactivated_users(query) do
from(activity in query,
where:
fragment(
- "? not in (SELECT ap_id FROM users WHERE info->'disabled' @> 'true')",
+ "? not in (SELECT ap_id FROM users WHERE info->'deactivated' @> 'true')",
activity.actor
)
)
|> where(
[n, a],
fragment(
- "? not in (SELECT ap_id FROM users WHERE info->'disabled' @> 'true')",
+ "? not in (SELECT ap_id FROM users WHERE info->'deactivated' @> 'true')",
a.actor
)
)
}
end
- defp restrict_disabled(query) do
+ defp restrict_deactivated(query) do
from(u in query,
- where: not fragment("? \\? 'disabled' AND ?->'disabled' @> 'true'", u.info, u.info)
+ where: not fragment("? \\? 'deactivated' AND ?->'deactivated' @> 'true'", u.info, u.info)
)
end
where: u.follower_address in ^following,
where: u.id != ^id
)
- |> restrict_disabled()
+ |> restrict_deactivated()
|> Repo.aggregate(:count, :id)
end
where: fragment("? <@ ?", ^[follower_address], u.following),
where: u.id != ^id
)
- |> restrict_disabled()
+ |> restrict_deactivated()
end
def get_followers_query(user, page) do
where: u.follower_address in ^following,
where: u.id != ^id
)
- |> restrict_disabled()
+ |> restrict_deactivated()
end
def get_friends_query(user, page) do
|> where([u], ^user.follower_address in u.following)
|> where([u], u.id != ^user.id)
|> select([u], %{count: count(u.id)})
- |> restrict_disabled()
+ |> restrict_deactivated()
User
|> where(id: ^user.id)
^processed_query
)
)
- |> restrict_disabled()
+ |> restrict_deactivated()
end
defp trigram_search_subquery(term) do
},
where: fragment("trim(? || ' ' || coalesce(?, '')) % ?", u.nickname, u.name, ^term)
)
- |> restrict_disabled()
+ |> restrict_deactivated()
end
def blocks_import(%User{} = blocker, blocked_identifiers) when is_list(blocked_identifiers) do
)
end
+
+ def deactivate_async(user, status \\ true) do
+ PleromaJobQueue.enqueue(:user, __MODULE__, [:deactivate_async, user, status])
+ end
+
+ def perform(:deactivate_async, user, status), do: deactivate(user, status)
+
def deactivate(%User{} = user, status \\ true) do
info_cng = User.Info.set_activation_status(user.info, status)
- user
+ with {:ok, user} <- user
|> change()
|> put_embed(:info, info_cng)
- |> update_and_set_cache()
+ |> update_and_set_cache(),
+ {:ok, friends} <- User.get_friends(user) do
+ Enum.each(friends, &update_follower_count(&1))
+ {:ok, user}
+ end
end
def update_notification_settings(%User{} = user, settings \\ %{}) do
{:ok, user}
end
- def disable_async(user, status \\ true) do
- PleromaJobQueue.enqueue(:user, __MODULE__, [:disable_async, user, status])
- end
-
- def disable(%User{} = user, status \\ true) do
- with {:ok, user} <- User.deactivate(user, status),
- info_cng <- User.Info.set_disabled_status(user.info, status),
- {:ok, user} <-
- user
- |> change()
- |> put_embed(:info, info_cng)
- |> update_and_set_cache(),
- {:ok, friends} <- User.get_friends(user) do
- Enum.each(friends, &update_follower_count(&1))
- {:ok, user}
- end
- end
-
- def perform(:disable_async, user, status), do: disable(user, status)
-
def html_filter_policy(%User{info: %{no_rich_text: true}}) do
Pleroma.HTML.Scrubber.TwitterText
end
field(:hide_follows, :boolean, default: false)
field(:pinned_activities, {:array, :string}, default: [])
field(:flavour, :string, default: nil)
- field(:disabled, :boolean, default: false)
field(:notification_settings, :map,
default: %{"remote" => true, "local" => true, "followers" => true, "follows" => true}
|> validate_required([:notification_settings])
end
- def set_disabled_status(info, disabled) do
- params = %{disabled: disabled}
-
- info
- |> cast(params, [:disabled])
- |> validate_required([:disabled])
- end
-
def add_to_note_count(info, number) do
set_note_count(info, info.note_count + number)
end
|> restrict_reblogs(opts)
|> restrict_pinned(opts)
|> restrict_muted_reblogs(opts)
- |> Activity.restrict_disabled_users()
+ |> Activity.restrict_deactivated_users()
end
def fetch_activities(recipients, opts \\ %{}) do
end
end
- def user_toggle_disabled(conn, %{"nickname" => nickname}) do
- user = User.get_by_nickname(nickname)
-
- {:ok, updated_user} = User.disable(user, !user.info.disabled)
-
- conn
- |> put_view(AccountView)
- |> render("show.json", %{user: updated_user})
- end
-
def user_toggle_activation(conn, %{"nickname" => nickname}) do
user = User.get_by_nickname(nickname)
delete("/user", AdminAPIController, :user_delete)
patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation)
- patch("/users/:nickname/toggle_disabled", AdminAPIController, :user_toggle_disabled)
post("/user", AdminAPIController, :user_create)
put("/users/tag", AdminAPIController, :tag_users)
delete("/users/tag", AdminAPIController, :untag_users)
def disable_account(%{assigns: %{user: user}} = conn, params) do
case CommonAPI.Utils.confirm_current_password(user, params["password"]) do
{:ok, user} ->
- User.disable_async(user)
+ User.deactivate_async(user)
json(conn, %{status: "success"})
{:error, msg} ->
nil ->
{:error, "No user with such user_id"}
- %User{info: %{disabled: true}} ->
+ %User{info: %{deactivated: true}} ->
{:error, "User has been disabled"}
user ->
+++ /dev/null
-defmodule Pleroma.Repo.Migrations.UsersAddDisabledIndex do
- use Ecto.Migration
-
- def change do
- create(index(:users, ["(info->'disabled')"], name: :users_disabled_index, using: :gin))
- end
-end
--- /dev/null
+defmodule Pleroma.Repo.Migrations.AddIndexOnUserInfoDeactivated do
+ use Ecto.Migration
+
+ def change do
+ create(index(:users, ["(info->'deactivated')"], name: :users_deactivated_index, using: :gin))
+ end
+end