diff --git a/.env b/.env index fdc4f91..23a96aa 100644 --- a/.env +++ b/.env @@ -22,6 +22,15 @@ ADJUNTOS_CLAVE=1nf0rm3 acceso_ed=IDSTUDY IDENTIFIERFIELD=IDSTUDY +# ImViewer4 +# Si es 1, se usa imViewer4, si es 0 se usa el viewer viejo +imViewer4=0 +# Si usa ImViewer4, se debe agregar el dominio sin https:// +# Ejemplo: imViewer4_host=informesmedicos.apross.gov.ar +# imViewer4_host=informesmedicos.apross.gov.ar +# Si usa ImViewer4, se debe agregar el uid del cliente +# imViewer4_uid=aab2741a-6b94-4c72-ad29-bf0ca8e492f7 + # Datos SMTP/Mailer #SMTP_USER=informes@ciem.com.ar #SMTP_PASS=OC{j9YZ0PB-x diff --git a/lib/api_web/live/index_live.ex b/lib/api_web/live/index_live.ex index 994f3b9..bec20b6 100644 --- a/lib/api_web/live/index_live.ex +++ b/lib/api_web/live/index_live.ex @@ -139,23 +139,30 @@ defmodule ApiWeb.IndexLive do Repo.all(query) end - def generate_token(idstudy, patientid) do - Envar.load(".env") - Envar.require_env_file(".env") - # Paso 1: Armar json con fecha de vencimiento (puse 2 días) - json = if Envar.get("IDENTIFIERFIELD") == "IDSTUDY" do - %{ - idstudy: Integer.to_string(idstudy), - patientid: patientid, - vencimiento: DateTime.add(DateTime.utc_now(), 2 * 24 * 60 * 60, :second) - } + def generate_token(studyidentifier_type, studyidentifier, patientid) do + idstudy = if studyidentifier_type == "IDSTUDY" do + # El tipo es IDSTUDY + studyidentifier else - %{ - accessionnumber: idstudy, - patientid: patientid, - vencimiento: DateTime.add(DateTime.utc_now(), 2 * 24 * 60 * 60, :second) - } + # El tipo es ACCESSIONNUMBER + query = from s in "study", + where: s.accessionnumber == ^studyidentifier, + select: s.idstudy + + case Repo.one(query) do + nil -> {:error, "No se encontró idstudy para el acccessionnumer: #{studyidentifier}"} + idstudy -> idstudy + end end + + # Paso 1: Armar json con fecha de vencimiento (puse 2 días) + json = + %{ + idstudy: Integer.to_string(idstudy), + patientid: patientid, + vencimiento: DateTime.add(DateTime.utc_now(), 2 * 24 * 60 * 60, :second) + } + # Paso 2: Convertir json a string json_string = Jason.encode!(json) @@ -168,6 +175,65 @@ defmodule ApiWeb.IndexLive do token end + + def generate_token_imv4(studyidentifier_type, studyidentifier, username) do + idstudy = if studyidentifier_type == "IDSTUDY" do + # El tipo es IDSTUDY + studyidentifier + else + # El tipo es ACCESSIONNUMBER + query = from s in "study", + where: s.accessionnumber == ^studyidentifier, + select: s.idstudy + + case Repo.one(query) do + nil -> {:error, "No se encontró idstudy para el acccessionnumer: #{studyidentifier}"} + idstudy -> Logger.info("idstudy encontrado: #{idstudy}") + end + end + + json = %{ + idstudy: Integer.to_string(idstudy), + username: username, + vencimiento: DateTime.add(DateTime.utc_now(), 2 * 24 * 60 * 60, :second) + } + + json_string_64 = Jason.encode!(json) |> Base.encode64() + query_json = "select encrypt('#{json_string_64}'::bytea, '1nf0rm3', 'aes')::text" + token = Repo.query!(query_json).rows |> hd() |> hd() + token = String.replace_prefix(token, "\\x", "") + token + end + + def open_viewer(idstudy, accessionnumber, patientid, assigns) do + Envar.load(".env") + Envar.require_env_file(".env") + studyidentifier_ed = Envar.get("acceso_ed") + viewer = Envar.get("imViewer4") + viewer_host = Envar.get("imViewer4_host") + viewer_uid = Envar.get("imViewer4_uid") + + studyidentifier = if studyidentifier_ed == "IDSTUDY" do + idstudy + else + accessionnumber + end + + query = + from u in "users", + select: %{ + username: u.username + }, + limit: 1 + + username = Repo.one(query) + + case viewer do + "1" -> "https://#{viewer_host}/viewer/#{viewer_uid}/#{generate_token_imv4(studyidentifier_ed, studyidentifier, username)}" + "0" -> "https://estudio.informemedico.com.ar/#/#{assigns.idsite}/#{generate_token(studyidentifier_ed, studyidentifier, patientid)}" + end + end + def render(assigns) do ~H"""
@@ -281,14 +347,14 @@ defmodule ApiWeb.IndexLive do <% end %> <%= if assigns.idstudyfield == true do %> - +Imágenes
<% else %> - + @@ -314,13 +380,13 @@ defmodule ApiWeb.IndexLive do