I finally wrote a (somewhat) clean and feature-complete authentication handler that is not hacked together
parent
6958634cb4
commit
cefae868c3
|
@ -0,0 +1,42 @@
|
|||
import json, urllib2
|
||||
|
||||
# This allows for easier addition of new actions
|
||||
discardResponse = {
|
||||
"validate": True,
|
||||
"invalidate": True,
|
||||
"signout": True,
|
||||
"authenticate": False,
|
||||
"refresh": False
|
||||
}
|
||||
|
||||
# Interaction with the Mojang authentication server
|
||||
def interact(action, data):
|
||||
if discardResponse[action]:
|
||||
try:
|
||||
urllib2.urlopen(urllib2.Request(url="https://authserver.mojang.com/"+action, data=json.dumps(data).encode(),headers={"Content-Type": "application/json"})).read().decode()
|
||||
return True, {}
|
||||
except urllib2.HTTPError:
|
||||
return False, {}
|
||||
else:
|
||||
try:
|
||||
serverResponse = json.loads(urllib2.urlopen(urllib2.Request(url="https://authserver.mojang.com/"+action, data=json.dumps(data).encode(),headers={"Content-Type": "application/json"})).read().decode())
|
||||
return True, serverResponse
|
||||
except urllib2.HTTPError:
|
||||
return False, {}
|
||||
|
||||
# Wrapper functions for interact
|
||||
def authenticateUser(logname, passwd):
|
||||
return interact("authenticate", {'username': logname, 'password': passwd, 'agent': {'version': 1, 'name': 'Minecraft'}})
|
||||
|
||||
def validateToken(accessToken, clientToken):
|
||||
return interact("validate", {'accessToken': accessToken, 'clientToken': clientToken})
|
||||
|
||||
def refreshToken(accessToken, clientToken):
|
||||
return interact("refresh", {'accessToken': accessToken, 'clientToken': clientToken})
|
||||
|
||||
def deauthenticateUser(logname, passwd):
|
||||
return interact("signout", {'username': logname, 'password': passwd})
|
||||
|
||||
def invalidateToken(accessToken, clientToken):
|
||||
return interact("invalidate", {'accessToken': accessToken, 'clientToken': clientToken})
|
||||
|
Reference in New Issue