|
|
@@ -18,7 +18,17 @@ function ifbotAuthHeaders() {
|
|
|
return { [authHeader]: value };
|
|
|
}
|
|
|
|
|
|
-async function buscarJsonDeUrl(urlStr, extraHeaders = {}) {
|
|
|
+function mesmaOrigemIfbot(urlStr) {
|
|
|
+ try {
|
|
|
+ return new URL(urlStr).origin === new URL(config.ifbot.baseUrl).origin;
|
|
|
+ } catch {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// O token do ifbot só vai para a origem do ifbot, avaliado a cada salto: SourceUrl pode ser
|
|
|
+// qualquer URL https pública (ingest por URL) e um redirect pode levar para outro host.
|
|
|
+async function buscarJsonDeUrl(urlStr, { autenticarIfbot = false } = {}) {
|
|
|
let currentUrl = urlStr;
|
|
|
let res;
|
|
|
for (let hop = 0; ; hop += 1) {
|
|
|
@@ -28,7 +38,7 @@ async function buscarJsonDeUrl(urlStr, extraHeaders = {}) {
|
|
|
headers: {
|
|
|
"User-Agent": "Mozilla/5.0 star-oraculo/1.0",
|
|
|
Accept: "application/json",
|
|
|
- ...extraHeaders
|
|
|
+ ...(autenticarIfbot && mesmaOrigemIfbot(currentUrl) ? ifbotAuthHeaders() : {})
|
|
|
},
|
|
|
redirect: "manual",
|
|
|
signal: AbortSignal.timeout(config.http.defaultTimeoutMs)
|
|
|
@@ -231,7 +241,7 @@ function montarPayloadDeProtocolo(json, fallback) {
|
|
|
|
|
|
export async function importarProtocolo(item, baseUrl) {
|
|
|
const mensagensUrl = `${baseUrl}/protocolos/${item.Id}/mensagens`;
|
|
|
- const json = await buscarJsonDeUrl(mensagensUrl, ifbotAuthHeaders());
|
|
|
+ const json = await buscarJsonDeUrl(mensagensUrl, { autenticarIfbot: true });
|
|
|
|
|
|
const payload = montarPayloadDeProtocolo(json, {
|
|
|
Protocolo: { Id: item.Id, Codigo: item.Codigo, Status: 1 },
|
|
|
@@ -256,7 +266,7 @@ export async function sincronizarAtendimentoPorId(id) {
|
|
|
|
|
|
const baseUrl = config.ifbot.baseUrl.replace(/\/+$/, "");
|
|
|
const mensagensUrl = atendimento.SourceUrl || `${baseUrl}/protocolos/${id}/mensagens`;
|
|
|
- const json = await buscarJsonDeUrl(mensagensUrl, ifbotAuthHeaders());
|
|
|
+ const json = await buscarJsonDeUrl(mensagensUrl, { autenticarIfbot: true });
|
|
|
|
|
|
const payload = montarPayloadDeProtocolo(json, {
|
|
|
Protocolo: { Id: atendimento.Id, Codigo: atendimento.Codigo, Status: atendimento.Status },
|
|
|
@@ -278,7 +288,7 @@ export async function sincronizarProtocolosAbertos({ pagina = 1, limite = 50, in
|
|
|
if (inicio) params.set("inicio", inicio);
|
|
|
if (fim) params.set("fim", fim);
|
|
|
|
|
|
- const listaJson = await buscarJsonDeUrl(`${baseUrl}/protocolos/abertos?${params.toString()}`, ifbotAuthHeaders());
|
|
|
+ const listaJson = await buscarJsonDeUrl(`${baseUrl}/protocolos/abertos?${params.toString()}`, { autenticarIfbot: true });
|
|
|
const lista = protocolosAbertosSchema.safeParse(listaJson);
|
|
|
if (!lista.success) throw new BadRequestError("invalid_protocolos_payload");
|
|
|
|