Download auth_utils.py from VeuReu/demo: direct link, hf CLI and curl.
- Browser
- Download file 4.57 kB
-
https://huggingface.co/spaces/VeuReu/demo/resolve/main/auth_utils.py
- Command line
-
hf download hf://spaces/VeuReu/demo/auth_utils.py
-
curl -L -o auth_utils.py https://huggingface.co/spaces/VeuReu/demo/resolve/main/auth_utils.py
4.57 kB
| import os | |
| import yaml | |
| import streamlit as st | |
| from typing import Optional, Dict, Any | |
| import streamlit_authenticator as stauth | |
| class AuthManager: | |
| """Gestiona la autenticación de usuarios con Google OAuth""" | |
| def __init__(self): | |
| self.config_path = "auth_config.yaml" | |
| self.authenticator = None | |
| self.load_config() | |
| def load_config(self): | |
| """Carga la configuración de autenticación""" | |
| try: | |
| with open(self.config_path, 'r', encoding='utf-8') as file: | |
| self.config = yaml.safe_load(file) | |
| except FileNotFoundError: | |
| # Configuración por defecto si no existe el archivo | |
| self.config = { | |
| 'credentials': { | |
| 'usernames': { | |
| 'google_oauth_user': { | |
| 'email': 'google_oauth_user', | |
| 'name': 'Google User', | |
| 'password': 'oauth_password' | |
| } | |
| } | |
| }, | |
| 'cookie': { | |
| 'expiry_days': 30, | |
| 'key': 'veureu_auth_cookie_key_change_in_production', | |
| 'name': 'veureu_auth_cookie' | |
| }, | |
| 'preauthorized': {'emails': []} | |
| } | |
| self.save_config() | |
| def save_config(self): | |
| """Guarda la configuración de autenticación""" | |
| with open(self.config_path, 'w', encoding='utf-8') as file: | |
| yaml.dump(self.config, file, default_flow_style=False) | |
| def initialize_authenticator(self): | |
| """Inicializa el autenticador de Streamlit""" | |
| if self.authenticator is None: | |
| self.authenticator = stauth.Authenticate( | |
| self.config['credentials'], | |
| self.config['cookie']['name'], | |
| self.config['cookie']['key'], | |
| self.config['cookie']['expiry_days'] | |
| ) | |
| return self.authenticator | |
| def show_login_section(self, consent_text: str) -> Optional[str]: | |
| """ | |
| Muestra sección de login con consentimientos | |
| Args: | |
| consent_text: Texto con los términos y condiciones | |
| Returns: | |
| Email del usuario autenticado o None | |
| """ | |
| authenticator = self.initialize_authenticator() | |
| # Crear sección de login | |
| st.markdown("### 📋 Antes de subir tu vídeo") | |
| # Mostrar términos y condiciones | |
| with st.expander("📜 Términos y Condiciones", expanded=True): | |
| st.markdown(consent_text) | |
| st.markdown("#### 🎯 Para continuar, por favor identifícate:") | |
| # Información sobre Google OAuth | |
| st.info("🔧 **Login con Google OAuth** - En producción esto conectará con tu cuenta Google") | |
| st.info("💡 **Modo demostración** - Usa las credenciales siguientes:") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| st.code("Usuario: google_oauth_user") | |
| with col2: | |
| st.code("Contraseña: oauth_password") | |
| # Intentar autenticación | |
| name, authentication_status, username = authenticator.login( | |
| 'Login para acceder al servicio', 'main' | |
| ) | |
| if authentication_status: | |
| st.success(f"✅ Bienvenido/a, {name}!") | |
| st.success("🎉 **Identificación completada** - Has aceptado los términos y condiciones mediante tu login.") | |
| st.balloons() | |
| return username | |
| elif authentication_status == False: | |
| st.error('❌ Credenciales incorrectos. Por favor inténtalo de nuevo.') | |
| st.warning("💡 Usa: google_oauth_user / oauth_password") | |
| else: | |
| st.warning('⚠️ Por favor introduce tus credenciales para continuar') | |
| return None | |
| def logout(self): | |
| """Cierra la sesión del usuario""" | |
| if self.authenticator: | |
| self.authenticator.logout('Logout', 'main') | |
| def is_authenticated(self) -> bool: | |
| """Verifica si el usuario está autenticado""" | |
| return 'authentication_status' in st.session_state and st.session_state.authentication_status | |
| def get_current_user(self) -> Optional[str]: | |
| """Obtiene el email del usuario actual""" | |
| if self.is_authenticated(): | |
| return st.session_state.get('username') | |
| return None | |
| # Instancia global del gestor de autenticación | |
| auth_manager = AuthManager() | |