Roudrigus commited on
Commit
3065d0e
·
verified ·
1 Parent(s): ccb6818

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -10
app.py CHANGED
@@ -64,13 +64,100 @@ _DB_ALIAS = _ensure_db_case_alias()
64
  # --------------------------------------------------------------------------------------
65
  from utils_operacao import obter_grupos_disponiveis, obter_modulos_para_grupo
66
  from utils_info import INFO_CONTEUDO, INFO_MODULOS, INFO_MAP_PAGINA_ID
67
- from login import login
68
  from utils_permissoes import verificar_permissao
69
- from utils_layout import exibir_logo
70
  from modules_map import MODULES
71
  from banco import engine, Base, SessionLocal
72
  from models import QuizPontuacao, IOIRunSugestao, AvisoGlobal
73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  # --------------------------------------------------------------------------------------
75
  # Imports de páginas/módulos com fallback
76
  # --------------------------------------------------------------------------------------
@@ -540,8 +627,8 @@ def main():
540
  # LOGIN
541
  if not st.session_state.logado:
542
  st.session_state.quiz_verificado = False
543
- exibir_logo(top=True, sidebar=False)
544
- login()
545
  return
546
 
547
  # Heartbeat + badge admin
@@ -611,7 +698,7 @@ def main():
611
  # QUIZ (gating)
612
  if not st.session_state.quiz_verificado:
613
  if not quiz_respondido_hoje(usuario):
614
- exibir_logo(top=True, sidebar=False)
615
  quiz.main()
616
  return
617
  else:
@@ -619,7 +706,7 @@ def main():
619
  st.rerun()
620
 
621
  # SISTEMA LIBERADO
622
- exibir_logo(top=True, sidebar=True)
623
  _render_aviso_global_topbar()
624
  _show_birthday_banner_if_needed()
625
 
@@ -630,7 +717,6 @@ def main():
630
  banco_lbl = bank_label(current_db_choice()) if _HAS_ROUTER else (
631
  "🟢 Produção" if current_db_choice() == "prod" else "🔴 Teste"
632
  )
633
- # 👉 Mostra exatamente como você pediu:
634
  st.sidebar.caption(f"🗄️ Banco ativo: {banco_lbl}")
635
  except Exception:
636
  pass
@@ -710,7 +796,7 @@ def main():
710
  )
711
  ja_nas_opcoes_r = any(mid == "repositorio_load" for mid, _ in (opcoes or []))
712
  passa_busca_r = (not termo_busca) or (termo_busca in mod_repo.get("label", "").strip().lower())
713
- if mesmo_grupo_r and perfil_ok_r and not ja_nas_opcoes_r and passa_busca_r:
714
  opcoes = (opcoes or []) + [("repositorio_load", mod_repo.get("label", "Repositório Load"))]
715
  except Exception:
716
  pass
@@ -859,11 +945,10 @@ Selecione o módulo abaixo ou navegue pelo menu — o conteúdo ajusta automatic
859
  if __name__ == "__main__":
860
  main()
861
 
862
- # ------------------------- Rodapé do sidebar (sem HTML bruto) -------------------------
863
  if st.session_state.get("logado") and st.session_state.get("email"):
864
  st.sidebar.markdown(f"**👤 {st.session_state.email}**")
865
 
866
- # ➜ Substitui <hr> por divisor nativo e <p> por Markdown simples
867
  st.sidebar.divider()
868
  st.sidebar.markdown("Versão: **1.0.0** • Desenvolvedor: **Rodrigo Silva - Ideiasystem | 2026**")
869
 
 
64
  # --------------------------------------------------------------------------------------
65
  from utils_operacao import obter_grupos_disponiveis, obter_modulos_para_grupo
66
  from utils_info import INFO_CONTEUDO, INFO_MODULOS, INFO_MAP_PAGINA_ID
 
67
  from utils_permissoes import verificar_permissao
 
68
  from modules_map import MODULES
69
  from banco import engine, Base, SessionLocal
70
  from models import QuizPontuacao, IOIRunSugestao, AvisoGlobal
71
 
72
+ # ----- login / logo: import e “safe wrappers” -----------------------------------------
73
+ # login()
74
+ try:
75
+ from login import login as _login_orig
76
+ except Exception as _e_login_import:
77
+ _login_orig = None
78
+ _login_import_err = _e_login_import
79
+
80
+ def login_safe():
81
+ """Tenta usar o login normal; se falhar, permite autologin (DISABLE_AUTH=1)
82
+ ou opção emergencial (ALLOW_EMERGENCY_LOGIN=1)."""
83
+ # Autologin (debug)
84
+ if os.getenv("DISABLE_AUTH", "0") == "1":
85
+ st.session_state.logado = True
86
+ st.session_state.usuario = os.getenv("DEMO_USER", "demo")
87
+ st.session_state.perfil = os.getenv("DEMO_PERFIL", "admin")
88
+ st.session_state.email = os.getenv("DEMO_EMAIL", "demo@example.com")
89
+ st.info("🔓 Autologin ativado (DISABLE_AUTH=1). **Não use em produção.**")
90
+ return
91
+
92
+ # Fluxo normal
93
+ if _login_orig:
94
+ try:
95
+ _login_orig()
96
+ return
97
+ except Exception as e:
98
+ st.error(f"Falha ao carregar tela de login (login.py): {e}")
99
+
100
+ # Emergencial (opcional)
101
+ if os.getenv("ALLOW_EMERGENCY_LOGIN", "0") == "1":
102
+ with st.form("emergency_login"):
103
+ u = st.text_input("Usuário")
104
+ p = st.text_input("Senha", type="password")
105
+ ok = st.form_submit_button("Entrar (emergencial)")
106
+ if ok and u:
107
+ st.session_state.logado = True
108
+ st.session_state.usuario = u
109
+ st.session_state.perfil = "admin"
110
+ st.session_state.email = f"{u}@local"
111
+ st.warning("⚠️ Login emergencial ativo. Desative após os testes (ALLOW_EMERGENCY_LOGIN=0).")
112
+ st.rerun()
113
+ else:
114
+ st.info(
115
+ "Login temporariamente indisponível. "
116
+ "Para testar no Spaces, defina **DISABLE_AUTH=1** em *Settings → Secrets*."
117
+ )
118
+
119
+ # exibir_logo()
120
+ try:
121
+ from utils_layout import exibir_logo as _exibir_logo_orig
122
+ except Exception as _e_layout_import:
123
+ _exibir_logo_orig = None
124
+ _exibir_logo_import_err = _e_layout_import
125
+
126
+ def _resolve_logo_path() -> str | None:
127
+ """Procura a logo localmente; aceita LOGO_PATH absoluto ou relativo."""
128
+ cand = []
129
+ env_path = os.getenv("LOGO_PATH")
130
+ if env_path:
131
+ cand.append(env_path)
132
+ cand += ["logo.png", "assets/logo.png", "images/logo.png", "static/logo.png"]
133
+ base = os.path.abspath(os.getcwd())
134
+ for p in cand:
135
+ if not p:
136
+ continue
137
+ full = p if os.path.isabs(p) else os.path.join(base, p)
138
+ if os.path.exists(full):
139
+ return full
140
+ return None
141
+
142
+ def exibir_logo_safe(top: bool = False, sidebar: bool = False):
143
+ """Usa sua função original; se falhar, exibe imagem local ou fallback de texto."""
144
+ try:
145
+ if _exibir_logo_orig:
146
+ return _exibir_logo_orig(top=top, sidebar=sidebar)
147
+ except Exception as e:
148
+ st.sidebar.warning(f"Logo padrão indisponível ({e}). Usando fallback.")
149
+ path = _resolve_logo_path()
150
+ if path:
151
+ if top:
152
+ st.image(path, use_column_width=False)
153
+ if sidebar:
154
+ st.sidebar.image(path, use_column_width=True)
155
+ else:
156
+ if top:
157
+ st.markdown("### IOI‑RUN")
158
+ if sidebar:
159
+ st.sidebar.markdown("### IOI‑RUN")
160
+
161
  # --------------------------------------------------------------------------------------
162
  # Imports de páginas/módulos com fallback
163
  # --------------------------------------------------------------------------------------
 
627
  # LOGIN
628
  if not st.session_state.logado:
629
  st.session_state.quiz_verificado = False
630
+ exibir_logo_safe(top=True, sidebar=False)
631
+ login_safe()
632
  return
633
 
634
  # Heartbeat + badge admin
 
698
  # QUIZ (gating)
699
  if not st.session_state.quiz_verificado:
700
  if not quiz_respondido_hoje(usuario):
701
+ exibir_logo_safe(top=True, sidebar=False)
702
  quiz.main()
703
  return
704
  else:
 
706
  st.rerun()
707
 
708
  # SISTEMA LIBERADO
709
+ exibir_logo_safe(top=True, sidebar=True)
710
  _render_aviso_global_topbar()
711
  _show_birthday_banner_if_needed()
712
 
 
717
  banco_lbl = bank_label(current_db_choice()) if _HAS_ROUTER else (
718
  "🟢 Produção" if current_db_choice() == "prod" else "🔴 Teste"
719
  )
 
720
  st.sidebar.caption(f"🗄️ Banco ativo: {banco_lbl}")
721
  except Exception:
722
  pass
 
796
  )
797
  ja_nas_opcoes_r = any(mid == "repositorio_load" for mid, _ in (opcoes or []))
798
  passa_busca_r = (not termo_busca) or (termo_busca in mod_repo.get("label", "").strip().lower())
799
+ if mesmo_grupo_r and perfil_ok_r and not ja_nas_opcoes_r e and passa_busca_r:
800
  opcoes = (opcoes or []) + [("repositorio_load", mod_repo.get("label", "Repositório Load"))]
801
  except Exception:
802
  pass
 
945
  if __name__ == "__main__":
946
  main()
947
 
948
+ # ------------------------- Rodapé do sidebar (limpo) -------------------------
949
  if st.session_state.get("logado") and st.session_state.get("email"):
950
  st.sidebar.markdown(f"**👤 {st.session_state.email}**")
951
 
 
952
  st.sidebar.divider()
953
  st.sidebar.markdown("Versão: **1.0.0** • Desenvolvedor: **Rodrigo Silva - Ideiasystem | 2026**")
954