From 3396d86aedf366c6472131beceb5363b06c055eb Mon Sep 17 00:00:00 2001 From: Philipp Date: Wed, 1 Jun 2016 13:55:51 +0200 Subject: [PATCH] Update and rename twofactorservice.py to authenticator.py --- steam/authenticator.py | 86 +++++++++++++++++++++++++++++++++++++++ steam/twofactorservice.py | 1 - 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 steam/authenticator.py delete mode 100644 steam/twofactorservice.py diff --git a/steam/authenticator.py b/steam/authenticator.py new file mode 100644 index 0000000..13f2e86 --- /dev/null +++ b/steam/authenticator.py @@ -0,0 +1,86 @@ +import json + +from guard import * +from mobileauth import MobileAuth + +class MobileAuthenticator: + def __init__(self, username, password, authenticatorCredentials=False): + self.username = username + self.password = password + self.ready = None + self.mobile = MobileAuth(username, password) + self.credentials = authenticatorCredentials or { } + + def login(self): + if self.ready != None: + return False + + if 'secret' in self.credentials.keys(): + code = generate_twofactor_code(self.credentials.get('secret')) + self.mobile.login(twofactor_code=code) + return True + else: + try: + self.mobile.login() + except EmailCodeRequired: + raise AuthenticatorAlreadyActive('Two factor authentication already active') + except TwoFactorCodeRequired + raise AuthenticatorAlreadyActive('Two factor authentication already active') + else: + self.ready = False + return True + + def addAuthenticator(self): + if self.ready != False: + return None + + + data = { + 'steamid': self.mobile.steamid, + 'sms_phone_id': 1, + 'access_token': self.mobile.oauth['oauth_token'], + 'authenticator_time': get_time_offset(), + 'authenticator_type': 1, + 'device_identifier': generate_device_id(self.mobile.steamid) + } + + response = self.mobile.request('https://api.steampowered.com/ITwoFactorService/AddAuthenticator/v1/', data) + if response.status_code == 200: + responseData = json.loads(response.text) + self.credentials = responseData['response'] + self.credentials['secret'] = self.credentials['uri'].split('?secret=')[1].split('&issuer')[0] + return True + else: + return [False, responseData] + + def finalizeAuthenticator(self, smsCode=None, tries=1): + if not smsCode or self.ready != False: + return None + + timestamp = get_time_offset() + + data = { + 'steamid': self.mobile.steamid, + 'access_token': self.mobile.oauth['oauth_token'], + 'authenticator_time': timestamp, + 'authenticator_code': generate_twofactor_code_for_time(self.credentials['secret'], timestamp), + 'activation_code': smsCode + } + response = self.mobile.request('https://api.steampowered.com/ITwoFactorService/FinalizeAddAuthenticator/v1/', data) + if response.status_code == 200: + responseData = json.loads(response.text) + if responseData['success']: + return True + else: + if responseData['want_more'] and tries < 30: + return self.finalizeAuthenticator(smsCode, tries) + else: + return False + else: + return False + +class MobileAuthenticatorException(Exception): + pass + +class AuthenticatorAlreadyActive(MobileAuthenticatorException) + pass diff --git a/steam/twofactorservice.py b/steam/twofactorservice.py deleted file mode 100644 index 4d42a89..0000000 --- a/steam/twofactorservice.py +++ /dev/null @@ -1 +0,0 @@ -from guard import *