From 272d24bc521aa932128ed9ab9a6f20a70d572768 Mon Sep 17 00:00:00 2001 From: RaNaN Date: Thu, 10 Feb 2011 20:38:22 +0100 Subject: thriftbackend cleanup --- module/remote/thriftbackend/Processor.py | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 module/remote/thriftbackend/Processor.py (limited to 'module/remote/thriftbackend/Processor.py') diff --git a/module/remote/thriftbackend/Processor.py b/module/remote/thriftbackend/Processor.py new file mode 100644 index 000000000..b3a0991dd --- /dev/null +++ b/module/remote/thriftbackend/Processor.py @@ -0,0 +1,41 @@ +from thriftgen.pyload import Pyload + +class Processor(Pyload.Processor): + def __init__(self, *args, **kwargs): + Pyload.Processor.__init__(self, *args, **kwargs) + self.authenticated = {} + + def process(self, iprot, oprot): + trans = oprot.trans + if not self.authenticated.has_key(trans): + self.authenticated[trans] = False + oldclose = trans.close + def wrap(): + del self.authenticated[trans] + oldclose() + trans.close = wrap + authenticated = self.authenticated[trans] + (name, type, seqid) = iprot.readMessageBegin() + if name not in self._processMap or (not authenticated and not name == "login"): + iprot.skip(Pyload.TType.STRUCT) + iprot.readMessageEnd() + x = Pyload.TApplicationException(Pyload.TApplicationException.UNKNOWN_METHOD, 'Unknown function %s' % (name)) + oprot.writeMessageBegin(name, Pyload.TMessageType.EXCEPTION, seqid) + x.write(oprot) + oprot.writeMessageEnd() + oprot.trans.flush() + return + elif not authenticated and name == "login": + args = Pyload.login_args() + args.read(iprot) + iprot.readMessageEnd() + result = Pyload.login_result() + self.authenticated[trans] = self._handler.login(args.username, args.password) + result.success = self.authenticated[trans] + oprot.writeMessageBegin("login", Pyload.TMessageType.REPLY, seqid) + result.write(oprot) + oprot.writeMessageEnd() + oprot.trans.flush() + else: + self._processMap[name](self, seqid, iprot, oprot) + return True \ No newline at end of file -- cgit v1.2.3