kopia lustrzana https://github.com/snarfed/bridgy-fed
AP users: add new User.direct property
direct users signed up or otherwise interacted with BF explicitly, indirect users didn'tcircle-datastore-transactions
rodzic
6e834713f1
commit
624355d85a
11
models.py
11
models.py
|
@ -89,6 +89,12 @@ class User(StringIdModel, metaclass=ProtocolUserMeta):
|
|||
actor_as2 = JsonProperty()
|
||||
use_instead = ndb.KeyProperty()
|
||||
|
||||
# whether this user signed up or otherwise explicitly, deliberately
|
||||
# interacted with Bridgy Fed. For example, if fediverse user @a@b.com looks
|
||||
# up @foo.com@fed.brid.gy via WebFinger, we'll create Users for both,
|
||||
# @a@b.com will be direct, foo.com will not.
|
||||
direct = ndb.BooleanProperty(default=False)
|
||||
|
||||
created = ndb.DateTimeProperty(auto_now_add=True)
|
||||
updated = ndb.DateTimeProperty(auto_now=True)
|
||||
|
||||
|
@ -121,6 +127,11 @@ class User(StringIdModel, metaclass=ProtocolUserMeta):
|
|||
assert cls != User
|
||||
user = cls.get_by_id(domain)
|
||||
if user:
|
||||
# override direct if it's set
|
||||
direct = kwargs.get('direct')
|
||||
if direct is not None:
|
||||
user.direct = direct
|
||||
user.put()
|
||||
return user
|
||||
|
||||
# generate keys for all protocols _except_ our own
|
||||
|
|
2
pages.py
2
pages.py
|
@ -59,7 +59,7 @@ def check_web_site():
|
|||
flash(f'No domain found in {url}')
|
||||
return render_template('enter_web_site.html')
|
||||
|
||||
g.user = Web.get_or_create(domain)
|
||||
g.user = Web.get_or_create(domain, direct=True)
|
||||
try:
|
||||
g.user = g.user.verify()
|
||||
except BaseException as e:
|
||||
|
|
|
@ -33,6 +33,7 @@ class UserTest(TestCase):
|
|||
def test_get_or_create(self):
|
||||
user = Fake.get_or_create('a.b')
|
||||
|
||||
assert not user.direct
|
||||
assert user.mod
|
||||
assert user.public_exponent
|
||||
assert user.private_exponent
|
||||
|
@ -46,8 +47,10 @@ class UserTest(TestCase):
|
|||
assert isinstance(p256_key, ECC.EccKey)
|
||||
self.assertEqual('NIST P-256', p256_key.curve)
|
||||
|
||||
same = Fake.get_or_create('a.b')
|
||||
self.assertEqual(same, user)
|
||||
# direct should get set even if the user exists
|
||||
same = Fake.get_or_create('a.b', direct=True)
|
||||
user.direct = True
|
||||
self.assert_entities_equal(same, user, ignore=['updated'])
|
||||
|
||||
def test_get_or_create_use_instead(self):
|
||||
user = Fake.get_or_create('a.b')
|
||||
|
|
|
@ -67,7 +67,7 @@ class RedirectTest(testutil.TestCase):
|
|||
def test_as2_ld(self):
|
||||
self._test_as2(as2.CONTENT_TYPE_LD)
|
||||
|
||||
def test_as2_no_user(self):
|
||||
def test_as2_creates_user(self):
|
||||
with self.request_context:
|
||||
Object(id='https://user.com/repost', as2=EXTERNAL_REPOST_AS2).put()
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import urllib.parse
|
|||
from oauth_dropins.webutil.testutil import requests_response
|
||||
|
||||
import common
|
||||
from models import User
|
||||
from . import testutil
|
||||
from .test_web import ACTOR_HTML
|
||||
|
||||
|
@ -204,7 +203,7 @@ class WebfingerTest(testutil.TestCase):
|
|||
self.assertEqual(404, got.status_code)
|
||||
|
||||
@patch('requests.get')
|
||||
def test_webfinger_external_user_fetch(self, mock_get):
|
||||
def test_webfinger_external_user_fetch_creates_user(self, mock_get):
|
||||
self.user.key.delete()
|
||||
mock_get.return_value = requests_response(ACTOR_HTML)
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue