From 2b1e5b9f829143eb232f585a18801f0f770bdd99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Sun, 16 May 2021 20:27:45 +0200 Subject: [PATCH 01/14] =?UTF-8?q?=F0=9F=91=B7=20Upgrade=20Issue=20Manager?= =?UTF-8?q?=20GitHub=20Action=20(#3236)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/issue-manager.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/issue-manager.yml b/.github/workflows/issue-manager.yml index 712930e0ba320..e2fb4f7a43e98 100644 --- a/.github/workflows/issue-manager.yml +++ b/.github/workflows/issue-manager.yml @@ -6,23 +6,25 @@ on: issue_comment: types: - created - - edited issues: types: - labeled + pull_request_target: + types: + - labeled + workflow_dispatch: jobs: issue-manager: runs-on: ubuntu-latest steps: - - uses: tiangolo/issue-manager@0.2.0 + - uses: tiangolo/issue-manager@0.4.0 with: token: ${{ secrets.GITHUB_TOKEN }} config: > { "answered": { - "users": ["tiangolo", "dmontagu"], "delay": 864000, - "message": "Assuming the original issue was solved, it will be automatically closed now. But feel free to add more comments or create new issues." + "message": "Assuming the original need was handled, this will be automatically closed now. But feel free to add more comments or create new issues or PRs." } } From aece74982d7c9c1acac98e2c872c4cb885677fc7 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 16 May 2021 18:28:24 +0000 Subject: [PATCH 02/14] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 25c8d03ca5d02..e8d5698decf71 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* πŸ‘· Upgrade Issue Manager GitHub Action. PR [#3236](https://github.com/tiangolo/fastapi/pull/3236) by [@tiangolo](https://github.com/tiangolo). ## 0.65.1 From d5b09cd95824a1bd1c5595c9a5e020a1d44ce6f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 25 May 2021 17:05:04 +0200 Subject: [PATCH 03/14] =?UTF-8?q?=F0=9F=94=A7=20Add=20new=20banner=20spons?= =?UTF-8?q?or=20badge=20for=20FastAPI=20courses=20bundle=20(#3288)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/css/custom.css | 5 +++++ .../docs/img/sponsors/fastapi-bundle-banner.png | Bin 0 -> 10577 bytes docs/en/overrides/main.html | 10 ++++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 docs/en/docs/img/sponsors/fastapi-bundle-banner.png diff --git a/docs/en/docs/css/custom.css b/docs/en/docs/css/custom.css index 35ff9ef70e2da..9449f0a79c7c0 100644 --- a/docs/en/docs/css/custom.css +++ b/docs/en/docs/css/custom.css @@ -89,6 +89,11 @@ a.announce-link:hover { z-index: 10; } +.announce-wrapper .sponsor-image { + display: block; + border-radius: 20px; +} + .announce-wrapper>div { min-height: 40px; display: flex; diff --git a/docs/en/docs/img/sponsors/fastapi-bundle-banner.png b/docs/en/docs/img/sponsors/fastapi-bundle-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..43a8cceec35448f58198e63615f58abae2f23269 GIT binary patch literal 10577 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 Am;e9( literal 0 HcmV?d00001 diff --git a/docs/en/overrides/main.html b/docs/en/overrides/main.html index 25e973b81b081..e0783675b4e65 100644 --- a/docs/en/overrides/main.html +++ b/docs/en/overrides/main.html @@ -16,9 +16,15 @@ From 9f6f25d54c642071ac1c1114789ccad79eec8e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 25 May 2021 17:05:39 +0200 Subject: [PATCH 04/14] =?UTF-8?q?=F0=9F=94=A7=20Add=20new=20banner=20spons?= =?UTF-8?q?or=20badge=20for=20FastAPI=20courses=20bundle=20(#3288)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 3afce2c4b87ba821f6282a763384a321076dbd61 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 25 May 2021 15:06:28 +0000 Subject: [PATCH 05/14] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index e8d5698decf71..03a276b837ea0 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* πŸ”§ Add new banner sponsor badge for FastAPI courses bundle. PR [#3288](https://github.com/tiangolo/fastapi/pull/3288) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Upgrade Issue Manager GitHub Action. PR [#3236](https://github.com/tiangolo/fastapi/pull/3236) by [@tiangolo](https://github.com/tiangolo). ## 0.65.1 From 60918d25a1f28411638a258c4d99b147ddc555d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Wed, 26 May 2021 11:26:06 +0200 Subject: [PATCH 06/14] =?UTF-8?q?=F0=9F=94=A7=20Add=20new=20gold=20sponsor?= =?UTF-8?q?=20Jina=20=F0=9F=8E=89=20(#3291)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + docs/en/data/sponsors.yml | 3 + docs/en/docs/img/sponsors/jina-banner.svg | 233 +++ docs/en/docs/img/sponsors/jina.svg | 1981 +++++++++++++++++++++ docs/en/overrides/main.html | 6 + 5 files changed, 2224 insertions(+) create mode 100644 docs/en/docs/img/sponsors/jina-banner.svg create mode 100644 docs/en/docs/img/sponsors/jina.svg diff --git a/README.md b/README.md index 19dba3ffc37b2..0fb7cc704f476 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ The key features are: + diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml index 5f56d966737b1..49df39c99a3b4 100644 --- a/docs/en/data/sponsors.yml +++ b/docs/en/data/sponsors.yml @@ -2,6 +2,9 @@ gold: - url: https://www.deta.sh/?ref=fastapi title: The launchpad for all your (team's) ideas img: https://fastapi.tiangolo.com/img/sponsors/deta.svg + - url: https://bit.ly/2QSouzH + title: "Jina: build neural search-as-a-service for any kind of data in just minutes." + img: https://fastapi.tiangolo.com/img/sponsors/jina.svg silver: - url: https://www.investsuite.com/jobs title: Wealthtech jobs with FastAPI diff --git a/docs/en/docs/img/sponsors/jina-banner.svg b/docs/en/docs/img/sponsors/jina-banner.svg new file mode 100644 index 0000000000000..ebde273eedcb9 --- /dev/null +++ b/docs/en/docs/img/sponsors/jina-banner.svg @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/img/sponsors/jina.svg b/docs/en/docs/img/sponsors/jina.svg new file mode 100644 index 0000000000000..3dda4fe3cde13 --- /dev/null +++ b/docs/en/docs/img/sponsors/jina.svg @@ -0,0 +1,1981 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/overrides/main.html b/docs/en/overrides/main.html index e0783675b4e65..601d44afbbc16 100644 --- a/docs/en/overrides/main.html +++ b/docs/en/overrides/main.html @@ -27,6 +27,12 @@ + {% endblock %} From 40bb0c5f362665cee32a14ee1ff9c8b2f110684c Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 26 May 2021 09:26:47 +0000 Subject: [PATCH 07/14] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 03a276b837ea0..7c18831f9e3e8 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* πŸ”§ Add new gold sponsor Jina πŸŽ‰. PR [#3291](https://github.com/tiangolo/fastapi/pull/3291) by [@tiangolo](https://github.com/tiangolo). * πŸ”§ Add new banner sponsor badge for FastAPI courses bundle. PR [#3288](https://github.com/tiangolo/fastapi/pull/3288) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Upgrade Issue Manager GitHub Action. PR [#3236](https://github.com/tiangolo/fastapi/pull/3236) by [@tiangolo](https://github.com/tiangolo). From 36772548b7fe7556cfcb37679b80485301174856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Mon, 7 Jun 2021 10:52:44 +0200 Subject: [PATCH 08/14] =?UTF-8?q?=F0=9F=94=A7=20Update=20sponsors=20badge,?= =?UTF-8?q?=20course=20bundle=20(#3340)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * πŸ”§ Update sponsors badge, course bundle * 🍱 Update course bundle SVG sizes --- .../img/sponsors/fastapi-bundle-banner.png | Bin 10577 -> 0 bytes .../sponsors/fastapi-course-bundle-banner.svg | 293 ++++++++++++++++++ docs/en/overrides/main.html | 4 +- 3 files changed, 295 insertions(+), 2 deletions(-) delete mode 100644 docs/en/docs/img/sponsors/fastapi-bundle-banner.png create mode 100644 docs/en/docs/img/sponsors/fastapi-course-bundle-banner.svg diff --git a/docs/en/docs/img/sponsors/fastapi-bundle-banner.png b/docs/en/docs/img/sponsors/fastapi-bundle-banner.png deleted file mode 100644 index 43a8cceec35448f58198e63615f58abae2f23269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10577 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 Am;e9( diff --git a/docs/en/docs/img/sponsors/fastapi-course-bundle-banner.svg b/docs/en/docs/img/sponsors/fastapi-course-bundle-banner.svg new file mode 100644 index 0000000000000..5dd89b212a2e4 --- /dev/null +++ b/docs/en/docs/img/sponsors/fastapi-course-bundle-banner.svg @@ -0,0 +1,293 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/overrides/main.html b/docs/en/overrides/main.html index 601d44afbbc16..8e698bffda4a3 100644 --- a/docs/en/overrides/main.html +++ b/docs/en/overrides/main.html @@ -22,9 +22,9 @@
From 90120dd6e83d997fa2f7f54119a2e0cf906b1ded Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 7 Jun 2021 08:53:24 +0000 Subject: [PATCH 09/14] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 7c18831f9e3e8..588ca16615c0e 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* πŸ”§ Update sponsors badge, course bundle. PR [#3340](https://github.com/tiangolo/fastapi/pull/3340) by [@tiangolo](https://github.com/tiangolo). * πŸ”§ Add new gold sponsor Jina πŸŽ‰. PR [#3291](https://github.com/tiangolo/fastapi/pull/3291) by [@tiangolo](https://github.com/tiangolo). * πŸ”§ Add new banner sponsor badge for FastAPI courses bundle. PR [#3288](https://github.com/tiangolo/fastapi/pull/3288) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Upgrade Issue Manager GitHub Action. PR [#3236](https://github.com/tiangolo/fastapi/pull/3236) by [@tiangolo](https://github.com/tiangolo). From fa7e3c996edf2d5482fff8f9d890ac2390dede4d Mon Sep 17 00:00:00 2001 From: Patrick Wang <1263870+patrickkwang@users.noreply.github.com> Date: Mon, 7 Jun 2021 06:46:18 -0400 Subject: [PATCH 10/14] =?UTF-8?q?=F0=9F=90=9B=20Check=20Content-Type=20req?= =?UTF-8?q?uest=20header=20before=20assuming=20JSON=20(#2118)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Patrick Wang Co-authored-by: SebastiΓ‘n RamΓ­rez --- fastapi/routing.py | 19 ++++- .../test_body/test_tutorial001.py | 84 +++++++++++++++++-- .../test_tutorial001.py | 1 + 3 files changed, 92 insertions(+), 12 deletions(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index ac5e19d99835a..9b51f03cac562 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -1,4 +1,5 @@ import asyncio +import email.message import enum import inspect import json @@ -36,7 +37,7 @@ ) from pydantic import BaseModel from pydantic.error_wrappers import ErrorWrapper, ValidationError -from pydantic.fields import ModelField +from pydantic.fields import ModelField, Undefined from starlette import routing from starlette.concurrency import run_in_threadpool from starlette.exceptions import HTTPException @@ -174,14 +175,26 @@ def get_request_handler( async def app(request: Request) -> Response: try: - body = None + body: Any = None if body_field: if is_body_form: body = await request.form() else: body_bytes = await request.body() if body_bytes: - body = await request.json() + json_body: Any = Undefined + content_type_value = request.headers.get("content-type") + if content_type_value: + message = email.message.Message() + message["content-type"] = content_type_value + if message.get_content_maintype() == "application": + subtype = message.get_content_subtype() + if subtype == "json" or subtype.endswith("+json"): + json_body = await request.json() + if json_body != Undefined: + body = json_body + else: + body = body_bytes except json.JSONDecodeError as e: raise RequestValidationError([ErrorWrapper(e, ("body", e.pos))], body=e.doc) except Exception as e: diff --git a/tests/test_tutorial/test_body/test_tutorial001.py b/tests/test_tutorial/test_body/test_tutorial001.py index 38c6dbe876b26..c90240ae4c349 100644 --- a/tests/test_tutorial/test_body/test_tutorial001.py +++ b/tests/test_tutorial/test_body/test_tutorial001.py @@ -173,25 +173,91 @@ def test_post_body(path, body, expected_status, expected_response): def test_post_broken_body(): - response = client.post("/items/", data={"name": "Foo", "price": 50.5}) + response = client.post( + "/items/", + headers={"content-type": "application/json"}, + data="{some broken json}", + ) assert response.status_code == 422, response.text assert response.json() == { "detail": [ { + "loc": ["body", 1], + "msg": "Expecting property name enclosed in double quotes: line 1 column 2 (char 1)", + "type": "value_error.jsondecode", "ctx": { - "colno": 1, - "doc": "name=Foo&price=50.5", + "msg": "Expecting property name enclosed in double quotes", + "doc": "{some broken json}", + "pos": 1, "lineno": 1, - "msg": "Expecting value", - "pos": 0, + "colno": 2, }, - "loc": ["body", 0], - "msg": "Expecting value: line 1 column 1 (char 0)", - "type": "value_error.jsondecode", } ] } + + +def test_post_form_for_json(): + response = client.post("/items/", data={"name": "Foo", "price": 50.5}) + assert response.status_code == 422, response.text + assert response.json() == { + "detail": [ + { + "loc": ["body"], + "msg": "value is not a valid dict", + "type": "type_error.dict", + } + ] + } + + +def test_explicit_content_type(): + response = client.post( + "/items/", + data='{"name": "Foo", "price": 50.5}', + headers={"Content-Type": "application/json"}, + ) + assert response.status_code == 200, response.text + + +def test_geo_json(): + response = client.post( + "/items/", + data='{"name": "Foo", "price": 50.5}', + headers={"Content-Type": "application/geo+json"}, + ) + assert response.status_code == 200, response.text + + +def test_wrong_headers(): + data = '{"name": "Foo", "price": 50.5}' + invalid_dict = { + "detail": [ + { + "loc": ["body"], + "msg": "value is not a valid dict", + "type": "type_error.dict", + } + ] + } + + response = client.post("/items/", data=data, headers={"Content-Type": "text/plain"}) + assert response.status_code == 422, response.text + assert response.json() == invalid_dict + + response = client.post( + "/items/", data=data, headers={"Content-Type": "application/geo+json-seq"} + ) + assert response.status_code == 422, response.text + assert response.json() == invalid_dict + response = client.post( + "/items/", data=data, headers={"Content-Type": "application/not-really-json"} + ) + assert response.status_code == 422, response.text + assert response.json() == invalid_dict + + +def test_other_exceptions(): with patch("json.loads", side_effect=Exception): response = client.post("/items/", json={"test": "test2"}) assert response.status_code == 400, response.text - assert response.json() == {"detail": "There was an error parsing the body"} diff --git a/tests/test_tutorial/test_custom_request_and_route/test_tutorial001.py b/tests/test_tutorial/test_custom_request_and_route/test_tutorial001.py index cc85a8a82a5ac..3eb5822e28816 100644 --- a/tests/test_tutorial/test_custom_request_and_route/test_tutorial001.py +++ b/tests/test_tutorial/test_custom_request_and_route/test_tutorial001.py @@ -25,6 +25,7 @@ def test_gzip_request(compress): if compress: data = gzip.compress(data) headers["Content-Encoding"] = "gzip" + headers["Content-Type"] = "application/json" response = client.post("/sum", data=data, headers=headers) assert response.json() == {"sum": n} From 38b785813f175bef80e3e2f5274077f46d898186 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 7 Jun 2021 10:46:59 +0000 Subject: [PATCH 11/14] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 588ca16615c0e..235cfdb9afcd9 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* πŸ› Check Content-Type request header before assuming JSON. PR [#2118](https://github.com/tiangolo/fastapi/pull/2118) by [@patrickkwang](https://github.com/patrickkwang). * πŸ”§ Update sponsors badge, course bundle. PR [#3340](https://github.com/tiangolo/fastapi/pull/3340) by [@tiangolo](https://github.com/tiangolo). * πŸ”§ Add new gold sponsor Jina πŸŽ‰. PR [#3291](https://github.com/tiangolo/fastapi/pull/3291) by [@tiangolo](https://github.com/tiangolo). * πŸ”§ Add new banner sponsor badge for FastAPI courses bundle. PR [#3288](https://github.com/tiangolo/fastapi/pull/3288) by [@tiangolo](https://github.com/tiangolo). From 377234ad8ed7b15667662250166c1bac6327c879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Mon, 7 Jun 2021 14:55:40 +0200 Subject: [PATCH 12/14] =?UTF-8?q?=F0=9F=94=92=20Create=20Security=20Policy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SECURITY.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000000..322f95f629ccf --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,31 @@ +# Security Policy + +Security is very important for FastAPI and its community. πŸ”’ + +Learn more about it below. πŸ‘‡ + +## Versions + +The latest versions of FastAPI are supported. + +You are encouraged to [write tests](https://fastapi.tiangolo.com/tutorial/testing/) for your application and update your FastAPI version frequently after ensuring that your tests are passing. This way you will benefit from the latest features, bug fixes, and **security fixes**. + +You can learn more about [FastAPI versions and how to pin and upgrade them](https://fastapi.tiangolo.com/deployment/versions/) for your project in the docs. + +## Reporting a Vulnerability + +If you think you found a vulnerability, and even if you are not sure about it, please report it right away by sending an email to: security@tiangolo.com. Please try to be as explicit as possible, describing all the steps and example code to reproduce the security issue. + +I (the author, [@tiangolo](https://twitter.com/tiangolo)) will review it thoroughly and get back to you. + +## Public Discussions + +Please restrain from publicly discussing a potential security vulnerability. πŸ™Š + +It's better to discuss privately and try to find a solution first, to limit the potential impact as much as possible. + +--- + +Thanks for your help! + +The FastAPI community and I thank you for that. πŸ™‡ From aabe2c7d66ef4add9d4f89c13483260e40e95b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Wed, 9 Jun 2021 10:16:25 +0200 Subject: [PATCH 13/14] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 235cfdb9afcd9..5e77d87db1eb0 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,7 +2,25 @@ ## Latest Changes -* πŸ› Check Content-Type request header before assuming JSON. PR [#2118](https://github.com/tiangolo/fastapi/pull/2118) by [@patrickkwang](https://github.com/patrickkwang). + +### Security fixes + +* πŸ”’ Check Content-Type request header before assuming JSON. Initial PR [#2118](https://github.com/tiangolo/fastapi/pull/2118) by [@patrickkwang](https://github.com/patrickkwang). + +This change fixes a [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) security vulnerability when using cookies for authentication in path operations with JSON payloads sent by browsers. + +In versions lower than `0.65.2`, FastAPI would try to read the request payload as JSON even if the `content-type` header sent was not set to `application/json` or a compatible JSON media type (e.g. `application/geo+json`). + +So, a request with a content type of `text/plain` containing JSON data would be accepted and the JSON data would be extracted. + +But requests with content type `text/plain` are exempt from [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) preflights, for being considered [Simple requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests). So, the browser would execute them right away including cookies, and the text content could be a JSON string that would be parsed and accepted by the FastAPI application. + +See [CVE-2021-32677](https://github.com/tiangolo/fastapi/security/advisories/GHSA-8h2j-cgx8-6xv7) for more details. + +Thanks to [Dima Boger](https://twitter.com/b0g3r) for the security report! πŸ™‡πŸ”’ + +### Internal + * πŸ”§ Update sponsors badge, course bundle. PR [#3340](https://github.com/tiangolo/fastapi/pull/3340) by [@tiangolo](https://github.com/tiangolo). * πŸ”§ Add new gold sponsor Jina πŸŽ‰. PR [#3291](https://github.com/tiangolo/fastapi/pull/3291) by [@tiangolo](https://github.com/tiangolo). * πŸ”§ Add new banner sponsor badge for FastAPI courses bundle. PR [#3288](https://github.com/tiangolo/fastapi/pull/3288) by [@tiangolo](https://github.com/tiangolo). From 4d91f978d265a5050baeb3d4b3618c2f5cb7995a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Wed, 9 Jun 2021 10:17:27 +0200 Subject: [PATCH 14/14] =?UTF-8?q?=F0=9F=94=96=20Release=20version=200.65.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 2 ++ fastapi/__init__.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 5e77d87db1eb0..bd7e2b2705c55 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -3,6 +3,8 @@ ## Latest Changes +## 0.65.2 + ### Security fixes * πŸ”’ Check Content-Type request header before assuming JSON. Initial PR [#2118](https://github.com/tiangolo/fastapi/pull/2118) by [@patrickkwang](https://github.com/patrickkwang). diff --git a/fastapi/__init__.py b/fastapi/__init__.py index 80f61d9f44177..d04f2ea9605dd 100644 --- a/fastapi/__init__.py +++ b/fastapi/__init__.py @@ -1,6 +1,6 @@ """FastAPI framework, high performance, easy to learn, fast to code, ready for production""" -__version__ = "0.65.1" +__version__ = "0.65.2" from starlette import status as status