kopia lustrzana https://github.com/snarfed/bridgy-fed
Web.username: handle bad acct: URIs
fixes https://console.cloud.google.com/errors/detail/CPLmrpzFs4qTUA;time=P30D?project=bridgy-federateddeploy
rodzic
bfb462e414
commit
974fa71443
|
@ -441,12 +441,38 @@ class WebTest(TestCase):
|
|||
self.assertEqual('☃.net', user.key.id())
|
||||
self.assert_entities_equal(user, Web.get_by_id('☃.net'))
|
||||
|
||||
def test_bad_source_url(self, mock_get, mock_post):
|
||||
def test_bad_source_url(self, *mocks):
|
||||
for data in b'', {'source': 'bad'}, {'source': 'https://'}:
|
||||
got = self.client.post('/webmention', data=data)
|
||||
self.assertEqual(400, got.status_code)
|
||||
self.assertEqual(0, Object.query().count())
|
||||
|
||||
def test_username(self, *mocks):
|
||||
self.assertEqual('user.com', g.user.username())
|
||||
|
||||
g.user.actor_as2 = {
|
||||
'type': 'Person',
|
||||
'name': 'foo',
|
||||
'url': ['bar'],
|
||||
'preferredUsername': 'baz',
|
||||
}
|
||||
g.user.direct = True
|
||||
self.assertEqual('user.com', g.user.username())
|
||||
|
||||
# bad acct: URI, util.parse_acct_uri raises ValueError
|
||||
# https://console.cloud.google.com/errors/detail/CPLmrpzFs4qTUA;time=P30D?project=bridgy-federated
|
||||
g.user.actor_as2['url'].append('acct:@user.com')
|
||||
self.assertEqual('user.com', g.user.username())
|
||||
|
||||
g.user.actor_as2['url'].append('acct:alice@foo.com')
|
||||
self.assertEqual('user.com', g.user.username())
|
||||
|
||||
g.user.actor_as2['url'].append('acct:alice@user.com')
|
||||
self.assertEqual('alice', g.user.username())
|
||||
|
||||
g.user.direct = False
|
||||
self.assertEqual('user.com', g.user.username())
|
||||
|
||||
@patch('oauth_dropins.webutil.appengine_config.tasks_client.create_task')
|
||||
def test_make_task(self, mock_create_task, mock_get, mock_post):
|
||||
mock_get.side_effect = [NOTE, ACTOR]
|
||||
|
|
5
web.py
5
web.py
|
@ -122,7 +122,10 @@ class Web(User, Protocol):
|
|||
for url in [u.get('value') if isinstance(u, dict) else u
|
||||
for u in util.get_list(self.actor_as2, 'url')]:
|
||||
if url and url.startswith('acct:'):
|
||||
urluser, urldomain = util.parse_acct_uri(url)
|
||||
try:
|
||||
urluser, urldomain = util.parse_acct_uri(url)
|
||||
except ValueError:
|
||||
continue
|
||||
if urldomain == id:
|
||||
logger.info(f'Found custom username: {urluser}')
|
||||
return urluser
|
||||
|
|
Ładowanie…
Reference in New Issue