chore(tenants): conteudo de publico/ atualizado
This commit is contained in:
@@ -5129,13 +5129,6 @@ data:
|
||||
cursor: pointer; text-decoration: none;
|
||||
}
|
||||
.porta .btn { width: 100%; }
|
||||
/* "usar token": o plano B fica a mao, mas sem competir com o "Entrar". */
|
||||
.porta .discreto {
|
||||
display: block; margin: 18px auto 0; padding: 2px 4px; border: 0; background: none;
|
||||
color: var(--muted); font: inherit; font-size: 12px; text-decoration: underline; cursor: pointer;
|
||||
}
|
||||
.porta .discreto:hover { color: var(--navy); }
|
||||
.porta .plano-b { margin-top: 10px; padding-top: 6px; border-top: 1px solid var(--line); }
|
||||
.btn:hover { background: var(--orange-600); }
|
||||
.btn.claro { background: var(--branco); color: var(--navy); border: 1px solid var(--line); }
|
||||
.btn.claro:hover { border-color: var(--orange); color: var(--orange-600); }
|
||||
@@ -5521,10 +5514,8 @@ data:
|
||||
passa — o 2FA desse papel e o Keycloak quem cobra. O token de acesso vive so
|
||||
em memoria (ver o cabecalho de `painel.js`).
|
||||
|
||||
O plano B — o `x-atm-admin-token` colado a mao — continua atras do link
|
||||
"usar token", para emergencia. Esse fica em `sessionStorage`: fechar a aba
|
||||
esquece. Nao e `localStorage` de proposito — um token de administracao que
|
||||
sobrevive ao fechamento da aba fica numa maquina que ninguem lembra que o tem.
|
||||
Desde 08/10/2026 nao ha mais plano B nesta tela: o token de administracao
|
||||
(`x-atm-admin-token`) so existe no servidor, para scripts e CronJobs.
|
||||
|
||||
NAO HA ESTILO EMBUTIDO: a CSP da plataforma recusa `style=` e `<style>`, e ha
|
||||
teste guardando isso na landing page. O visual vive em `painel.css`; as
|
||||
@@ -5541,7 +5532,7 @@ data:
|
||||
primeira abertura; sem ele o diagrama fica so com a legenda).
|
||||
-->
|
||||
<link rel="stylesheet" href="/publico/fontes/fontes.css">
|
||||
<link rel="stylesheet" href="/publico/painel.css?v=2.88">
|
||||
<link rel="stylesheet" href="/publico/painel.css?v=2.89">
|
||||
<link rel="stylesheet" id="atm-c4-estilo" href="/publico/painel-c4.css?v=1">
|
||||
</head>
|
||||
<body>
|
||||
@@ -5581,17 +5572,6 @@ data:
|
||||
</p>
|
||||
<button type="button" id="entrarLogin" class="btn">Entrar</button>
|
||||
<p id="erroEntrar" class="erro oculto"></p>
|
||||
|
||||
<!-- PLANO B: o token de administracao, para emergencia. -->
|
||||
<button type="button" id="usarToken" class="discreto" aria-expanded="false" aria-controls="formEntrar">usar token</button>
|
||||
<form id="formEntrar" class="plano-b oculto">
|
||||
<p class="ajuda">
|
||||
Cole o token de administracao. Ele fica guardado ate voce fechar a aba.
|
||||
</p>
|
||||
<label for="token">Token</label>
|
||||
<input id="token" type="password" autocomplete="off" spellcheck="false" required>
|
||||
<button type="submit" class="btn claro">Entrar com token de administração</button>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<!-- Logou, mas a conta nao tem `atm_admin`. -->
|
||||
@@ -5837,7 +5817,7 @@ data:
|
||||
</main>
|
||||
|
||||
<script src="/publico/painel-markdown.js?v=1"></script>
|
||||
<script src="/publico/painel.js?v=2.92"></script>
|
||||
<script src="/publico/painel.js?v=2.93"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -5861,14 +5841,13 @@ data:
|
||||
* (apagados na volta) e uma marca sem segredo de que esta aba tinha sessao —
|
||||
* com ela, recarregar a pagina e um ida e volta invisivel ao Keycloak.
|
||||
*
|
||||
* ── O PLANO B: O TOKEN DE ADMINISTRACAO ─────────────────────────────────────
|
||||
* ── O TOKEN DE ADMINISTRACAO NAO ENTRA AQUI ─────────────────────────────────
|
||||
*
|
||||
* Atras do link "usar token", para emergencia (e ate a captacao aceitar o
|
||||
* login). Fica em `sessionStorage`, e nao em `localStorage`: fechar a aba
|
||||
* esquece. Um token de administracao que sobrevive ao fechamento fica numa
|
||||
* maquina que ninguem lembra que o tem.
|
||||
* Desde 08/10/2026 (decisao do dono) esta tela so aceita o login do Keycloak:
|
||||
* o antigo plano B — o `x-atm-admin-token` colado a mao — saiu. O token de
|
||||
* administracao continua existindo, mas so no servidor (scripts e CronJobs).
|
||||
*
|
||||
* Nenhum dos dois e escrito na URL nem no console. Query string vai para
|
||||
* Nem o token do login nem o de renovacao sao escritos na URL nem no console. Query string vai para
|
||||
* historico do navegador, para log de servidor e para o `Referer` de qualquer
|
||||
* link clicado a partir daqui — tres lugares onde ninguem procura quando o
|
||||
* segredo vaza. O `?code=` da volta do login sai da URL antes de virar token.
|
||||
@@ -5894,7 +5873,6 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var CHAVE = "atm.painel.token";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -5911,8 +5889,8 @@ data:
|
||||
|
||||
var $ = function (id) { return document.getElementById(id); };
|
||||
var porta = $("porta"), conteudo = $("conteudo"), carregando = $("carregando"), negado = $("negado");
|
||||
var formEntrar = $("formEntrar"), campoToken = $("token"), erroEntrar = $("erroEntrar");
|
||||
var botaoEntrarLogin = $("entrarLogin"), botaoUsarToken = $("usarToken"), botaoSairNegado = $("sairNegado");
|
||||
var erroEntrar = $("erroEntrar");
|
||||
var botaoEntrarLogin = $("entrarLogin"), botaoSairNegado = $("sairNegado");
|
||||
var botaoSair = $("sair"), botaoAtualizar = $("atualizar"), apurado = $("apurado");
|
||||
var corpo = $("linhas"), vazio = $("vazio");
|
||||
var sinoCaixa = $("sinoCaixa"), sino = $("sino"), sinoContagem = $("sinoContagem"),
|
||||
@@ -5923,8 +5901,7 @@ data:
|
||||
var sinoIntervalo = null;
|
||||
|
||||
/* A credencial da aba, SO EM MEMORIA:
|
||||
{ tipo: "login", acesso, renovacao } — o JWT do Keycloak (Bearer)
|
||||
{ tipo: "token", valor } — o plano B (x-atm-admin-token) */
|
||||
{ tipo: "login", acesso, renovacao } — o JWT do Keycloak (Bearer) */
|
||||
var cred = null;
|
||||
var renovando = null, relogioRenovar = null;
|
||||
|
||||
@@ -5937,12 +5914,6 @@ data:
|
||||
location.assign(url);
|
||||
}
|
||||
|
||||
/* ── plano B: o token de administracao ─────────────────────────────────── */
|
||||
|
||||
function guardado() { try { return sessionStorage.getItem(CHAVE); } catch (e) { return null; } }
|
||||
function guardar(t) { try { sessionStorage.setItem(CHAVE, t); } catch (e) { /* aba privada */ } }
|
||||
function esquecer() { try { sessionStorage.removeItem(CHAVE); } catch (e) { /* idem */ } }
|
||||
|
||||
/* ── login: PKCE ────────────────────────────────────────────────────────── */
|
||||
|
||||
function aleatorio(tamanho) {
|
||||
@@ -6120,7 +6091,7 @@ data:
|
||||
}
|
||||
|
||||
/* ── todo pedido a API passa por aqui ─────────────────────────────────────
|
||||
* Poe a credencial no cabecalho (Bearer do login, ou o token do plano B).
|
||||
* Poe a credencial no cabecalho (o Bearer do login).
|
||||
* Com o login, um 401 tenta renovar UMA vez e repete o pedido; se a
|
||||
* renovacao falhar, a sessao acabou e a tela volta para "Entrar". */
|
||||
function pedir(url, init) {
|
||||
@@ -6129,7 +6100,6 @@ data:
|
||||
var h = {};
|
||||
Object.keys(init.headers || {}).forEach(function (k) { h[k] = init.headers[k]; });
|
||||
if (cred && cred.tipo === "login") h.Authorization = "Bearer " + cred.acesso;
|
||||
else if (cred) h["x-atm-admin-token"] = cred.valor;
|
||||
return fetch(url, { method: init.method, headers: h, body: init.body });
|
||||
};
|
||||
return tentar().then(function (r) {
|
||||
@@ -7004,19 +6974,12 @@ data:
|
||||
else if (docAberta) conteudo.classList.add("oculto");
|
||||
}
|
||||
|
||||
function naPorta(mensagem, comPlanoB) {
|
||||
function naPorta(mensagem) {
|
||||
erroEntrar.textContent = mensagem || "";
|
||||
erroEntrar.classList.toggle("oculto", !mensagem);
|
||||
if (comPlanoB) abrirPlanoB(false);
|
||||
mostrar(porta);
|
||||
}
|
||||
|
||||
function abrirPlanoB(focar) {
|
||||
formEntrar.classList.remove("oculto");
|
||||
botaoUsarToken.setAttribute("aria-expanded", "true");
|
||||
if (focar) campoToken.focus();
|
||||
}
|
||||
|
||||
function carregar(fresco) {
|
||||
return buscar(fresco).then(function (v) {
|
||||
visao = v || {};
|
||||
@@ -7046,8 +7009,8 @@ data:
|
||||
pararRenovacao();
|
||||
esquecerSessao();
|
||||
naPorta(recusado
|
||||
? "O servidor recusou o login. Se a captação ainda não aceita o login do Keycloak, use o token."
|
||||
: "Nao consegui falar com o servidor. Tente de novo.", recusado);
|
||||
? "O servidor recusou o login."
|
||||
: "Nao consegui falar com o servidor. Tente de novo.");
|
||||
});
|
||||
}
|
||||
|
||||
@@ -7059,26 +7022,6 @@ data:
|
||||
mostrar(negado);
|
||||
}
|
||||
|
||||
/* Plano B: o token de administracao colado a mao. */
|
||||
function entrar(token) {
|
||||
erroEntrar.classList.add("oculto");
|
||||
pararRenovacao();
|
||||
esquecerSessao();
|
||||
cred = { tipo: "token", valor: token };
|
||||
mostrar(carregando);
|
||||
return carregar(false)
|
||||
.then(function () { guardar(token); })
|
||||
.catch(function (e) {
|
||||
cred = null;
|
||||
// O token errado esquece o guardado: manter um token que nao vale so
|
||||
// faz a proxima abertura falhar em silencio.
|
||||
if (e && e.token) esquecer();
|
||||
naPorta(e && e.token
|
||||
? "Token recusado."
|
||||
: "Nao consegui falar com o servidor. Tente de novo.", true);
|
||||
});
|
||||
}
|
||||
|
||||
/* ── eventos ────────────────────────────────────────────────────────────── */
|
||||
|
||||
botaoEntrarLogin.addEventListener("click", function () {
|
||||
@@ -7089,24 +7032,8 @@ data:
|
||||
});
|
||||
});
|
||||
|
||||
botaoUsarToken.addEventListener("click", function () {
|
||||
if (formEntrar.classList.contains("oculto")) { abrirPlanoB(true); return; }
|
||||
formEntrar.classList.add("oculto");
|
||||
botaoUsarToken.setAttribute("aria-expanded", "false");
|
||||
});
|
||||
|
||||
formEntrar.addEventListener("submit", function (e) {
|
||||
e.preventDefault();
|
||||
var t = (campoToken.value || "").trim();
|
||||
if (t) entrar(t);
|
||||
});
|
||||
|
||||
botaoSair.addEventListener("click", function () {
|
||||
if (cred && cred.tipo === "login") { sairDoLogin(); return; }
|
||||
cred = null;
|
||||
esquecer();
|
||||
campoToken.value = "";
|
||||
location.reload();
|
||||
sairDoLogin();
|
||||
});
|
||||
botaoSairNegado.addEventListener("click", sairDoLogin);
|
||||
|
||||
@@ -7573,8 +7500,6 @@ data:
|
||||
function comecar() {
|
||||
var q = new URLSearchParams(location.search);
|
||||
if (q.get("code") || q.get("error")) { voltarDoLogin(q); return; }
|
||||
var jaTem = guardado();
|
||||
if (jaTem) { entrar(jaTem); return; }
|
||||
// Esta aba ja tinha sessao (recarregou): ida e volta ao Keycloak, que
|
||||
// ainda tem a sessao dele — sem digitar nada. Sem a marca, a porta: um
|
||||
// redirect automatico faria quem chegou por engano sair sem entender.
|
||||
|
||||
@@ -5129,13 +5129,6 @@ data:
|
||||
cursor: pointer; text-decoration: none;
|
||||
}
|
||||
.porta .btn { width: 100%; }
|
||||
/* "usar token": o plano B fica a mao, mas sem competir com o "Entrar". */
|
||||
.porta .discreto {
|
||||
display: block; margin: 18px auto 0; padding: 2px 4px; border: 0; background: none;
|
||||
color: var(--muted); font: inherit; font-size: 12px; text-decoration: underline; cursor: pointer;
|
||||
}
|
||||
.porta .discreto:hover { color: var(--navy); }
|
||||
.porta .plano-b { margin-top: 10px; padding-top: 6px; border-top: 1px solid var(--line); }
|
||||
.btn:hover { background: var(--orange-600); }
|
||||
.btn.claro { background: var(--branco); color: var(--navy); border: 1px solid var(--line); }
|
||||
.btn.claro:hover { border-color: var(--orange); color: var(--orange-600); }
|
||||
@@ -5521,10 +5514,8 @@ data:
|
||||
passa — o 2FA desse papel e o Keycloak quem cobra. O token de acesso vive so
|
||||
em memoria (ver o cabecalho de `painel.js`).
|
||||
|
||||
O plano B — o `x-atm-admin-token` colado a mao — continua atras do link
|
||||
"usar token", para emergencia. Esse fica em `sessionStorage`: fechar a aba
|
||||
esquece. Nao e `localStorage` de proposito — um token de administracao que
|
||||
sobrevive ao fechamento da aba fica numa maquina que ninguem lembra que o tem.
|
||||
Desde 08/10/2026 nao ha mais plano B nesta tela: o token de administracao
|
||||
(`x-atm-admin-token`) so existe no servidor, para scripts e CronJobs.
|
||||
|
||||
NAO HA ESTILO EMBUTIDO: a CSP da plataforma recusa `style=` e `<style>`, e ha
|
||||
teste guardando isso na landing page. O visual vive em `painel.css`; as
|
||||
@@ -5541,7 +5532,7 @@ data:
|
||||
primeira abertura; sem ele o diagrama fica so com a legenda).
|
||||
-->
|
||||
<link rel="stylesheet" href="/publico/fontes/fontes.css">
|
||||
<link rel="stylesheet" href="/publico/painel.css?v=2.88">
|
||||
<link rel="stylesheet" href="/publico/painel.css?v=2.89">
|
||||
<link rel="stylesheet" id="atm-c4-estilo" href="/publico/painel-c4.css?v=1">
|
||||
</head>
|
||||
<body>
|
||||
@@ -5581,17 +5572,6 @@ data:
|
||||
</p>
|
||||
<button type="button" id="entrarLogin" class="btn">Entrar</button>
|
||||
<p id="erroEntrar" class="erro oculto"></p>
|
||||
|
||||
<!-- PLANO B: o token de administracao, para emergencia. -->
|
||||
<button type="button" id="usarToken" class="discreto" aria-expanded="false" aria-controls="formEntrar">usar token</button>
|
||||
<form id="formEntrar" class="plano-b oculto">
|
||||
<p class="ajuda">
|
||||
Cole o token de administracao. Ele fica guardado ate voce fechar a aba.
|
||||
</p>
|
||||
<label for="token">Token</label>
|
||||
<input id="token" type="password" autocomplete="off" spellcheck="false" required>
|
||||
<button type="submit" class="btn claro">Entrar com token de administração</button>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<!-- Logou, mas a conta nao tem `atm_admin`. -->
|
||||
@@ -5837,7 +5817,7 @@ data:
|
||||
</main>
|
||||
|
||||
<script src="/publico/painel-markdown.js?v=1"></script>
|
||||
<script src="/publico/painel.js?v=2.92"></script>
|
||||
<script src="/publico/painel.js?v=2.93"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -5861,14 +5841,13 @@ data:
|
||||
* (apagados na volta) e uma marca sem segredo de que esta aba tinha sessao —
|
||||
* com ela, recarregar a pagina e um ida e volta invisivel ao Keycloak.
|
||||
*
|
||||
* ── O PLANO B: O TOKEN DE ADMINISTRACAO ─────────────────────────────────────
|
||||
* ── O TOKEN DE ADMINISTRACAO NAO ENTRA AQUI ─────────────────────────────────
|
||||
*
|
||||
* Atras do link "usar token", para emergencia (e ate a captacao aceitar o
|
||||
* login). Fica em `sessionStorage`, e nao em `localStorage`: fechar a aba
|
||||
* esquece. Um token de administracao que sobrevive ao fechamento fica numa
|
||||
* maquina que ninguem lembra que o tem.
|
||||
* Desde 08/10/2026 (decisao do dono) esta tela so aceita o login do Keycloak:
|
||||
* o antigo plano B — o `x-atm-admin-token` colado a mao — saiu. O token de
|
||||
* administracao continua existindo, mas so no servidor (scripts e CronJobs).
|
||||
*
|
||||
* Nenhum dos dois e escrito na URL nem no console. Query string vai para
|
||||
* Nem o token do login nem o de renovacao sao escritos na URL nem no console. Query string vai para
|
||||
* historico do navegador, para log de servidor e para o `Referer` de qualquer
|
||||
* link clicado a partir daqui — tres lugares onde ninguem procura quando o
|
||||
* segredo vaza. O `?code=` da volta do login sai da URL antes de virar token.
|
||||
@@ -5894,7 +5873,6 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var CHAVE = "atm.painel.token";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -5911,8 +5889,8 @@ data:
|
||||
|
||||
var $ = function (id) { return document.getElementById(id); };
|
||||
var porta = $("porta"), conteudo = $("conteudo"), carregando = $("carregando"), negado = $("negado");
|
||||
var formEntrar = $("formEntrar"), campoToken = $("token"), erroEntrar = $("erroEntrar");
|
||||
var botaoEntrarLogin = $("entrarLogin"), botaoUsarToken = $("usarToken"), botaoSairNegado = $("sairNegado");
|
||||
var erroEntrar = $("erroEntrar");
|
||||
var botaoEntrarLogin = $("entrarLogin"), botaoSairNegado = $("sairNegado");
|
||||
var botaoSair = $("sair"), botaoAtualizar = $("atualizar"), apurado = $("apurado");
|
||||
var corpo = $("linhas"), vazio = $("vazio");
|
||||
var sinoCaixa = $("sinoCaixa"), sino = $("sino"), sinoContagem = $("sinoContagem"),
|
||||
@@ -5923,8 +5901,7 @@ data:
|
||||
var sinoIntervalo = null;
|
||||
|
||||
/* A credencial da aba, SO EM MEMORIA:
|
||||
{ tipo: "login", acesso, renovacao } — o JWT do Keycloak (Bearer)
|
||||
{ tipo: "token", valor } — o plano B (x-atm-admin-token) */
|
||||
{ tipo: "login", acesso, renovacao } — o JWT do Keycloak (Bearer) */
|
||||
var cred = null;
|
||||
var renovando = null, relogioRenovar = null;
|
||||
|
||||
@@ -5937,12 +5914,6 @@ data:
|
||||
location.assign(url);
|
||||
}
|
||||
|
||||
/* ── plano B: o token de administracao ─────────────────────────────────── */
|
||||
|
||||
function guardado() { try { return sessionStorage.getItem(CHAVE); } catch (e) { return null; } }
|
||||
function guardar(t) { try { sessionStorage.setItem(CHAVE, t); } catch (e) { /* aba privada */ } }
|
||||
function esquecer() { try { sessionStorage.removeItem(CHAVE); } catch (e) { /* idem */ } }
|
||||
|
||||
/* ── login: PKCE ────────────────────────────────────────────────────────── */
|
||||
|
||||
function aleatorio(tamanho) {
|
||||
@@ -6120,7 +6091,7 @@ data:
|
||||
}
|
||||
|
||||
/* ── todo pedido a API passa por aqui ─────────────────────────────────────
|
||||
* Poe a credencial no cabecalho (Bearer do login, ou o token do plano B).
|
||||
* Poe a credencial no cabecalho (o Bearer do login).
|
||||
* Com o login, um 401 tenta renovar UMA vez e repete o pedido; se a
|
||||
* renovacao falhar, a sessao acabou e a tela volta para "Entrar". */
|
||||
function pedir(url, init) {
|
||||
@@ -6129,7 +6100,6 @@ data:
|
||||
var h = {};
|
||||
Object.keys(init.headers || {}).forEach(function (k) { h[k] = init.headers[k]; });
|
||||
if (cred && cred.tipo === "login") h.Authorization = "Bearer " + cred.acesso;
|
||||
else if (cred) h["x-atm-admin-token"] = cred.valor;
|
||||
return fetch(url, { method: init.method, headers: h, body: init.body });
|
||||
};
|
||||
return tentar().then(function (r) {
|
||||
@@ -7004,19 +6974,12 @@ data:
|
||||
else if (docAberta) conteudo.classList.add("oculto");
|
||||
}
|
||||
|
||||
function naPorta(mensagem, comPlanoB) {
|
||||
function naPorta(mensagem) {
|
||||
erroEntrar.textContent = mensagem || "";
|
||||
erroEntrar.classList.toggle("oculto", !mensagem);
|
||||
if (comPlanoB) abrirPlanoB(false);
|
||||
mostrar(porta);
|
||||
}
|
||||
|
||||
function abrirPlanoB(focar) {
|
||||
formEntrar.classList.remove("oculto");
|
||||
botaoUsarToken.setAttribute("aria-expanded", "true");
|
||||
if (focar) campoToken.focus();
|
||||
}
|
||||
|
||||
function carregar(fresco) {
|
||||
return buscar(fresco).then(function (v) {
|
||||
visao = v || {};
|
||||
@@ -7046,8 +7009,8 @@ data:
|
||||
pararRenovacao();
|
||||
esquecerSessao();
|
||||
naPorta(recusado
|
||||
? "O servidor recusou o login. Se a captação ainda não aceita o login do Keycloak, use o token."
|
||||
: "Nao consegui falar com o servidor. Tente de novo.", recusado);
|
||||
? "O servidor recusou o login."
|
||||
: "Nao consegui falar com o servidor. Tente de novo.");
|
||||
});
|
||||
}
|
||||
|
||||
@@ -7059,26 +7022,6 @@ data:
|
||||
mostrar(negado);
|
||||
}
|
||||
|
||||
/* Plano B: o token de administracao colado a mao. */
|
||||
function entrar(token) {
|
||||
erroEntrar.classList.add("oculto");
|
||||
pararRenovacao();
|
||||
esquecerSessao();
|
||||
cred = { tipo: "token", valor: token };
|
||||
mostrar(carregando);
|
||||
return carregar(false)
|
||||
.then(function () { guardar(token); })
|
||||
.catch(function (e) {
|
||||
cred = null;
|
||||
// O token errado esquece o guardado: manter um token que nao vale so
|
||||
// faz a proxima abertura falhar em silencio.
|
||||
if (e && e.token) esquecer();
|
||||
naPorta(e && e.token
|
||||
? "Token recusado."
|
||||
: "Nao consegui falar com o servidor. Tente de novo.", true);
|
||||
});
|
||||
}
|
||||
|
||||
/* ── eventos ────────────────────────────────────────────────────────────── */
|
||||
|
||||
botaoEntrarLogin.addEventListener("click", function () {
|
||||
@@ -7089,24 +7032,8 @@ data:
|
||||
});
|
||||
});
|
||||
|
||||
botaoUsarToken.addEventListener("click", function () {
|
||||
if (formEntrar.classList.contains("oculto")) { abrirPlanoB(true); return; }
|
||||
formEntrar.classList.add("oculto");
|
||||
botaoUsarToken.setAttribute("aria-expanded", "false");
|
||||
});
|
||||
|
||||
formEntrar.addEventListener("submit", function (e) {
|
||||
e.preventDefault();
|
||||
var t = (campoToken.value || "").trim();
|
||||
if (t) entrar(t);
|
||||
});
|
||||
|
||||
botaoSair.addEventListener("click", function () {
|
||||
if (cred && cred.tipo === "login") { sairDoLogin(); return; }
|
||||
cred = null;
|
||||
esquecer();
|
||||
campoToken.value = "";
|
||||
location.reload();
|
||||
sairDoLogin();
|
||||
});
|
||||
botaoSairNegado.addEventListener("click", sairDoLogin);
|
||||
|
||||
@@ -7573,8 +7500,6 @@ data:
|
||||
function comecar() {
|
||||
var q = new URLSearchParams(location.search);
|
||||
if (q.get("code") || q.get("error")) { voltarDoLogin(q); return; }
|
||||
var jaTem = guardado();
|
||||
if (jaTem) { entrar(jaTem); return; }
|
||||
// Esta aba ja tinha sessao (recarregou): ida e volta ao Keycloak, que
|
||||
// ainda tem a sessao dele — sem digitar nada. Sem a marca, a porta: um
|
||||
// redirect automatico faria quem chegou por engano sair sem entender.
|
||||
|
||||
Reference in New Issue
Block a user