Skip to content

Commit 8af36da

Browse files
committed
Convert the Flask IDP to FastAPI
1 parent 517d677 commit 8af36da

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

app.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import json
2+
import urllib.parse
3+
4+
from fastapi import FastAPI, Request, Response
5+
from oauthlib.oauth2 import Server
6+
from starlette.responses import RedirectResponse
7+
8+
from validator import MyRequestValidator
9+
10+
app = FastAPI()
11+
oauth2_server = Server(MyRequestValidator())
12+
13+
14+
@app.get("/auth")
15+
async def auth(request: Request):
16+
uri = str(request.url)
17+
http_method = request.method
18+
headers = dict(request.headers)
19+
body_bytes = await request.body()
20+
body = body_bytes.decode("utf-8")
21+
22+
scopes, credentials = oauth2_server.validate_authorization_request(uri, http_method, body, headers)
23+
uri = "/auth?" + urllib.parse.urlencode({"scopes": ','.join(scopes), **credentials})
24+
headers, body, status_code = oauth2_server.create_authorization_response(uri, http_method, body, headers)
25+
26+
if status_code == 302:
27+
location = headers.get('Location', '')
28+
return RedirectResponse(location, headers=headers, status_code=status_code)
29+
30+
return Response(content=body, status_code=status_code)
31+
32+
33+
@app.post("/token")
34+
async def token(request: Request):
35+
uri = str(request.url)
36+
http_method = request.method
37+
headers = dict(request.headers)
38+
body_bytes = await request.body()
39+
body = body_bytes.decode("utf-8")
40+
41+
headers, body, status_code = oauth2_server.create_token_response(uri, http_method, body, headers, {})
42+
43+
return Response(content=json.dumps({
44+
**json.loads(body),
45+
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
46+
}), status_code=status_code)

0 commit comments

Comments
 (0)