|
60 | 60 | from getpass import getpass |
61 | 61 | import six |
62 | 62 | import requests |
| 63 | +import requests.cookies |
63 | 64 |
|
64 | | -from steam import webapi |
65 | 65 | from steam.steamid import SteamID |
66 | 66 | from steam.util.web import make_requests_session, generate_session_id |
67 | 67 | from steam.core.crypto import rsa_publickey, pkcs1v15_encrypt |
68 | 68 |
|
69 | 69 | if six.PY2: |
| 70 | + # noinspection PyUnresolvedReferences |
70 | 71 | intBase = long |
| 72 | + # noinspection PyUnresolvedReferences |
71 | 73 | _cli_input = raw_input |
72 | 74 | else: |
73 | 75 | intBase = int |
@@ -325,6 +327,59 @@ def _finalize_login(self, login_response): |
325 | 327 | self.steam_id = SteamID(data['steamid']) |
326 | 328 | self.oauth_token = data['oauth_token'] |
327 | 329 |
|
| 330 | + def oauth_login(self, oauth_token='', steam_id='', language='english'): |
| 331 | + if oauth_token: |
| 332 | + self.oauth_token = oauth_token |
| 333 | + else: |
| 334 | + if self.oauth_token: |
| 335 | + oauth_token = self.oauth_token |
| 336 | + else: |
| 337 | + raise LoginIncorrect('token is not specified') |
| 338 | + |
| 339 | + if steam_id: |
| 340 | + self.steam_id = SteamID(steam_id) |
| 341 | + else: |
| 342 | + if not self.steam_id: |
| 343 | + raise LoginIncorrect('steam_id is not specified') |
| 344 | + |
| 345 | + steam_id = self.steam_id.as_64 |
| 346 | + |
| 347 | + data = { |
| 348 | + 'access_token': oauth_token |
| 349 | + } |
| 350 | + |
| 351 | + try: |
| 352 | + resp = self.session.post('https://api.steampowered.com/IMobileAuthService/GetWGToken/v0001', data=data) |
| 353 | + except requests.exceptions.RequestException as e: |
| 354 | + raise HTTPError(str(e)) |
| 355 | + |
| 356 | + try: |
| 357 | + resp_data = resp.json()['response'] |
| 358 | + except json.decoder.JSONDecodeError as e: |
| 359 | + if 'Please verify your <pre>key=</pre> parameter.' in resp.text: |
| 360 | + raise LoginIncorrect('invalid token') |
| 361 | + else: |
| 362 | + raise e |
| 363 | + |
| 364 | + self.session_id = generate_session_id() |
| 365 | + |
| 366 | + for domain in ['store.steampowered.com', 'help.steampowered.com', 'steamcommunity.com']: |
| 367 | + self.session.cookies.set('steamid', steam_id, domain=domain) |
| 368 | + self.session.cookies.set('birthtime', '-3333', domain=domain) |
| 369 | + self.session.cookies.set('sessionid', self.session_id, domain=domain) |
| 370 | + self.session.cookies.set('mobileClientVersion', '0 (2.1.3)', domain=domain) |
| 371 | + self.session.cookies.set('mobileClient', 'android', domain=domain) |
| 372 | + self.session.cookies.set('steamLogin', str(steam_id) + "%7C%7C" + resp_data['token'], domain=domain) |
| 373 | + self.session.cookies.set('steamLoginSecure', str(steam_id) + "%7C%7C" + resp_data['token_secure'], |
| 374 | + domain=domain, secure=True) |
| 375 | + self.session.cookies.set('Steam_Language', language, domain=domain) |
| 376 | + self.session.cookies.set('birthtime', '-3333', domain=domain) |
| 377 | + self.session.cookies.set('sessionid', self.session_id, domain=domain) |
| 378 | + |
| 379 | + self.logged_on = True |
| 380 | + |
| 381 | + return self.session |
| 382 | + |
328 | 383 |
|
329 | 384 | class WebAuthException(Exception): |
330 | 385 | pass |
|
0 commit comments