diff options
author | Kali Kaneko <kali@leap.se> | 2015-11-19 00:01:08 -0400 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2015-11-19 00:01:40 -0400 |
commit | 4cfd0c8a929679a0a468f53f4ad5dcd2c83670fe (patch) | |
tree | eebd72f50aba677d6de1c89a0476672128967586 | |
parent | 7153d5ef69f7a11d83e0c689689d6c687cbd03e7 (diff) |
[feat] use twisted IService interface to run bonafide service
-rw-r--r-- | bonafide/.gitignore | 1 | ||||
-rw-r--r-- | bonafide/Makefile | 2 | ||||
-rw-r--r-- | bonafide/README.rst | 4 | ||||
-rw-r--r-- | bonafide/src/leap/bonafide/_protocol.py (renamed from bonafide/src/leap/bonafide/service.py) | 11 | ||||
-rw-r--r-- | bonafide/src/leap/bonafide/zmq.tac | 10 | ||||
-rw-r--r-- | bonafide/src/leap/bonafide/zmq_service.py | 51 |
6 files changed, 49 insertions, 30 deletions
diff --git a/bonafide/.gitignore b/bonafide/.gitignore index 9ac4b93..6fbbf52 100644 --- a/bonafide/.gitignore +++ b/bonafide/.gitignore @@ -4,6 +4,7 @@ *.swp *.swo .project +*.pid dist/ build/ MANIFEST diff --git a/bonafide/Makefile b/bonafide/Makefile new file mode 100644 index 0000000..c311005 --- /dev/null +++ b/bonafide/Makefile @@ -0,0 +1,2 @@ +bonafide_server: + twistd -n -y src/leap/bonafide/zmq.tac diff --git a/bonafide/README.rst b/bonafide/README.rst index 044ac71..1a4e44e 100644 --- a/bonafide/README.rst +++ b/bonafide/README.rst @@ -17,4 +17,8 @@ the package in development mode by running:: from the parent folder. +To run the bonafide daemon:: + + make bonafide_server + Then you can use `bonafide_cli2 -h` to see the available commands. diff --git a/bonafide/src/leap/bonafide/service.py b/bonafide/src/leap/bonafide/_protocol.py index 24004fa..b093b9c 100644 --- a/bonafide/src/leap/bonafide/service.py +++ b/bonafide/src/leap/bonafide/_protocol.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# service.py -# Copyright (C) 2014 LEAP +# _protocol.py +# Copyright (C) 2014-2015 LEAP # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """ -Bonafide service. +Bonafide protocol. """ import os import resource @@ -36,9 +36,9 @@ from twisted.python import log COMMANDS = 'signup', 'authenticate', 'logout', 'stats' -class BonafideService(object): +class BonafideProtocol(object): """ - Expose the Bonafide Service API. + Expose the protocol that interacts with the Bonafide Service API. """ _apis = defaultdict(None) @@ -115,6 +115,7 @@ class BonafideService(object): return d def do_stats(self): + log.msg('Calculating Bonafide STATS') mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss return '[+] Bonafide service: [%s sessions] [Mem usage: %s KB]' % ( len(self._sessions), mem / 1024) diff --git a/bonafide/src/leap/bonafide/zmq.tac b/bonafide/src/leap/bonafide/zmq.tac new file mode 100644 index 0000000..d3a9625 --- /dev/null +++ b/bonafide/src/leap/bonafide/zmq.tac @@ -0,0 +1,10 @@ +# Run as: twistd -n -y zmq.tac +from twisted.application import service +from leap.bonafide.zmq_service import BonafideZMQService + +top_service = service.MultiService() +bonafide_zmq_service = BonafideZMQService() +bonafide_zmq_service.setServiceParent(top_service) + +application = service.Application("bonafide") +top_service.setServiceParent(application) diff --git a/bonafide/src/leap/bonafide/zmq_service.py b/bonafide/src/leap/bonafide/zmq_service.py index e33df3d..df8e234 100644 --- a/bonafide/src/leap/bonafide/zmq_service.py +++ b/bonafide/src/leap/bonafide/zmq_service.py @@ -15,23 +15,39 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """ -Bonafide ZMQ Service +Bonafide ZMQ Service. """ from leap.bonafide import config -from leap.bonafide.service import BonafideService, COMMANDS +from leap.bonafide.protocol import BonafideProtocol, COMMANDS from txzmq import ZmqEndpoint, ZmqFactory, ZmqREPConnection +from twisted.application import service +from twisted.internet import reactor from twisted.python import log -class BonafideZmqREPConnection(ZmqREPConnection): +class BonafideZMQService(service.Service): - def initialize(self): - self._service = BonafideService() + def __init__(self): + self._bonafide = BonafideProtocol() + self._conn = None + + def startService(self): + zf = ZmqFactory() + e = ZmqEndpoint("bind", config.ENDPOINT) + self._conn = _BonafideZmqREPConnection(zf, e, self._bonafide) + reactor.callWhenRunning(self._conn.do_greet) + + +class _BonafideZmqREPConnection(ZmqREPConnection): + + def __init__(self, zf, e, bonafide): + ZmqREPConnection.__init__(self, zf, e) + self._bonafide = bonafide def do_greet(self): - print "[+] Bonafide service running..." + print "Bonafide service running..." def do_bye(self): print "[+] Bonafide service stopped. Have a nice day." @@ -58,40 +74,25 @@ class BonafideZmqREPConnection(ZmqREPConnection): elif cmd == 'signup': username, password = parts[1], parts[2] - d = self._service.do_signup(username, password) + d = self._bonafide.do_signup(username, password) d.addCallback(lambda response: defer_reply( 'REGISTERED -> %s' % response)) d.addErrback(log_err) elif cmd == 'authenticate': username, password = parts[1], parts[2] - d = self._service.do_authenticate(username, password) + d = self._bonafide.do_authenticate(username, password) d.addCallback(lambda response: defer_reply( 'TOKEN -> %s' % response)) d.addErrback(log_err) elif cmd == 'logout': username, password = parts[1], parts[2] - d = self._service.do_logout(username, password) + d = self._bonafide.do_logout(username, password) d.addCallback(lambda response: defer_reply( 'LOGOUT -> ok')) d.addErrback(log_err) elif cmd == 'stats': - response = self._service.do_stats() + response = self._bonafide.do_stats() defer_reply(response) - - -def get_zmq_connection(): - zf = ZmqFactory() - e = ZmqEndpoint("bind", config.ENDPOINT) - return BonafideZmqREPConnection(zf, e) - - -if __name__ == "__main__": - from twisted.internet import reactor - - s = get_zmq_connection() - reactor.callWhenRunning(s.initialize) - reactor.callWhenRunning(s.do_greet) - reactor.run() |