mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-23 01:55:53 +03:00
Copypasta the 3PU support code to also do 3PL
This commit is contained in:
parent
f3afd6ef1a
commit
06964c4a0a
3 changed files with 61 additions and 3 deletions
|
@ -82,6 +82,17 @@ class ApplicationServiceApi(SimpleHttpClient):
|
||||||
logger.warning("query_3pu to %s threw exception %s", uri, ex)
|
logger.warning("query_3pu to %s threw exception %s", uri, ex)
|
||||||
defer.returnValue([])
|
defer.returnValue([])
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def query_3pl(self, service, protocol, fields):
|
||||||
|
uri = service.url + ("/3pl/%s" % urllib.quote(protocol))
|
||||||
|
response = None
|
||||||
|
try:
|
||||||
|
response = yield self.get_json(uri, fields)
|
||||||
|
defer.returnValue(response)
|
||||||
|
except Exception as ex:
|
||||||
|
logger.warning("query_3pl to %s threw exception %s", uri, ex)
|
||||||
|
defer.returnValue([])
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def push_bulk(self, service, events, txn_id=None):
|
def push_bulk(self, service, events, txn_id=None):
|
||||||
events = self._serialize(events)
|
events = self._serialize(events)
|
||||||
|
|
|
@ -34,11 +34,11 @@ def log_failure(failure):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _is_valid_3pu_result(r):
|
def _is_valid_3pentity_result(r, field):
|
||||||
if not isinstance(r, dict):
|
if not isinstance(r, dict):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
for k in ("userid", "protocol"):
|
for k in (field, "protocol"):
|
||||||
if k not in r:
|
if k not in r:
|
||||||
return False
|
return False
|
||||||
if not isinstance(r[k], str):
|
if not isinstance(r[k], str):
|
||||||
|
@ -185,7 +185,34 @@ class ApplicationServicesHandler(object):
|
||||||
if not isinstance(result, list):
|
if not isinstance(result, list):
|
||||||
continue
|
continue
|
||||||
for r in result:
|
for r in result:
|
||||||
if _is_valid_3pu_result(r):
|
if _is_valid_3pentity_result(r, field="userid"):
|
||||||
|
ret.append(r)
|
||||||
|
else:
|
||||||
|
logger.warn("Application service returned an " +
|
||||||
|
"invalid result %r", r)
|
||||||
|
|
||||||
|
defer.returnValue(ret)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def query_3pl(self, protocol, fields):
|
||||||
|
services = yield self._get_services_for_3pn(protocol)
|
||||||
|
|
||||||
|
deferreds = []
|
||||||
|
for service in services:
|
||||||
|
deferreds.append(self.appservice_api.query_3pl(
|
||||||
|
service, protocol, fields
|
||||||
|
))
|
||||||
|
|
||||||
|
results = yield defer.DeferredList(deferreds, consumeErrors=True)
|
||||||
|
|
||||||
|
ret = []
|
||||||
|
for (success, result) in results:
|
||||||
|
if not success:
|
||||||
|
continue
|
||||||
|
if not isinstance(result, list):
|
||||||
|
continue
|
||||||
|
for r in result:
|
||||||
|
if _is_valid_3pentity_result(r, field="alias"):
|
||||||
ret.append(r)
|
ret.append(r)
|
||||||
else:
|
else:
|
||||||
logger.warn("Application service returned an " +
|
logger.warn("Application service returned an " +
|
||||||
|
|
|
@ -43,5 +43,25 @@ class ThirdPartyUserServlet(RestServlet):
|
||||||
defer.returnValue((200, results))
|
defer.returnValue((200, results))
|
||||||
|
|
||||||
|
|
||||||
|
class ThirdPartyLocationServlet(RestServlet):
|
||||||
|
PATTERNS = client_v2_patterns("/3pl(/(?P<protocol>[^/]+))?$",
|
||||||
|
releases=())
|
||||||
|
|
||||||
|
def __init__(self, hs):
|
||||||
|
super(ThirdPartyLocationServlet, self).__init__()
|
||||||
|
|
||||||
|
self.appservice_handler = hs.get_application_service_handler()
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def on_GET(self, request, protocol):
|
||||||
|
fields = request.args
|
||||||
|
del fields["access_token"]
|
||||||
|
|
||||||
|
results = yield self.appservice_handler.query_3pl(protocol, fields)
|
||||||
|
|
||||||
|
defer.returnValue((200, results))
|
||||||
|
|
||||||
|
|
||||||
def register_servlets(hs, http_server):
|
def register_servlets(hs, http_server):
|
||||||
ThirdPartyUserServlet(hs).register(http_server)
|
ThirdPartyUserServlet(hs).register(http_server)
|
||||||
|
ThirdPartyLocationServlet(hs).register(http_server)
|
||||||
|
|
Loading…
Reference in a new issue