From dd7f82ee0bba0eaa1184728c1589274be1691f2c Mon Sep 17 00:00:00 2001 From: mwiegand Date: Sun, 10 Apr 2022 21:19:36 +0200 Subject: [PATCH] oauth --- app.py | 120 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 68 insertions(+), 52 deletions(-) diff --git a/app.py b/app.py index 93e25d9..f003e52 100755 --- a/app.py +++ b/app.py @@ -9,63 +9,79 @@ from os import environ import imaplib import email from time import sleep - -# get previously known message ids from imap server - -print('loggin into IMAP Server:', environ['IMAP_HOST']) - -Mailbox = imaplib.IMAP4_SSL(environ['IMAP_HOST']) -Mailbox.login(environ['IMAP_USER'], environ['IMAP_PASSWORD']) -Mailbox.select() -typ, data = Mailbox.search(None, '(FROM "noreply@steampowered.com" SUBJECT "Your Steam account: Access from new web or mobile device")') -old_msg_ids = data[0].split() - -# perform steam login +from os import path print('loggin into STEAM:', environ['STEAM_USERNAME']) +user = wa.MobileWebAuth(environ['STEAM_USERNAME']) -user = wa.WebAuth(environ['STEAM_USERNAME']) - +# try oauth token try: - user.login(environ['STEAM_PASSWORD']) -except (wa.LoginIncorrect) as exp: - print('ERROR: loggin incorrect') - raise -except (wa.CaptchaRequired) as exp: - print('ERROR: captcha required:', user.captcha_url) - #user.login(password=environ['STEAM_PASSWORD'], captcha=input("Captcha: ")) - raise -except wa.TwoFactorCodeRequired: - print('ERROR: 2FA code required') - #user.login(twofactor_code=input("2FA Code: ")) - raise -except wa.EmailCodeRequired: - print('getting email code') - while True: - typ, data = Mailbox.search(None, '(FROM "noreply@steampowered.com" SUBJECT "Your Steam account: Access from new web or mobile device")') - newest_msg_id = data[0].split()[-1] - - if newest_msg_id in old_msg_ids: - print('refreshing messages') - sleep(1) - else: - print('messages received') - break + print('trying oauth login') + + with open('oauth_token', 'r') as file: + user.oauth_login(file.read(), steam_id=environ['STEAM_ID'], language='english') + + print('oauth login successful') +except (wa.LoginIncorrect, FileNotFoundError) as exp: + print('oauth login failed:', exp) + + # get previously known message ids from imap server - typ, data = Mailbox.fetch(newest_msg_id, '(RFC822)') - msg = email.message_from_bytes(data[0][1]) - - for payload in msg.get_payload(): - if ( - payload.get_content_maintype() == 'text' and - payload.get_content_subtype() == 'plain' - ): - plaintext_lines = payload.get_payload(decode=True).decode().splitlines() - code = plaintext_lines[plaintext_lines.index('Login Code') + 1] - break - - print('code found:', code) - user.login(email_code=code) + print('loggin into IMAP Server:', environ['IMAP_HOST']) + + Mailbox = imaplib.IMAP4_SSL(environ['IMAP_HOST']) + Mailbox.login(environ['IMAP_USER'], environ['IMAP_PASSWORD']) + Mailbox.select() + typ, data = Mailbox.search(None, '(FROM "noreply@steampowered.com" SUBJECT "Your Steam account: Access from new web or mobile device")') + old_msg_ids = data[0].split() + + # perform steam login + + try: + user.login(environ['STEAM_PASSWORD']) + except (wa.LoginIncorrect) as exp: + print('ERROR: loggin incorrect') + raise + except (wa.CaptchaRequired) as exp: + print('ERROR: captcha required:', user.captcha_url) + #user.login(password=environ['STEAM_PASSWORD'], captcha=input("Captcha: ")) + raise + except wa.TwoFactorCodeRequired: + print('ERROR: 2FA code required') + #user.login(twofactor_code=input("2FA Code: ")) + raise + except wa.EmailCodeRequired: + print('getting email code') + while True: + typ, data = Mailbox.search(None, '(FROM "noreply@steampowered.com" SUBJECT "Your Steam account: Access from new web or mobile device")') + newest_msg_id = data[0].split()[-1] + + if newest_msg_id in old_msg_ids: + print('refreshing messages') + sleep(1) + else: + print('messages received') + break + + typ, data = Mailbox.fetch(newest_msg_id, '(RFC822)') + msg = email.message_from_bytes(data[0][1]) + + for payload in msg.get_payload(): + if ( + payload.get_content_maintype() == 'text' and + payload.get_content_subtype() == 'plain' + ): + plaintext_lines = payload.get_payload(decode=True).decode().splitlines() + code = plaintext_lines[plaintext_lines.index('Login Code') + 1] + break + + print('code found:', code) + user.login(email_code=code, language='english') + + with open('oauth_token', 'w') as file: + file.write(user.oauth_token) + + print('password login successful') # CRAWL