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
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