mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-10-30 23:47:33 +03:00 
			
		
		
		
	Fix valid auth_key never being saved after switching DC
This commit is contained in:
		
							parent
							
								
									0fc97a3e8c
								
							
						
					
					
						commit
						cdbd1f6193
					
				|  | @ -13,7 +13,6 @@ from ..network import MTProtoSender, ConnectionTcpFull | |||
| from ..sessions import Session, SQLiteSession, MemorySession | ||||
| from ..tl import TLObject, functions, types | ||||
| from ..tl.alltlobjects import LAYER | ||||
| from ..crypto import AuthKey | ||||
| 
 | ||||
| DEFAULT_DC_ID = 4 | ||||
| DEFAULT_IPV4_IP = '149.154.167.51' | ||||
|  | @ -245,6 +244,7 @@ class TelegramBaseClient(abc.ABC): | |||
|             delay=self._retry_delay, | ||||
|             auto_reconnect=self._auto_reconnect, | ||||
|             connect_timeout=self._timeout, | ||||
|             auth_key_callback=self._auth_key_callback, | ||||
|             update_callback=self._handle_update, | ||||
|             auto_reconnect_callback=self._handle_auto_reconnect | ||||
|         ) | ||||
|  | @ -386,12 +386,13 @@ class TelegramBaseClient(abc.ABC): | |||
|         self.session.set_dc(dc.id, dc.ip_address, dc.port) | ||||
|         # auth_key's are associated with a server, which has now changed | ||||
|         # so it's not valid anymore. Set to None to force recreating it. | ||||
|         self._sender.auth_key.key = None | ||||
|         self.session.auth_key = None | ||||
|         self.session.save() | ||||
|         self._disconnect() | ||||
|         return await self.connect() | ||||
| 
 | ||||
|     async def _auth_key_callback(self, auth_key): | ||||
|     def _auth_key_callback(self, auth_key): | ||||
|         """ | ||||
|         Callback from the sender whenever it needed to generate a | ||||
|         new authorization key. This means we are not authorized. | ||||
|  |  | |||
|  | @ -61,6 +61,7 @@ class MTProtoSender: | |||
|     """ | ||||
|     def __init__(self, auth_key, loop, *, | ||||
|                  retries=5, delay=1, auto_reconnect=True, connect_timeout=None, | ||||
|                  auth_key_callback=None, | ||||
|                  update_callback=None, auto_reconnect_callback=None): | ||||
|         self._connection = None | ||||
|         self._loop = loop | ||||
|  | @ -68,6 +69,7 @@ class MTProtoSender: | |||
|         self._delay = delay | ||||
|         self._auto_reconnect = auto_reconnect | ||||
|         self._connect_timeout = connect_timeout | ||||
|         self._auth_key_callback = auth_key_callback | ||||
|         self._update_callback = update_callback | ||||
|         self._auto_reconnect_callback = auto_reconnect_callback | ||||
| 
 | ||||
|  | @ -232,6 +234,13 @@ class MTProtoSender: | |||
|                     self.auth_key.key, self._state.time_offset =\ | ||||
|                         await authenticator.do_authentication(plain) | ||||
| 
 | ||||
|                     # This is *EXTREMELY* important since we don't control | ||||
|                     # external references to the authorization key, we must | ||||
|                     # notify whenever we change it. This is crucial when we | ||||
|                     # switch to different data centers. | ||||
|                     if self._auth_key_callback: | ||||
|                         self._auth_key_callback(self.auth_key) | ||||
| 
 | ||||
|                     break | ||||
|                 except (SecurityError, AssertionError) as e: | ||||
|                     __log__.warning('Attempt {} at new auth_key failed: {}' | ||||
|  | @ -420,6 +429,9 @@ class MTProtoSender: | |||
|                     __log__.warning('Invalid buffer %s', e) | ||||
| 
 | ||||
|                 self.auth_key.key = None | ||||
|                 if self._auth_key_callback: | ||||
|                     self._auth_key_callback(None) | ||||
| 
 | ||||
|                 self._start_reconnect() | ||||
|                 return | ||||
|             except Exception: | ||||
|  |  | |||
|  | @ -1,3 +1,3 @@ | |||
| # Versions should comply with PEP440. | ||||
| # This line is parsed in setup.py: | ||||
| __version__ = '1.4' | ||||
| __version__ = '1.4.1' | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user