Delete e2e keys on device delete
This commit is contained in:
parent
2e3d90d67c
commit
d47115ff8b
|
@ -143,6 +143,10 @@ class DeviceHandler(BaseHandler):
|
||||||
delete_refresh_tokens=True,
|
delete_refresh_tokens=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
yield self.store.delete_e2e_keys_by_device(
|
||||||
|
user_id=user_id, device_id=device_id
|
||||||
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def update_device(self, user_id, device_id, content):
|
def update_device(self, user_id, device_id, content):
|
||||||
""" Update the given device
|
""" Update the given device
|
||||||
|
|
|
@ -86,10 +86,6 @@ class KeyUploadServlet(RestServlet):
|
||||||
raise synapse.api.errors.SynapseError(
|
raise synapse.api.errors.SynapseError(
|
||||||
400, "Can only upload keys for current device"
|
400, "Can only upload keys for current device"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.device_handler.check_device_registered(
|
|
||||||
user_id, device_id, "unknown device"
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
device_id = requester.device_id
|
device_id = requester.device_id
|
||||||
|
|
||||||
|
@ -131,6 +127,15 @@ class KeyUploadServlet(RestServlet):
|
||||||
user_id, device_id, time_now, key_list
|
user_id, device_id, time_now, key_list
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# the device should have been registered already, but it may have been
|
||||||
|
# deleted due to a race with a DELETE request. Or we may be using an
|
||||||
|
# old access_token without an associated device_id. Either way, we
|
||||||
|
# need to double-check the device is registered to avoid ending up with
|
||||||
|
# keys without a corresponding device.
|
||||||
|
self.device_handler.check_device_registered(
|
||||||
|
user_id, device_id, "unknown device"
|
||||||
|
)
|
||||||
|
|
||||||
result = yield self.store.count_e2e_one_time_keys(user_id, device_id)
|
result = yield self.store.count_e2e_one_time_keys(user_id, device_id)
|
||||||
defer.returnValue((200, {"one_time_key_counts": result}))
|
defer.returnValue((200, {"one_time_key_counts": result}))
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import twisted.internet.defer
|
||||||
|
|
||||||
from ._base import SQLBaseStore
|
from ._base import SQLBaseStore
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,3 +125,16 @@ class EndToEndKeyStore(SQLBaseStore):
|
||||||
return self.runInteraction(
|
return self.runInteraction(
|
||||||
"claim_e2e_one_time_keys", _claim_e2e_one_time_keys
|
"claim_e2e_one_time_keys", _claim_e2e_one_time_keys
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@twisted.internet.defer.inlineCallbacks
|
||||||
|
def delete_e2e_keys_by_device(self, user_id, device_id):
|
||||||
|
yield self._simple_delete(
|
||||||
|
table="e2e_device_keys_json",
|
||||||
|
keyvalues={"user_id": user_id, "device_id": device_id},
|
||||||
|
desc="delete_e2e_device_keys_by_device"
|
||||||
|
)
|
||||||
|
yield self._simple_delete(
|
||||||
|
table="e2e_one_time_keys_json",
|
||||||
|
keyvalues={"user_id": user_id, "device_id": device_id},
|
||||||
|
desc="delete_e2e_one_time_keys_by_device"
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue