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
4cb63318
Commit
4cb63318
authored
Sep 21, 2018
by
kaniini
Browse files
Merge branch 'feature/dynamic-user-refresh' into 'develop'
user: implement dynamic refresh of profiles See merge request
!350
parents
0fe16516
8e28e8a1
Pipeline
#3806
passed with stages
in 5 minutes and 52 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/mix/tasks/fix_ap_users.ex
deleted
100644 → 0
View file @
0fe16516
defmodule
Mix
.
Tasks
.
FixApUsers
do
use
Mix
.
Task
import
Ecto
.
Query
alias
Pleroma
.
{
Repo
,
User
}
@shortdoc
"Grab all ap users again"
def
run
([])
do
Mix
.
Task
.
run
(
"app.start"
)
q
=
from
(
u
in
User
,
where:
fragment
(
"? @> ?"
,
u
.
info
,
^
%{
"ap_enabled"
=>
true
}),
where:
u
.
local
==
false
)
users
=
Repo
.
all
(
q
)
Enum
.
each
(
users
,
fn
user
->
try
do
IO
.
puts
(
"Fetching
#{
user
.
nickname
}
"
)
Pleroma
.
Web
.
ActivityPub
.
Transmogrifier
.
upgrade_user_from_ap_id
(
user
.
ap_id
,
false
)
rescue
e
->
IO
.
inspect
(
e
)
end
end
)
end
end
lib/pleroma/user.ex
View file @
4cb63318
...
...
@@ -22,6 +22,7 @@ defmodule Pleroma.User do
field
(
:info
,
:map
,
default:
%{})
field
(
:follower_address
,
:string
)
field
(
:search_distance
,
:float
,
virtual:
true
)
field
(
:last_refreshed_at
,
:naive_datetime
)
has_many
(
:notifications
,
Notification
)
timestamps
()
...
...
@@ -112,8 +113,12 @@ def update_changeset(struct, params \\ %{}) do
end
def
upgrade_changeset
(
struct
,
params
\\
%{})
do
params
=
params
|>
Map
.
put
(
:last_refreshed_at
,
NaiveDateTime
.
utc_now
())
struct
|>
cast
(
params
,
[
:bio
,
:name
,
:info
,
:follower_address
,
:avatar
])
|>
cast
(
params
,
[
:bio
,
:name
,
:info
,
:follower_address
,
:avatar
,
:last_refreshed_at
])
|>
unique_constraint
(
:nickname
)
|>
validate_format
(
:nickname
,
~r/^[a-zA-Z\d]+$/
)
|>
validate_length
(
:bio
,
max:
5000
)
...
...
@@ -169,6 +174,16 @@ def register_changeset(struct, params \\ %{}) do
end
end
def
needs_update?
(%
User
{
local:
true
}),
do
:
false
def
needs_update?
(%
User
{
local:
false
,
last_refreshed_at:
nil
}),
do
:
true
def
needs_update?
(%
User
{
local:
false
}
=
user
)
do
NaiveDateTime
.
diff
(
NaiveDateTime
.
utc_now
(),
user
.
last_refreshed_at
)
>=
86400
end
def
needs_update?
(
_
),
do
:
true
def
maybe_direct_follow
(%
User
{}
=
follower
,
%
User
{
info:
info
}
=
followed
)
do
user_config
=
Application
.
get_env
(
:pleroma
,
:user
)
deny_follow_blocked
=
Keyword
.
get
(
user_config
,
:deny_follow_blocked
)
...
...
@@ -655,7 +670,9 @@ def delete(%User{} = user) do
end
def
get_or_fetch_by_ap_id
(
ap_id
)
do
if
user
=
get_by_ap_id
(
ap_id
)
do
user
=
get_by_ap_id
(
ap_id
)
if
!is_nil
(
user
)
and
!User
.
needs_update?
(
user
)
do
user
else
ap_try
=
ActivityPub
.
make_user_from_ap_id
(
ap_id
)
...
...
priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs
0 → 100644
View file @
4cb63318
defmodule
Pleroma
.
Repo
.
Migrations
.
UsersAddLastRefreshedAt
do
use
Ecto
.
Migration
def
change
do
alter
table
(
:users
)
do
add
:last_refreshed_at
,
:naive_datetime
end
end
end
test/user_test.exs
View file @
4cb63318
...
...
@@ -166,6 +166,25 @@ test "returns nil for nonexistant local user" do
fetched_user
=
User
.
get_or_fetch_by_nickname
(
"nonexistant"
)
assert
fetched_user
==
nil
end
test
"updates an existing user, if stale"
do
a_week_ago
=
NaiveDateTime
.
add
(
NaiveDateTime
.
utc_now
(),
-
604_800
)
orig_user
=
insert
(
:user
,
local:
false
,
nickname:
"admin@mastodon.example.org"
,
ap_id:
"http://mastodon.example.org/users/admin"
,
last_refreshed_at:
a_week_ago
)
assert
orig_user
.
last_refreshed_at
==
a_week_ago
user
=
User
.
get_or_fetch_by_ap_id
(
"http://mastodon.example.org/users/admin"
)
refute
user
.
last_refreshed_at
==
orig_user
.
last_refreshed_at
end
end
test
"returns an ap_id for a user"
do
...
...
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