Spaces:
Running
Running
| import patch_gradio | |
| import gradio as gr | |
| import gradio.utils | |
| from auth import attach_oauth | |
| if gradio.utils.get_space() is not None: | |
| URL, PORT = "https://wauplin-gradio-oauth-test.hf.space", 7860 | |
| else: | |
| URL, PORT = "http://localhost:5173", 5173 | |
| TEMPLATE = """ | |
| ### Name: {name} | |
| ### Username: {preferred_username} | |
| ### Profile: {profile} | |
| ### Website: {website} | |
|  | |
| You can manage your connected applications in your [settings](https://huggingface.co/settings/connected-applications). | |
| """ | |
| def show_profile(request: gr.Request) -> str: | |
| # request.session in case of websockets (see `def get_request_params`) | |
| # request.request.session in case of direct call | |
| session = getattr(request, "session", None) or getattr(request.request, "session", None) | |
| if session is None: # should never happen... | |
| return "No session attached" | |
| if "user" not in session: | |
| return "Please login first" | |
| return TEMPLATE.format(**session["user"]) | |
| def js_open(url: str) -> str: | |
| # Taken from https://cmgdo.com/external-link-in-gradio-button/ | |
| return f"function() {{window.open('{url}', '_blank');}}" | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| login_button = gr.Button("Login") | |
| login_button.click(None, None, None, _js=js_open(f"{URL}/login/huggingface")) | |
| logout_button = gr.Button("Logout") | |
| logout_button.click(None, None, None, _js=js_open(f"{URL}/logout")) | |
| profile_btn = gr.Button("Show profile") | |
| output = gr.Markdown() | |
| profile_btn.click(fn=show_profile, outputs=output) | |
| old_create_app = gradio.networking.App.create_app | |
| def patched_create_app(*args, **kwargs): | |
| app = old_create_app(*args, **kwargs) | |
| attach_oauth(app) | |
| return app | |
| gradio.networking.App.create_app = patched_create_app | |
| print(URL) | |
| demo.queue() | |
| demo.launch(server_port=PORT) | |