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