[pyKoL-users] SF.net SVN: pykol: [10] kolsite.py
Brought to you by:
scelis
|
From: <mi...@us...> - 2007-04-07 20:43:01
|
Revision: 10
http://pykol.svn.sourceforge.net/pykol/?rev=10&view=rev
Author: misza13
Date: 2007-04-07 13:42:58 -0700 (Sat, 07 Apr 2007)
Log Message:
-----------
Major improvement of the login system (supports server rotation).
Modified Paths:
--------------
kolsite.py
Modified: kolsite.py
===================================================================
--- kolsite.py 2007-03-31 21:05:49 UTC (rev 9)
+++ kolsite.py 2007-04-07 20:42:58 UTC (rev 10)
@@ -41,16 +41,18 @@
class KoLSite:
- def __init__(self, hostname):
- self.hostname = hostname
- self.cookie = ''
+ def __init__(self):
+ self.hostname = 'www.kingdomofloathing.com'
+ self.cookie = None
def getPage(self, address, data=''):
+ #print 'GET http://' + self.hostname + '/' + address
conn = httplib.HTTPConnection(self.hostname)
conn.putrequest('GET', '/' + address)
- conn.putheader('Cookie', self.cookie)
+ if self.cookie:
+ conn.putheader('Cookie', self.cookie)
conn.endheaders()
conn.send('')
@@ -66,10 +68,14 @@
def postData(self, address, data=''):
+ #print 'POST http://' + self.hostname + '/' + address
conn = httplib.HTTPConnection(self.hostname)
conn.putrequest('POST', '/' + address)
+ if self.cookie:
+ conn.putheader('Cookie', self.cookie)
conn.putheader('Content-Length', str(len(data)))
+ conn.putheader('Content-Type', 'application/x-www-form-urlencoded')
conn.endheaders()
conn.send(data)
@@ -86,13 +92,14 @@
formFields['loggingin'] = 'Yup.'
formFields['loginname'] = nick
if challenge:
+ print 'Logging in using challenge...'
formFields['challenge'] = challenge
formFields['response'] = challengePassword(challenge,password)
else:
+ print 'Logging in without challenge...'
formFields['password'] = password
formFields['secure'] = '1'
- print 'Now logging in...'
response, data = self.postForm('login.php',formFields)
if response.status == 302:
@@ -111,7 +118,17 @@
def getChallenge(self):
print 'Getting login challenge...'
- response, data = self.getPage('login.php')
+ response, data = self.getPage('')
+ while response.status == 302:
+ #We got redirected
+ locRE = re.search('http://(www\d?.kingdomofloathing.com)/(.*)',response.getheader('location'))
+ if locRE: #Bounced off to a different server?
+ self.hostname = locRE.group(1)
+ response, data = self.getPage(locRE.group(2))
+ else: #Same server, getting loginid=
+ response, data = self.getPage(response.getheader('location'))
+
+ #We're there. Looking for challenge...
challenge = re.search('<input type=hidden name=challenge value="([0-9a-f]+)">',data)
if challenge:
return challenge.group(1)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|