Redirect segun viewer elegido en el .env
This commit is contained in:
		| @ -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 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user