Skip to content
GitLab
Menu
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
ce9284b3
Commit
ce9284b3
authored
Apr 02, 2019
by
lain
Browse files
Merge branch 'remove-user-activities' into 'develop'
[
#757
] Add mix task to delete user's activities See merge request
!1008
parents
b95cf3d4
a14742f4
Pipeline
#9874
passed with stages
in 4 minutes and 46 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/mix/tasks/pleroma/user.ex
View file @
ce9284b3
...
...
@@ -32,6 +32,10 @@ defmodule Mix.Tasks.Pleroma.User do
mix pleroma.user rm NICKNAME
## Delete the user's activities.
mix pleroma.user delete_activities NICKNAME
## Deactivate or activate the user's account.
mix pleroma.user toggle_activated NICKNAME
...
...
@@ -303,6 +307,18 @@ def run(["invite"]) do
end
end
def
run
([
"delete_activities"
,
nickname
])
do
Common
.
start_pleroma
()
with
%
User
{
local:
true
}
=
user
<-
User
.
get_by_nickname
(
nickname
)
do
User
.
delete_user_activities
(
user
)
Mix
.
shell
()
.
info
(
"User
#{
nickname
}
statuses deleted."
)
else
_
->
Mix
.
shell
()
.
error
(
"No local user
#{
nickname
}
"
)
end
end
defp
set_moderator
(
user
,
value
)
do
info_cng
=
User
.
Info
.
admin_api_update
(
user
.
info
,
%{
is_moderator:
value
})
...
...
lib/pleroma/user.ex
View file @
ce9284b3
...
...
@@ -1088,28 +1088,27 @@ def delete(%User{} = user) do
# Remove all relationships
{
:ok
,
followers
}
=
User
.
get_followers
(
user
)
followers
|>
Enum
.
each
(
fn
follower
->
User
.
unfollow
(
follower
,
user
)
end
)
Enum
.
each
(
followers
,
fn
follower
->
User
.
unfollow
(
follower
,
user
)
end
)
{
:ok
,
friends
}
=
User
.
get_friends
(
user
)
friends
|>
Enum
.
each
(
fn
followed
->
User
.
unfollow
(
user
,
followed
)
end
)
Enum
.
each
(
friends
,
fn
followed
->
User
.
unfollow
(
user
,
followed
)
end
)
query
=
from
(
a
in
Activity
,
where:
a
.
actor
==
^
user
.
ap_id
)
|>
Activity
.
with_preloaded_object
()
delete_user_activities
(
user
)
end
Repo
.
all
(
query
)
|>
Enum
.
each
(
fn
activity
->
case
activity
.
data
[
"type"
]
do
"Create"
->
ActivityPub
.
delete
(
Object
.
normalize
(
activity
))
def
delete_user_activities
(%
User
{
ap_id:
ap_id
}
=
user
)
do
Activity
|>
where
(
actor:
^
ap_id
)
|>
Activity
.
with_preloaded_object
()
|>
Repo
.
all
()
|>
Enum
.
each
(
fn
%{
data:
%{
"type"
=>
"Create"
}}
=
activity
->
activity
|>
Object
.
normalize
()
|>
ActivityPub
.
delete
()
# TODO: Do something with likes, follows, repeats.
_
->
"Doing nothing"
end
# TODO: Do something with likes, follows, repeats.
_
->
"Doing nothing"
end
)
{
:ok
,
user
}
...
...
test/tasks/user_test.exs
View file @
ce9284b3
...
...
@@ -248,4 +248,14 @@ test "invite token is generated" do
assert
message
=~
"Generated"
end
end
describe
"running delete_activities"
do
test
"activities are deleted"
do
%{
nickname:
nickname
}
=
insert
(
:user
)
assert
:ok
==
Mix
.
Tasks
.
Pleroma
.
User
.
run
([
"delete_activities"
,
nickname
])
assert_received
{
:mix_shell
,
:info
,
[
message
]}
assert
message
==
"User
#{
nickname
}
statuses deleted."
end
end
end
test/user_test.exs
View file @
ce9284b3
...
...
@@ -799,6 +799,16 @@ test ".deactivate can de-activate then re-activate a user" do
assert
false
==
user
.
info
.
deactivated
end
test
".delete_user_activities deletes all create activities"
do
user
=
insert
(
:user
)
{
:ok
,
activity
}
=
CommonAPI
.
post
(
user
,
%{
"status"
=>
"2hu"
})
{
:ok
,
_
}
=
User
.
delete_user_activities
(
user
)
# TODO: Remove favorites, repeats, delete activities.
refute
Activity
.
get_by_id
(
activity
.
id
)
end
test
".delete deactivates a user, all follow relationships and all create activities"
do
user
=
insert
(
:user
)
followed
=
insert
(
:user
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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