def test_fallbacks(self, fallbacks, environ, expected): reverse_proxied = ReverseProxiedEnvironment(**fallbacks) merged_environ = dict(standard_environ) merged_environ.update(environ) actual = reverse_proxied(merged_environ) merged_expected = dict(standard_environ) merged_expected.update(environ) merged_expected.update(expected) self.assertDictEqual(merged_expected, actual)
def test_nohost(self, environ, expected): reverse_proxied = ReverseProxiedEnvironment() merged_environ = dict(standard_environ) merged_environ.update(environ) del merged_environ["HTTP_HOST"] actual = reverse_proxied(merged_environ) merged_expected = dict(standard_environ) merged_expected.update(environ) merged_expected.update(expected) self.assertDictEqual(merged_expected, actual)
def _setup_app(self, app): from octoprint.server.util.flask import ReverseProxiedEnvironment, OctoPrintFlaskRequest, OctoPrintFlaskResponse s = settings() app.debug = self._debug secret_key = s.get(["server", "secretKey"]) if not secret_key: import string from random import choice chars = string.ascii_lowercase + string.ascii_uppercase + string.digits secret_key = "".join(choice(chars) for _ in range(32)) s.set(["server", "secretKey"], secret_key) s.save() app.secret_key = secret_key reverse_proxied = ReverseProxiedEnvironment( header_prefix=s.get(["server", "reverseProxy", "prefixHeader"]), header_scheme=s.get(["server", "reverseProxy", "schemeHeader"]), header_host=s.get(["server", "reverseProxy", "hostHeader"]), header_server=s.get(["server", "reverseProxy", "serverHeader"]), header_port=s.get(["server", "reverseProxy", "portHeader"]), prefix=s.get(["server", "reverseProxy", "prefixFallback"]), scheme=s.get(["server", "reverseProxy", "schemeFallback"]), host=s.get(["server", "reverseProxy", "hostFallback"]), server=s.get(["server", "reverseProxy", "serverFallback"]), port=s.get(["server", "reverseProxy", "portFallback"]) ) OctoPrintFlaskRequest.environment_wrapper = reverse_proxied app.request_class = OctoPrintFlaskRequest app.response_class = OctoPrintFlaskResponse @app.before_request def before_request(): g.locale = self._get_locale() @app.after_request def after_request(response): # send no-cache headers with all POST responses if request.method == "POST": response.cache_control.no_cache = True response.headers.add("X-Clacks-Overhead", "GNU Terry Pratchett") return response from octoprint.util.jinja import MarkdownFilter MarkdownFilter(app)
def test_header_config_none(self): result = ReverseProxiedEnvironment.to_header_candidates(None) self.assertEqual(result, [])
def test_header_config_string(self): result = ReverseProxiedEnvironment.to_header_candidates( "prefix-header") self.assertSetEqual(set(result), set(["HTTP_PREFIX_HEADER"]))
def test_header_config_ok(self): result = ReverseProxiedEnvironment.to_header_candidates( ["prefix-header1", "prefix-header2"]) self.assertSetEqual( set(result), set(["HTTP_PREFIX_HEADER1", "HTTP_PREFIX_HEADER2"]))
def test_header_config_none(self): result = ReverseProxiedEnvironment.to_header_candidates(None) self.assertEquals(result, [])
def test_header_config_string(self): result = ReverseProxiedEnvironment.to_header_candidates("prefix-header") self.assertEquals(result, ["HTTP_PREFIX_HEADER"])
def test_header_config_ok(self): result = ReverseProxiedEnvironment.to_header_candidates(["prefix-header1", "prefix-header2"]) self.assertEquals(result, ["HTTP_PREFIX_HEADER1", "HTTP_PREFIX_HEADER2"])