Skip to content

Commit b7f64fc

Browse files
committed
Add basic oauth flow
1 parent 0d4b4ca commit b7f64fc

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

src/backend/core/api/viewsets.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from django.http import Http404, StreamingHttpResponse
2121
from django.urls import reverse
2222
from django.utils.functional import cached_property
23+
from django.shortcuts import redirect
2324
from django.utils.text import capfirst, slugify
2425
from django.utils.translation import gettext_lazy as _
2526

@@ -2072,3 +2073,42 @@ def _load_theme_customization(self):
20722073
)
20732074

20742075
return theme_customization
2076+
2077+
notion_client_id = "206d872b-594c-80de-94ff-003760c352e4"
2078+
notion_client_secret = "XXX"
2079+
notion_redirect_uri = "https://emersion.fr/notion-redirect"
2080+
2081+
@drf.decorators.api_view()
2082+
def notion_import_redirect(request):
2083+
query = urlencode({
2084+
"client_id": notion_client_id,
2085+
"response_type": "code",
2086+
"owner": "user",
2087+
"redirect_uri": notion_redirect_uri,
2088+
})
2089+
return redirect("https://api.notion.com/v1/oauth/authorize?" + query)
2090+
2091+
@drf.decorators.api_view()
2092+
def notion_import_callback(request):
2093+
code = request.GET.get("code")
2094+
resp = requests.post(
2095+
"https://api.notion.com/v1/oauth/token",
2096+
auth=requests.auth.HTTPBasicAuth(notion_client_id, notion_client_secret),
2097+
headers={"Accept": "application/json"},
2098+
data={
2099+
"grant_type": "authorization_code",
2100+
"code": code,
2101+
"redirect_uri": notion_redirect_uri,
2102+
},
2103+
)
2104+
resp.raise_for_status()
2105+
data = resp.json()
2106+
request.session["notion_token"] = data["access_token"]
2107+
return redirect("/api/v1.0/notion_import/run")
2108+
2109+
#@drf.decorators.api_view(["POST"])
2110+
@drf.decorators.api_view()
2111+
def notion_import_run(request):
2112+
if "notion_token" not in request.session:
2113+
raise drf.exceptions.PermissionDenied()
2114+
return drf.response.Response({"sava": "oui et toi ?"})

src/backend/core/urls.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@
5858
r"^templates/(?P<resource_id>[0-9a-z-]*)/",
5959
include(template_related_router.urls),
6060
),
61+
path(
62+
"notion_import/",
63+
include(
64+
[
65+
path("redirect", viewsets.notion_import_redirect),
66+
path("callback", viewsets.notion_import_callback),
67+
path("run", viewsets.notion_import_run),
68+
]
69+
),
70+
),
6171
]
6272
),
6373
),

0 commit comments

Comments
 (0)