diff --git a/telethon/crypto/cdn_decrypter.py b/telethon/crypto/cdn_decrypter.py index ab90cca4..40653c01 100644 --- a/telethon/crypto/cdn_decrypter.py +++ b/telethon/crypto/cdn_decrypter.py @@ -1,6 +1,6 @@ from hashlib import sha256 -from ..tl import JsonSession +from ..tl import Session from ..tl.functions.upload import GetCdnFileRequest, ReuploadCdnFileRequest from ..tl.types.upload import CdnFileReuploadNeeded from ..crypto import AESModeCTR @@ -36,7 +36,7 @@ class CdnDecrypter: # Create a new client on said CDN dc = client._get_dc(cdn_redirect.dc_id, cdn=True) - session = JsonSession(client.session) + session = Session(client.session) session.server_address = dc.ip_address session.port = dc.port cdn_client = client_cls( # Avoid importing TelegramBareClient diff --git a/telethon/telegram_bare_client.py b/telethon/telegram_bare_client.py index 42e083f7..22075dc5 100644 --- a/telethon/telegram_bare_client.py +++ b/telethon/telegram_bare_client.py @@ -15,7 +15,7 @@ from .utils import get_appropriated_part_size from .crypto import rsa, CdnDecrypter # For sending and receiving requests -from .tl import TLObject, JsonSession +from .tl import TLObject, Session from .tl.all_tlobjects import layer from .tl.functions import ( InitConnectionRequest, InvokeWithLayerRequest, PingRequest @@ -230,7 +230,7 @@ class TelegramBareClient: # region Working with different Data Centers - def _get_dc(self, dc_id, ipv6=True, cdn=False): + def _get_dc(self, dc_id, ipv6=False, cdn=False): """Gets the Data Center (DC) associated to 'dc_id'""" if not self.dc_options: raise ConnectionError( @@ -286,7 +286,7 @@ class TelegramBareClient: # # Construct this session with the connection parameters # (system version, device model...) from the current one. - session = JsonSession(self.session) + session = Session(self.session) session.server_address = dc.ip_address session.port = dc.port client = TelegramBareClient( diff --git a/telethon/telegram_client.py b/telethon/telegram_client.py index ec4619df..771a207e 100644 --- a/telethon/telegram_client.py +++ b/telethon/telegram_client.py @@ -15,7 +15,7 @@ from .errors import (RPCError, UnauthorizedError, InvalidParameterError, PhoneCodeInvalidError, InvalidChecksumError) # For sending and receiving requests -from .tl import Session, JsonSession, TLObject +from .tl import Session, TLObject # Required to get the password salt from .tl.functions.account import GetPasswordRequest @@ -87,10 +87,9 @@ class TelegramClient(TelegramBareClient): "Refer to Telethon's README.rst for more information.") # Determine what session object we have - # TODO JsonSession until migration is complete (by v1.0) if isinstance(session, str) or session is None: - session = JsonSession.try_load_or_create_new(session) - elif not isinstance(session, Session) and not isinstance(session, JsonSession): + session = Session.try_load_or_create_new(session) + elif not isinstance(session, Session): raise ValueError( 'The given session must be a str or a Session instance.') diff --git a/telethon/tl/__init__.py b/telethon/tl/__init__.py index 404850ba..9ee6a979 100644 --- a/telethon/tl/__init__.py +++ b/telethon/tl/__init__.py @@ -1,2 +1,2 @@ from .tlobject import TLObject -from .session import Session, JsonSession +from .session import Session diff --git a/telethon/tl/session.py b/telethon/tl/session.py index bb68ab89..445afdae 100644 --- a/telethon/tl/session.py +++ b/telethon/tl/session.py @@ -1,6 +1,5 @@ import json import os -import pickle import platform import time from threading import Lock @@ -11,80 +10,6 @@ from .. import helpers as utils class Session: - def __init__(self, session_user_id): - self.session_user_id = session_user_id - self.server_address = '91.108.56.165' - self.port = 443 - self.auth_key = None - self.id = utils.generate_random_long(signed=False) - self.sequence = 0 - self.salt = 0 # Unsigned long - self.time_offset = 0 - self.last_message_id = 0 # Long - # TODO Remove this now unused members, left so unpickling is happy - self.user = None - - def save(self): - """Saves the current session object as session_user_id.session""" - if self.session_user_id: - with open('{}.session'.format(self.session_user_id), 'wb') as file: - pickle.dump(self, file) - - def delete(self): - """Deletes the current session file""" - try: - os.remove('{}.session'.format(self.session_user_id)) - return True - except OSError: - return False - - @staticmethod - def try_load_or_create_new(session_user_id): - """Loads a saved session_user_id session, or creates a new one if none existed before. - If the given session_user_id is None, we assume that it is for testing purposes""" - if session_user_id is None: - return Session(None) - else: - path = '{}.session'.format(session_user_id) - - if file_exists(path): - with open(path, 'rb') as file: - return pickle.load(file) - else: - return Session(session_user_id) - - def generate_sequence(self, confirmed): - """Ported from JsonSession.generate_sequence""" - with Lock(): - if confirmed: - result = self.sequence * 2 + 1 - self.sequence += 1 - return result - else: - return self.sequence * 2 - - def get_new_msg_id(self): - now = time.time() - nanoseconds = int((now - int(now)) * 1e+9) - # "message identifiers are divisible by 4" - new_msg_id = (int(now) << 32) | (nanoseconds << 2) - - if self.last_message_id >= new_msg_id: - new_msg_id = self.last_message_id + 4 - - self.last_message_id = new_msg_id - return new_msg_id - - def update_time_offset(self, correct_msg_id): - """Updates the time offset based on a known correct message ID""" - now = int(time.time()) - correct = correct_msg_id >> 32 - self.time_offset = correct - now - - -# Until migration is complete, we need the original 'Session' class -# for Pickle to keep working. TODO Replace 'Session' by 'JsonSession' by v1.0 -class JsonSession: """This session contains the required information to login into your Telegram account. NEVER give the saved JSON file to anyone, since they would gain instant access to all your messages and contacts. @@ -98,7 +23,7 @@ class JsonSession: those required to init a connection will be copied. """ # These values will NOT be saved - if isinstance(session_user_id, JsonSession): + if isinstance(session_user_id, Session): self.session_user_id = None # For connection purposes @@ -174,10 +99,10 @@ class JsonSession: If session_user_id=None, later .save()'s will have no effect. """ if session_user_id is None: - return JsonSession(None) + return Session(None) else: path = '{}.session'.format(session_user_id) - result = JsonSession(session_user_id) + result = Session(session_user_id) if not file_exists(path): return result @@ -199,16 +124,7 @@ class JsonSession: result.auth_key = AuthKey(data=key) except (json.decoder.JSONDecodeError, UnicodeDecodeError): - # TODO Backwards-compatibility code - old = Session.try_load_or_create_new(session_user_id) - result.id = old.id - result.port = old.port - result.salt = old.salt - result._sequence = old.sequence - result.time_offset = old.time_offset - result.server_address = old.server_address - result.auth_key = old.auth_key - result.save() + pass return result