Login funcionando
This commit is contained in:
@@ -4,16 +4,32 @@ from sqlalchemy.ext.declarative import declarative_base
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
import pyotp
|
||||
import os
|
||||
from pathlib import Path
|
||||
from sqlalchemy.pool import NullPool
|
||||
|
||||
# Configurar caminho do banco de dados
|
||||
db_dir = Path.home() / '.local' / 'share' / 'controles'
|
||||
db_dir.mkdir(parents=True, exist_ok=True)
|
||||
db_path = db_dir / 'database.db'
|
||||
|
||||
# Configurar engine com NullPool
|
||||
engine = create_engine(
|
||||
f'sqlite:///{db_path}',
|
||||
echo=True,
|
||||
poolclass=NullPool # Usar NullPool ao invés do pool padrão
|
||||
)
|
||||
|
||||
Base = declarative_base()
|
||||
engine = create_engine('sqlite:///database.db', echo=True)
|
||||
SessionLocal = sessionmaker(bind=engine)
|
||||
|
||||
def get_db_connection():
|
||||
"""
|
||||
Retorna uma nova sessão do banco de dados
|
||||
"""
|
||||
return SessionLocal()
|
||||
try:
|
||||
return SessionLocal()
|
||||
finally:
|
||||
engine.dispose()
|
||||
|
||||
def execute_query(query, params=None):
|
||||
"""
|
||||
@@ -195,11 +211,17 @@ class Usuario(Base):
|
||||
self.password_hash = generate_password_hash(password)
|
||||
|
||||
def check_password(self, password):
|
||||
return check_password_hash(self.password_hash, password)
|
||||
result = check_password_hash(self.password_hash, password)
|
||||
print(f"Verificação de senha para {self.username}: {'sucesso' if result else 'falha'}")
|
||||
return result
|
||||
|
||||
def verify_otp(self, otp_code):
|
||||
totp = pyotp.TOTP(self.otp_secret)
|
||||
return totp.verify(otp_code)
|
||||
result = totp.verify(otp_code)
|
||||
print(f"Verificação OTP para {self.username}")
|
||||
print(f"Código fornecido: {otp_code}")
|
||||
print(f"Resultado da verificação: {'válido' if result else 'inválido'}")
|
||||
return result
|
||||
|
||||
def get_otp_uri(self):
|
||||
totp = pyotp.TOTP(self.otp_secret)
|
||||
@@ -234,40 +256,61 @@ class RolePermissao(Base):
|
||||
permissao = relationship("Permissao", back_populates="roles")
|
||||
|
||||
# Remover o banco de dados existente (se existir)
|
||||
if os.path.exists('database.db'):
|
||||
os.remove('database.db')
|
||||
if os.path.exists(db_path):
|
||||
os.remove(db_path)
|
||||
|
||||
# Criar todas as tabelas novamente
|
||||
Base.metadata.create_all(engine)
|
||||
|
||||
# Criar roles iniciais
|
||||
def create_initial_data():
|
||||
session = get_db_connection()
|
||||
def init_database():
|
||||
"""Inicializa o banco de dados com dados básicos"""
|
||||
print("Inicializando banco de dados...")
|
||||
|
||||
# Criar todas as tabelas
|
||||
Base.metadata.create_all(engine)
|
||||
|
||||
session = SessionLocal()
|
||||
try:
|
||||
# Criar role de admin
|
||||
admin_role = Role(nome="Administrador", nivel=1)
|
||||
session.add(admin_role)
|
||||
session.flush() # Para obter o ID da role
|
||||
|
||||
# Criar usuário admin
|
||||
admin = Usuario(
|
||||
username="admin",
|
||||
password="admin123",
|
||||
is_admin=True
|
||||
)
|
||||
admin.role_id = admin_role.id
|
||||
session.add(admin)
|
||||
|
||||
session.commit()
|
||||
print(f"Segredo OTP do admin: {admin.otp_secret}")
|
||||
print("Usuário admin criado com sucesso!")
|
||||
# Verificar se já existe um admin
|
||||
admin = session.query(Usuario).filter_by(username="admin").first()
|
||||
|
||||
if not admin:
|
||||
print("Criando role de administrador...")
|
||||
# Criar role de admin
|
||||
admin_role = session.query(Role).filter_by(nome="Administrador").first()
|
||||
if not admin_role:
|
||||
admin_role = Role(nome="Administrador", nivel=1)
|
||||
session.add(admin_role)
|
||||
session.commit()
|
||||
|
||||
print("Criando usuário admin...")
|
||||
# Criar usuário admin
|
||||
admin = Usuario(
|
||||
username="admin",
|
||||
password="admin123",
|
||||
is_admin=True
|
||||
)
|
||||
admin.email = "admin@example.com"
|
||||
admin.role_id = admin_role.id
|
||||
|
||||
session.add(admin)
|
||||
session.commit()
|
||||
|
||||
print("=== Usuário Admin Criado ===")
|
||||
print(f"Username: admin")
|
||||
print(f"Senha: admin123")
|
||||
print(f"Email: {admin.email}")
|
||||
print(f"OTP Secret: {admin.otp_secret}")
|
||||
else:
|
||||
print("Usuário admin já existe")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Erro ao criar dados iniciais: {e}")
|
||||
print(f"Erro na inicialização do banco: {e}")
|
||||
session.rollback()
|
||||
raise
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
# Inicializar o banco de dados automaticamente quando o módulo for importado
|
||||
init_database()
|
||||
|
||||
# Executar a criação dos dados iniciais
|
||||
if __name__ == "__main__":
|
||||
create_initial_data()
|
||||
init_database()
|
||||
Reference in New Issue
Block a user