Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Backports:SLE-15-SP5
python-Flask-Cors
0001-Fix-request-path-normalization.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Fix-request-path-normalization.patch of Package python-Flask-Cors
From dc23194a86f16492d96f7d630e03fb3b01535e6c Mon Sep 17 00:00:00 2001 From: Cory Dolphin <cory@nextdoor.com> Date: Sat, 29 Aug 2020 16:48:27 -0600 Subject: [PATCH 1/5] Fix request path normalization --- flask_cors/extension.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flask_cors/extension.py b/flask_cors/extension.py index 6a585aa..3f9f52a 100644 --- a/flask_cors/extension.py +++ b/flask_cors/extension.py @@ -10,7 +10,7 @@ """ from flask import request from .core import * - +from urllib.parse import unquote_plus LOG = logging.getLogger(__name__) class CORS(object): @@ -173,9 +173,9 @@ def cors_after_request(resp): if resp.headers is not None and resp.headers.get(ACL_ORIGIN): LOG.debug('CORS have been already evaluated, skipping') return resp - + normalized_path = unquote_plus(request.path) for res_regex, res_options in resources: - if try_match(request.path, res_regex): + if try_match(normalized_path, res_regex): LOG.debug("Request to '%s' matches CORS resource '%s'. Using options: %s", request.path, get_regexp_pattern(res_regex), res_options) set_cors_headers(resp, res_options) From 53e284dc873d1260f5de1262a6e24f9d0783aa86 Mon Sep 17 00:00:00 2001 From: Cory Dolphin <cory@nextdoor.com> Date: Sun, 30 Aug 2020 13:59:37 -0600 Subject: [PATCH 2/5] Fix import --- flask_cors/extension.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flask_cors/extension.py b/flask_cors/extension.py index 3f9f52a..466869e 100644 --- a/flask_cors/extension.py +++ b/flask_cors/extension.py @@ -10,7 +10,11 @@ """ from flask import request from .core import * -from urllib.parse import unquote_plus +try: + from urllib.parse import unquote_plus +except ImportError: + from urllib import unquote_plus + LOG = logging.getLogger(__name__) class CORS(object): From c3eeda5f56e18eacc0758028350c1cbcc4c9b4b2 Mon Sep 17 00:00:00 2001 From: Cory Dolphin <cory@nextdoor.com> Date: Sun, 30 Aug 2020 14:13:25 -0600 Subject: [PATCH 3/5] Fix travis file due to flask dependency change --- .travis.yml | 20 +++++++------------ examples/app_based_example.py | 2 +- setup.py | 3 ++- .../decorator/test_exception_interception.py | 7 +++++++ tests/extension/test_app_extension.py | 6 +++++- 5 files changed, 22 insertions(+), 16 deletions(-) #diff --git a/.travis.yml b/.travis.yml #index 5884719..d480429 100644 #--- a/.travis.yml #+++ b/.travis.yml #@@ -7,23 +7,17 @@ python: # - '3.4' # - '3.5' # - '3.6' #+ - '3.7' #+ - '3.8' # - pypy #- #-# from https://github.com/travis-ci/travis-ci/issues/9815 #-# https://github.com/travis-ci/travis-ci/issues/9069#issuecomment-425720905 #-# Enable 3.7 without globally enabling sudo and dist: xenial for other build jobs #-matrix: #- include: #- - python: 3.7 #- dist: xenial #- sudo: true # # env: #-- FLASK=0.10.1 #-- FLASK=0.10 #- #+- FLASK=0.10.1 WERKZEUG_DEP="werkzeug==0.16.1" #+- FLASK=0.10 WERKZEUG_DEP="werkzeug==0.16.1" #+- FLASK=1.0 WERKZEUG_DEP="" #+- FLASK=1.1 WERKZEUG_DEP="" # install: #- - pip install -U setuptools pep8 six coverage docutils pygments flask==$FLASK #+ - pip install -U setuptools pep8 six coverage docutils pygments flask==$FLASK $WERKZEUG_DEP # # script: # - coverage erase diff --git a/examples/app_based_example.py b/examples/app_based_example.py index e616aa6..b5ff821 100644 --- a/examples/app_based_example.py +++ b/examples/app_based_example.py @@ -124,7 +124,7 @@ def get_exception(): Browsers will first make a preflight request to verify that the resource allows cross-origin POSTs with a JSON Content-Type, which can be simulated as: - $ curl --include -X OPTIONS http://127.0.0.1:5000/exception \ + $ curl --include -X OPTIONS http://127.0.0.1:5000/api/exception \ --header Access-Control-Request-Method:POST \ --header Access-Control-Request-Headers:Content-Type \ --header Origin:www.examplesite.com diff --git a/setup.py b/setup.py index 32e7999..d117d96 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,8 @@ platforms='any', install_requires=install_requires, tests_require=[ - 'nose' + 'nose', + 'packaging' ], test_suite='nose.collector', classifiers=[ diff --git a/tests/decorator/test_exception_interception.py b/tests/decorator/test_exception_interception.py index 87fc04f..fe42d3d 100644 --- a/tests/decorator/test_exception_interception.py +++ b/tests/decorator/test_exception_interception.py @@ -8,6 +8,10 @@ :copyright: (c) 2016 by Cory Dolphin. :license: MIT, see LICENSE for more details. """ +import unittest + +import flask +from packaging import version from ..base_test import FlaskCorsTestCase from flask import Flask, abort from flask_cors import * @@ -198,6 +202,9 @@ def get_with_origins(path): self.assertEqual(resp.status_code, 200) self.assertFalse(ACL_ORIGIN in resp.headers) + @unittest.skipIf(version.parse(flask.__version__) >= version.parse("1.1"), + "Flask 1.1 changed interception behavior, so after request handlers are always run. " + "This obviates the need for our hacky interception") def test_acl_uncaught_exception_500(self): ''' Uncaught exceptions will trigger Flask's internal exception diff --git a/tests/extension/test_app_extension.py b/tests/extension/test_app_extension.py index 6ebca5f..597b744 100644 --- a/tests/extension/test_app_extension.py +++ b/tests/extension/test_app_extension.py @@ -204,7 +204,7 @@ class AppExtensionString(FlaskCorsTestCase): def setUp(self): self.app = Flask(__name__) CORS(self.app, resources=r'/api/*', - headers='Content-Type', + allow_headers='Content-Type', expose_headers='X-Total-Count', origins='http://bar.com') @@ -225,6 +225,10 @@ def overridden(): def index(): return 'Welcome' + @self.app.route('/foo.txt') + def foo_txt(): + return 'Welcome' + def test_exposed(self): for path in '/api/v1/foo', '/api/v1/bar': for resp in self.iter_responses(path, origin='http://bar.com'): #From b83295c9049097b1dbee0465218953fd75d62023 Mon Sep 17 00:00:00 2001 #From: Cory Dolphin <cory@nextdoor.com> #Date: Sun, 30 Aug 2020 15:15:53 -0600 #Subject: [PATCH 4/5] Refactor travis file # #--- # .travis.yml | 19 +++++++++++++------ # 1 file changed, 13 insertions(+), 6 deletions(-) # #diff --git a/.travis.yml b/.travis.yml #index d480429..4f8d3b4 100644 #--- a/.travis.yml #+++ b/.travis.yml #@@ -10,14 +10,21 @@ python: # - '3.7' # - '3.8' # - pypy #- #+ #+matrix: #+ exclude: #+ - python: 3.4 #+ - env: #+ - DEPEENDENCIES="flask==1.1" #+ # env: #-- FLASK=0.10.1 WERKZEUG_DEP="werkzeug==0.16.1" #-- FLASK=0.10 WERKZEUG_DEP="werkzeug==0.16.1" #-- FLASK=1.0 WERKZEUG_DEP="" #-- FLASK=1.1 WERKZEUG_DEP="" #+- DEPEENDENCIES="flask==0.10.1 werkzeug==0.16.1" # pin werkzeug for Flask 10, 10.1 since Flask does not pin it itself. #+- DEPEENDENCIES="flask==0.10 werkzeug==0.16.1" #+- DEPEENDENCIES="flask==1.0" #+- DEPEENDENCIES="flask==1.1" #+ # install: #- - pip install -U setuptools pep8 six coverage docutils pygments flask==$FLASK $WERKZEUG_DEP #+ - pip install -U setuptools pep8 six coverage docutils pygments $DEPEENDENCIES # # script: # - coverage erase # #From de439b5146e27a4fbf6b5653d17ba3b4eb9a4ab2 Mon Sep 17 00:00:00 2001 #From: Cory Dolphin <cory@nextdoor.com> #Date: Sun, 30 Aug 2020 15:21:37 -0600 #Subject: [PATCH 5/5] Include packaging # #--- # .travis.yml | 2 +- # 1 file changed, 1 insertion(+), 1 deletion(-) # #diff --git a/.travis.yml b/.travis.yml #index 4f8d3b4..cf26ab2 100644 #--- a/.travis.yml #+++ b/.travis.yml #@@ -24,7 +24,7 @@ env: # - DEPEENDENCIES="flask==1.1" # # install: #- - pip install -U setuptools pep8 six coverage docutils pygments $DEPEENDENCIES #+ - pip install -U setuptools pep8 six coverage docutils pygments packaging $DEPEENDENCIES # # script: # - coverage erase
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor