@@ -11,24 +11,31 @@ class StringSessionStorage(BaseSessionStorage):
1111 Char dc_id (1 byte, unsigned)
1212 Boolean test_mode (1 byte)
1313 Long long user_id (8 bytes, signed)
14+ Boolean is_bot (1 byte)
1415 Bytes auth_key (256 bytes)
1516
1617 Uses Base64 encoding for printable representation
1718 """
18- PACK_FORMAT = '<B?q256s'
19+ PACK_FORMAT = '<B?q?256s'
20+
21+ def _unpack (self , data ):
22+ return struct .unpack (self .PACK_FORMAT , data )
23+
24+ def _pack (self ):
25+ return struct .pack (self .PACK_FORMAT , self .dc_id , self .test_mode , self .user_id , self .is_bot , self .auth_key )
1926
2027 def load_session (self ):
2128 try :
2229 session_string = self .session_data [1 :]
2330 session_string += '=' * (4 - len (session_string ) % 4 ) # restore padding
2431 decoded = base64 .b64decode (session_string , b'-_' )
25- self .dc_id , self .test_mode , self .user_id , self .auth_key = struct . unpack ( self .PACK_FORMAT , decoded )
32+ self .dc_id , self .test_mode , self .user_id , self .is_bot , self . auth_key = self ._unpack ( decoded )
2633 except (struct .error , binascii .Error ):
2734 raise SessionDoesNotExist ()
2835
2936 def save_session (self , sync = False ):
3037 if not sync :
31- packed = struct . pack ( self .PACK_FORMAT , self . dc_id , self . test_mode , self . user_id , self . auth_key )
38+ packed = self ._pack ( )
3239 encoded = ':' + base64 .b64encode (packed , b'-_' ).decode ('latin-1' ).rstrip ('=' )
3340 split = '\n ' .join (['"{}"' .format (encoded [i : i + 50 ]) for i in range (0 , len (encoded ), 50 )])
3441 print ('Created session string:\n {}' .format (split ))
0 commit comments