Redirect segun viewer elegido en el .env

This commit is contained in:
2025-09-30 12:41:20 -03:00
parent 65ea31b06c
commit 283845abba

View File

@ -1,65 +1,86 @@
defmodule ApiWeb.Redirect do defmodule ApiWeb.Redirect do
use ApiWeb, :controller use ApiWeb, :controller
alias Api.Repo
import Ecto.Query
require Logger require Logger
def index(conn, %{"accession" => accession}) do def index(conn, %{"accession" => accession}) do
Envar.load(".env") Envar.load(".env")
Envar.require_env_file(".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") idsite = Envar.get("IDSITE")
Logger.info("parametros: #{inspect(accession)}") Logger.info("parametros: #{inspect(accession)}")
if redirect == "TRUE" do if redirect_flag == "TRUE" do
case get_hash_v2(accession) do case viewer do
{:ok, hash} -> # Nuevo viewer imViewer4
Logger.info("URL: https://estudio.informemedico.com.ar/#/#{idsite}/#{hash}") "1" ->
viewer = Envar.get("imViewer4")
viewer_host = Envar.get("imViewer4_host")
viewer_uid = Envar.get("imViewer4_uid")
gethash = Envar.get("imViewer4_gethash")
viewer_config = %{ viewer_config = %{
client_uuid: viewer_uid, client_uuid: viewer_uid,
gethash: gethash, gethash: gethash,
imviewer4_domain: viewer_host imviewer4_domain: viewer_host
} }
url = case viewer do case open_imviewer4(viewer_config, accession, 172800) do
"1" -> {:ok, hash} ->
case open_imviewer4(viewer_config, studyidentifier, 172800, assigns) do url = "https://#{viewer_host}/imviewer4/viewer/#{viewer_uid}/#{hash}"
{:ok, hash} -> Logger.info("Redirect -> #{url}")
"https://#{viewer_host}/imviewer4/viewer/#{viewer_uid}/" <> hash redirect(conn, external: url)
{:error, reason} -> {:error, reason} ->
Logger.error("No se pudo obtener el hash para ImViewer4: #{inspect(reason)}") Logger.error("No se pudo obtener hash: #{inspect(reason)}")
"https://#{viewer_host}/imviewer4/viewer/#{viewer_uid}/error" text(conn, "Error al obtener hash: #{inspect(reason)}")
end
"0" -> "https://estudio.informemedico.com.ar/#/#{idsite}/" <> hash
end end
# url = "https://estudio.informemedico.com.ar/#/#{idsite}/" <> hash # Viewer viejo
redirect(conn, external: url) "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} -> {:error, error_msg} ->
text(conn, "Error al obtener hash: #{error_msg}") text(conn, "Error al obtener hash: #{error_msg}")
end
# Default / mal configurado
_ ->
text(conn, "Error: configuración de viewer inválida")
end end
else else
text(conn, "Error 404") text(conn, "Error 404")
end end
end end
# ---- Helpers ----
defp get_hash_v2(accession) do defp get_hash_v2(accession) do
Logger.info("parametros:\n #{inspect(accession)}") Logger.info("parametros:\n #{inspect(accession)}")
hash = ApiWeb.GetHash.get_hash(accession) hash = ApiWeb.GetHash.get_hash(accession)
if hash == "nil" do if hash == "nil" do
{:error, "Estudio no encontrado"} {:error, "Estudio no encontrado"}
else else
{:ok, hash} {:ok, hash}
end end
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 end