pythonhacktoberfeststeamauthenticationauthenticatorsteam-authenticatorsteam-clientsteam-guard-codessteam-websteamworksvalvewebapi
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
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
|
|
|