Skip to content
Snippets Groups Projects
Commit bad499b3 authored by lain's avatar lain
Browse files

Basic user deletion.

parent 6df6ad0b
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,7 @@ defmodule Pleroma.User do
alias Pleroma.{Repo, User, Object, Web, Activity, Notification}
alias Comeonin.Pbkdf2
alias Pleroma.Web.{OStatus, Websub}
alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.ActivityPub.{Utils, ActivityPub}
schema "users" do
field :bio, :string
......@@ -113,7 +113,7 @@ defmodule Pleroma.User do
end
def reset_password(user, data) do
Repo.update(password_update_changeset(user, data))
update_and_set_cache(password_update_changeset(user, data))
end
def register_changeset(struct, params \\ %{}) do
......@@ -157,7 +157,7 @@ defmodule Pleroma.User do
follower = follower
|> follow_changeset(%{following: following})
|> Repo.update
|> update_and_set_cache
{:ok, _} = update_follower_count(followed)
......@@ -173,7 +173,7 @@ defmodule Pleroma.User do
{ :ok, follower } = follower
|> follow_changeset(%{following: following})
|> Repo.update
|> update_and_set_cache
{:ok, followed} = update_follower_count(followed)
......@@ -191,6 +191,17 @@ defmodule Pleroma.User do
Repo.get_by(User, ap_id: ap_id)
end
def update_and_set_cache(changeset) do
with {:ok, user} <- Repo.update(changeset) do
Cachex.set(:user_cache, "ap_id:#{user.ap_id}", user)
Cachex.set(:user_cache, "nickname:#{user.nickname}", user)
Cachex.set(:user_cache, "user_info:#{user.id}", user_info(user))
{:ok, user}
else
e -> e
end
end
def get_cached_by_ap_id(ap_id) do
key = "ap_id:#{ap_id}"
Cachex.get!(:user_cache, key, fallback: fn(_) -> get_by_ap_id(ap_id) end)
......@@ -245,7 +256,7 @@ defmodule Pleroma.User do
cs = info_changeset(user, %{info: new_info})
Repo.update(cs)
update_and_set_cache(cs)
end
def update_note_count(%User{} = user) do
......@@ -259,7 +270,7 @@ defmodule Pleroma.User do
cs = info_changeset(user, %{info: new_info})
Repo.update(cs)
update_and_set_cache(cs)
end
def update_follower_count(%User{} = user) do
......@@ -274,7 +285,7 @@ defmodule Pleroma.User do
cs = info_changeset(user, %{info: new_info})
Repo.update(cs)
update_and_set_cache(cs)
end
def get_notified_from_activity(%Activity{data: %{"to" => to}}) do
......@@ -312,7 +323,7 @@ defmodule Pleroma.User do
new_info = Map.put(user.info, "blocks", new_blocks)
cs = User.info_changeset(user, %{info: new_info})
Repo.update(cs)
update_and_set_cache(cs)
end
def unblock(user, %{ap_id: ap_id}) do
......@@ -321,7 +332,7 @@ defmodule Pleroma.User do
new_info = Map.put(user.info, "blocks", new_blocks)
cs = User.info_changeset(user, %{info: new_info})
Repo.update(cs)
update_and_set_cache(cs)
end
def blocks?(user, %{ap_id: ap_id}) do
......@@ -337,7 +348,7 @@ defmodule Pleroma.User do
def deactivate (%User{} = user) do
new_info = Map.put(user.info, "deactivated", true)
cs = User.info_changeset(user, %{info: new_info})
Repo.update(cs)
update_and_set_cache(cs)
end
def delete (%User{} = user) do
......@@ -352,6 +363,17 @@ defmodule Pleroma.User do
friends
|> Enum.each(fn (followed) -> User.unfollow(user, followed) end)
query = from a in Activity,
where: a.actor == ^user.ap_id
Repo.all(query)
|> Enum.each(fn (activity) ->
case activity.data["type"] do
"Create" -> ActivityPub.delete(Object.get_by_ap_id(activity.data["object"]["id"]))
_ -> "Doing nothing" # TODO: Do something with likes, follows, repeats.
end
end)
:ok
end
end
defmodule Pleroma.UserTest do
alias Pleroma.Builders.UserBuilder
alias Pleroma.{User, Repo}
alias Pleroma.{User, Repo, Activity}
alias Pleroma.Web.OStatus
alias Pleroma.Web.Websub.WebsubClientSubscription
alias Pleroma.Web.CommonAPI
......@@ -366,6 +366,8 @@ defmodule Pleroma.UserTest do
refute User.following?(user, followed)
refute User.following?(followed, follower)
# TODO: check for activities.
# TODO: Remove favorites, repeats, delete activities.
refute Repo.get(Activity, activity.id)
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment