Spaces:
Running
Running
test
Browse files
app.py
CHANGED
@@ -36,8 +36,7 @@ def show_profile(request: gr.Request) -> str:
|
|
36 |
|
37 |
def js_open(url: str) -> str:
|
38 |
# Taken from https://cmgdo.com/external-link-in-gradio-button/
|
39 |
-
return f"function() {{window.
|
40 |
-
# return f"function() {{window.open('{url}', '_blank');}}"
|
41 |
|
42 |
|
43 |
with gr.Blocks() as demo:
|
|
|
36 |
|
37 |
def js_open(url: str) -> str:
|
38 |
# Taken from https://cmgdo.com/external-link-in-gradio-button/
|
39 |
+
return f"function() {{window.open('{url}', '_blank');}}"
|
|
|
40 |
|
41 |
|
42 |
with gr.Blocks() as demo:
|
auth.py
CHANGED
@@ -6,6 +6,7 @@ from fastapi import FastAPI
|
|
6 |
from fastapi.requests import Request
|
7 |
from fastapi.responses import RedirectResponse, HTMLResponse
|
8 |
from starlette.middleware.sessions import SessionMiddleware
|
|
|
9 |
|
10 |
|
11 |
OAUTH_CLIENT_ID = os.environ.get("OAUTH_CLIENT_ID")
|
@@ -33,6 +34,7 @@ oauth.register(
|
|
33 |
# Hack to close the login/logout page once the user is logged in/out.
|
34 |
# TODO: can it be less hacky?
|
35 |
CLOSE_WINDOW_HTML = HTMLResponse("<script>window.close();</script>")
|
|
|
36 |
|
37 |
|
38 |
async def oauth_login(request: Request):
|
@@ -44,16 +46,21 @@ async def oauth_login(request: Request):
|
|
44 |
|
45 |
async def oauth_logout(request: Request) -> RedirectResponse:
|
46 |
request.session.pop("user", None)
|
47 |
-
return
|
48 |
-
|
49 |
|
50 |
|
51 |
async def oauth_redirect_callback(request: Request) -> RedirectResponse:
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
|
59 |
def attach_oauth(app: FastAPI) -> None:
|
|
|
6 |
from fastapi.requests import Request
|
7 |
from fastapi.responses import RedirectResponse, HTMLResponse
|
8 |
from starlette.middleware.sessions import SessionMiddleware
|
9 |
+
from authlib.integrations.base_client import MismatchingStateError
|
10 |
|
11 |
|
12 |
OAUTH_CLIENT_ID = os.environ.get("OAUTH_CLIENT_ID")
|
|
|
34 |
# Hack to close the login/logout page once the user is logged in/out.
|
35 |
# TODO: can it be less hacky?
|
36 |
CLOSE_WINDOW_HTML = HTMLResponse("<script>window.close();</script>")
|
37 |
+
OPEN_WINDOW_HTML = HTMLResponse("<script>window.open('{url}', '_blank');</script>")
|
38 |
|
39 |
|
40 |
async def oauth_login(request: Request):
|
|
|
46 |
|
47 |
async def oauth_logout(request: Request) -> RedirectResponse:
|
48 |
request.session.pop("user", None)
|
49 |
+
return CLOSE_WINDOW_HTML
|
50 |
+
return CLOSE_WINDOW_HTML if close_tab else RedirectResponse("/")
|
51 |
|
52 |
|
53 |
async def oauth_redirect_callback(request: Request) -> RedirectResponse:
|
54 |
+
try:
|
55 |
+
token = await oauth.huggingface.authorize_access_token(request)
|
56 |
+
request.session["user"] = token["userinfo"] # TODO: we should store the entire token
|
57 |
+
close_tab = True
|
58 |
+
except MismatchingStateError:
|
59 |
+
# Third-party cookies are most likely forbidden meaning the session will not be set inside the Space iframe.
|
60 |
+
# To counterpart this, we redirect the user to use the Space url outside of the iframe.
|
61 |
+
close_tab = False
|
62 |
+
|
63 |
+
return CLOSE_WINDOW_HTML if close_tab else OPEN_WINDOW_HTML.format(url=request.url_for("oauth_login"))
|
64 |
|
65 |
|
66 |
def attach_oauth(app: FastAPI) -> None:
|