forked from cancan101/xbmc-coursera
/
courseraLogin.py
96 lines (66 loc) · 2.45 KB
/
courseraLogin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
'''
Created on Nov 5, 2012
@author: alex
'''
import urllib2, urllib
import cookielib
import random
import string
import json
#########
def saveUserData(cookies, external_id, public_id):
data = {'cookies':cookies, 'external_id': external_id, 'public_id':public_id}
cookie_file = open('cookie.txt', 'w')
json.dump(obj=data, fp=cookie_file, indent=3)
cookie_file.close()
CSRFT_TOKEN_COOKIE_NAME = "csrftoken"
def cookieToDict(cookie):
ret = {}
for name in ("version", "name", "value",
"port", "port_specified",
"domain", "domain_specified", "domain_initial_dot",
"path", "path_specified",
"secure", "expires", "discard", "comment", "comment_url",
):
attr = getattr(cookie, name)
ret[name] = attr
ret["rest"] = cookie._rest
ret["rfc2109"] = cookie.rfc2109
return ret
def saveCJ(cj):
cookies = []
for cookie in cj:
cookies.append(cookieToDict(cookie))
return cookies
def makeCSRFToken():
csrftoken = ''.join(random.choice(string.ascii_uppercase + string.digits + string.ascii_lowercase) for _ in xrange(24))
return csrftoken
def makeLoginRequest(username, password, csrftoken):
params = urllib.urlencode({'email_address':username, 'password':password})
req = urllib2.Request("https://www.coursera.org/maestro/api/user/login", params)
req.add_header('Referer','https://www.coursera.org/account/signin')
req.add_header('Host',"www.coursera.org")
req.add_header('X-CSRFToken', csrftoken)
req.add_header('X-Requested-With', 'XMLHttpRequest')
return req
def login(username, password):
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#req = urllib2.Request('https://www.coursera.org/account/signin')
#req.add_header('Host',"www.coursera.org")
#opener.open(req)
csrftoken = makeCSRFToken()
#print "%s=%s" % (CSRFT_TOKEN_COOKIE_NAME, csrftoken)
c = cookielib.Cookie(None, CSRFT_TOKEN_COOKIE_NAME, csrftoken, None, None, "", None, None, "/", None, True, None, None, None, None, None, None)
cj.set_cookie(c)
req = makeLoginRequest(username, password, csrftoken)
response = opener.open(req)
logIn_resp = response.read()
logIn_resp_dict = json.loads(logIn_resp)
#print logIn_resp_dict
external_id = str(logIn_resp_dict["external_id"])
public_id = str(logIn_resp_dict["id"])
cj.clear("", "/", CSRFT_TOKEN_COOKIE_NAME)
#cj.clear("www.coursera.org", "/", "maestro_login")
#cj.clear("www.coursera.org", "/", "sessionid")
return external_id, public_id, saveCJ(cj)