Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
bad499b3
Commit
bad499b3
authored
Dec 08, 2017
by
lain
Browse files
Basic user deletion.
parent
6df6ad0b
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/user.ex
View file @
bad499b3
...
...
@@ -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 @@ def password_update_changeset(struct, params) do
end
def
reset_password
(
user
,
data
)
do
Repo
.
update
(
password_update_changeset
(
user
,
data
))
updat
e_and_set_cach
e
(
password_update_changeset
(
user
,
data
))
end
def
register_changeset
(
struct
,
params
\\
%{})
do
...
...
@@ -157,7 +157,7 @@ def follow(%User{} = follower, %User{info: info} = followed) do
follower
=
follower
|>
follow_changeset
(%{
following:
following
})
|>
Repo
.
update
|>
update
_and_set_cache
{
:ok
,
_
}
=
update_follower_count
(
followed
)
...
...
@@ -173,7 +173,7 @@ def unfollow(%User{} = follower, %User{} = followed) do
{
:ok
,
follower
}
=
follower
|>
follow_changeset
(%{
following:
following
})
|>
Repo
.
update
|>
update
_and_set_cache
{
:ok
,
followed
}
=
update_follower_count
(
followed
)
...
...
@@ -191,6 +191,17 @@ def get_by_ap_id(ap_id) 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 @@ def increase_note_count(%User{} = user) do
cs
=
info_changeset
(
user
,
%{
info:
new_info
})
Repo
.
update
(
cs
)
updat
e_and_set_cach
e
(
cs
)
end
def
update_note_count
(%
User
{}
=
user
)
do
...
...
@@ -259,7 +270,7 @@ def update_note_count(%User{} = user) do
cs
=
info_changeset
(
user
,
%{
info:
new_info
})
Repo
.
update
(
cs
)
updat
e_and_set_cach
e
(
cs
)
end
def
update_follower_count
(%
User
{}
=
user
)
do
...
...
@@ -274,7 +285,7 @@ def update_follower_count(%User{} = user) do
cs
=
info_changeset
(
user
,
%{
info:
new_info
})
Repo
.
update
(
cs
)
updat
e_and_set_cach
e
(
cs
)
end
def
get_notified_from_activity
(%
Activity
{
data:
%{
"to"
=>
to
}})
do
...
...
@@ -312,7 +323,7 @@ def block(user, %{ap_id: ap_id}) do
new_info
=
Map
.
put
(
user
.
info
,
"blocks"
,
new_blocks
)
cs
=
User
.
info_changeset
(
user
,
%{
info:
new_info
})
Repo
.
update
(
cs
)
updat
e_and_set_cach
e
(
cs
)
end
def
unblock
(
user
,
%{
ap_id:
ap_id
})
do
...
...
@@ -321,7 +332,7 @@ def unblock(user, %{ap_id: ap_id}) do
new_info
=
Map
.
put
(
user
.
info
,
"blocks"
,
new_blocks
)
cs
=
User
.
info_changeset
(
user
,
%{
info:
new_info
})
Repo
.
update
(
cs
)
updat
e_and_set_cach
e
(
cs
)
end
def
blocks?
(
user
,
%{
ap_id:
ap_id
})
do
...
...
@@ -337,7 +348,7 @@ def local_user_query() 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
)
updat
e_and_set_cach
e
(
cs
)
end
def
delete
(%
User
{}
=
user
)
do
...
...
@@ -352,6 +363,17 @@ def delete (%User{} = 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
test/user_test.exs
View file @
bad499b3
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 @@ test ".delete deactivates a user, all follow relationships and all create activi
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
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment