generate_emu_config: Fix credentials

use an updated fork
This commit is contained in:
detiam 2024-11-01 05:19:55 +08:00
parent 5b02ecb1cf
commit 481bd94cbf
No known key found for this signature in database
GPG Key ID: 8F3FBE68AEB4883C
2 changed files with 59 additions and 53 deletions

View File

@ -6,8 +6,7 @@ from external_components import (
)
from controller_config_generator import parse_controller_vdf
from steam.client import SteamClient
from steam.client.cdn import CDNClient
from steam.enums import common
from steam.webauth import WebAuth
from steam.enums.common import EResult
from steam.enums.emsg import EMsg
from steam.core.msg import MsgProto
@ -691,32 +690,6 @@ def main():
sys.exit(1)
client = SteamClient()
login_tmp_folder = os.path.join(get_exe_dir(RELATIVE_DIR), "login_temp")
if not os.path.exists(login_tmp_folder):
os.makedirs(login_tmp_folder)
client.set_credential_location(login_tmp_folder)
# first read the 'my_login.txt' file
my_login_file = os.path.join(get_exe_dir(RELATIVE_DIR), "my_login.txt")
if not ANON_LOGIN and os.path.isfile(my_login_file):
filedata = ['']
with open(my_login_file, "r", encoding="utf-8") as f:
filedata = f.readlines()
filedata = list(map(lambda s: s.replace("\r", "").replace("\n", ""), filedata))
filedata = [l for l in filedata if l]
if len(filedata) == 2:
USERNAME = filedata[0]
PASSWORD = filedata[1]
# then allow the env vars to override the login details
env_username = os.environ.get('GSE_CFG_USERNAME', None)
env_password = os.environ.get('GSE_CFG_PASSWORD', None)
if env_username:
USERNAME = env_username
if env_password:
PASSWORD = env_password
if ANON_LOGIN:
result = client.anonymous_login()
trials = 5
@ -724,33 +697,49 @@ def main():
time.sleep(1000)
result = client.anonymous_login()
trials -= 1
elif (len(USERNAME) == 0 or len(PASSWORD) == 0):
client.cli_login()
else:
result = client.login(USERNAME, password=PASSWORD)
auth_code, two_factor_code = None, None
# first read the 'my_login.txt' file
my_login_file = os.path.join(get_exe_dir(RELATIVE_DIR), "my_login.txt")
if not ANON_LOGIN and os.path.isfile(my_login_file):
filedata = ['']
with open(my_login_file, "r", encoding="utf-8") as f:
filedata = f.readlines()
filedata = list(map(lambda s: s.replace("\r", "").replace("\n", ""), filedata))
filedata = [l for l in filedata if l]
if len(filedata) == 2:
USERNAME = filedata[0]
PASSWORD = filedata[1]
# then allow the env vars to override the login details
env_username = os.environ.get('GSE_CFG_USERNAME', None)
env_password = os.environ.get('GSE_CFG_PASSWORD', None)
if env_username:
USERNAME = env_username
if env_password:
PASSWORD = env_password
# still no username? ask user
if not USERNAME:
USERNAME = input("Steam user: ")
# the file to save/load credentials
REFRESH_TOKENS = os.path.join(get_exe_dir(RELATIVE_DIR), "refresh_tokens.json")
refresh_tokens = {}
if os.path.isfile(REFRESH_TOKENS):
with open(REFRESH_TOKENS) as f:
try:
lf = json.load(f)
refresh_tokens = lf if isinstance(lf, dict) else {}
except:
pass
REFRESH_TOKEN = refresh_tokens.get(USERNAME)
webauth, result = WebAuth(), None
while result in (
EResult.AccountLogonDenied, EResult.InvalidLoginAuthCode,
EResult.AccountLoginDeniedNeedTwoFactor, EResult.TwoFactorCodeMismatch,
EResult.TryAnotherCM, EResult.ServiceUnavailable,
EResult.InvalidPassword,
):
EResult.InvalidPassword, None):
if result == EResult.InvalidPassword:
print("invalid password, the password you set is wrong.")
exit(1)
elif result in (EResult.AccountLogonDenied, EResult.InvalidLoginAuthCode):
prompt = ("Enter email code: " if result == EResult.AccountLogonDenied else
"Incorrect code. Enter email code: ")
auth_code, two_factor_code = input(prompt), None
elif result in (EResult.AccountLoginDeniedNeedTwoFactor, EResult.TwoFactorCodeMismatch):
prompt = ("Enter 2FA code: " if result == EResult.AccountLoginDeniedNeedTwoFactor else
"Incorrect code. Enter 2FA code: ")
auth_code, two_factor_code = None, input(prompt)
elif result in (EResult.TryAnotherCM, EResult.ServiceUnavailable):
if result in (EResult.TryAnotherCM, EResult.ServiceUnavailable):
if prompt_for_unavailable and result == EResult.ServiceUnavailable:
while True:
answer = input("Steam is down. Keep retrying? [y/n]: ").lower()
@ -760,8 +749,25 @@ def main():
if answer == 'n': break
client.reconnect(maxdelay=15)
elif result == EResult.InvalidPassword:
print("invalid password or refresh_token,")
print(f"correct the password or/and delete '{REFRESH_TOKENS}' and try again.")
exit(1)
result = client.login(USERNAME, PASSWORD, None, auth_code, two_factor_code)
if not REFRESH_TOKEN:
try:
webauth.cli_login(USERNAME, PASSWORD)
except Exception as e:
print(f'Unknown exception: {e}, maybe some account info is wrong?')
exit(1)
USERNAME, PASSWORD = webauth.username, webauth.password
REFRESH_TOKEN = webauth.refresh_token
result = client.login(USERNAME, PASSWORD, REFRESH_TOKEN)
with open(REFRESH_TOKENS, 'w') as f:
refresh_tokens.update({USERNAME: REFRESH_TOKEN})
json.dump(refresh_tokens,f,indent=4)
# read and prepend top_owners_ids.txt
top_owners_file = os.path.join(get_exe_dir(RELATIVE_DIR), "top_owners_ids.txt")

View File

@ -1,4 +1,4 @@
steam[client]
steam[client] @ git+https://github.com/detiam/steam_websocket@b8239912e6a190f490aede529c08b5049096bdc8
pyinstaller
requests
certifi