@@ -56,8 +56,9 @@ def __init__(self, login=None, password=None, number=None, sec_number=None,
5656 {'http': 'http://127.0.0.1:8888/',
5757 'https': 'https://127.0.0.1:8888/'}
5858 :param auth_handler: Функция для обработки двухфакторной аутентификации,
59- обязана возвращать строку с кодом для
60- прохождения аутентификации
59+ обязана возвращать строку с кодом и булевое значение,
60+ означающее, стоит ли вк запомнить это устройство, для
61+ прохождения аутентификации.
6162 :param captcha_handler: Функция для обработки капчи
6263 :param config_filename: Расположение config файла
6364
@@ -148,8 +149,8 @@ def vk_login(self, captcha_sid=None, captcha_key=None):
148149 remixsid = None
149150
150151 if 'act=authcheck' in response .url :
151- code = self .error_handlers [TWOFACTOR_CODE ]()
152- response = self .twofactor (response , code )
152+ code , remember_device = self .error_handlers [TWOFACTOR_CODE ]()
153+ response = self .twofactor (response , code , remember_device )
153154
154155 if 'remixsid' in self .http .cookies :
155156 remixsid = self .http .cookies ['remixsid' ]
@@ -188,21 +189,27 @@ def vk_login(self, captcha_sid=None, captcha_key=None):
188189 if 'act=blocked' in response .url :
189190 raise AccountBlocked ('Account is blocked' )
190191
191- def twofactor (self , response , code ):
192+ def twofactor (self , response , code , remember_device = False ):
192193 """ Двухфакторная аутентификация
193194 :param reponse: запрос, содержащий страницу с приглашением к аутентификации
194195 :param code: код, который необходимо ввести для успешной аутентификации
196+ :param remember_device: параметр, означающий,
197+ стоит ли запоминать это устройство в целях
198+ избежания повторного ввода кода(default: False)
195199 """
196- assert code != None , "Empty code doesn't acceptable"
197- assert len (code ) == 6 , "Length of code cannot be other than 6."
200+
201+ if code == None :
202+ raise TwoFactorError ("Empty code doesn't acceptable" )
203+ if len (code ) != 6 :
204+ raise TwoFactorError ("Length of code cannot be other than 6." )
198205
199206 auth_hash = search_re (RE_AUTH_HASH , response .text )
200207 url = 'https://vk.com/al_login.php'
201208 if auth_hash :
202209 values = {
203210 'act' : 'a_authcheck_code' ,
204211 'code' : code ,
205- 'remember' : 0 , # TODO: Fix me(device remembering)
212+ 'remember' : int ( remember_device ),
206213 'hash' : auth_hash ,
207214 }
208215 response = self .http .post (url , values , cookies = response .cookies )
@@ -574,6 +581,7 @@ def __init__(self, vk, captcha_sid,
574581
575582 self .key = None
576583 self .url = url
584+ self .image = None
577585
578586 def get_url (self ):
579587 """ Возвращает ссылку на изображение капчи
@@ -585,6 +593,14 @@ def get_url(self):
585593
586594 return self .url
587595
596+ def get_image (self ):
597+ """ Возвращает бинарное изображение капчи, получаемое по get_url()
598+ """
599+
600+ if not self .image :
601+ self .image = self .vk .http .get (self .get_url ()).content
602+ return self .image
603+
588604 def try_again (self , key ):
589605 """ Отправляет запрос заново с ответом капчи
590606
0 commit comments