Example #1
0
 def test_path_info_and_script_name_fetching(self):
     env = create_environ(u'/\N{SNOWMAN}', u'http://example.com/\N{COMET}/')
     self.assert_equal(wsgi.get_path_info(env), u'/\N{SNOWMAN}')
     self.assert_equal(wsgi.get_path_info(env, charset=None),
                       u'/\N{SNOWMAN}'.encode('utf-8'))
     self.assert_equal(wsgi.get_script_name(env), u'/\N{COMET}')
     self.assert_equal(wsgi.get_script_name(env, charset=None),
                       u'/\N{COMET}'.encode('utf-8'))
Example #2
0
def test_path_info_and_script_name_fetching():
    env = create_environ(u'/\N{SNOWMAN}', u'http://example.com/\N{COMET}/')
    assert wsgi.get_path_info(env) == u'/\N{SNOWMAN}'
    assert wsgi.get_path_info(env,
                              charset=None) == u'/\N{SNOWMAN}'.encode('utf-8')
    assert wsgi.get_script_name(env) == u'/\N{COMET}'
    assert wsgi.get_script_name(env,
                                charset=None) == u'/\N{COMET}'.encode('utf-8')
Example #3
0
    def __call__(self, environ, start_response):
        url_to_annotate = wsgi.get_path_info(environ)[1:]

        if not url_to_annotate:
            # This is our own landing page "/", no need to check this
            return self._application(environ, start_response)

        parsed_url = urlparse(url_to_annotate)

        if not parsed_url.scheme:
            url_to_annotate = "http://" + url_to_annotate

        try:
            hits = self._checkmate.check_url(url_to_annotate)
        except CheckmateException as err:
            LOG.warning(
                "Failed to check url against checkmate with error: {}".format(
                    err))
            hits = None

        if hits:
            template_name, status = self.templates.get(hits.reason_codes[0],
                                                       self.templates["other"])

            template = self._jinja_env.get_template(template_name).render(
                url_to_annotate=url_to_annotate)
            resp = Response(template, status=status, mimetype="text/html")
            return resp(environ, start_response)

        return self._application(environ, start_response)
Example #4
0
    def __call__(self, environ, start_response):
        if self.context is None:
            self.context = self.site.build()

            for input_file in self.context.input_files:
                self.extra_files.append(
                    os.path.join(self.site.source_path, input_file))

        cleaned_path = get_path_info(environ)
        cleaned_path = cleaned_path.lstrip('/')
        cleaned_path = '/' + cleaned_path
        static_file_path = None
        if cleaned_path.lstrip('/') in self.context.output_files:
            static_file_path = cleaned_path
        elif cleaned_path.endswith('/'):
            try_cleaned_path = cleaned_path + 'index.html'
            if try_cleaned_path.lstrip('/') in self.context.output_files:
                static_file_path = try_cleaned_path

        if static_file_path is None:
            return self.application(environ, start_response)

        real_path = os.path.join(self.context.site.build_path,
                                 static_file_path.lstrip('/'))

        guessed_type = mimetypes.guess_type(real_path)
        mime_type = guessed_type[0] or 'text/plain'
        file_size = int(os.path.getsize(real_path))

        headers = [
            ('Content-Type', mime_type),
            ('Content-Length', str(file_size)),
        ]
        start_response('200 OK', headers)
        return wrap_file(environ, open(real_path, 'rb'))
Example #5
0
    def __call__(self, environ, start_response):
        # Parse the URL and referrer
        request_path = wsgi.get_path_info(environ)
        via_host = environ.get("HTTP_HOST")
        classified_url = ClassifiedURL.classify(request_path, via_host, assume_via=True)
        classified_referrer = ClassifiedURL.classify(
            environ.get("HTTP_REFERER"), via_host
        )

        # Determine which urls should be run against checkmate (if any)
        full_check, partial_check, rule_type = self._get_urls_to_check(
            classified_url, classified_referrer
        )

        # Apply the checks
        for url_to_check, allow_all in ((full_check, False), (partial_check, True)):
            if not url_to_check:
                # No check of this type requested
                continue

            blocked = self._check_url(url_to_check.proxied_url, allow_all=allow_all)
            if not blocked:
                continue

            response = Response(
                "",
                status="307 Temporary Redirect",
                headers=[("Location", blocked.presentation_url)],
            )
            return response(environ, start_response)

        return self._application(environ, start_response)
Example #6
0
 def on_ext(self, request):
     if request.method == 'POST':
         r = {'result': None, 'error': None}
         method = get_path_info(request.environ)
         data = request.get_data()
         if type(data) != str:
             data = to_unicode(data, 'utf-8')
         params = json.loads(data)
         task = self.get_task()
         try:
             data = None
             if self.under_maintenance:
                 status = common.UNDER_MAINTAINANCE
             elif task.on_ext_request:
                 status = common.RESPONSE
                 self._busy += 1
                 try:
                     data = task.on_ext_request(task, method, params)
                 finally:
                     self._busy -= 1
             else:
                 status = None
             r['result'] = {'status': status, 'data': data, 'version': task.version}
         except AbortException as e:
             traceback.print_exc()
             r['result'] = {'data': [None, error_message(e)]}
             r['error'] = error_message(e)
         except Exception as e:
             traceback.print_exc()
             #~ if common.SETTINGS['DEBUGGING']:
                 #~ raise
             r['result'] = {'data': [None, error_message(e)]}
             r['error'] = error_message(e)
         return self.create_post_response(request, r)
Example #7
0
File: blocker.py Project: xlee/via
    def __call__(self, environ, start_response):
        self._update_blocklist()

        url_to_annotate = wsgi.get_path_info(environ)[1:]
        parsed_url = urlparse(url_to_annotate)

        if not parsed_url.scheme:
            url_to_annotate = "http://" + url_to_annotate
            parsed_url = urlparse(url_to_annotate)

        hostname_to_annotate = parsed_url.hostname
        if hostname_to_annotate in self._blocked_domains:
            reason = self._blocked_domains[hostname_to_annotate]
            if reason == "publisher-blocked":
                template_name = "disallow_access.html.jinja2"
                status = 451
            else:
                template_name = "could_not_process.html.jinja2"
                status = 200

            template = self._jinja_env.get_template(template_name).render(
                url_to_annotate=url_to_annotate
            )
            resp = Response(template, status=status, mimetype="text/html")
            return resp(environ, start_response)

        return self._application(environ, start_response)
Example #8
0
File: wsgi.py Project: Jmos/jam-py
 def on_ext(self, request):
     if request.method == 'POST':
         r = {'result': None, 'error': None}
         method = get_path_info(request.environ)
         params = json.loads(request.get_data())
         task = self.get_task()
         try:
             data = None
             if task.on_ext_request:
                 data = task.on_ext_request(task, method, params)
             r['result'] = {
                 'status': common.RESPONSE,
                 'data': data,
                 'version': task.version
             }
         except AbortException as e:
             traceback.print_exc()
             r['result'] = {'data': [None, e.message]}
             r['error'] = e.message
         except Exception as e:
             traceback.print_exc()
             if common.SETTINGS['DEBUGGING'] and task_id != 0:
                 raise
             r['result'] = {'data': [None, e.message]}
             r['error'] = e.message
         return self.create_post_response(request, r)
Example #9
0
 def __call__(self, environ, start_response):
     if wsgi.get_path_info(environ).startswith('/users'):
         # Not nice solution but it works well for now
         # Return any app, as all apps can handle login
         return self.call(self.one_app, environ, start_response)
     inventory = wsgi.pop_path_info(environ)
     with self.lock:
         if inventory not in self.instances:
             self.instantiate()
     app = self.instances.get(inventory, self.NOT_FOUND)
     return self.call(app, environ, start_response)
Example #10
0
	def __call__(self, environ, start_response):
		"""Returns application instance respective to the parliament in
		the URL.
		"""
		segments = get_path_info(environ).strip('/').split('/', 2)
		if len(segments) < 2:
			app = hateoas_app
		else:
			pfx = segments[0] + '/' + segments[1]
			app = self.instances.get(pfx, NotFound())
		return app(environ, start_response)
Example #11
0
    def __call__(self, environ, start_response):
        from werkzeug.wsgi import pop_path_info, get_path_info

        app = self.get_application(get_path_info(environ))
        if app is not None:
            for i in range(app.peeks):
                pop_path_info(environ)
            app = app.app
            # print get_path_info(environ), app
        else:  # use default app
            app = self.default_app
        return app(environ, start_response)
  def __call__(self, environ, start_response):
    from werkzeug.wsgi import pop_path_info, get_path_info

    app = self.get_application(get_path_info(environ))
    if app is not None:
      for i in range(app.peeks):
        pop_path_info(environ)
      app = app.app
      #print get_path_info(environ), app
    else: #use default app
      app = self.default_app
    return app(environ, start_response)
Example #13
0
 def __call__(self, environ, start_response):
     # prefix = peek_path_info(environ)
     # [/root]/prefix[/more] -> /prefix[/more]
     path = get_path_info(environ).replace(self.root, "/")
     handler = self.find_handler(path)
     app = self.get_application(handler)
     # print(handler, app, path)
     # pop_path_info(environ)
     if app is not None and self.root != "/":
         environ["PATH_INFO"] = environ["PATH_INFO"].replace(self.root, "/")
         if "REQUEST_URI" in environ:
             environ["REQUEST_URI"] = environ["REQUEST_URI"].replace(self.root, "/")
         # environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'] + self.root[:-1]
     if app is None:
         app = self.default_app
     return app(environ, start_response)
Example #14
0
    def __call__(self, environ, start_response):
        url_to_annotate = wsgi.get_path_info(environ)[1:]
        parsed_url = urlparse(url_to_annotate)

        if not parsed_url.scheme:
            url_to_annotate = "http://" + url_to_annotate
            parsed_url = urlparse(url_to_annotate)

        hostname_to_annotate = parsed_url.hostname

        for _d in self._domains:
            if hostname_to_annotate and hostname_to_annotate == _d['domain']:
                template = self._jinja_env.get_template(_d['template']).render(url_to_annotate=url_to_annotate)
                resp = Response(template,
                                status=_d['status'], mimetype='text/html')
                return resp(environ, start_response)
        return self._application(environ, start_response)
Example #15
0
 def on_ext(self, request):
     if request.method == 'POST':
         r = {'result': None, 'error': None}
         method = get_path_info(request.environ)
         data = request.get_data()
         if type(data) != str:
             data = to_unicode(data, 'utf-8')
         try:
             params = json.loads(data)
         except:
             params = None
         if self.task:
             try:
                 data = None
                 if self.under_maintenance:
                     status = consts.UNDER_MAINTAINANCE
                 elif self.task.on_ext_request:
                     status = consts.RESPONSE
                     self._busy += 1
                     try:
                         data = self.task.on_ext_request(
                             self.task, method, params)
                     finally:
                         self._busy -= 1
                 else:
                     status = None
                 r['result'] = {
                     'status': status,
                     'data': data,
                     'modification': consts.MODIFICATION
                 }
             except AbortException as e:
                 traceback.print_exc()
                 r['result'] = {'data': [None, error_message(e)]}
                 r['error'] = error_message(e)
             except Exception as e:
                 traceback.print_exc()
                 r['result'] = {'data': [None, error_message(e)]}
                 r['error'] = error_message(e)
         else:
             r['result'] = {
                 'status': self.state,
                 'data': None,
                 'modification': None
             }
         return self.create_post_response(request, r)
Example #16
0
    def __call__(self, environ, start_response):
        url_to_annotate = wsgi.get_path_info(environ)[1:]
        parsed_url = urlparse(url_to_annotate)

        if not parsed_url.scheme:
            url_to_annotate = "http://" + url_to_annotate
            parsed_url = urlparse(url_to_annotate)

        hostname_to_annotate = parsed_url.hostname

        for _d in self._domains:
            if hostname_to_annotate and hostname_to_annotate == _d["domain"]:
                template = self._jinja_env.get_template(_d["template"]).render(
                    url_to_annotate=url_to_annotate
                )
                resp = Response(template, status=_d["status"], mimetype="text/html")
                return resp(environ, start_response)
        return self._application(environ, start_response)
Example #17
0
 def on_ext(self, request):
     if request.method == "POST":
         r = {"result": None, "error": None}
         method = get_path_info(request.environ)
         params = json.loads(request.get_data())
         user_id = None
         task_id = None
         item_id = None
         ext = True
         try:
             r["result"] = self.process_request(request.environ, method, user_id, task_id, item_id, params, ext)
         except AbortException, e:
             print traceback.format_exc()
             r["result"] = {"data": [None, e.message]}
             r["error"] = e.message
         except Exception, e:
             print traceback.format_exc()
             if common.SETTINGS["DEBUGGING"] and task_id != 0:
                 raise
             r["result"] = {"data": [None, e.message]}
             r["error"] = e.message
 def on_ext(self, request):
     if request.method == 'POST':
         r = {'result': None, 'error': None}
         method = get_path_info(request.environ)
         params = json.loads(request.get_data())
         user_id = None
         task_id = None
         item_id = None
         ext = True
         try:
             r['result'] = self.process_request(request.environ,
                 method, user_id, task_id, item_id, params, ext)
         except AbortException, e:
             print traceback.format_exc()
             r['result'] = None, e.message
             r['error'] = e.message
         except Exception, e:
             print traceback.format_exc()
             if common.SETTINGS['DEBUGGING']:
                 raise
             r['result'] = None, e.message
             r['error'] = e.message
Example #19
0
 def on_ext(self, request):
     if request.method == 'POST':
         r = {'result': None, 'error': None}
         method = get_path_info(request.environ)
         params = json.loads(request.get_data())
         user_id = None
         task_id = None
         item_id = None
         ext = True
         try:
             r['result'] = self.process_request(request.environ,
                 method, user_id, task_id, item_id, params, ext)
         except AbortException, e:
             print traceback.format_exc()
             r['result'] = {'data': [None, e.message]}
             r['error'] = e.message
         except Exception, e:
             print traceback.format_exc()
             if common.SETTINGS['DEBUGGING'] and task_id != 0:
                 raise
             r['result'] = {'data': [None, e.message]}
             r['error'] = e.message
Example #20
0
 def on_ext(self, request):
     if request.method == 'POST':
         r = {'result': None, 'error': None}
         method = get_path_info(request.environ)
         data = request.get_data()
         if type(data) != str:
             data = to_unicode(data, 'utf-8')
         try:
             params = json.loads(data)
         except:
             params = None
         if self.task:
             try:
                 data = None
                 if self.under_maintenance:
                     status = common.UNDER_MAINTAINANCE
                 elif self.task.on_ext_request:
                     status = common.RESPONSE
                     self._busy += 1
                     try:
                         data = self.task.on_ext_request(self.task, method, params)
                     finally:
                         self._busy -= 1
                 else:
                     status = None
                 r['result'] = {'status': status, 'data': data, 'version': self.task.version}
             except AbortException as e:
                 traceback.print_exc()
                 r['result'] = {'data': [None, error_message(e)]}
                 r['error'] = error_message(e)
             except Exception as e:
                 traceback.print_exc()
                 r['result'] = {'data': [None, error_message(e)]}
                 r['error'] = error_message(e)
         else:
             r['result'] = {'status': self.state, 'data': None, 'version': None}
         return self.create_post_response(request, r)
Example #21
0
 def test_path_info_and_script_name_fetching(self):
     env = create_environ(u'/\N{SNOWMAN}', u'http://example.com/\N{COMET}/')
     self.assert_equal(wsgi.get_path_info(env), u'/\N{SNOWMAN}')
     self.assert_equal(wsgi.get_path_info(env, charset=None), u'/\N{SNOWMAN}'.encode('utf-8'))
     self.assert_equal(wsgi.get_script_name(env), u'/\N{COMET}')
     self.assert_equal(wsgi.get_script_name(env, charset=None), u'/\N{COMET}'.encode('utf-8'))
Example #22
0
def test_path_info_and_script_name_fetching():
    env = create_environ(u'/\N{SNOWMAN}', u'http://example.com/\N{COMET}/')
    assert wsgi.get_path_info(env) == u'/\N{SNOWMAN}'
    assert wsgi.get_path_info(env, charset=None) == u'/\N{SNOWMAN}'.encode('utf-8')
    assert wsgi.get_script_name(env) == u'/\N{COMET}'
    assert wsgi.get_script_name(env, charset=None) == u'/\N{COMET}'.encode('utf-8')
Example #23
0
 def test_path_info_and_script_name_fetching(self):
     env = create_environ(u"/\N{SNOWMAN}", u"http://example.com/\N{COMET}/")
     self.assert_equal(wsgi.get_path_info(env), u"/\N{SNOWMAN}")
     self.assert_equal(wsgi.get_path_info(env, charset=None), u"/\N{SNOWMAN}".encode("utf-8"))
     self.assert_equal(wsgi.get_script_name(env), u"/\N{COMET}")
     self.assert_equal(wsgi.get_script_name(env, charset=None), u"/\N{COMET}".encode("utf-8"))
Example #24
0
 def __call__(self, environ, start_response):
     if wsgi.get_path_info(environ).startswith(self._prefixes):
         resp = Response(self._template, status=451, mimetype='text/html')
         return resp(environ, start_response)
     return self.application(environ, start_response)
Example #25
0
def test_path_info_and_script_name_fetching():
    env = create_environ(u"/\N{SNOWMAN}", u"http://example.com/\N{COMET}/")
    assert wsgi.get_path_info(env) == u"/\N{SNOWMAN}"
    assert wsgi.get_path_info(env, charset=None) == u"/\N{SNOWMAN}".encode("utf-8")
    assert wsgi.get_script_name(env) == u"/\N{COMET}"
    assert wsgi.get_script_name(env, charset=None) == u"/\N{COMET}".encode("utf-8")
Example #26
0
def test_path_info_and_script_name_fetching():
    env = create_environ("/\N{SNOWMAN}", "http://example.com/\N{COMET}/")
    assert wsgi.get_path_info(env) == "/\N{SNOWMAN}"
    assert wsgi.get_path_info(env, charset=None) == "/\N{SNOWMAN}".encode()
    assert wsgi.get_script_name(env) == "/\N{COMET}"
    assert wsgi.get_script_name(env, charset=None) == "/\N{COMET}".encode()