示例#1
0
文件: login.py 项目: Zwork101/steampy
 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)
示例#3
0
 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
示例#4
0
    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
示例#5
0
    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
示例#6
0
文件: login.py 项目: bukson/steampy
 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
示例#7
0
文件: login.py 项目: slavugan/steampy
 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()
示例#8
0
    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
示例#9
0
# 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)
示例#10
0
 def test_one_time_code(self):
     timestamp = 1469184207
     code = guard.generate_one_time_code(self.shared_secret, timestamp)
     self.assertEquals(code, 'P2QJN')
示例#11
0
文件: main.py 项目: Iveen1/BotSDA
 def executeSDA(self, login: str):
     self.login = login
     accountData = self.db.findAccount(self.login)
     return generate_one_time_code(accountData[6])
示例#12
0
 def get_code(self):
     return generate_one_time_code(self.config['shared_secret'],
                                   int(datetime.now().timestamp()))