112 lines
4.2 KiB
Python
112 lines
4.2 KiB
Python
from pandac.PandaModules import *
|
|
from direct.distributed.MsgTypes import *
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from . import LoginBase
|
|
from . import TTAccount
|
|
from .TTAccount import TTAccountException
|
|
from direct.distributed.PyDatagram import PyDatagram
|
|
|
|
class LoginTTAccount(LoginBase.LoginBase, TTAccount.TTAccount):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('LoginTTAcct')
|
|
|
|
def __init__(self, cr):
|
|
LoginBase.LoginBase.__init__(self, cr)
|
|
TTAccount.TTAccount.__init__(self, cr)
|
|
self.useTTSpecificLogin = base.config.GetBool('tt-specific-login', 0)
|
|
self.notify.info('self.useTTSpecificLogin =%s' % self.useTTSpecificLogin)
|
|
|
|
def supportsRelogin(self):
|
|
return 1
|
|
|
|
def sendLoginMsg(self):
|
|
cr = self.cr
|
|
datagram = PyDatagram()
|
|
if self.useTTSpecificLogin:
|
|
datagram.addUint16(CLIENT_LOGIN_TOONTOWN)
|
|
self.__addPlayToken(datagram)
|
|
datagram.addString(cr.serverVersion)
|
|
datagram.addUint32(cr.hashVal)
|
|
self.__addTokenType(datagram)
|
|
datagram.addString(cr.wantMagicWords)
|
|
else:
|
|
datagram.addUint16(CLIENT_LOGIN_2)
|
|
self.__addPlayToken(datagram)
|
|
datagram.addString(cr.serverVersion)
|
|
datagram.addUint32(cr.hashVal)
|
|
self.__addTokenType(datagram)
|
|
datagram.addString(cr.validateDownload)
|
|
datagram.addString(cr.wantMagicWords)
|
|
cr.send(datagram)
|
|
|
|
def resendPlayToken(self):
|
|
cr = self.cr
|
|
datagram = PyDatagram()
|
|
datagram.addUint16(CLIENT_SET_SECURITY)
|
|
self.__addPlayToken(datagram)
|
|
self.__addTokenType(datagram)
|
|
cr.send(datagram)
|
|
|
|
def __addPlayToken(self, datagram):
|
|
self.playToken = self.playToken.strip()
|
|
datagram.addString(self.playToken)
|
|
|
|
def __addTokenType(self, datagram):
|
|
if self.useTTSpecificLogin:
|
|
datagram.addInt32(CLIENT_LOGIN_3_DISL_TOKEN)
|
|
elif self.playTokenIsEncrypted:
|
|
datagram.addInt32(CLIENT_LOGIN_2_PLAY_TOKEN)
|
|
else:
|
|
datagram.addInt32(CLIENT_LOGIN_2_PLAY_TOKEN)
|
|
|
|
def getErrorCode(self):
|
|
return self.response.getInt('errorCode', 0)
|
|
|
|
def needToSetParentPassword(self):
|
|
return self.response.getBool('secretsPasswordNotSet', 0)
|
|
|
|
def authenticateParentPassword(self, loginName, password, parentPassword):
|
|
if base.cr.withParentAccount:
|
|
self.notify.error('authenticateParentPassword called, but with parentAccount')
|
|
try:
|
|
errorMsg = self.talk('authenticateParentUsernameAndPassword', data=self.makeLoginDict(loginName, parentPassword))
|
|
if not errorMsg:
|
|
return (1, None)
|
|
if self.response.getInt('errorCode') in (5, 72):
|
|
return (0, None)
|
|
return (0, errorMsg)
|
|
except TTAccountException as e:
|
|
return (0, str(e))
|
|
|
|
elif self.useTTSpecificLogin:
|
|
try:
|
|
errorMsg = self.talk('authenticateParentPasswordNewStyle', data=self.makeLoginDict(loginName, parentPassword))
|
|
if not errorMsg:
|
|
return (1, None)
|
|
if self.response.getInt('errorCode') in (5, 72):
|
|
return (0, None)
|
|
return (0, errorMsg)
|
|
except TTAccountException as e:
|
|
return (0, str(e))
|
|
|
|
else:
|
|
return TTAccount.TTAccount.authenticateParentPassword(self, loginName, password, parentPassword)
|
|
return None
|
|
|
|
def authenticateDelete(self, loginName, password):
|
|
if self.useTTSpecificLogin:
|
|
try:
|
|
errorMsg = self.talk('authenticateDeleteNewStyle', data=self.makeLoginDict(loginName, password))
|
|
if not errorMsg:
|
|
return (1, None)
|
|
if self.response.getInt('errorCode') in (5, 72):
|
|
return (0, None)
|
|
return (0, errorMsg)
|
|
except TTAccountException as e:
|
|
return (0, str(e))
|
|
|
|
else:
|
|
self.notify.info('using old style authenticate delete')
|
|
result = TTAccount.TTAccount.authenticateDelete(self, loginName, password)
|
|
return result
|
|
return None
|