Skip to content

Commit e6ff85c

Browse files
committed
Add oauth login functionality
1 parent a2d79a0 commit e6ff85c

1 file changed

Lines changed: 56 additions & 1 deletion

File tree

steam/webauth.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,16 @@
6060
from getpass import getpass
6161
import six
6262
import requests
63+
import requests.cookies
6364

64-
from steam import webapi
6565
from steam.steamid import SteamID
6666
from steam.util.web import make_requests_session, generate_session_id
6767
from steam.core.crypto import rsa_publickey, pkcs1v15_encrypt
6868

6969
if six.PY2:
70+
# noinspection PyUnresolvedReferences
7071
intBase = long
72+
# noinspection PyUnresolvedReferences
7173
_cli_input = raw_input
7274
else:
7375
intBase = int
@@ -325,6 +327,59 @@ def _finalize_login(self, login_response):
325327
self.steam_id = SteamID(data['steamid'])
326328
self.oauth_token = data['oauth_token']
327329

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+
328383

329384
class WebAuthException(Exception):
330385
pass

0 commit comments

Comments
 (0)