Esempio n. 1
0
    def _do_handle(self):
        # Read the URL
        url = self.env['REQUEST_URI']

        # Get a copy of the server (it did fork!)
        server = get_server()

        # Refer SCGI object by thread
        my_thread = threading.currentThread()
        my_thread.scgi_conn = self
        my_thread.request_url = url

        for published in server._web_paths:
            if re.match(published._regex, url):
                # POST
                if published._method == 'POST':
                    post = self._process_post()
                    my_thread.post = post

                    # Validate
                    validator = PostValidator(post, published._validation)
                    errors = validator.Validate()
                    if errors:
                        resp = HTTP_Response(200, body=json_dump(errors))
                        resp['Content-Type'] = "application/json"
                        return resp

                # Execute handler
                ret = published(**published._kwargs)

                # Deal with the returned info
                if type(ret) == str:
                    self.response += ret
                    return self.response

                elif type(ret) == dict:
                    info = json_dump(ret)
                    self.response += info
                    self.response['Content-Type'] = "application/json"
                    return self.response

                elif isinstance(ret, HTTP_Response):
                    return ret

                else:
                    self.response += ret
                    return self.response

        # Not found
        return HTTP_Error(404)
Esempio n. 2
0
        def manage_exception():
            # Print the backtrace
            info = traceback.format_exc()
            print >> sys.stderr, info

            # Custom error management
            if error.page:
                try:
                    page = error.page(info, desc)
                    response = HTTP_Response(error=500, body=page.Render())
                    self.send(str(response))
                    return
                except Exception, e:
                    print "!!!!!!", e
                    pass
Esempio n. 3
0
    def _do_handle(self):
        # Read the URL
        url = self.env['REQUEST_URI']

        # Get a copy of the server (it did fork!)
        server = get_server()

        # Security Checks
        sec_error = False
        if server.use_sec_cookie:
            if not self.env['CTK_COOKIE']:
                sec_error = "Cookie"
            elif not server.sec_cookie:
                server.sec_cookie = self.env['CTK_COOKIE'][:]
            else:
                if server.sec_cookie != self.env['CTK_COOKIE']:
                    sec_error = "Cookie"

        if server.use_sec_submit:
            if not server.sec_submit:
                server.sec_submit = self.env['CTK_SUBMITTER_SECRET'][:]

            if self.env['REQUEST_METHOD'] == 'POST':
                if not server.sec_submit in url:
                    sec_error = "Submit"

        if sec_error:
            response = HTTP_Response(error=403,
                                     body="%s check failed" % (sec_error))
            self.send(str(response))
            return

        # Refer SCGI object by thread
        my_thread = threading.currentThread()
        my_thread.scgi_conn = self
        my_thread.request_url = url

        for published in server._web_paths:
            if re.match(published._regex, url):
                # POST
                if published._method == 'POST':
                    post = self._process_post()
                    my_thread.post = post

                    # Validate
                    validator = PostValidator(post, published._validation)
                    errors = validator.Validate()
                    if errors:
                        resp = HTTP_Response(200, body=json_dump(errors))
                        resp['Content-Type'] = "application/json"
                        return resp

                # Execute handler
                ret = published(**published._kwargs)

                # Deal with the returned info
                if type(ret) == str:
                    self.response += ret
                    return self.response

                elif type(ret) == dict:
                    info = json_dump(ret)
                    self.response += info
                    self.response['Content-Type'] = "application/json"
                    return self.response

                elif isinstance(ret, HTTP_Response):
                    return ret

                else:
                    self.response += ret
                    return self.response

        # Not found
        return HTTP_Error(404)
Esempio n. 4
0
    def __init__(self, *args):
        self.response = HTTP_Response()

        # SCGIHandler.__init__ invokes ::handle()
        pyscgi.SCGIHandler.__init__(self, *args)