Mercurial > libervia-web
comparison libervia.tac @ 127:e19a8de8b3de
radio collective first draft
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 22 Jan 2012 19:38:05 +0100 |
parents | f9d63624699f |
children | 2849ec993d89 |
comparison
equal
deleted
inserted
replaced
126:adecb2566b53 | 127:e19a8de8b3de |
---|---|
41 from txjsonrpc.web import jsonrpc | 41 from txjsonrpc.web import jsonrpc |
42 from txjsonrpc import jsonrpclib | 42 from txjsonrpc import jsonrpclib |
43 from sat_frontends.bridge.DBus import DBusBridgeFrontend,BridgeExceptionNoService | 43 from sat_frontends.bridge.DBus import DBusBridgeFrontend,BridgeExceptionNoService |
44 from email.mime.text import MIMEText | 44 from email.mime.text import MIMEText |
45 from logging import debug, info, warning, error | 45 from logging import debug, info, warning, error |
46 import re | 46 import re, glob |
47 import glob | 47 import os.path, sys |
48 import os.path | 48 import tempfile, shutil, uuid |
49 import sys | |
50 from server_side.blog import MicroBlog | 49 from server_side.blog import MicroBlog |
51 from zope.interface import Interface, Attribute, implements | 50 from zope.interface import Interface, Attribute, implements |
52 | 51 |
53 TIMEOUT = 10 #Session's time out, after that the user will be disconnected | 52 TIMEOUT = 10 #Session's time out, after that the user will be disconnected |
54 LIBERVIA_DIR = "output/" | 53 LIBERVIA_DIR = "output/" |
596 if request: | 595 if request: |
597 self.register._logged(profile, request) | 596 self.register._logged(profile, request) |
598 | 597 |
599 def connectionError(self, error_type, profile): | 598 def connectionError(self, error_type, profile): |
600 assert(self.register) #register must be plugged | 599 assert(self.register) #register must be plugged |
601 import pdb | |
602 pdb.set_trace() | |
603 request = self.register.getWaitingRequest(profile) | 600 request = self.register.getWaitingRequest(profile) |
604 if request: #The user is trying to log in | 601 if request: #The user is trying to log in |
605 if error_type == "AUTH_ERROR": | 602 if error_type == "AUTH_ERROR": |
606 _error_t = "AUTH ERROR" | 603 _error_t = "AUTH ERROR" |
607 else: | 604 else: |
620 fault = jsonrpclib.Fault(0, "Not allowed") #FIXME: define some standard error codes for libervia | 617 fault = jsonrpclib.Fault(0, "Not allowed") #FIXME: define some standard error codes for libervia |
621 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc')) | 618 return jsonrpc.JSONRPC._cbRender(self, fault, request, parsed.get('id'), parsed.get('jsonrpc')) |
622 self.request = request | 619 self.request = request |
623 return jsonrpc.JSONRPC.render(self, request) | 620 return jsonrpc.JSONRPC.render(self, request) |
624 | 621 |
622 class UploadManager(Resource): | |
623 """This class manage the upload of a file | |
624 It redirect the stream to SàT core backend""" | |
625 isLeaf = True | |
626 | |
627 def __init__(self, sat_host): | |
628 self.sat_host=sat_host | |
629 self.upload_dir = tempfile.mkdtemp() | |
630 self.sat_host.addCleanup(shutil.rmtree, self.upload_dir) | |
631 | |
632 def render(self, request): | |
633 """ | |
634 Render method with some hacks: | |
635 - if login is requested, try to login with form data | |
636 - except login, every method is jsonrpc | |
637 - user doesn't need to be authentified for isRegistered, but must be for all other methods | |
638 """ | |
639 filename = str(uuid.uuid4()) | |
640 with open(os.path.join(self.upload_dir, filename),'w') as f: | |
641 f.write(request.args['song'][0]) | |
642 return "OK" | |
625 | 643 |
626 class Libervia(service.Service): | 644 class Libervia(service.Service): |
627 | 645 |
628 def __init__(self): | 646 def __init__(self): |
647 self._cleanup = [] | |
629 root = ProtectedFile(LIBERVIA_DIR) | 648 root = ProtectedFile(LIBERVIA_DIR) |
630 self.signal_handler = SignalHandler(self) | 649 self.signal_handler = SignalHandler(self) |
631 _register = Register(self) | 650 _register = Register(self) |
651 _upload = UploadManager(self) | |
632 self.signal_handler.plugRegister(_register) | 652 self.signal_handler.plugRegister(_register) |
633 self.sessions = {} #key = session value = user | 653 self.sessions = {} #key = session value = user |
634 self.prof_connected = set() #Profiles connected | 654 self.prof_connected = set() #Profiles connected |
635 self.action_handler = SATActionIDHandler() | 655 self.action_handler = SATActionIDHandler() |
636 ## bridge ## | 656 ## bridge ## |
645 #core | 665 #core |
646 for signal_name in ['presenceUpdate', 'newMessage', 'subscribe', 'contactDeleted', 'newContact', 'updatedValue']: | 666 for signal_name in ['presenceUpdate', 'newMessage', 'subscribe', 'contactDeleted', 'newContact', 'updatedValue']: |
647 self.bridge.register(signal_name, self.signal_handler.getGenericCb(signal_name)) | 667 self.bridge.register(signal_name, self.signal_handler.getGenericCb(signal_name)) |
648 #plugins | 668 #plugins |
649 for signal_name in ['personalEvent', 'roomJoined', 'roomUserJoined', 'roomUserLeft', 'tarotGameStarted', 'tarotGameNew', 'tarotGameChooseContrat', | 669 for signal_name in ['personalEvent', 'roomJoined', 'roomUserJoined', 'roomUserLeft', 'tarotGameStarted', 'tarotGameNew', 'tarotGameChooseContrat', |
650 'tarotGameShowCards', 'tarotGameInvalidCards', 'tarotGameCardsPlayed', 'tarotGameYourTurn', 'tarotGameScore']: | 670 'tarotGameShowCards', 'tarotGameInvalidCards', 'tarotGameCardsPlayed', 'tarotGameYourTurn', 'tarotGameScore', |
671 'radiocolStarted']: | |
651 self.bridge.register(signal_name, self.signal_handler.getGenericCb(signal_name), "plugin") | 672 self.bridge.register(signal_name, self.signal_handler.getGenericCb(signal_name), "plugin") |
652 self.media_dir = self.bridge.getConfig('','media_dir') | 673 self.media_dir = self.bridge.getConfig('','media_dir') |
653 self.local_dir = self.bridge.getConfig('','local_dir') | 674 self.local_dir = self.bridge.getConfig('','local_dir') |
654 root.putChild('json_signal_api', self.signal_handler) | 675 root.putChild('json_signal_api', self.signal_handler) |
655 root.putChild('json_api', MethodHandler(self)) | 676 root.putChild('json_api', MethodHandler(self)) |
656 root.putChild('register_api', _register) | 677 root.putChild('register_api', _register) |
678 root.putChild('upload', _upload) | |
657 root.putChild('blog', MicroBlog(self)) | 679 root.putChild('blog', MicroBlog(self)) |
658 root.putChild('css', ProtectedFile("server_css/")) | 680 root.putChild('css', ProtectedFile("server_css/")) |
659 root.putChild(os.path.dirname(MEDIA_DIR), ProtectedFile(self.media_dir)) | 681 root.putChild(os.path.dirname(MEDIA_DIR), ProtectedFile(self.media_dir)) |
660 root.putChild(os.path.dirname(AVATARS_DIR), ProtectedFile(os.path.join(self.local_dir, AVATARS_DIR))) | 682 root.putChild(os.path.dirname(AVATARS_DIR), ProtectedFile(os.path.join(self.local_dir, AVATARS_DIR))) |
661 self.site = server.Site(root) | 683 self.site = server.Site(root) |
662 self.site.sessionFactory = LiberviaSession | 684 self.site.sessionFactory = LiberviaSession |
663 | 685 |
686 def addCleanup(self, callback, *args, **kwargs): | |
687 """Add cleaning method to call when service is stopped | |
688 cleaning method will be called in reverse order of they insertion | |
689 @param callback: callable to call on service stop | |
690 @param *args: list of arguments of the callback | |
691 @param **kwargs: list of keyword arguments of the callback""" | |
692 self._cleanup.insert(0, (callback, args, kwargs)) | |
693 | |
664 def startService(self): | 694 def startService(self): |
665 reactor.listenTCP(8080, self.site) | 695 reactor.listenTCP(8080, self.site) |
696 | |
697 def stopService(self): | |
698 print "launching cleaning methods" | |
699 for callback, args, kwargs in self._cleanup: | |
700 callback(*args, **kwargs) | |
666 | 701 |
667 def run(self): | 702 def run(self): |
668 reactor.run() | 703 reactor.run() |
669 | 704 |
670 def stop(self): | 705 def stop(self): |