mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 02:01:03 +01:00 
			
		
		
		
	Merge pull request #3034 from matrix-org/rav/fix_key_claim_errors
Fix error when claiming e2e keys from offline servers
This commit is contained in:
		
						commit
						9a0db062af
					
				@ -1,5 +1,6 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
# Copyright 2016 OpenMarket Ltd
 | 
					# Copyright 2016 OpenMarket Ltd
 | 
				
			||||||
 | 
					# Copyright 2018 New Vector Ltd
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
					# Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
# you may not use this file except in compliance with the License.
 | 
					# you may not use this file except in compliance with the License.
 | 
				
			||||||
@ -134,23 +135,8 @@ class E2eKeysHandler(object):
 | 
				
			|||||||
                    if user_id in destination_query:
 | 
					                    if user_id in destination_query:
 | 
				
			||||||
                        results[user_id] = keys
 | 
					                        results[user_id] = keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            except CodeMessageException as e:
 | 
					 | 
				
			||||||
                failures[destination] = {
 | 
					 | 
				
			||||||
                    "status": e.code, "message": e.message
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            except NotRetryingDestination as e:
 | 
					 | 
				
			||||||
                failures[destination] = {
 | 
					 | 
				
			||||||
                    "status": 503, "message": "Not ready for retry",
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            except FederationDeniedError as e:
 | 
					 | 
				
			||||||
                failures[destination] = {
 | 
					 | 
				
			||||||
                    "status": 403, "message": "Federation Denied",
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            except Exception as e:
 | 
					            except Exception as e:
 | 
				
			||||||
                # include ConnectionRefused and other errors
 | 
					                failures[destination] = _exception_to_failure(e)
 | 
				
			||||||
                failures[destination] = {
 | 
					 | 
				
			||||||
                    "status": 503, "message": e.message
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        yield make_deferred_yieldable(defer.gatherResults([
 | 
					        yield make_deferred_yieldable(defer.gatherResults([
 | 
				
			||||||
            preserve_fn(do_remote_query)(destination)
 | 
					            preserve_fn(do_remote_query)(destination)
 | 
				
			||||||
@ -252,19 +238,8 @@ class E2eKeysHandler(object):
 | 
				
			|||||||
                for user_id, keys in remote_result["one_time_keys"].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
 | 
				
			||||||
            except CodeMessageException as e:
 | 
					 | 
				
			||||||
                failures[destination] = {
 | 
					 | 
				
			||||||
                    "status": e.code, "message": e.message
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            except NotRetryingDestination as e:
 | 
					 | 
				
			||||||
                failures[destination] = {
 | 
					 | 
				
			||||||
                    "status": 503, "message": "Not ready for retry",
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            except Exception as e:
 | 
					            except Exception as e:
 | 
				
			||||||
                # include ConnectionRefused and other errors
 | 
					                failures[destination] = _exception_to_failure(e)
 | 
				
			||||||
                failures[destination] = {
 | 
					 | 
				
			||||||
                    "status": 503, "message": e.message
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        yield make_deferred_yieldable(defer.gatherResults([
 | 
					        yield make_deferred_yieldable(defer.gatherResults([
 | 
				
			||||||
            preserve_fn(claim_client_keys)(destination)
 | 
					            preserve_fn(claim_client_keys)(destination)
 | 
				
			||||||
@ -362,6 +337,31 @@ class E2eKeysHandler(object):
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _exception_to_failure(e):
 | 
				
			||||||
 | 
					    if isinstance(e, CodeMessageException):
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            "status": e.code, "message": e.message,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if isinstance(e, NotRetryingDestination):
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            "status": 503, "message": "Not ready for retry",
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if isinstance(e, FederationDeniedError):
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            "status": 403, "message": "Federation Denied",
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # include ConnectionRefused and other errors
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Note that some Exceptions (notably twisted's ResponseFailed etc) don't
 | 
				
			||||||
 | 
					    # give a string for e.message, which simplejson then fails to serialize.
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					        "status": 503, "message": str(e.message),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _one_time_keys_match(old_key_json, new_key):
 | 
					def _one_time_keys_match(old_key_json, new_key):
 | 
				
			||||||
    old_key = json.loads(old_key_json)
 | 
					    old_key = json.loads(old_key_json)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user