blob: 0a90856500e33c47d0102acf342f9ae398ebb01d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
"""
Use a token received from the Discord OAuth2 system to fetch user information.
"""
import jwt
from starlette.responses import JSONResponse
from backend.constants import SECRET_KEY
from backend.route import Route
from backend.discord import fetch_bearer_token, fetch_user_details
class AuthorizeRoute(Route):
"""
Use the authorization code from Discord to generate a JWT token.
"""
name = "authorize"
path = "/authorize"
async def post(self, request):
data = await request.json()
bearer_token = await fetch_bearer_token(data["token"])
user_details = await fetch_user_details(bearer_token["access_token"])
token = jwt.encode(user_details, SECRET_KEY, algorithm="HS256")
return JSONResponse({
"token": token.decode()
})
|