Get the end-to-end key federation working

This commit is contained in:
Mark Haines 2015-07-24 18:26:46 +01:00
parent 62c010283d
commit 2da3b1e60b
4 changed files with 17 additions and 21 deletions

View File

@ -135,7 +135,7 @@ class FederationClient(FederationBase):
) )
@log_function @log_function
def query_client_keys(self, destination, content, retry_on_dns_fail=True): def query_client_keys(self, destination, content):
"""Query device keys for a device hosted on a remote server. """Query device keys for a device hosted on a remote server.
Args: Args:
@ -147,12 +147,10 @@ class FederationClient(FederationBase):
response response
""" """
sent_queries_counter.inc("client_device_keys") sent_queries_counter.inc("client_device_keys")
return self.transport_layer.query_client_keys( return self.transport_layer.query_client_keys(destination, content)
destination, content, retry_on_dns_fail=retry_on_dns_fail
)
@log_function @log_function
def claim_client_keys(self, destination, content, retry_on_dns_fail=True): def claim_client_keys(self, destination, content):
"""Claims one-time keys for a device hosted on a remote server. """Claims one-time keys for a device hosted on a remote server.
Args: Args:
@ -164,9 +162,7 @@ class FederationClient(FederationBase):
response response
""" """
sent_queries_counter.inc("client_one_time_keys") sent_queries_counter.inc("client_one_time_keys")
return self.transport_layer.claim_client_keys( return self.transport_layer.claim_client_keys(destination, content)
destination, content, retry_on_dns_fail=retry_on_dns_fail
)
@defer.inlineCallbacks @defer.inlineCallbacks
@log_function @log_function

View File

@ -247,7 +247,7 @@ class TransportLayerClient(object):
Returns: Returns:
A dict containg the device keys. A dict containg the device keys.
""" """
path = PREFIX + "/client_keys/query" path = PREFIX + "/user/keys/query"
content = yield self.client.post_json( content = yield self.client.post_json(
destination=destination, destination=destination,
@ -283,7 +283,7 @@ class TransportLayerClient(object):
A dict containg the one-time keys. A dict containg the one-time keys.
""" """
path = PREFIX + "/client_keys/claim" path = PREFIX + "/user/keys/claim"
content = yield self.client.post_json( content = yield self.client.post_json(
destination=destination, destination=destination,

View File

@ -326,20 +326,20 @@ class FederationInviteServlet(BaseFederationServlet):
class FederationClientKeysQueryServlet(BaseFederationServlet): class FederationClientKeysQueryServlet(BaseFederationServlet):
PATH = "/client_keys/query" PATH = "/user/keys/query"
@defer.inlineCallbacks @defer.inlineCallbacks
def on_POST(self, origin, content): def on_POST(self, origin, content, query):
response = yield self.handler.on_client_key_query(origin, content) response = yield self.handler.on_query_client_keys(origin, content)
defer.returnValue((200, response)) defer.returnValue((200, response))
class FederationClientKeysClaimServlet(BaseFederationServlet): class FederationClientKeysClaimServlet(BaseFederationServlet):
PATH = "/client_keys/claim" PATH = "/user/keys/claim"
@defer.inlineCallbacks @defer.inlineCallbacks
def on_POST(self, origin, content): def on_POST(self, origin, content, query):
response = yield self.handler.on_client_key_claim(origin, content) response = yield self.handler.on_claim_client_keys(origin, content)
defer.returnValue((200, response)) defer.returnValue((200, response))

View File

@ -202,7 +202,7 @@ class KeyQueryServlet(RestServlet):
for device_id in device_ids: for device_id in device_ids:
local_query.append((user_id, device_id)) local_query.append((user_id, device_id))
else: else:
remote_queries.set_default(user.domain, {})[user_id] = list( remote_queries.setdefault(user.domain, {})[user_id] = list(
device_ids device_ids
) )
results = yield self.store.get_e2e_device_keys(local_query) results = yield self.store.get_e2e_device_keys(local_query)
@ -218,7 +218,7 @@ class KeyQueryServlet(RestServlet):
remote_result = yield self.federation.query_client_keys( remote_result = yield self.federation.query_client_keys(
destination, {"device_keys": device_keys} destination, {"device_keys": device_keys}
) )
for user_id, keys in remote_result.items(): for user_id, keys in remote_result["device_keys"].items():
if user_id in device_keys: if user_id in device_keys:
json_result[user_id] = keys json_result[user_id] = keys
defer.returnValue((200, {"device_keys": json_result})) defer.returnValue((200, {"device_keys": json_result}))
@ -286,7 +286,7 @@ class OneTimeKeyServlet(RestServlet):
for device_id, algorithm in device_keys.items(): for device_id, algorithm in device_keys.items():
local_query.append((user_id, device_id, algorithm)) local_query.append((user_id, device_id, algorithm))
else: else:
remote_queries.set_default(user.domain, {})[user_id] = ( remote_queries.setdefault(user.domain, {})[user_id] = (
device_keys device_keys
) )
results = yield self.store.claim_e2e_one_time_keys(local_query) results = yield self.store.claim_e2e_one_time_keys(local_query)
@ -300,10 +300,10 @@ class OneTimeKeyServlet(RestServlet):
} }
for destination, device_keys in remote_queries.items(): for destination, device_keys in remote_queries.items():
remote_result = yield self.federation.query_client_keys( remote_result = yield self.federation.claim_client_keys(
destination, {"one_time_keys": device_keys} destination, {"one_time_keys": device_keys}
) )
for user_id, keys in remote_result.items(): for user_id, keys in remote_result["one_time_keys"].items():
if user_id in device_keys: if user_id in device_keys:
json_result[user_id] = keys json_result[user_id] = keys