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