gravity / app.py
ayushnoori's picture
Add user authentication
f128fe5
raw
history blame
3.22 kB
import streamlit as st
import hmac
# Standard imports
import numpy as np
import pandas as pd
from datetime import datetime
import os
import random
# Import torch
import torch
# Data visualization
import matplotlib.pyplot as plt
import seaborn as sns
# Path manipulation
from pathlib import Path
import sys
# Custom and other imports
import project_config
from utils import add_logo
from menu import menu
# Insert logo
# add_logo(project_config.MEDIA_DIR / 'gravity_logo.png')
# Initialize st.session_state.role to None
if "role" not in st.session_state:
st.session_state.role = None
# # Retrieve the role from Session State to initialize the widget
# st.session_state._role = st.session_state.role
# def set_role():
# # Callback function to save the role selection to Session State
# st.session_state.role = st.session_state._role
def check_password():
"""Returns `True` if the user had a correct password."""
def login_form():
"""Form with widgets to collect user information"""
with st.form("Credentials"):
st.text_input("Username", key="username")
st.text_input("Password", type="password", key="password")
st.form_submit_button("Log In", on_click=password_entered)
def password_entered():
"""Checks whether a password entered by the user is correct."""
if st.session_state["username"] in st.secrets[
"passwords"
] and hmac.compare_digest(
st.session_state["password"],
st.secrets.passwords[st.session_state["username"]],
):
st.session_state["password_correct"] = True
# Retrieve user name
if st.session_state["username"] in st.secrets["users"]:
st.session_state["name"] = st.secrets["users"][st.session_state["username"]]
else:
st.session_state["name"] = st.session_state["username"]
# Check if the username is an admin
if st.session_state["username"] in st.secrets["admins"]['admins']:
st.session_state["role"] = "admin"
else:
st.session_state["role"] = "user"
# Check if username is in a team
if st.session_state["username"] in st.secrets["teams"]:
st.session_state["team"] = st.secrets["teams"][st.session_state["username"]]
else:
st.session_state["team"] = None
# Don't store the username or password
del st.session_state["password"]
# del st.session_state["username"]
else:
st.session_state["password_correct"] = False
# Return True if the username + password is validated
if st.session_state.get("password_correct", False):
return True
# Show inputs for username + password
login_form()
if "password_correct" in st.session_state:
st.error("πŸ˜• User not known or password incorrect.")
return False
# # Selectbox to choose role
# st.selectbox(
# "Select your role:",
# [None, "user", "admin", "super-admin"],
# key="_role",
# on_change=set_role,
# )
menu() # Render the dynamic menu!
if not check_password():
st.stop()