forked from phoenix/litellm-mirror
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""
|
|
Routes between admin, auth, keys pages
|
|
"""
|
|
import streamlit as st
|
|
import base64, binascii
|
|
from admin import admin_page
|
|
from auth import auth_page
|
|
from urllib.parse import urlparse, parse_qs
|
|
|
|
# Parse the query params in the URL
|
|
def get_query_params():
|
|
# Get the query params from Streamlit's `server.request` function
|
|
# This functionality is not officially documented and could change in the future versions of Streamlit
|
|
query_params = st.experimental_get_query_params()
|
|
return query_params
|
|
|
|
def is_base64(sb):
|
|
try:
|
|
if isinstance(sb, str):
|
|
# Try to encode it to bytes if it's a unicode string
|
|
sb_bytes = sb.encode('ascii')
|
|
elif isinstance(sb, bytes):
|
|
sb_bytes = sb
|
|
else:
|
|
# If it is not a byte or a string, it is not base64
|
|
return False
|
|
|
|
# Check if decoding is successful.
|
|
# The result of the decode is not required, so it is ignored.
|
|
_ = base64.urlsafe_b64decode(sb_bytes)
|
|
|
|
# If the decode was successful, the input is likely base64
|
|
return True
|
|
except (binascii.Error, ValueError):
|
|
# If an error occurs, return False, as the input is not base64
|
|
return False
|
|
|
|
# Check the URL path and route to the correct page based on the path
|
|
query_params = get_query_params()
|
|
page_param = query_params.get('page', [None])[0]
|
|
|
|
# Route to the appropriate page based on the URL query param
|
|
if page_param:
|
|
try:
|
|
# Try to decode the page_param from base64
|
|
if is_base64(page_param):
|
|
auth_page()
|
|
else:
|
|
st.error("Unknown page")
|
|
except Exception as e:
|
|
st.error("Failed to decode the page parameter. Error: " + str(e))
|
|
else:
|
|
admin_page()
|