Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
liberty
host
Smilodon
Commits
2cb3dc5e
Commit
2cb3dc5e
authored
Nov 26, 2016
by
Eugen Rochko
Browse files
Update hub URL and re-subscribe if hub URL changes
parent
4986c727
Changes
8
Hide whitespace changes
Inline
Side-by-side
app/services/follow_remote_account_service.rb
View file @
2cb3dc5e
...
...
@@ -80,8 +80,7 @@ class FollowRemoteAccountService < BaseService
end
def
get_profile
(
xml
,
account
)
author
=
xml
.
at_xpath
(
'/xmlns:feed/xmlns:author'
)
||
xml
.
at_xpath
(
'/xmlns:feed'
).
at_xpath
(
'./dfrn:owner'
,
dfrn:
DFRN_NS
)
update_remote_profile_service
.
call
(
author
,
account
)
update_remote_profile_service
.
call
(
xml
.
at_xpath
(
'/xmlns:feed'
),
account
)
end
def
update_remote_profile_service
...
...
app/services/process_feed_service.rb
View file @
2cb3dc5e
...
...
@@ -16,7 +16,7 @@ class ProcessFeedService < BaseService
def
update_author
(
xml
,
account
)
return
if
xml
.
at_xpath
(
'/xmlns:feed'
).
nil?
UpdateRemoteProfileService
.
new
.
call
(
xml
.
at_xpath
(
'/xmlns:feed
/xmlns:author
'
),
account
)
UpdateRemoteProfileService
.
new
.
call
(
xml
.
at_xpath
(
'/xmlns:feed'
),
account
,
true
)
end
def
process_entries
(
xml
,
account
)
...
...
app/services/process_interaction_service.rb
View file @
2cb3dc5e
...
...
@@ -26,7 +26,7 @@ class ProcessInteractionService < BaseService
end
if
salmon
.
verify
(
envelope
,
account
.
keypair
)
update_remote_profile_service
.
call
(
xml
.
at_xpath
(
'/xmlns:entry
/xmlns:author
'
),
account
)
update_remote_profile_service
.
call
(
xml
.
at_xpath
(
'/xmlns:entry'
),
account
,
true
)
case
verb
(
xml
)
when
:follow
...
...
app/services/update_remote_profile_service.rb
View file @
2cb3dc5e
...
...
@@ -2,24 +2,22 @@
class
UpdateRemoteProfileService
<
BaseService
POCO_NS
=
'http://portablecontacts.net/spec/1.0'
DFRN_NS
=
'http://purl.org/macgirvin/dfrn/1.0'
def
call
(
author_xml
,
account
)
return
if
author_xml
.
nil?
def
call
(
xml
,
account
,
resubscribe
=
false
)
author_xml
=
xml
.
at_xpath
(
'./xmlns:author'
)
||
xml
.
at_xpath
(
'./dfrn:owner'
,
dfrn:
DFRN_NS
)
hub_link
=
xml
.
at_xpath
(
'./xmlns:link[@rel="hub"]'
)
account
.
display_name
=
if
author_xml
.
at_xpath
(
'./poco:displayName'
,
poco:
POCO_NS
).
nil?
account
.
username
else
author_xml
.
at_xpath
(
'./poco:displayName'
,
poco:
POCO_NS
).
content
end
unless
author_xml
.
at_xpath
(
'./poco:note'
).
nil?
account
.
note
=
author_xml
.
at_xpath
(
'./poco:note'
,
poco:
POCO_NS
).
content
end
unless
author_xml
.
at_xpath
(
'./xmlns:link[@rel="avatar"]'
).
nil?
account
.
avatar_remote_url
=
author_xml
.
at_xpath
(
'./xmlns:link[@rel="avatar"]'
).
attribute
(
'href'
).
value
unless
author_xml
.
nil?
account
.
display_name
=
author_xml
.
at_xpath
(
'./poco:displayName'
,
poco:
POCO_NS
).
content
unless
author_xml
.
at_xpath
(
'./poco:displayName'
,
poco:
POCO_NS
).
nil?
account
.
note
=
author_xml
.
at_xpath
(
'./poco:note'
,
poco:
POCO_NS
).
content
unless
author_xml
.
at_xpath
(
'./poco:note'
).
nil?
account
.
avatar_remote_url
=
author_xml
.
at_xpath
(
'./xmlns:link[@rel="avatar"]'
)[
'href'
]
unless
author_xml
.
at_xpath
(
'./xmlns:link[@rel="avatar"]'
).
nil?
||
author_xml
.
at_xpath
(
'./xmlns:link[@rel="avatar"]'
)[
'href'
].
blank?
end
old_hub_url
=
account
.
hub_url
account
.
hub_url
=
hub_link
[
'href'
]
if
!
hub_link
.
nil?
&&
!
hub_link
[
'href'
].
blank?
&&
(
hub_link
[
'href'
]
!=
old_hub_url
)
account
.
save!
SubscribeService
.
new
.
call
(
account
)
if
resubscribe
&&
(
account
.
hub_url
!=
old_hub_url
)
end
end
spec/controllers/api/salmon_controller_spec.rb
View file @
2cb3dc5e
...
...
@@ -6,6 +6,7 @@ RSpec.describe Api::SalmonController, type: :controller do
let
(
:account
)
{
Fabricate
(
:user
,
account:
Fabricate
(
:account
,
username:
'catsrgr8'
)).
account
}
before
do
stub_request
(
:post
,
"https://pubsubhubbub.superfeedr.com/"
).
to_return
(
:status
=>
200
,
:body
=>
""
,
:headers
=>
{})
stub_request
(
:get
,
"https://quitter.no/.well-known/host-meta"
).
to_return
(
request_fixture
(
'.host-meta.txt'
))
stub_request
(
:get
,
"https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no"
).
to_return
(
request_fixture
(
'webfinger.txt'
))
stub_request
(
:get
,
"https://quitter.no/api/statuses/user_timeline/7477.atom"
).
to_return
(
request_fixture
(
'feed.txt'
))
...
...
spec/controllers/api/subscriptions_controller_spec.rb
View file @
2cb3dc5e
...
...
@@ -23,6 +23,7 @@ RSpec.describe Api::SubscriptionsController, type: :controller do
let
(
:feed
)
{
File
.
read
(
File
.
join
(
Rails
.
root
,
'spec'
,
'fixtures'
,
'push'
,
'feed.atom'
))
}
before
do
stub_request
(
:post
,
"https://quitter.no/main/push/hub"
).
to_return
(
:status
=>
200
,
:body
=>
""
,
:headers
=>
{})
stub_request
(
:get
,
"https://quitter.no/avatar/7477-300-20160211190340.png"
).
to_return
(
request_fixture
(
'avatar.txt'
))
stub_request
(
:head
,
"https://quitter.no/notice/1269244"
).
to_return
(
status:
404
)
stub_request
(
:head
,
"https://quitter.no/notice/1265331"
).
to_return
(
status:
404
)
...
...
@@ -37,7 +38,7 @@ RSpec.describe Api::SubscriptionsController, type: :controller do
stub_request
(
:head
,
"https://social.umeahackerspace.se/user/2"
).
to_return
(
status:
404
)
stub_request
(
:head
,
"https://gs.kawa-kun.com/user/2"
).
to_return
(
status:
404
)
stub_request
(
:head
,
"https://mastodon.social/users/Gargron"
).
to_return
(
status:
404
)
request
.
env
[
'HTTP_X_HUB_SIGNATURE'
]
=
"sha1=
#{
OpenSSL
::
HMAC
.
hexdigest
(
'sha1'
,
'abc'
,
feed
)
}
"
request
.
env
[
'RAW_POST_DATA'
]
=
feed
...
...
spec/services/process_feed_service_spec.rb
View file @
2cb3dc5e
...
...
@@ -7,6 +7,7 @@ RSpec.describe ProcessFeedService do
subject
{
ProcessFeedService
.
new
}
before
do
stub_request
(
:post
,
"https://pubsubhubbub.superfeedr.com/"
).
to_return
(
:status
=>
200
,
:body
=>
""
,
:headers
=>
{})
stub_request
(
:get
,
"http://kickass.zone/system/accounts/avatars/000/000/001/large/eris.png"
).
to_return
(
request_fixture
(
'avatar.txt'
))
stub_request
(
:get
,
"http://kickass.zone/system/media_attachments/files/000/000/002/original/morpheus_linux.jpg?1476059910"
).
to_return
(
request_fixture
(
'attachment1.txt'
))
stub_request
(
:get
,
"http://kickass.zone/system/media_attachments/files/000/000/003/original/gizmo.jpg?1476060065"
).
to_return
(
request_fixture
(
'attachment2.txt'
))
...
...
spec/services/update_remote_profile_service_spec.rb
View file @
2cb3dc5e
require
'rails_helper'
RSpec
.
describe
UpdateRemoteProfileService
do
let
(
:xml
)
{
Nokogiri
::
XML
(
File
.
read
(
File
.
join
(
Rails
.
root
,
'spec'
,
'fixtures'
,
'push'
,
'feed.atom'
))).
at_xpath
(
'//xmlns:
author
'
)
}
let
(
:xml
)
{
Nokogiri
::
XML
(
File
.
read
(
File
.
join
(
Rails
.
root
,
'spec'
,
'fixtures'
,
'push'
,
'feed.atom'
))).
at_xpath
(
'//xmlns:
feed
'
)
}
subject
{
UpdateRemoteProfileService
.
new
}
...
...
@@ -13,7 +13,7 @@ RSpec.describe UpdateRemoteProfileService do
let
(
:remote_account
)
{
Fabricate
(
:account
,
username:
'bob'
,
domain:
'example.com'
)
}
before
do
subject
.
(
xml
,
remote_account
)
subject
.
call
(
xml
,
remote_account
)
end
it
'downloads new avatar'
do
...
...
@@ -34,10 +34,10 @@ RSpec.describe UpdateRemoteProfileService do
end
context
'with unchanged details'
do
let
(
:remote_account
)
{
Fabricate
(
:account
,
username:
'bob'
,
domain:
'example.com'
,
display_name:
'DIGITAL CAT'
,
note:
'Software engineer, free time musician and DIGITAL SPORTS enthusiast. Likes cats. Warning: May contain memes'
,
avatar_remote_url:
'https://quitter.no/avatar/7477-300-20160211190340.png'
)
}
let
(
:remote_account
)
{
Fabricate
(
:account
,
username:
'bob'
,
domain:
'example.com'
,
display_name:
'DIGITAL CAT'
,
note:
'Software engineer, free time musician and DIGITAL SPORTS enthusiast. Likes cats. Warning: May contain memes'
,
avatar_remote_url:
'https://quitter.no/avatar/7477-300-20160211190340.png'
)
}
before
do
subject
.
(
xml
,
remote_account
)
subject
.
call
(
xml
,
remote_account
)
end
it
'does not re-download avatar'
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