def _enter_steam_guard_if_necessary( self, login_response: requests.Response) -> requests.Response: if login_response.json()['requires_twofactor']: self.one_time_code = guard.generate_one_time_code( self.shared_secret) return self._send_login_request() return login_response
def main(): # 获取登录令牌码 one_time_authentication_code = generate_one_time_code(shared_secret) print(one_time_authentication_code) # 获取交易确认码 confirmation_key = generate_confirmation_key(identity_secret, 'conf') print(confirmation_key)
def _enter_steam_guard_if_necessary( self, login_response: requests.Response) -> requests.Response: if login_response.json()['requires_twofactor']: # 获取令牌码 self.one_time_code = guard.generate_one_time_code( self.shared_secret) print("获取令牌码:" + str(self.one_time_code)) # 再执行一次从获取 RSA 公钥和时间开始的登录 return self._send_login_request() return login_response
def _enter_steam_guard_if_necessary( self, login_response: requests.Response) -> requests.Response: response = login_response.json() if response['success']: return login_response if response['requires_twofactor']: self.one_time_code = guard.generate_one_time_code( self.shared_secret) return self._send_login_request() elif response['emailauth_needed']: self.email_auth = self.email_callback() return self._send_login_request() return login_response
def _send_login_request(self, mobile_request=False): one_time_code = '' emailauth = '' second_attempt = False attempts = 0 response = None while attempts < 3: attempts += 1 rsa_params = self._fetch_rsa_params() encrypted_password = self._encrypt_password(rsa_params) rsa_timestamp = rsa_params['rsa_timestamp'] if self.shared_secret: # resp = requests.post(self.API_URL + '/ITwoFactorService/QueryTime/v0001/', # data={'steamid': 0}).json() # print(resp) # timestamp = int(resp['response']['server_time']) timestamp = int(time.time()) one_time_code = guard.generate_one_time_code( self.shared_secret, timestamp) if mobile_request: request_data = self._prepare_mobile_login_request_data( encrypted_password, rsa_timestamp, one_time_code, emailauth) else: request_data = self._prepare_login_request_data( encrypted_password, rsa_timestamp, one_time_code, emailauth) try: response = self.session.post(self.COMMUNITY_URL + '/login/dologin', data=request_data, attempts=3).json() except json.decoder.JSONDecodeError as err: print(err, '/login/dologin') continue if response is None: continue if len(response ) == 3 and self.shared_secret and not second_attempt: time.sleep( 30 - timestamp % 30) # wait until the next code is generated second_attempt = True continue if response.get('emailauth_needed', None): if self.email and self.email_passwd: imap_host = convert_edomain_to_imap( self.email, "../database/imap-hosts.json") time.sleep(10) emailauth = guard.fetch_emailauth(self.email, self.email_passwd, imap_host) continue break if response is None: raise AuthException("Can't log in %s:%s" % (self.username, self.password)) return response
def _enter_steam_guard_if_necessary(self, login_response: requests.Response) -> requests.Response: if login_response.json()['requires_twofactor']: self.one_time_code = guard.generate_one_time_code(self.shared_secret) return self._send_login_request() return login_response
async def _enter_steam_guard(self) -> dict: self.one_time_code = guard.generate_one_time_code(self.shared_secret) return await self._send_login_request()
def browse_gifts(driver, wait, apps, email_addr): games_data = {} try: # a workaround to make phantomjs stop hanging # while opening pages with adult content driver.set_page_load_timeout(5) for app, price in apps: item_category, appid = app try: driver.get('http://store.steampowered.com/{}/{}/'.format( item_category, appid)) except TimeoutException: pass js_id = driver.find_element_by_name('subid').get_attribute( 'value') try: gname = driver.find_element_by_class_name( 'apphub_AppName').text except NoSuchElementException: gname = driver.find_element_by_class_name( 'pageheader').text games_data[gname] = price driver.execute_script( 'javascript:addToCart({});'.format(js_id)) wait.until(EC.title_is('Shopping Cart')) driver.set_page_load_timeout(15) # reset the page load timeout driver.get( 'http://store.steampowered.com/checkout/?purchasetype=gift') while True: try: email_input = wait.until( EC.visibility_of_element_located( (By.ID, 'email_input'))) email_input.send_keys(email_addr) driver.execute_script( "javascript:SubmitGiftDeliveryForm()") wait.until( EC.visibility_of_element_located( (By.CLASS_NAME, 'gift_note_form_area'))) inputs = (driver.find_element_by_id("gift_recipient_name"), driver.find_element_by_id("gift_message_text"), driver.find_element_by_id("gift_signature")) for input_ in inputs: input_.send_keys('`') driver.execute_script("javascript:SubmitGiftNoteForm()") wait.until( EC.visibility_of_element_located( (By.ID, "purchase_confirm_ssa"))) break except TimeoutException as err: if 'form name="logon"' in driver.page_source: logger.info('The session has dropped') username_input = driver.find_element_by_id( 'input_username') username_input.clear() username_input.send_keys(steam_client.login_name) driver.find_element_by_id('input_password').send_keys( steam_client.password) driver.find_element_by_xpath( "//button[@type='submit']").click() twofactor_entry = wait.until( EC.visibility_of_element_located( (By.ID, 'twofactorcode_entry'))) timestamp = int(time.time()) one_time_code = guard.generate_one_time_code( steam_client.mafile['shared_secret'], timestamp) twofactor_entry.send_keys(one_time_code) code_form = driver.find_element_by_id( 'login_twofactorauth_buttonset_entercode') code_form.find_element_by_class_name( 'auth_button_h3').click() elif 'a lot of purchases' in driver.page_source: logger.info('Steam responded with excessive purchases') time.sleep(3800) driver.get( 'http://store.steampowered.com/checkout/?purchasetype=gift' ) elif 'There seems to have been an error' in driver.page_source: logger.info( 'transaction error while buying gifts, waiting for 5 minutes' ) time.sleep(300) driver.get( 'http://store.steampowered.com/checkout/?purchasetype=gift' ) else: raise err driver.find_element_by_id('accept_ssa').click() driver.execute_script("javascript:FinalizeTransaction()") wait.until( EC.visibility_of_element_located((By.ID, "receipt_area"))) except Exception: print(traceback.format_exc()) print('error occured while buying gifts') driver.save_screenshot('test.png') with open('html_error.txt', 'w', encoding='utf-8') as f: f.write(driver.page_source) quit() return games_data
# Example of generating authenticating codes using guard module # To use is you have to obtain 'shared_secret' and 'identity_secret' # From your Steamguard file from steampy.guard import generate_confirmation_key, generate_one_time_code shared_secret = '' identity_secret = '' one_time_authentication_code = generate_one_time_code(shared_secret) print(one_time_authentication_code) confirmation_key = generate_confirmation_key(identity_secret, 'conf') print(confirmation_key)
def test_one_time_code(self): timestamp = 1469184207 code = guard.generate_one_time_code(self.shared_secret, timestamp) self.assertEquals(code, 'P2QJN')
def executeSDA(self, login: str): self.login = login accountData = self.db.findAccount(self.login) return generate_one_time_code(accountData[6])
def get_code(self): return generate_one_time_code(self.config['shared_secret'], int(datetime.now().timestamp()))