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()
相关文章推荐
- JVM内存模型及垃圾回收机制
- Java多线程 -- 阻塞队列
- Linux环境编程
- Codeforces 235E Number Challenge (神定理+莫比乌斯反演)
- WPF项目中读取图片资源,属性为生成操作为Resource
- 近期目标
- oracle group by的扩展
- STS里找不到类库
- 区域生长算法
- 浅谈用极大化思想解决最大子矩形问题
- nginx启动、重启、关闭
- java集合类线程安全
- 安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案
- C++输入
- 1006. Sign In and Sign Out (25)
- vs2012+qt5.2.0环境搭建/vs2013 + qt5.3.2 环境搭建
- C语言位操作(转)
- JAVA File转Byte[]
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- 【转】嵌入式操作系统VxWorks中TFFS文件系统的构建