forked from phoenix/litellm-mirror
build(auth.py): adding email / magic link based login for proxy ui
This commit is contained in:
parent
39a722bc9b
commit
abcd7cf54f
4 changed files with 82 additions and 0 deletions
6
ui/README.md
Normal file
6
ui/README.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# proxy ui
|
||||||
|
|
||||||
|
A simple UI to manage the litellm proxy.
|
||||||
|
|
||||||
|
This just lets users create new keys for the proxy, through a ui.
|
||||||
|
|
35
ui/app.py
Normal file
35
ui/app.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
import streamlit as st
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
|
def generate_key(name, description):
|
||||||
|
# Code to generate and return a key goes here
|
||||||
|
return "Generated Key"
|
||||||
|
|
||||||
|
|
||||||
|
def main(api_base, url_hash):
|
||||||
|
st.title("Key Request")
|
||||||
|
|
||||||
|
# Create input fields for key name and description
|
||||||
|
name = st.text_input("Key Name")
|
||||||
|
description = st.text_area("Key Description")
|
||||||
|
|
||||||
|
# Create a button to request the key
|
||||||
|
if st.button("Request Key"):
|
||||||
|
if name and description:
|
||||||
|
key = generate_key(name, description)
|
||||||
|
st.success(f"Your key: {key}")
|
||||||
|
else:
|
||||||
|
st.error("Please enter a valid key name and description.")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Get the proxy URL and hash from the admin
|
||||||
|
proxy_url = st.text_input("Admin Proxy URL")
|
||||||
|
hash_input = st.text_input("URL Hash")
|
||||||
|
|
||||||
|
# Generate the public URL with hash
|
||||||
|
encoded_hash = urllib.parse.quote(hash_input.strip()) if hash_input else ""
|
||||||
|
public_url = f"{proxy_url}/{encoded_hash}"
|
||||||
|
|
||||||
|
# Run the Streamlit app
|
||||||
|
main(proxy_url, hash_input)
|
39
ui/auth.py
Normal file
39
ui/auth.py
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
"""
|
||||||
|
Auth in user, to proxy ui.
|
||||||
|
|
||||||
|
Uses supabase passwordless auth: https://supabase.com/docs/reference/python/auth-signinwithotp
|
||||||
|
|
||||||
|
Remember to set your redirect url to 8501 (streamlit default).
|
||||||
|
"""
|
||||||
|
import streamlit as st
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
load_dotenv()
|
||||||
|
import os
|
||||||
|
from supabase import create_client, Client
|
||||||
|
|
||||||
|
# Set up Supabase client
|
||||||
|
url: str = os.environ.get("SUPABASE_URL")
|
||||||
|
key: str = os.environ.get("SUPABASE_KEY")
|
||||||
|
supabase: Client = create_client(url, key)
|
||||||
|
|
||||||
|
|
||||||
|
def sign_in_with_otp(email: str):
|
||||||
|
data = supabase.auth.sign_in_with_otp({"email": email})
|
||||||
|
# Redirect to Supabase UI with the return data
|
||||||
|
st.write(f"Please check your email for a login link!")
|
||||||
|
|
||||||
|
|
||||||
|
# Create the Streamlit app
|
||||||
|
def main():
|
||||||
|
st.title("User Authentication")
|
||||||
|
|
||||||
|
# User email input
|
||||||
|
email = st.text_input("Enter your email")
|
||||||
|
|
||||||
|
# Sign in button
|
||||||
|
if st.button("Sign In"):
|
||||||
|
sign_in_with_otp(email)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
2
ui/requirements.txt
Normal file
2
ui/requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
python-dotenv
|
||||||
|
supabase
|
Loading…
Add table
Add a link
Reference in a new issue