Пример #1
0
    def handle_cgi_request(self):
        """Handles a cgi request.  This is the main entry point for client requests,
       whether POST or GET, that are cgi-bin requests.  They all share the
       same memory space (i.e. this singleton object)."""

        # parse the form parameters to the form object
        # if a post request, encode everything (post requests can't encode on the client side because they come from forms)
        # get requests should encode on the client side (to handle special characters in the URL)
        if self.method.lower() == "get":
            for item in self.form.list:
                item.value = Constants.decode(item.value)

        # set the window id
        self.windowid = self.getvalue("global_windowid")

        # send the headers
        self.send_headers()

        try:

            # get the view
            viewst = self.getvalue("global_view", "meetingchooser").lower()

            # get the session, if there is one
            self.session = Directory.get_session(self.form.getvalue("z", ""))

            # if session is none, try logging the user in based upon their username and password parameters
            if self.session == None:
                self.session = Directory.login(self.form.getvalue("username", ""), self.form.getvalue("password", ""))

            # if the view is login, log the session out
            if (viewst == "login" or viewst == "logout") and self.session != None:
                Directory.logout(self.session)
                self.session = None

            # if session is still None, send them to the login page
            if self.session == None:
                viewst = "login"

            # process actions
            if self.session:
                Events.process_actions(self)

            # send events xml or send to view processing
            if self.getvalue("gm_internal_action") == "send_events_xml":
                Events.send_events_xml(self)

            else:
                # get the view
                if not BaseView.views.has_key(viewst):
                    self.writeln("<html><body>Error!  No view named " + viewst + " found.</body></html>")
                    return
                view = BaseView.views[viewst]
                self.view = view

                # send processing to the view
                Constants.log.debug("Sending processing to view: " + viewst)
                view.handle_request(self, viewst)

        except:
            self.writeln("<html><body>")
            self.writeln("<hr>")
            self.writeln("<b>The following error has occurred in the GroupMind application:</b>")
            self.writeln("<pre><tt>")
            traceback.print_exc(file=self.out)
            traceback.print_exc()
            self.writeln("</pre></tt>")
            self.writeln("</body></html>")