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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)