forked from mirrors/bookwyrm
Use get_or_create_remote_user from get_public_key.
This commit is contained in:
parent
00bd8928b0
commit
17734940ac
3 changed files with 22 additions and 19 deletions
|
@ -54,7 +54,7 @@ def shared_inbox(request):
|
|||
key = get_public_key(key_actor)
|
||||
|
||||
signature.verify(key, request)
|
||||
except ValueError:
|
||||
except (ValueError, requests.exceptions.HTTPError):
|
||||
return HttpResponse(status=401)
|
||||
|
||||
handlers = {
|
||||
|
@ -91,20 +91,8 @@ def shared_inbox(request):
|
|||
|
||||
def get_public_key(key_actor):
|
||||
''' try a stored key or load it from remote '''
|
||||
try:
|
||||
user = models.User.objects.get(remote_id=key_actor)
|
||||
public_key = user.public_key
|
||||
except models.User.DoesNotExist:
|
||||
response = requests.get(
|
||||
key_actor,
|
||||
headers={'Accept': 'application/activity+json'}
|
||||
)
|
||||
if not response.ok:
|
||||
raise ValueError('Could not load public key')
|
||||
user_data = response.json()
|
||||
public_key = user_data['publicKey']['publicKeyPem']
|
||||
|
||||
return public_key
|
||||
user = get_or_create_remote_user(key_actor)
|
||||
return user.public_key
|
||||
|
||||
@app.task
|
||||
def handle_follow(activity):
|
||||
|
|
|
@ -36,7 +36,8 @@ def get_or_create_remote_user(actor):
|
|||
user.save()
|
||||
|
||||
avatar = get_avatar(data)
|
||||
user.avatar.save(*avatar)
|
||||
if avatar:
|
||||
user.avatar.save(*avatar)
|
||||
|
||||
if user.fedireads_user:
|
||||
get_remote_reviews(user)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import time
|
||||
from collections import namedtuple
|
||||
from urllib.parse import urlsplit
|
||||
import pathlib
|
||||
|
||||
import json
|
||||
import responses
|
||||
|
@ -73,13 +74,26 @@ class Signature(TestCase):
|
|||
|
||||
@responses.activate
|
||||
def test_remote_signer(self):
|
||||
datafile = pathlib.Path(__file__).parent.joinpath('data/ap_user.json')
|
||||
data = json.loads(datafile.read_bytes())
|
||||
data['id'] = self.fake_remote.remote_id
|
||||
data['publicKey']['publicKeyPem'] = self.fake_remote.public_key
|
||||
del data['icon'] # Avoid having to return an avatar.
|
||||
responses.add(
|
||||
responses.GET,
|
||||
self.fake_remote.remote_id,
|
||||
json={'publicKey': {
|
||||
'publicKeyPem': self.fake_remote.public_key
|
||||
}},
|
||||
json=data,
|
||||
status=200)
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'https://localhost/.well-known/nodeinfo',
|
||||
status=404)
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'https://example.com/user/mouse/outbox?page=true',
|
||||
json={'orderedItems': []},
|
||||
status=200
|
||||
)
|
||||
|
||||
response = self.send_test_request(sender=self.fake_remote)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
Loading…
Reference in a new issue