2 changed files with 86 additions and 1 deletions
@ -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 |
@ -1 +0,0 @@ |
|||
from guard import * |
Loading…
Reference in new issue