forked from AkkomaGang/akkoma
move user disable into deactivation
This commit is contained in:
parent
0f2f7d2cec
commit
db4badc6aa
12 changed files with 36 additions and 83 deletions
lib
mix/tasks/pleroma
pleroma
priv/repo/migrations
|
@ -53,10 +53,6 @@ defmodule Mix.Tasks.Pleroma.User do
|
|||
|
||||
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
|
||||
|
@ -190,20 +186,6 @@ def run(["toggle_activated", nickname]) do
|
|||
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()
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ def get_by_ap_id_with_object(ap_id) do
|
|||
def get_by_id(id) do
|
||||
Activity
|
||||
|> where([a], a.id == ^id)
|
||||
|> restrict_disabled_users()
|
||||
|> restrict_deactivated_users()
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
|
@ -169,7 +169,7 @@ def get_all_create_by_object_ap_id(ap_id) do
|
|||
|
||||
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
|
||||
|
||||
|
@ -296,11 +296,11 @@ def decrease_replies_count(id) do
|
|||
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
|
||||
)
|
||||
)
|
||||
|
|
|
@ -36,7 +36,7 @@ def for_user_query(user) do
|
|||
|> 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
|
||||
)
|
||||
)
|
||||
|
|
|
@ -117,9 +117,9 @@ def user_info(%User{} = user) do
|
|||
}
|
||||
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
|
||||
|
||||
|
@ -130,7 +130,7 @@ def following_count(%User{following: following, id: id}) do
|
|||
where: u.follower_address in ^following,
|
||||
where: u.id != ^id
|
||||
)
|
||||
|> restrict_disabled()
|
||||
|> restrict_deactivated()
|
||||
|> Repo.aggregate(:count, :id)
|
||||
end
|
||||
|
||||
|
@ -584,7 +584,7 @@ def get_followers_query(%User{id: id, follower_address: follower_address}, nil)
|
|||
where: fragment("? <@ ?", ^[follower_address], u.following),
|
||||
where: u.id != ^id
|
||||
)
|
||||
|> restrict_disabled()
|
||||
|> restrict_deactivated()
|
||||
end
|
||||
|
||||
def get_followers_query(user, page) do
|
||||
|
@ -612,7 +612,7 @@ def get_friends_query(%User{id: id, following: following}, nil) do
|
|||
where: u.follower_address in ^following,
|
||||
where: u.id != ^id
|
||||
)
|
||||
|> restrict_disabled()
|
||||
|> restrict_deactivated()
|
||||
end
|
||||
|
||||
def get_friends_query(user, page) do
|
||||
|
@ -736,7 +736,7 @@ def update_follower_count(%User{} = user) 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)
|
||||
|
@ -887,7 +887,7 @@ defp fts_search_subquery(term, query \\ User) do
|
|||
^processed_query
|
||||
)
|
||||
)
|
||||
|> restrict_disabled()
|
||||
|> restrict_deactivated()
|
||||
end
|
||||
|
||||
defp trigram_search_subquery(term) do
|
||||
|
@ -906,7 +906,7 @@ 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
|
||||
|
@ -1150,13 +1150,24 @@ def moderator_user_query 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
|
||||
|
@ -1199,26 +1210,6 @@ def delete_user_activities(%User{ap_id: ap_id} = user) 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
|
||||
|
|
|
@ -40,7 +40,6 @@ defmodule Pleroma.User.Info do
|
|||
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}
|
||||
|
@ -76,14 +75,6 @@ def update_notification_settings(info, settings) do
|
|||
|> 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
|
||||
|
|
|
@ -804,7 +804,7 @@ def fetch_activities_query(recipients, opts \\ %{}) do
|
|||
|> 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
|
||||
|
|
|
@ -75,16 +75,6 @@ def user_show(conn, %{"nickname" => nickname}) 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)
|
||||
|
||||
|
|
|
@ -153,7 +153,6 @@ defmodule Pleroma.Web.Router do
|
|||
|
||||
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)
|
||||
|
|
|
@ -358,7 +358,7 @@ def delete_account(%{assigns: %{user: user}} = conn, params) do
|
|||
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} ->
|
||||
|
|
|
@ -235,7 +235,7 @@ def get_user(user \\ nil, params) do
|
|||
nil ->
|
||||
{:error, "No user with such user_id"}
|
||||
|
||||
%User{info: %{disabled: true}} ->
|
||||
%User{info: %{deactivated: true}} ->
|
||||
{:error, "User has been disabled"}
|
||||
|
||||
user ->
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
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
|
|
@ -0,0 +1,7 @@
|
|||
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
|
Loading…
Reference in a new issue