File size: 2,300 Bytes
bbea1cc
 
cb5b71d
 
bbea1cc
 
 
dc92053
 
8c11dd4
bbea1cc
cb5b71d
 
 
 
bbea1cc
041af8a
bbea1cc
 
041af8a
 
8c11dd4
041af8a
 
bbea1cc
 
 
 
 
 
041af8a
 
 
8c11dd4
041af8a
 
 
 
bbea1cc
 
 
 
 
 
 
 
 
 
cb5b71d
 
dc92053
cb5b71d
 
 
041af8a
 
 
6a31b9a
dc92053
041af8a
 
5a782ad
 
 
 
dc92053
cb5b71d
dc92053
5a782ad
 
041af8a
cb5b71d
6a31b9a
 
 
cb5b71d
 
dc92053
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import urllib.parse

import streamlit as st

from core.constants import OAUTH_CLIENT_ID
from core.constants import OAUTH_STATE
from core.constants import REDIRECT_URI
from core.query_params import get_project_timestamp
from core.state import CurrentProject
from core.state import get_user
from core.state import User
from utils import init_state
from views.splash import render_splash
from views.wizard import render_editor

st.set_page_config(page_title="Croissant Editor", page_icon="🥐", layout="wide")
col1, col2, col3 = st.columns([10, 1, 1])
col1.header("Croissant Editor")

init_state()

user = get_user()

if OAUTH_CLIENT_ID and not user:
    query_params = st.experimental_get_query_params()
    state = query_params.get("state")
    if state and state[0] == OAUTH_STATE:
        code = query_params.get("code")
        if not code:
            st.stop()
        try:
            st.session_state[User] = User.connect(code)
            # Clear the cache to force retrieving the new user.
            get_user()
        except:
            raise
        finally:
            st.experimental_set_query_params()
    else:
        redirect_uri = urllib.parse.quote(REDIRECT_URI, safe="")
        client_id = urllib.parse.quote(OAUTH_CLIENT_ID, safe="")
        state = urllib.parse.quote(OAUTH_STATE, safe="")
        scope = urllib.parse.quote("openid profile", safe="")
        url = f"https://huggingface.co/oauth/authorize?response_type=code&redirect_uri={redirect_uri}&scope={scope}&client_id={client_id}&state={state}"
        st.link_button("🤗 Login with Hugging Face", url)
        st.stop()


def _back_to_menu():
    """Sends the user back to the menu."""
    st.experimental_set_query_params()
    init_state(force=True)


def _logout():
    """Logs the user out."""
    st.cache_data.clear()
    st.session_state[User] = None
    _back_to_menu()


if OAUTH_CLIENT_ID:
    col2.write("\n")  # Vertical box to shift the lgout menu
    col2.button("Log out", on_click=_logout)

timestamp = get_project_timestamp()

if timestamp:
    col3.write("\n")  # Vertical box to shift the button menu
    col3.button("Menu", on_click=_back_to_menu)


should_display_editor = bool(st.session_state.get(CurrentProject))

if should_display_editor:
    render_editor()
else:
    render_splash()