Example #1
0
 def _init(self, config):
     self.msg_backend = get_message_backend(config)
     self.auth = self.app.auth.backend
     self.auth.__init__(config = config)
     self.client_agent = ClientAgent(self.app)
Example #2
0
class UIAgent(BaseController):
    """Carries out actions on behalf of clients.

    Handles all user/client registration with the server, as well as
    exchange/queue creation with the message broker.

    """

    def _init(self, config):
        self.msg_backend = get_message_backend(config)
        self.auth = self.app.auth.backend
        self.auth.__init__(config = config)
        self.client_agent = ClientAgent(self.app)

    def _auth(self, request):
        if request.params.get('paste.testing', False):
            username = request.environ.get('test_session.uid')
            password = request.environ.get('test_session.password')
        else:
            username = request.params.get('username')
            password = request.params.get('password')
            user_id = self.auth.authenticate_user(username, password, 
                    request = request)
        session = request.environ['beaker.session']
        logging.debug("Setting user_id to %s" % user_id)
        session['uid'] = user_id
        session.save()
        return user_id

    def _get_uid(self, request, doAuth = True):
        """ Get the cached UID, or authenticate the user.
        """
        uid = self.get_session_uid(request)
        if uid is None:
            if doAuth == False:
                return None
            self._auth(request)
            return request.environ.get('beaker.session', {}).get('uid', None)
        return uid

    def _get_params(self, request):
        params = dict(request.GET)
        str_params = {}
        for key, value in params:
            str_params[str(key)] = str(value);
        return str_params

    def index(self, request, **kw):
        self._init(self.app.config)
        doAuth = len(kw) != 0
        logger.debug('session.beaker.uid = %s' % 
                request.environ.get('session.beaker',{}).get('uid','None'))
        username = self._get_uid(request, doAuth = doAuth)
        logger.debug('username = %s' % username)
        response = {'username': username }
        if username is None:
            # display login page
           template = self.get_template("not_logged_in")
        else:
            # Create the user queue if necessary.
            self.client_agent.user_queue(request)
            template = self.get_template("logged_in")
            response['user_info'] = self.msg_backend.user_info(username)
            response['subscriptions'] = self.msg_backend.get_queues(username)
        content_type = "text/html"  # it's always text/html
        body = template.render(request = request,
                                config = self.app.config,
                                response = response
                                )
        return Response(str(body),
                        content_type = content_type)

    def logout(self, request, **kv):
        try:
            session = request.environ['beaker.session']
            session['uid']=None
            session.save()
        except KeyError:
            pass
        raise HTTPFound(location = '/')