kopia lustrzana https://github.com/snarfed/bridgy-fed
AP follow/unfollow UI: handle followees with composite url objects
ie with namedprofile links fixes https://console.cloud.google.com/errors/detail/CKmLytj-nPv9RQ;time=P30D?project=bridgy-federatedpull/629/head
rodzic
2742904468
commit
9daa8f36eb
|
@ -147,8 +147,7 @@ class FollowCallback(indieauth.Callback):
|
||||||
follow=follow_obj.key)
|
follow=follow_obj.key)
|
||||||
follow_obj.put()
|
follow_obj.put()
|
||||||
|
|
||||||
urls = as1.object_urls(followee.as1)
|
url = as1.get_url(followee.as1) or followee_id
|
||||||
url = (urls[0] if urls else None) or followee_id
|
|
||||||
link = common.pretty_link(url, text=addr)
|
link = common.pretty_link(url, text=addr)
|
||||||
flash(f'Followed {link}.')
|
flash(f'Followed {link}.')
|
||||||
return redirect(g.user.user_page_path('following'))
|
return redirect(g.user.user_page_path('following'))
|
||||||
|
@ -235,7 +234,7 @@ class UnfollowCallback(indieauth.Callback):
|
||||||
follower.put()
|
follower.put()
|
||||||
obj.put()
|
obj.put()
|
||||||
|
|
||||||
link = common.pretty_link(util.get_url(followee.obj.as1) or followee_id)
|
link = common.pretty_link(as1.get_url(followee.obj.as1) or followee_id)
|
||||||
flash(f'Unfollowed {link}.')
|
flash(f'Unfollowed {link}.')
|
||||||
return redirect(g.user.user_page_path('following'))
|
return redirect(g.user.user_page_path('following'))
|
||||||
|
|
||||||
|
|
|
@ -336,6 +336,37 @@ class FollowTest(TestCase):
|
||||||
followers,
|
followers,
|
||||||
ignore=['created', 'updated'])
|
ignore=['created', 'updated'])
|
||||||
|
|
||||||
|
def test_callback_url_composite_url(self, mock_get, mock_post):
|
||||||
|
followee = {
|
||||||
|
**FOLLOWEE,
|
||||||
|
'attachments': [{
|
||||||
|
'type': 'PropertyValue',
|
||||||
|
'name': 'Link',
|
||||||
|
'value': '<a href="https://bar/actor"></a>',
|
||||||
|
}],
|
||||||
|
}
|
||||||
|
mock_get.side_effect = (
|
||||||
|
requests_response(''),
|
||||||
|
self.as2_resp(followee),
|
||||||
|
)
|
||||||
|
mock_post.side_effect = (
|
||||||
|
requests_response('me=https://alice.com'),
|
||||||
|
requests_response('OK'), # AP Follow to inbox
|
||||||
|
)
|
||||||
|
|
||||||
|
self.state['state'] = 'https://bar/actor'
|
||||||
|
state = util.encode_oauth_state(self.state)
|
||||||
|
resp = self.client.get(f'/follow/callback?code=my_code&state={state}')
|
||||||
|
|
||||||
|
expected_follow = {
|
||||||
|
**FOLLOW_URL,
|
||||||
|
'object': followee,
|
||||||
|
}
|
||||||
|
self.check('https://bar/actor', resp, expected_follow, mock_get, mock_post)
|
||||||
|
self.assertEqual(
|
||||||
|
[f'Followed <a href="https://bar/url">https://bar/actor</a>.'],
|
||||||
|
get_flashed_messages())
|
||||||
|
|
||||||
def test_indieauthed_session(self, mock_get, mock_post):
|
def test_indieauthed_session(self, mock_get, mock_post):
|
||||||
mock_get.side_effect = (
|
mock_get.side_effect = (
|
||||||
self.as2_resp(FOLLOWEE),
|
self.as2_resp(FOLLOWEE),
|
||||||
|
@ -512,6 +543,29 @@ class UnfollowTest(TestCase):
|
||||||
source_protocol='ui', labels=['user', 'activity'],
|
source_protocol='ui', labels=['user', 'activity'],
|
||||||
as2=expected_undo, as1=as2.to_as1(expected_undo))
|
as2=expected_undo, as1=as2.to_as1(expected_undo))
|
||||||
|
|
||||||
|
def test_callback_composite_url(self, mock_get, mock_post):
|
||||||
|
follower = self.follower.to.get().obj
|
||||||
|
follower.our_as1 = {
|
||||||
|
**as2.to_as1(FOLLOWEE),
|
||||||
|
'url': {
|
||||||
|
'value': 'https://bar/url',
|
||||||
|
'displayName': 'something',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
follower.put()
|
||||||
|
|
||||||
|
# oauth-dropins indieauth https://alice.com fetch for user json
|
||||||
|
mock_get.return_value = requests_response('')
|
||||||
|
mock_post.side_effect = (
|
||||||
|
requests_response('me=https://alice.com'),
|
||||||
|
requests_response('OK'), # AP Undo Follow to inbox
|
||||||
|
)
|
||||||
|
|
||||||
|
resp = self.client.get(f'/unfollow/callback?code=my_code&state={self.state}')
|
||||||
|
self.assertEqual([f'Unfollowed <a href="https://bar/url">bar/url</a>.'],
|
||||||
|
get_flashed_messages())
|
||||||
|
self.check(resp, UNDO_FOLLOW, mock_get, mock_post)
|
||||||
|
|
||||||
def test_indieauthed_session(self, mock_get, mock_post):
|
def test_indieauthed_session(self, mock_get, mock_post):
|
||||||
# oauth-dropins indieauth https://alice.com fetch for user json
|
# oauth-dropins indieauth https://alice.com fetch for user json
|
||||||
mock_get.return_value = requests_response('')
|
mock_get.return_value = requests_response('')
|
||||||
|
|
Ładowanie…
Reference in New Issue