From 283845abbad3fb5e23651fd7289671422bbeca02 Mon Sep 17 00:00:00 2001 From: "aime.rolandi" Date: Tue, 30 Sep 2025 12:41:20 -0300 Subject: [PATCH] Redirect segun viewer elegido en el .env --- lib/api_web/controllers/redirect.ex | 83 ++++++++++++++++++----------- 1 file changed, 52 insertions(+), 31 deletions(-) diff --git a/lib/api_web/controllers/redirect.ex b/lib/api_web/controllers/redirect.ex index 888cf19..2d19296 100644 --- a/lib/api_web/controllers/redirect.ex +++ b/lib/api_web/controllers/redirect.ex @@ -1,65 +1,86 @@ defmodule ApiWeb.Redirect do use ApiWeb, :controller - alias Api.Repo - import Ecto.Query require Logger - def index(conn, %{"accession" => accession}) do + def index(conn, %{"accession" => accession}) do Envar.load(".env") Envar.require_env_file(".env") - redirect = Envar.get("REDIRECT") - + redirect_flag = Envar.get("REDIRECT") + viewer = Envar.get("imViewer4") + viewer_host = Envar.get("imViewer4_host") + viewer_uid = Envar.get("imViewer4_uid") + gethash = Envar.get("imViewer4_gethash") idsite = Envar.get("IDSITE") + Logger.info("parametros: #{inspect(accession)}") - if redirect == "TRUE" do - case get_hash_v2(accession) do - {:ok, hash} -> - Logger.info("URL: https://estudio.informemedico.com.ar/#/#{idsite}/#{hash}") - viewer = Envar.get("imViewer4") - viewer_host = Envar.get("imViewer4_host") - viewer_uid = Envar.get("imViewer4_uid") - gethash = Envar.get("imViewer4_gethash") - + if redirect_flag == "TRUE" do + case viewer do + # Nuevo viewer imViewer4 + "1" -> viewer_config = %{ - client_uuid: viewer_uid, - gethash: gethash, - imviewer4_domain: viewer_host + client_uuid: viewer_uid, + gethash: gethash, + imviewer4_domain: viewer_host } - url = case viewer do - "1" -> - case open_imviewer4(viewer_config, studyidentifier, 172800, assigns) do - {:ok, hash} -> - "https://#{viewer_host}/imviewer4/viewer/#{viewer_uid}/" <> hash + case open_imviewer4(viewer_config, accession, 172800) do + {:ok, hash} -> + url = "https://#{viewer_host}/imviewer4/viewer/#{viewer_uid}/#{hash}" + Logger.info("Redirect -> #{url}") + redirect(conn, external: url) - {:error, reason} -> - Logger.error("No se pudo obtener el hash para ImViewer4: #{inspect(reason)}") - "https://#{viewer_host}/imviewer4/viewer/#{viewer_uid}/error" - end - "0" -> "https://estudio.informemedico.com.ar/#/#{idsite}/" <> hash + {:error, reason} -> + Logger.error("No se pudo obtener hash: #{inspect(reason)}") + text(conn, "Error al obtener hash: #{inspect(reason)}") end - # url = "https://estudio.informemedico.com.ar/#/#{idsite}/" <> hash - redirect(conn, external: url) + # Viewer viejo + "0" -> + case get_hash_v2(accession) do + {:ok, hash} -> + url = "https://estudio.informemedico.com.ar/#/#{idsite}/" <> hash + Logger.info("Redirect -> #{url}") + redirect(conn, external: url) - {:error, error_msg} -> - text(conn, "Error al obtener hash: #{error_msg}") + {:error, error_msg} -> + text(conn, "Error al obtener hash: #{error_msg}") + end + # Default / mal configurado + _ -> + text(conn, "Error: configuración de viewer inválida") end else text(conn, "Error 404") end end + # ---- Helpers ---- defp get_hash_v2(accession) do Logger.info("parametros:\n #{inspect(accession)}") hash = ApiWeb.GetHash.get_hash(accession) + if hash == "nil" do {:error, "Estudio no encontrado"} else {:ok, hash} end end + + defp open_imviewer4(v, accession, expiration) do + url = v.gethash <> v.client_uuid + + case Req.post(url, json: %{"accessionnumber" => accession, "expiration" => expiration}) do + {:ok, %Req.Response{status: 200, body: %{"hash" => hash}}} -> + {:ok, hash} + + {:ok, %Req.Response{status: status, body: body}} -> + {:error, {:unexpected_response, status, body}} + + {:error, reason} -> + {:error, {:request_failed, reason}} + end + end end