Send bridge replies with GET callback
This commit is contained in:
@@ -16,6 +16,7 @@ import javax.crypto.spec.SecretKeySpec;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.net.URLEncoder;
|
||||||
import java.net.http.HttpClient;
|
import java.net.http.HttpClient;
|
||||||
import java.net.http.HttpRequest;
|
import java.net.http.HttpRequest;
|
||||||
import java.net.http.HttpResponse;
|
import java.net.http.HttpResponse;
|
||||||
@@ -164,23 +165,39 @@ public final class ExternalBridgeHandler implements HttpHandler {
|
|||||||
if(url.isBlank())return false;
|
if(url.isBlank())return false;
|
||||||
try{
|
try{
|
||||||
validarCallbackUrl(url);
|
validarCallbackUrl(url);
|
||||||
Map<String,Object> payload=new LinkedHashMap<>();
|
Map<String,String> params=new LinkedHashMap<>();
|
||||||
payload.put("mensagem_id",envio.get("id"));
|
params.put("mensagem_id", str(envio.get("id")));
|
||||||
payload.put("resposta_id",respostaId);
|
params.put("resposta_id", String.valueOf(respostaId));
|
||||||
payload.put("empresa_id",envio.get("empresa_id"));
|
params.put("empresa_id", str(envio.get("empresa_id")));
|
||||||
payload.put("sistema_externo",envio.get("sistema_externo"));
|
params.put("sistema_externo", str(envio.get("sistema_externo")));
|
||||||
payload.put("referencia_externa",envio.get("referencia_externa"));
|
params.put("referencia_externa", str(envio.get("referencia_externa")));
|
||||||
payload.put("telefone",numero);
|
params.put("telefone", numero);
|
||||||
payload.put("resposta",texto);
|
params.put("resposta", texto);
|
||||||
String body=Json.write(payload);
|
String target = appendQuery(url, params);
|
||||||
HttpRequest.Builder req=HttpRequest.newBuilder(URI.create(url)).timeout(Duration.ofSeconds(15)).header("Content-Type","application/json");
|
HttpRequest.Builder req=HttpRequest.newBuilder(URI.create(target)).timeout(Duration.ofSeconds(15)).GET();
|
||||||
String secret=str(envio.get("callback_secret"));
|
String secret=str(envio.get("callback_secret"));
|
||||||
if(!secret.isBlank())req.header("X-Seconectai-Signature", hmac(secret, body));
|
if(!secret.isBlank())req.header("X-Seconectai-Signature", hmac(secret, target));
|
||||||
HttpResponse<String> resp=httpClient.send(req.POST(HttpRequest.BodyPublishers.ofString(body)).build(),HttpResponse.BodyHandlers.ofString());
|
HttpResponse<String> resp=httpClient.send(req.build(),HttpResponse.BodyHandlers.ofString());
|
||||||
return resp.statusCode()>=200&&resp.statusCode()<300;
|
return resp.statusCode()>=200&&resp.statusCode()<300;
|
||||||
}catch(Exception e){System.err.println("Falha callback integracao: "+e.getMessage());return false;}
|
}catch(Exception e){System.err.println("Falha callback integracao: "+e.getMessage());return false;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String appendQuery(String url, Map<String,String> params) {
|
||||||
|
StringBuilder out = new StringBuilder(url);
|
||||||
|
out.append(url.contains("?") ? "&" : "?");
|
||||||
|
boolean first = true;
|
||||||
|
for (Map.Entry<String,String> e : params.entrySet()) {
|
||||||
|
if (!first) out.append('&');
|
||||||
|
first = false;
|
||||||
|
out.append(enc(e.getKey())).append('=').append(enc(e.getValue()));
|
||||||
|
}
|
||||||
|
return out.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String enc(String value) {
|
||||||
|
return URLEncoder.encode(value == null ? "" : value, StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
private void validarWebhookEvolution(HttpExchange ex) {
|
private void validarWebhookEvolution(HttpExchange ex) {
|
||||||
String recebido = ex.getRequestHeaders().getFirst("X-Webhook-Secret");
|
String recebido = ex.getRequestHeaders().getFirst("X-Webhook-Secret");
|
||||||
if (webhookSecret == null || webhookSecret.isBlank() || recebido == null || !MessageDigest.isEqual(webhookSecret.getBytes(StandardCharsets.UTF_8), recebido.getBytes(StandardCharsets.UTF_8))) {
|
if (webhookSecret == null || webhookSecret.isBlank() || recebido == null || !MessageDigest.isEqual(webhookSecret.getBytes(StandardCharsets.UTF_8), recebido.getBytes(StandardCharsets.UTF_8))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user