diff --git a/components/Auth.py b/components/Auth.py
index 20004135..d36ad2ed 100644
--- a/components/Auth.py
+++ b/components/Auth.py
@@ -26,10 +26,7 @@
"""
-def sso_button(provider: str, auth_uri: str, scopes: list = []):
- client_id = getenv(f"{provider.upper()}_CLIENT_ID")
- if client_id == "":
- return ""
+def sso_buttons():
code = st.query_params.get("code", "")
if isinstance(code, list):
code = str(code[0])
@@ -37,38 +34,98 @@ def sso_button(provider: str, auth_uri: str, scopes: list = []):
code = str(code)
if code == "None" or code is None:
code = ""
- if code == "" and "token" not in st.query_params:
- magic_link_uri = getenv("MAGIC_LINK_URL")
- if magic_link_uri.endswith("/"):
- magic_link_uri = magic_link_uri[:-1]
- magic_link_uri = f"{magic_link_uri}/{provider}"
- magic_link_uri_encoded = urllib.parse.quote(magic_link_uri)
- client_id_encoded = urllib.parse.quote(client_id)
- sso_uri = ""
- scopes = urllib.parse.quote(" ".join(scopes))
- sso_uri = f"{auth_uri}?client_id={client_id_encoded}&redirect_uri={magic_link_uri_encoded}&scope={scopes}&response_type=code&access_type=offline&prompt=consent"
- if sso_uri != "":
- with st.form(f"{provider}_sso_form"):
- if st.form_submit_button(
- f"Sign in with {provider.capitalize()}", use_container_width=True
- ):
- st.markdown(
- f'',
- unsafe_allow_html=True,
- )
- st.stop()
-
-
-def sso_buttons():
# For each page in pages that ends in .py, create a button
- for page in os.listdir("./pages"):
- if page.endswith(".py"):
- provider = page.split(".py")[0].lower()
- # from {provider} import scopes, auth_uri
- module = importlib.import_module(f"pages.{provider}")
- scopes = module.scopes()
- auth_uri = module.auth_uri()
- sso_button(provider, auth_uri, scopes)
+ icons = {
+ "amazon": "https://upload.wikimedia.org/wikipedia/commons/a/a9/Amazon_logo.svg",
+ "aol": "https://upload.wikimedia.org/wikipedia/commons/5/51/AOL.svg",
+ "apple": "https://upload.wikimedia.org/wikipedia/commons/f/fa/Apple_logo_black.svg",
+ "autodesk": "https://upload.wikimedia.org/wikipedia/commons/d/d7/Autodesk_logo_2019.svg",
+ "basecamp": "https://upload.wikimedia.org/wikipedia/en/8/8d/Basecamp-logo.png",
+ "battlenet": "https://upload.wikimedia.org/wikipedia/en/1/1b/Battle.net_Icon.svg",
+ "bitbucket": "https://upload.wikimedia.org/wikipedia/commons/0/0e/Bitbucket-blue-logomark-only.svg",
+ "bitly": "https://upload.wikimedia.org/wikipedia/commons/5/56/Bitly_logo.svg",
+ "clearscore": "https://upload.wikimedia.org/wikipedia/en/5/57/ClearScore_logo.png",
+ "cloud_foundry": "https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Cloud_Foundry_Logo.svg/512px-Cloud_Foundry_Logo.svg.png",
+ "deutsche_telekom": "https://upload.wikimedia.org/wikipedia/commons/d/d2/Logo_telekom_2013.svg",
+ "deviantart": "https://upload.wikimedia.org/wikipedia/commons/b/b5/DeviantArt_Logo.svg",
+ "discord": "https://upload.wikimedia.org/wikipedia/commons/9/98/Discord_logo.svg",
+ "dropbox": "https://upload.wikimedia.org/wikipedia/commons/7/7e/Dropbox_Icon.svg",
+ "facebook": "https://upload.wikimedia.org/wikipedia/commons/5/51/Facebook_f_logo_%282019%29.svg",
+ "fatsecret": "https://upload.wikimedia.org/wikipedia/en/2/20/FatSecret.png",
+ "fitbit": "https://upload.wikimedia.org/wikipedia/commons/6/60/Fitbit_logo_2016.svg",
+ "formstack": "https://upload.wikimedia.org/wikipedia/en/0/09/Formstack_logo.png",
+ "foursquare": "https://upload.wikimedia.org/wikipedia/en/1/12/Foursquare_logo.svg",
+ "github": "https://upload.wikimedia.org/wikipedia/commons/9/91/Octicons-mark-github.svg",
+ "gitlab": "https://upload.wikimedia.org/wikipedia/commons/1/18/GitLab_Logo.svg",
+ "google": "https://upload.wikimedia.org/wikipedia/commons/2/2d/Google-favicon-2015.png",
+ "imgur": "https://upload.wikimedia.org/wikipedia/en/a/a9/Imgur_logo.svg",
+ "instagram": "https://upload.wikimedia.org/wikipedia/commons/a/a5/Instagram_icon.png",
+ "intel_cloud_services": "https://corporate-intelcom.azureedge.net/assets/Intel-Logo.svg",
+ "jive": "https://upload.wikimedia.org/wikipedia/en/8/8a/Jive_logo.png",
+ "keycloak": "https://www.keycloak.org/resources/images/keycloak_logo_400x.png",
+ "linkedin": "https://upload.wikimedia.org/wikipedia/commons/c/ca/LinkedIn_logo_initials.png",
+ "microsoft": "https://upload.wikimedia.org/wikipedia/commons/4/44/Microsoft_logo.svg",
+ "netiq": "https://upload.wikimedia.org/wikipedia/commons/3/30/NetIQ_logo.svg",
+ "okta": "https://upload.wikimedia.org/wikipedia/commons/5/50/Okta_Logo_Brandmark_Blue_RGB.png",
+ "openam": "https://avatars.githubusercontent.com/u/383598?v=4",
+ "openstreetmap": "https://upload.wikimedia.org/wikipedia/commons/6/66/OpenStreetMap-Logo.svg",
+ "orcid": "https://upload.wikimedia.org/wikipedia/commons/0/06/ORCID_iD.svg",
+ "paypal": "https://upload.wikimedia.org/wikipedia/commons/b/b5/PayPal.svg",
+ "ping_identity": "https://upload.wikimedia.org/wikipedia/en/e/e2/Ping_Identity_logo.jpg",
+ "pixiv": "https://upload.wikimedia.org/wikipedia/commons/c/ce/Pixiv_comic_icon.svg",
+ "reddit": "https://upload.wikimedia.org/wikipedia/en/8/82/Reddit_logo_and_wordmark.svg",
+ "salesforce": "https://upload.wikimedia.org/wikipedia/en/b/b5/Salesforce_logo_transparent.png",
+ "spotify": "https://upload.wikimedia.org/wikipedia/commons/1/19/Spotify_logo_without_text.svg",
+ "stack_exchange": "https://upload.wikimedia.org/wikipedia/commons/2/28/Stack_Exchange_logo.svg",
+ "strava": "https://upload.wikimedia.org/wikipedia/en/0/0d/Strava_Logo.svg",
+ "stripe": "https://upload.wikimedia.org/wikipedia/commons/3/3b/Stripe_Logo%2C_revised_2016.png",
+ "twitch": "https://upload.wikimedia.org/wikipedia/commons/7/7e/Twitch_logo_2019.svg",
+ "vimeo": "https://upload.wikimedia.org/wikipedia/commons/9/92/Vimeo_Logo.svg",
+ "vk": "https://upload.wikimedia.org/wikipedia/commons/2/21/VK.com-logo.svg",
+ "wechat": "https://upload.wikimedia.org/wikipedia/commons/9/9e/WeChat_Logo.svg",
+ "withings": "https://upload.wikimedia.org/wikipedia/en/a/a7/Withings_logo.svg",
+ "wso2_identity": "https://upload.wikimedia.org/wikipedia/commons/e/ee/WSO2_Logo.svg",
+ "xero": "https://images.squarespace-cdn.com/content/v1/600485aca07c94041769dbd3/1619704174874-KU8VVDKIHKB9YIS11836/XeroLogo.png",
+ "xing": "https://upload.wikimedia.org/wikipedia/commons/1/17/Xing_Logo.svg",
+ "yahoo": "https://s.yimg.com/rz/l/yahoo_en-US_f_p_bestfit_4x.png",
+ "yammer": "https://upload.wikimedia.org/wikipedia/commons/1/11/Yammer_logo.svg",
+ "yandex": "https://upload.wikimedia.org/wikipedia/commons/0/0f/Yandex_Logo_2016.svg",
+ "yelp": "https://upload.wikimedia.org/wikipedia/commons/a/ad/Yelp_logo.svg",
+ "zendesk": "https://upload.wikimedia.org/wikipedia/commons/9/91/Zendesk_logo.svg",
+ }
+ with st.form("sso_form"):
+ for page in os.listdir("./pages"):
+ if page.endswith(".py"):
+ provider = page.split(".py")[0].lower()
+ # from {provider} import scopes, auth_uri
+ module = importlib.import_module(f"pages.{provider}")
+ scopes = module.scopes()
+ auth_uri = module.auth_uri()
+ client_id = getenv(f"{provider.upper()}_CLIENT_ID")
+ if client_id == "":
+ continue
+ if code == "" and "token" not in st.query_params:
+ magic_link_uri = getenv("MAGIC_LINK_URL")
+ if magic_link_uri.endswith("/"):
+ magic_link_uri = magic_link_uri[:-1]
+ magic_link_uri = f"{magic_link_uri}/{provider}"
+ magic_link_uri_encoded = urllib.parse.quote(magic_link_uri)
+ client_id_encoded = urllib.parse.quote(client_id)
+ sso_uri = ""
+ scopes = urllib.parse.quote(" ".join(scopes))
+ sso_uri = f"{auth_uri}?client_id={client_id_encoded}&redirect_uri={magic_link_uri_encoded}&scope={scopes}&response_type=code&access_type=offline&prompt=consent"
+ if sso_uri != "":
+ # Add icon
+ if provider in icons:
+ icon = icons[provider]
+ st.image(icon)
+ title = f"Continue with {provider.capitalize()}"
+ if st.form_submit_button(title):
+ st.markdown(
+ f'',
+ unsafe_allow_html=True,
+ )
+ st.stop()
def google_sso_button():