您的位置:首页 > 其它

twisted-credentials

2015-08-26 23:09 375 查看
from twisted.internet import reactor
from twisted.internet.protocol import ServerFactory,Protocol
from twisted.protocols.basic import LineReceiver

from zope.interface import Interface,implements

from twisted.cred import checkers,credentials,portal

class IEchoAvatar(Interface):
def logout(self):
'''
Interface 4 avatar interface
'''

class EchoAvatar(object):
implements(IEchoAvatar)

def logout(self):
print 'Logout 4 EchoAvatar'
pass

class EchoRealm(object):
implements(portal.IRealm)

def requestAvatar(avatarId, mind, *interfaces):
if IEchoAvatar in interfaces:
avatar = EchoAvatar
return IEchoAvatar, avatar, avatar.logout
raise NotImplementedError('Only implements EchoAvatar Interface!')

class EchoProtocol(LineReceiver):
def __init__(self):
self._avatar = None
realm = EchoRealm()
self._portal = portal.Portal(realm)
check = checkers.InMemoryUsernamePasswordDatabaseDontUse()
check.addUser('user', 'pass')
self._portal.registerChecker(check)

def lineReceived(self, line):
if not self._avatar:
log_user = line.strip().split(':')
if len(log_user) == 2:
self.login(log_user[0], log_user[1])
else:
print 'please input user and password'
else:
self.sendLine(line)

def login(self, user, password):
d = self._portal.login(
credentials.UsernamePassword(user,password),
None,
IEchoAvatar)
d.addCallbacks(self._cbLoginSuccess, self._cbLoginFail)

def _cbLoginSuccess(self,(interface, avatar, logout) ):
self._avatar = avatar
self.sendLine('Login success!')

def _cbLoginFail(self, fail):
self.sendLine('Login failed!')
self.transport.loseConnection()

f = ServerFactory()
f.protocol = EchoProtocol
reactor.listenTCP(8000, f)
reactor.run()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: