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)
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 = '/')