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
bda389d7
Commit
bda389d7
authored
May 06, 2017
by
lain
Browse files
Subscribe to remote users on following.
parent
9cafb67f
Changes
3
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/user.ex
View file @
bda389d7
...
...
@@ -4,7 +4,7 @@ defmodule Pleroma.User do
import
Ecto
.
{
Changeset
,
Query
}
alias
Pleroma
.
{
Repo
,
User
,
Object
,
Web
}
alias
Comeonin
.
Pbkdf2
alias
Pleroma
.
Web
.
OStatus
alias
Pleroma
.
Web
.
{
OStatus
,
Websub
}
schema
"users"
do
field
:bio
,
:string
...
...
@@ -88,6 +88,10 @@ def follow(%User{} = follower, %User{} = followed) do
{
:error
,
"Could not follow user:
#{
followed
.
nickname
}
is already on your list."
}
else
if
!followed
.
local
do
Websub
.
subscribe
(
follower
,
followed
)
end
following
=
[
ap_followers
|
follower
.
following
]
|>
Enum
.
uniq
...
...
lib/pleroma/web/websub/websub.ex
View file @
bda389d7
...
...
@@ -126,7 +126,7 @@ def subscribe(subscriber, subscribed, requester \\ &request_subscription/1) do
topic
=
subscribed
.
info
[
"topic"
]
# FIXME: Race condition, use transactions
{
:ok
,
subscription
}
=
with
subscription
when
not
is_nil
(
subscription
)
<-
Repo
.
get_by
(
WebsubClientSubscription
,
topic:
topic
)
do
subscribers
=
[
subscriber
.
ap_id
,
subscription
.
subscribers
]
|>
Enum
.
uniq
subscribers
=
[
subscriber
.
ap_id
|
subscription
.
subscribers
]
|>
Enum
.
uniq
change
=
Ecto
.
Changeset
.
change
(
subscription
,
%{
subscribers:
subscribers
})
Repo
.
update
(
change
)
else
_e
->
...
...
test/user_test.exs
View file @
bda389d7
defmodule
Pleroma
.
UserTest
do
alias
Pleroma
.
Builders
.
UserBuilder
alias
Pleroma
.
User
alias
Pleroma
.
{
User
,
Repo
}
alias
Pleroma
.
Web
.
OStatus
alias
Pleroma
.
Web
.
Websub
.
WebsubClientSubscription
use
Pleroma
.
DataCase
import
Pleroma
.
Factory
import
Ecto
.
Query
test
"ap_id returns the activity pub id for the user"
do
host
=
...
...
@@ -30,13 +33,29 @@ test "follow takes a user and another user" do
user
=
insert
(
:user
)
followed
=
insert
(
:user
)
{
:ok
,
user
}
=
User
.
follow
(
user
,
followed
)
{
:ok
,
user
}
=
User
.
follow
(
user
,
followed
)
user
=
Repo
.
get
(
User
,
user
.
id
)
assert
user
.
following
==
[
User
.
ap_followers
(
followed
)]
end
test
"following a remote user will ensure a websub subscription is present"
do
user
=
insert
(
:user
)
{
:ok
,
followed
}
=
OStatus
.
make_user
(
"shp@social.heldscal.la"
)
assert
followed
.
local
==
false
{
:ok
,
user
}
=
User
.
follow
(
user
,
followed
)
assert
user
.
following
==
[
User
.
ap_followers
(
followed
)]
query
=
from
w
in
WebsubClientSubscription
,
where:
w
.
topic
==
^
followed
.
info
[
"topic"
]
websub
=
Repo
.
one
(
query
)
assert
websub
end
test
"unfollow takes a user and another user"
do
followed
=
insert
(
:user
)
user
=
insert
(
:user
,
%{
following:
[
User
.
ap_followers
(
followed
)]})
...
...
@@ -95,7 +114,6 @@ test "gets an existing user" do
assert
user
==
fetched_user
end
# TODO: Make the test local.
test
"fetches an external user via ostatus if no user exists"
do
fetched_user
=
User
.
get_or_fetch_by_nickname
(
"shp@social.heldscal.la"
)
assert
fetched_user
.
nickname
==
"shp@social.heldscal.la"
...
...
Write
Preview
Markdown
is supported
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