mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 11:26:09 -04:00
Move validation logic for AS 3PE query response into ApplicationServiceApi class, to keep the handler logic neater
This commit is contained in:
parent
697872cf08
commit
65201631a4
2 changed files with 44 additions and 45 deletions
|
@ -18,7 +18,6 @@ from twisted.internet import defer
|
|||
from synapse.api.constants import EventTypes
|
||||
from synapse.util.metrics import Measure
|
||||
from synapse.util.logcontext import preserve_fn
|
||||
from synapse.types import ThirdPartyEntityKind
|
||||
|
||||
import logging
|
||||
|
||||
|
@ -36,28 +35,6 @@ def log_failure(failure):
|
|||
)
|
||||
|
||||
|
||||
def _is_valid_3pentity_result(r, field):
|
||||
if not isinstance(r, dict):
|
||||
return False
|
||||
|
||||
for k in (field, "protocol"):
|
||||
if k not in r:
|
||||
return False
|
||||
if not isinstance(r[k], str):
|
||||
return False
|
||||
|
||||
if "fields" not in r:
|
||||
return False
|
||||
fields = r["fields"]
|
||||
if not isinstance(fields, dict):
|
||||
return False
|
||||
for k in fields.keys():
|
||||
if not isinstance(fields[k], str):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
class ApplicationServicesHandler(object):
|
||||
|
||||
def __init__(self, hs):
|
||||
|
@ -178,29 +155,10 @@ class ApplicationServicesHandler(object):
|
|||
for service in services
|
||||
], consumeErrors=True)
|
||||
|
||||
required_field = (
|
||||
"userid" if kind == ThirdPartyEntityKind.USER else
|
||||
"alias" if kind == ThirdPartyEntityKind.LOCATION else
|
||||
None
|
||||
)
|
||||
|
||||
ret = []
|
||||
for (success, result) in results:
|
||||
if not success:
|
||||
logger.warn("Application service failed %r", result)
|
||||
continue
|
||||
if not isinstance(result, list):
|
||||
logger.warn(
|
||||
"Application service returned an invalid response %r", result
|
||||
)
|
||||
continue
|
||||
for r in result:
|
||||
if _is_valid_3pentity_result(r, field=required_field):
|
||||
ret.append(r)
|
||||
else:
|
||||
logger.warn(
|
||||
"Application service returned an invalid result %r", r
|
||||
)
|
||||
if success:
|
||||
ret.extend(result)
|
||||
|
||||
defer.returnValue(ret)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue