-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* WIP cors refactor * fix unit tests * add cors handler tests
- Loading branch information
Showing
22 changed files
with
264 additions
and
114 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
import anachronos | ||
|
||
from e2e_test.runner import http | ||
|
||
|
||
class CorsTests(anachronos.TestCase): | ||
|
||
def test_cors_headers_injected_on_success(self): | ||
res = http.get("/") | ||
|
||
self.assertEqual("http://jivago.io", res.headers["Access-Control-Allow-Origin"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Headers"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Methods"]) | ||
|
||
def test_cors_headers_injected_on_error(self): | ||
res = http.get("/error") | ||
|
||
self.assertEqual("http://jivago.io", res.headers["Access-Control-Allow-Origin"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Headers"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Methods"]) | ||
|
||
def test_cors_preflight_succeeds_for_allowed_origin(self): | ||
res = http.options("/", headers={"Origin": "http://jivago.io"}) | ||
|
||
self.assertEqual(200, res.status_code) | ||
self.assertEqual("http://jivago.io", res.headers["Access-Control-Allow-Origin"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Headers"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Methods"]) | ||
|
||
def test_cors_preflight_fails_on_missing_origin(self): | ||
res = http.options("/") | ||
|
||
self.assertEqual(400, res.status_code) | ||
self.assertEqual("http://jivago.io", res.headers["Access-Control-Allow-Origin"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Headers"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Methods"]) | ||
|
||
def test_cors_preflight_fails_on_disallowed_origin(self): | ||
res = http.options("/", headers={"Origin": "http://hello.example.com"}) | ||
|
||
self.assertEqual(400, res.status_code) | ||
self.assertEqual("http://jivago.io", res.headers["Access-Control-Allow-Origin"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Headers"]) | ||
self.assertEqual("*", res.headers["Access-Control-Allow-Methods"]) | ||
|
||
def test_cors_preflight_fails_on_unknown_path(self): | ||
res = http.options("/foo/bar/unknown/path") | ||
|
||
self.assertEqual(404, res.status_code) | ||
|
||
|
||
if __name__ == '__main__': | ||
anachronos.run_tests() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,25 @@ | ||
from typing import List, Type | ||
|
||
from jivago.config.production_jivago_context import ProductionJivagoContext | ||
from jivago.config.router.cors_rule import CorsRule | ||
from jivago.config.router.router_builder import RouterBuilder | ||
from jivago.lang.annotations import Override | ||
from jivago.lang.registry import Registry | ||
from jivago.wsgi.filter.filter import Filter | ||
from jivago.wsgi.filter.system_filters.error_handling.debug_exception_filter import DebugExceptionFilter | ||
from jivago.wsgi.filter.system_filters.error_handling.unknown_exception_filter import UnknownExceptionFilter | ||
|
||
|
||
class DebugJivagoContext(ProductionJivagoContext): | ||
"""Jivago context for easy development. Automatically configures CORS requests and provides stacktrace logging.""" | ||
|
||
def __init__(self, root_package: "Module", registry: Registry, banner: bool = True): | ||
super().__init__(root_package, registry, banner=banner) | ||
|
||
@Override | ||
def configure_service_locator(self): | ||
super().configure_service_locator() | ||
self.serviceLocator.bind(UnknownExceptionFilter, DebugExceptionFilter) | ||
|
||
@Override | ||
def create_router_config(self) -> RouterBuilder: | ||
return super().create_router_config().add_rule(CorsRule("/", {"Access-Control-Allow-Origin": '*', | ||
'Access-Control-Allow-Headers': '*', | ||
'Access-Control-Allow-Methods': '*'})) | ||
|
||
@Override | ||
def get_default_filters(self) -> List[Type[Filter]]: | ||
production_filters = super().get_default_filters() | ||
production_filters.remove(UnknownExceptionFilter) | ||
return [DebugExceptionFilter] + production_filters |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
from jivago.templating.template_filter import TemplateFilter | ||
from jivago.wsgi.filter.system_filters.banner_filter import BannerFilter | ||
from jivago.wsgi.filter.system_filters.body_serialization_filter import BodySerializationFilter | ||
from jivago.wsgi.filter.system_filters.error_handling.application_exception_filter import ApplicationExceptionFilter | ||
from jivago.wsgi.filter.system_filters.error_handling.unknown_exception_filter import UnknownExceptionFilter | ||
from jivago.wsgi.request.http_form_deserialization_filter import HttpFormDeserializationFilter | ||
from jivago.wsgi.request.json_serialization_filter import JsonSerializationFilter | ||
from jivago.wsgi.routing.cors.cors_headers_injection_filter import CorsHeadersInjectionFilter | ||
|
||
JIVAGO_DEFAULT_FILTERS = [BannerFilter, | ||
CorsHeadersInjectionFilter, | ||
UnknownExceptionFilter, | ||
TemplateFilter, | ||
JsonSerializationFilter, | ||
HttpFormDeserializationFilter, | ||
BodySerializationFilter, | ||
ApplicationExceptionFilter] | ||
|
||
JIVAGO_DEFAULT_OPTIONS_FILTERS = [BannerFilter, | ||
CorsHeadersInjectionFilter, | ||
UnknownExceptionFilter, | ||
JsonSerializationFilter, | ||
BodySerializationFilter, | ||
ApplicationExceptionFilter] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.