from multiapp import ViewPortal, Auth
import pandas as pd
from sqlalchemy import create_engine
from Data import credentials
import streamlit as st
from streamlit_multipage import MultiPage
import extra_streamlit_components as stx
import datetime
def button_style():
style_button = """
"""
st.markdown(style_button, unsafe_allow_html=True)
def style_title():
style = """
"""
st.markdown(style, unsafe_allow_html=True)
def get_user():
user = st.session_state.key
return user
def get_password():
password = st.session_state['pass']
return password
# @st.experimental_memo
def get_session_state():
return st.session_state
@st.experimental_memo
def read_cred():
url = credentials.credentials_postgresql["POSTGRESQL"]
engine = create_engine(url, echo=False)
credenciales = pd.read_sql_query("""select * from credenciales""",
con=engine)
credenciales.columns = ['Usuario', 'Password', 'Area', 'Cargo',
'Mail', 'Nombre']
engine.dispose()
return credenciales
def input_page(st, **state):
MultiPage.save({"user": "", "passw": ""})
user = st.sidebar.text_input('User', key="1")
passw = st.sidebar.text_input('Password', key="2")
if user and passw:
MultiPage.save({"user": user, "passw": passw})
def login_cookies(cookie_manager):
c1, c2, c3 = st.columns(3)
with c2:
user = st.text_input("User")
passw = st.text_input("Password")
if st.button("Login"):
cookie_manager.set("user", user, key="user", expires_at=datetime.datetime(year=2023, month=2, day=2))
cookie_manager.set("passw", passw, key="password", expires_at=datetime.datetime(year=2023, month=2, day=2))
return user, passw
def compute_page():
def get_manager():
return stx.CookieManager()
cookie_manager = get_manager()
cookies = cookie_manager.get_all()
st.write(cookies)
credenciales = read_cred()
try:
user = cookies["user"]
password = cookies["passw"]
mail = st.session_state['mail']
cargo = st.session_state['cargo']
password = st.session_state['pass']
area = st.session_state['area']
name = st.session_state["name"]
# st.write(get_session_state())
Portal = ViewPortal()
Portal.set_user(user, area, mail, cargo)
Portal.run_views()
except Exception as exc:
try:
auth = Auth()
user = cookies["user"]
password = cookies["passw"]
auth.log_in(user, password)
if auth.state:
user = auth.user
st.session_state.key = user
name = credenciales[credenciales["Usuario"]==user].iloc[0]["Nombre"]
st.session_state["name"] = name
area = auth.area
mail = auth.mail
cargo = auth.cargo
st.session_state['mail'] = mail
st.session_state['cargo'] = cargo
st.session_state['pass'] = password
st.session_state['area'] = area
Portal = ViewPortal()
Portal.set_user(user, area, mail, cargo)
Portal.run_views()
except:
auth = Auth()
if auth.state == "":
user, passw = login_cookies(cookie_manager)
auth.log_in(user, passw)
if auth.state:
user = auth.user
st.session_state.key = user
name = credenciales[credenciales["Usuario"] == user].iloc[0]["Nombre"]
st.session_state["name"] = name
area = auth.area
mail = auth.mail
cargo = auth.cargo
st.session_state['mail'] = mail
st.session_state['cargo'] = cargo
st.session_state['pass'] = passw
st.session_state['area'] = area
Portal = ViewPortal()
Portal.set_user(user, area, mail, cargo)
Portal.run_views()
else:
st.sidebar.error("Clave incorrecta")
def set_page_container_style(
max_width: int = 1100, max_width_100_percent: bool = False,
padding_top: int = 1, padding_right: int = 10, padding_left: int = 1, padding_bottom: int = 10,
color: str = 'black', background_color: str = 'white',
):
if max_width_100_percent:
max_width_str = f'max-width: 100%;'
else:
max_width_str = f'max-width: {max_width}px;'
st.markdown(
f'''
''',
unsafe_allow_html=True,
)
if __name__ == '__main__':
import streamlit_authenticator as stauth
import yaml
st.set_page_config(layout="wide", page_title="Portal LVAM",
page_icon="img/icono.png")
hashed_passwords = stauth.Hasher(["hola", "hola"]).generate()
with open('config.yaml') as file:
config = yaml.load(file, Loader=yaml.SafeLoader)
authenticator = stauth.Authenticate(
config['credentials']['names'],
config['credentials']['usernames'],
hashed_passwords,
config['cookie']['name'],
config['cookie']['key'],
config['cookie']['expiry_days']
)
name, authentication_status, username = authenticator.login('Login', 'main')
if st.session_state["authentication_status"]:
authenticator.logout('Logout', 'main')
st.write(f'Welcome *{st.session_state["name"]}*')
st.title('Some content')
elif st.session_state["authentication_status"] == False:
st.error('Username/password is incorrect')
elif st.session_state["authentication_status"] == None:
st.warning('Please enter your username and password')
# if __name__ == '__main__':
# st.set_page_config(layout="wide", page_title="Portal LVAM",
# page_icon="img/icono.png")
# place_0 = st.empty()
# col1, col2 = st.columns((2, 1))
# place_image = st.sidebar.empty()
# place_form = st.sidebar.empty()
# form1 = place_form.form("Ingresar")
# logged = False
# try:
# user = st.session_state.key
# password = st.session_state['pass']
# mail = st.session_state['mail']
# cargo = st.session_state['cargo']
# password = st.session_state['pass']
# area = st.session_state['area']
# name = st.session_state["name"]
# # st.write(get_session_state())
# Portal = ViewPortal()
# Portal.set_user(user, area, mail, cargo)
# Portal.run_views()
# except Exception as exc:
# st.write(exc)
# url = credentials.credentials_postgresql["POSTGRESQL"]
# engine = create_engine(url, echo=False)
# credenciales = pd.read_sql_query(
# """select * from credenciales""", con=engine)
# credenciales.columns = ['Usuario', 'Password',
# 'Area', 'Cargo', 'Mail', 'Nombre']
# try:
# usuario = get_user()
# except:
# usuario = ""
# user = form1.text_input("Enter a username", value=usuario)
# password = form1.text_input("Enter a password",
# type="password")
# submitted = form1.form_submit_button("Ingresar")
# auth = Auth()
# auth.log_in(user, password)
# if auth.state:
# user = auth.user
# st.session_state.key = user
# name = credenciales[credenciales["Usuario"]==user].iloc[0]["Nombre"]
# st.session_state["name"] = name
# area = auth.area
# mail = auth.mail
# cargo = auth.cargo
# st.session_state['mail'] = mail
# st.session_state['cargo'] = cargo
# st.session_state['pass'] = password
# st.session_state['area'] = area
# place_form.empty()
# place_image.empty()
# Portal = ViewPortal()
# Portal.set_user(user, area, mail, cargo)
# Portal.run_views()
# elif auth.state == "":
# st.write("")
# else:
# st.sidebar.error("Clave incorrecta")