4 changed files with 79 additions and 1 deletions
@ -0,0 +1,68 @@ |
|||
""" |
|||
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 |
Loading…
Reference in new issue