Upated login style
[gc-dialer] / tests / gv_samples / generate_gv_samples.py
1 #!/usr/bin/env python
2
3 from __future__ import with_statement
4
5 import os
6 import urllib
7 import urllib2
8 import re
9 import traceback
10 import warnings
11 import logging
12 import pprint
13
14 import sys
15 sys.path.append("/usr/lib/dialcentral")
16 sys.path.append("../../src")
17
18 import browser_emu
19 import gv_backend
20
21
22 def main():
23         webpages = [
24                 #("login", gv_backend.GVDialer._loginURL),
25                 #("contacts", gv_backend.GVDialer._contactsURL),
26                 #("voicemail", gv_backend.GVDialer._voicemailURL),
27                 #("sms", gv_backend.GVDialer._smsURL),
28                 #("forward", gv_backend.GVDialer._forwardURL),
29                 #("recent", gv_backend.GVDialer._recentCallsURL),
30                 #("placed", gv_backend.GVDialer._placedCallsURL),
31                 #("recieved", gv_backend.GVDialer._receivedCallsURL),
32                 #("missed", gv_backend.GVDialer._missedCallsURL),
33         ]
34
35
36         # Create Browser
37         browser = browser_emu.MozillaEmulator(1)
38         cookieFile = os.path.join(".", ".gv_cookies.txt")
39         browser.cookies.filename = cookieFile
40
41         # Get Pages
42         for name, url in webpages:
43                 try:
44                         page = browser.download(url)
45                 except StandardError, e:
46                         print e.message
47                         continue
48                 print "Writing to file"
49                 with open("not_loggedin_%s.txt" % name, "w") as f:
50                         f.write(page)
51
52         loginPage = browser.download("http://www.google.com/voice/m")
53         with open("login.txt", "w") as f:
54                 print "Writing to file"
55                 f.write(loginPage)
56         glxRe = re.compile(r"""<input.*?name="GALX".*?value="(.*?)".*?/>""", re.MULTILINE | re.DOTALL)
57         glxTokens = glxRe.search(loginPage)
58         glxToken = glxTokens.group(1)
59
60         # Login
61         username = sys.argv[1]
62         password = sys.argv[2]
63
64         loginData = {
65                 'Email' : username,
66                 'Passwd' : password,
67                 'service': "grandcentral",
68                 "ltmpl": "mobile",
69                 "btmpl": "mobile",
70                 "PersistentCookie": "yes",
71                 "rmShown": "1",
72                 "GALX": glxToken,
73                 "continue": gv_backend.GVDialer._forwardURL,
74         }
75         pprint.pprint(loginData)
76         loginPostData = urllib.urlencode(loginData)
77         pprint.pprint(loginPostData)
78
79         try:
80                 loginSuccessOrFailurePage = browser.download(gv_backend.GVDialer._loginURL, loginPostData)
81         except urllib2.URLError, e:
82                 warnings.warn(traceback.format_exc())
83                 raise RuntimeError("%s is not accesible" % gv_backend.GVDialer._loginURL)
84         with open("loggingin.txt", "w") as f:
85                 print "Writing to file"
86                 f.write(loginSuccessOrFailurePage)
87
88         forwardPage = loginSuccessOrFailurePage
89
90         tokenGroup = gv_backend.GVDialer._tokenRe.search(forwardPage)
91         if tokenGroup is None:
92                 print forwardPage
93                 raise RuntimeError("Could not extract authentication token from GoogleVoice")
94         token = tokenGroup.group(1)
95
96         # Get Pages
97         for name, url in webpages:
98                 try:
99                         page = browser.download(url)
100                 except StandardError, e:
101                         warnings.warn(traceback.format_exc())
102                         continue
103                 print "Writing to file"
104                 with open("loggedin_%s.txt" % name, "w") as f:
105                         f.write(page)
106
107
108 if __name__ == "__main__":
109         logging.basicConfig(level=logging.DEBUG)
110         main()