async def _prepare_log_on_msg( self, account_name: str, machine_id: bytes, os_value: int, sentry) -> "steammessages_clientserver_login_pb2.CMsgClientLogon": message = steammessages_clientserver_login_pb2.CMsgClientLogon() message.account_name = account_name message.protocol_version = self._MSG_PROTOCOL_VERSION message.client_package_version = self._MSG_CLIENT_PACKAGE_VERSION message.client_language = "english" message.should_remember_password = True message.supports_rate_limit_response = True message.steamguard_dont_remember_computer = False message.obfuscated_private_ip.v4 = await self._get_obfuscated_private_ip( ) message.qos_level = 3 message.machine_name = socket.gethostname() message.client_os_type = os_value if os_value >= 0 else 0 message.machine_id = machine_id if sentry: logger.info("Sentry present") message.eresult_sentryfile = EResult.OK message.sha_sentryfile = sentry else: message.eresult_sentryfile = EResult.FileNotFound return message
async def log_on_password(self, account_name, password, two_factor, two_factor_type): message = steammessages_clientserver_login_pb2.CMsgClientLogon() message.account_name = account_name message.protocol_version = 65579 message.password = password message.should_remember_password = True message.supports_rate_limit_response = True if two_factor: if two_factor_type == 'email': message.auth_code = two_factor elif two_factor_type == 'mobile': message.two_factor_code = two_factor logger.info("Sending log on message using credentials") await self._send(EMsg.ClientLogon, message)
async def log_on_token(self, steam_id, account_name, token): message = steammessages_clientserver_login_pb2.CMsgClientLogon() message.account_name = account_name message.protocol_version = 65579 message.should_remember_password = True message.supports_rate_limit_response = True message.login_key = token sentry = await self.sentry() if sentry: logger.info("Sentry present") message.eresult_sentryfile = EResult.OK message.sha_sentryfile = sentry self.steam_id = steam_id logger.info("Sending log on message using token") await self._send(EMsg.ClientLogon, message)
async def log_on(self, steam_id, account_name, token): # magic numbers taken from JavaScript Steam client message = steammessages_clientserver_login_pb2.CMsgClientLogon() message.account_name = account_name message.protocol_version = 65580 message.qos_level = 2 message.client_os_type = 4294966596 message.ui_mode = 4 message.chat_mode = 2 message.web_logon_nonce = token message.client_instance_id = 0 try: self._steam_id = steam_id await self._send(EMsg.ClientLogon, message) except Exception: self._steam_id = None raise
async def log_on_token(self, steam_id, account_name, token, used_server_cell_id): message = steammessages_clientserver_login_pb2.CMsgClientLogon() message.account_name = account_name message.cell_id = used_server_cell_id message.protocol_version = 65580 message.should_remember_password = True message.supports_rate_limit_response = True message.login_key = token message.obfuscated_private_ip.v4 = struct.unpack(">L", socket.inet_aton(socket.gethostbyname(socket.gethostname())))[0] ^ 0xF00DBAAD sentry = await self.sentry() if sentry: logger.info("Sentry present") message.eresult_sentryfile = EResult.OK message.sha_sentryfile = sentry self.steam_id = steam_id logger.info("Sending log on message using token") await self._send(EMsg.ClientLogon, message)
async def log_on_password(self, account_name, password, two_factor, two_factor_type): def sanitize_password(password): return ''.join([i if ord(i) < 128 else '' for i in password]) message = steammessages_clientserver_login_pb2.CMsgClientLogon() message.account_name = account_name message.protocol_version = 65580 message.password = sanitize_password(password) message.should_remember_password = True message.supports_rate_limit_response = True message.obfuscated_private_ip.v4 = struct.unpack(">L", socket.inet_aton(socket.gethostbyname(socket.gethostname())))[0] ^ 0xF00DBAAD if two_factor: if two_factor_type == 'email': message.auth_code = two_factor elif two_factor_type == 'mobile': message.two_factor_code = two_factor logger.info("Sending log on message using credentials") await self._send(EMsg.ClientLogon, message)