You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

68 lines
1.8 KiB

"""
Web related features
"""
from Crypto.Hash import SHA
from Crypto.Random import new as randombytes
from steam import WebAPI
from steam.core.crypto import generate_session_key, symmetric_encrypt
from steam.util.web import make_requests_session
class Web(object):
def __init__(self):
super(Web, self).__init__()
def get_web_session_cookies(self):
"""
Get web authentication cookies via WebAPI's ``AuthenticateUser``
.. note::
only valid during the current steam session
:return: dict with authentication cookies
:rtype: :class:`dict`, :class:`None`
"""
if not self.logged_on:
return None
skey, ekey = generate_session_key()
data = {
'steamid': self.steam_id,
'sessionkey': ekey,
'encrypted_loginkey': symmetric_encrypt(self.cm.webapi_authenticate_user_nonce, skey),
}
try:
api = WebAPI(None)
resp = api.ISteamUserAuth.AuthenticateUser(**data)
except Exception as exp:
self._logger.debug("get_web_session_cookies error: %s" % str(exp))
return None
return {
'sessionid': SHA.new(randombytes().read(32)).hexdigest(),
'steamLogin': resp['authenticateuser']['token'],
'steamLoginSecure': resp['authenticateuser']['tokensecure'],
}
def get_web_session(self):
"""
See :meth:`get_web_session_cookies`
:return: authenticated session ready for use
:rtype: :class:`requests.Session`, :class:`None`
"""
cookies = self.get_web_session_cookies()
if cookies is None:
return None
session = make_requests_session()
for name, val in cookies.items():
session.cookies.set(name, val)
return session