Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for custom domains #30

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 39 additions & 31 deletions auth0_component/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,28 @@


if not _RELEASE:
_login_button = components.declare_component(
"login_button",
url="http://localhost:3000", # vite dev server port
)
_login_button = components.declare_component(
"login_button",
url="http://localhost:3000", # vite dev server port
)
else:
parent_dir = os.path.dirname(os.path.abspath(__file__))
build_dir = os.path.join(parent_dir, "frontend/dist")
_login_button = components.declare_component("login_button", path=build_dir)
parent_dir = os.path.dirname(os.path.abspath(__file__))
build_dir = os.path.join(parent_dir, "frontend/dist")
_login_button = components.declare_component("login_button", path=build_dir)


import json
from six.moves.urllib.request import urlopen
from functools import wraps
from jose import jwt


def getVerifiedSubFromToken(token, domain):
domain = "https://"+domain
if not re.match(r".*\.auth0\.com$", domain):
print('domain should end with ".XX.auth0.com" (no trailing slash)')
raise ValueError
jsonurl = urlopen(domain+"/.well-known/jwks.json")
domain = "https://" + domain
if not domain.endswith(".auth0.com"): # Add support for custom domains
raise ValueError("Domain must ends with .auth0.com")

jsonurl = urlopen(domain + "/.well-known/jwks.json")
jwks = json.loads(jsonurl.read())
unverified_header = jwt.get_unverified_header(token)
rsa_key = {}
Expand All @@ -38,33 +39,34 @@ def getVerifiedSubFromToken(token, domain):
"kid": key["kid"],
"use": key["use"],
"n": key["n"],
"e": key["e"]
"e": key["e"],
}
if rsa_key:
try:
payload = jwt.decode(
token,
rsa_key,
algorithms=["RS256"],
audience=domain+"/api/v2/",
issuer=domain+'/'
audience=domain + "/api/v2/",
issuer=domain + "/",
)
except jwt.ExpiredSignatureError:
raise
raise
except jwt.JWTClaimsError:
raise
raise
except Exception:
raise
raise

return payload['sub']
return payload["sub"]

def login_button(clientId, domain,key=None, **kwargs):

def login_button(clientId, domain, key=None, **kwargs):
"""Create a new instance of "login_button".
Parameters
----------
clientId: str
client_id per auth0 config on your Applications / Settings page

domain: str
domain per auth0 config on your Applications / Settings page in the form dev-xxxx.xx.auth0.com
key: str or None
Expand All @@ -77,30 +79,36 @@ def login_button(clientId, domain,key=None, **kwargs):
User info
"""

user_info = _login_button(client_id=clientId, domain = domain, key=key, default=0)
user_info = _login_button(client_id=clientId, domain=domain, key=key, default=0)
if not user_info:
return False
elif isAuth(response = user_info, domain = domain):
elif isAuth(response=user_info, domain=domain):
return user_info
else:
print('Auth failed: invalid token')
raise
print("Auth failed: invalid token")
raise


def isAuth(response, domain):
return getVerifiedSubFromToken(token = response['token'], domain=domain) == response['sub']
return (
getVerifiedSubFromToken(token=response["token"], domain=domain)
== response["sub"]
)


if not _RELEASE:
import streamlit as st
from dotenv import load_dotenv
import os

load_dotenv()

clientId = os.environ['clientId']
domain = os.environ['domain']
clientId = os.environ["clientId"]
domain = os.environ["domain"]
st.subheader("Login component")
user_info = login_button(clientId, domain = domain)
user_info = login_button(clientId, domain=domain)
# user_info = login_button(clientId = "...", domain = "...")
st.write('User info')
st.write("User info")
st.write(user_info)
if st.button('rerun'):
if st.button("rerun"):
st.experimental_rerun()
Loading