move user disable into deactivation

This commit is contained in:
Egor Kislitsyn 2019-04-11 17:22:42 +07:00
parent 0f2f7d2cec
commit db4badc6aa
12 changed files with 36 additions and 83 deletions

View file

@ -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()

View file

@ -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
)
)

View file

@ -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
)
)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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} ->

View file

@ -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 ->

View file

@ -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

View file

@ -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