Ryan Barrett 2024-03-11 11:43:58 -07:00
rodzic 51254f67de
commit c0b75e4fbd
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 6BE31FDF4776E9D4
2 zmienionych plików z 18 dodań i 1 usunięć

Wyświetl plik

@ -10,9 +10,11 @@ from cachetools import cached, LRUCache
from flask import g, request from flask import g, request
from google.cloud import ndb from google.cloud import ndb
from google.cloud.ndb import OR from google.cloud.ndb import OR
from google.cloud.ndb.model import _entity_to_protobuf
from granary import as1 from granary import as1
from oauth_dropins.webutil.flask_util import cloud_tasks_only from oauth_dropins.webutil.flask_util import cloud_tasks_only
from oauth_dropins.webutil import util from oauth_dropins.webutil import util
from oauth_dropins.webutil import models
from oauth_dropins.webutil.util import json_dumps, json_loads from oauth_dropins.webutil.util import json_dumps, json_loads
import werkzeug.exceptions import werkzeug.exceptions
@ -1160,6 +1162,12 @@ class Protocol:
if not fetched: if not fetched:
return None return None
# https://stackoverflow.com/a/3042250/186123
size = len(_entity_to_protobuf(obj)._pb.SerializeToString())
if size > models.MAX_ENTITY_SIZE:
logger.warning(f'Object is too big! {size} bytes is over {models.MAX_ENTITY_SIZE}')
return None
obj.resolve_ids() obj.resolve_ids()
if obj.new is False: if obj.new is False:

Wyświetl plik

@ -9,7 +9,7 @@ from arroba.tests.testutil import dns_answer
from flask import g from flask import g
from google.cloud import ndb from google.cloud import ndb
from granary import as2 from granary import as2
from oauth_dropins.webutil import appengine_info, util from oauth_dropins.webutil import appengine_info, models, util
from oauth_dropins.webutil.flask_util import CLOUD_TASKS_QUEUE_HEADER, NoContent from oauth_dropins.webutil.flask_util import CLOUD_TASKS_QUEUE_HEADER, NoContent
from oauth_dropins.webutil.testutil import NOW, requests_response from oauth_dropins.webutil.testutil import NOW, requests_response
import requests import requests
@ -319,6 +319,7 @@ class ProtocolTest(TestCase):
follow = { follow = {
'objectType': 'activity', 'objectType': 'activity',
'verb': 'follow', 'verb': 'follow',
'id': 'fake:follow',
'actor': 'fake:alice', 'actor': 'fake:alice',
'object': 'fake:bob', 'object': 'fake:bob',
} }
@ -362,6 +363,14 @@ class ProtocolTest(TestCase):
loaded = Fake.load('foo') loaded = Fake.load('foo')
self.assertEqual({'fetched': 'x', 'id': 'foo'}, loaded.our_as1) self.assertEqual({'fetched': 'x', 'id': 'foo'}, loaded.our_as1)
@patch('oauth_dropins.webutil.models.MAX_ENTITY_SIZE', new=50)
def test_load_too_big(self):
Fake.fetchable['fake:foo'] = {
'objectType': 'note',
'content': 'a bit of text that makes sure we end up over the limit ',
}
self.assertIsNone(Fake.load('fake:foo'))
def test_actor_key(self): def test_actor_key(self):
user = self.make_user(id='fake:a', cls=Fake) user = self.make_user(id='fake:a', cls=Fake)
a_key = user.key a_key = user.key