2012-10-09 17:16:37 +02:00
|
|
|
import re
|
2012-10-26 15:09:16 +02:00
|
|
|
import urllib2
|
|
|
|
import urllib
|
|
|
|
import threading
|
2012-10-09 17:16:37 +02:00
|
|
|
from hashlib import sha1
|
2012-09-05 21:28:55 +02:00
|
|
|
|
2012-10-09 17:16:37 +02:00
|
|
|
# This function courtesy of barneygale
|
|
|
|
def javaHexDigest(digest):
|
|
|
|
d = long(digest.hexdigest(), 16)
|
|
|
|
if d >> 39*4 & 0x8:
|
|
|
|
d = "-%x" % ((-d) & (2**(40*4)-1))
|
|
|
|
else:
|
|
|
|
d = "%x" % d
|
|
|
|
return d
|
2012-09-05 21:28:55 +02:00
|
|
|
|
2012-10-09 17:16:37 +02:00
|
|
|
def translate_escape(m):
|
|
|
|
c = m.group(1).lower()
|
|
|
|
|
|
|
|
if c == "0": return "\x1b[30m\x1b[21m" # black
|
|
|
|
elif c == "1": return "\x1b[34m\x1b[21m" # dark blue
|
|
|
|
elif c == "2": return "\x1b[32m\x1b[21m" # dark green
|
|
|
|
elif c == "3": return "\x1b[36m\x1b[21m" # dark cyan
|
|
|
|
elif c == "4": return "\x1b[31m\x1b[21m" # dark red
|
|
|
|
elif c == "5": return "\x1b[35m\x1b[21m" # purple
|
|
|
|
elif c == "6": return "\x1b[33m\x1b[21m" # gold
|
|
|
|
elif c == "7": return "\x1b[37m\x1b[21m" # gray
|
|
|
|
elif c == "8": return "\x1b[30m\x1b[1m" # dark gray
|
|
|
|
elif c == "9": return "\x1b[34m\x1b[1m" # blue
|
|
|
|
elif c == "a": return "\x1b[32m\x1b[1m" # bright green
|
|
|
|
elif c == "b": return "\x1b[36m\x1b[1m" # cyan
|
|
|
|
elif c == "c": return "\x1b[31m\x1b[1m" # red
|
|
|
|
elif c == "d": return "\x1b[35m\x1b[1m" # pink
|
|
|
|
elif c == "e": return "\x1b[33m\x1b[1m" # yellow
|
|
|
|
elif c == "f": return "\x1b[37m\x1b[1m" # white
|
|
|
|
elif c == "k": return "\x1b[5m" # random
|
|
|
|
elif c == "l": return "\x1b[1m" # bold
|
|
|
|
elif c == "m": return "\x1b[9m" # strikethrough (escape code not widely supported)
|
|
|
|
elif c == "n": return "\x1b[4m" # underline
|
|
|
|
elif c == "o": return "\x1b[3m" # italic (escape code not widely supported)
|
|
|
|
elif c == "r": return "\x1b[0m" # reset
|
|
|
|
|
|
|
|
return ""
|
2012-09-05 21:28:55 +02:00
|
|
|
|
2012-10-09 17:16:37 +02:00
|
|
|
def translate_escapes(s):
|
2012-10-26 15:09:16 +02:00
|
|
|
return re.sub(ur"\xa7([0-9a-zA-Z])", translate_escape, s) + "\x1b[0m"
|
|
|
|
|
|
|
|
def loginToMinecraft(username, password):
|
|
|
|
try:
|
|
|
|
url = 'https://login.minecraft.net'
|
|
|
|
header = {'Content-Type' : 'application/x-www-form-urlencoded'}
|
|
|
|
data = {'user' : username,
|
|
|
|
'password' : password,
|
|
|
|
'version' : '13'}
|
|
|
|
data = urllib.urlencode(data)
|
|
|
|
req = urllib2.Request(url, data, header)
|
|
|
|
opener = urllib2.build_opener()
|
|
|
|
response = opener.open(req, None, 10)
|
|
|
|
response = response.read()
|
|
|
|
except urllib2.URLError:
|
|
|
|
return {'Response' : "Can't connect to minecraft.net"}
|
|
|
|
if(not "deprecated" in response.lower()):
|
|
|
|
return {'Response' : response}
|
|
|
|
response = response.split(":")
|
|
|
|
sessionid = response[3]
|
|
|
|
toReturn = {'Response' : "Good to go!",
|
|
|
|
'Username' : response[2],
|
|
|
|
'SessionID' : sessionid
|
|
|
|
}
|
|
|
|
return toReturn
|
|
|
|
|
|
|
|
class MinecraftLoginThread(threading.Thread):
|
|
|
|
|
|
|
|
def __init__(self, username, password):
|
|
|
|
threading.Thread.__init__(self)
|
|
|
|
self.username = username
|
|
|
|
self.password = password
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
self.response = loginToMinecraft(self.username, self.password)
|
|
|
|
|
|
|
|
def getResponse(self):
|
|
|
|
return self.response
|
|
|
|
|