agregamos redirect.ex y refactorizamos get_hash.ex en controller
This commit is contained in:
@ -7,6 +7,7 @@ defmodule ApiWeb.GetHash do
|
||||
# El token fue generado con generate_token(%{password: "1nf0rm3"})
|
||||
@valid_token "XHhlNmU3Y2RmYjAyOGZhNWM5NjVhZGNkOTNhOTQ0NDRkYmYwMWFkM2U3YjQ1NjE1YzU1ZDg0ZjlmMDQzNDRmNTUw"
|
||||
|
||||
|
||||
def index(conn, %{"study" => accessionnumber}) do
|
||||
Envar.load(".env")
|
||||
Envar.require_env_file(".env")
|
||||
@ -16,7 +17,25 @@ defmodule ApiWeb.GetHash do
|
||||
|> put_status(:unauthorized)
|
||||
|> json(%{error: "Token inválido o ausente"})
|
||||
else
|
||||
|
||||
Logger.info("Accession get hash -> #{accessionnumber}")
|
||||
hash = get_hash(accessionnumber)
|
||||
if hash == "nil" do
|
||||
|
||||
conn
|
||||
|> put_status(:not_found)
|
||||
|> json(%{error: "Estudio no encontrado"})
|
||||
else
|
||||
|
||||
conn
|
||||
|> put_status(:ok)
|
||||
|> json(%{hash: hash})
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def get_hash(accessionnumber) do
|
||||
|
||||
studyidentifier = Envar.get("IDENTIFIERFIELD") || "IDSTUDY"
|
||||
|
||||
@ -45,10 +64,7 @@ defmodule ApiWeb.GetHash do
|
||||
|
||||
case Repo.one(query) do
|
||||
nil ->
|
||||
conn
|
||||
|> put_status(:not_found)
|
||||
|> json(%{error: "Estudio no encontrado"})
|
||||
|
||||
"nil"
|
||||
res ->
|
||||
vencimiento = DateTime.add(DateTime.utc_now(), 2 * 24 * 60 * 60, :second)
|
||||
|
||||
@ -56,13 +72,11 @@ defmodule ApiWeb.GetHash do
|
||||
|
||||
token = generate_token(json_data)
|
||||
|
||||
conn
|
||||
|> put_status(:ok)
|
||||
|> json(%{hash: token})
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
def generate_token(json) do
|
||||
json_string = Jason.encode!(json)
|
||||
query = "select encrypt('#{json_string}'::bytea, '1nf0rm3', 'aes')::text"
|
||||
|
||||
44
lib/api_web/controllers/redirect.ex
Normal file
44
lib/api_web/controllers/redirect.ex
Normal file
@ -0,0 +1,44 @@
|
||||
defmodule ApiWeb.Redirect do
|
||||
use ApiWeb, :controller
|
||||
alias Api.Repo
|
||||
import Ecto.Query
|
||||
require Logger
|
||||
|
||||
|
||||
def index(conn, %{"accession" => accession}) do
|
||||
Envar.load(".env")
|
||||
Envar.require_env_file(".env")
|
||||
|
||||
redirect = Envar.get("REDIRECT")
|
||||
Logger.info("parametros: #{inspect(accession)}")
|
||||
|
||||
|
||||
if redirect == "TRUE" do
|
||||
hash = case get_hash_v2(accession) do
|
||||
{:ok, hash} ->
|
||||
|
||||
url = "https://estudio.informemedico.com.ar/#/191/" <> hash
|
||||
|
||||
{:error, error_msg} ->
|
||||
text(conn, "Error al obtener hash: #{error_msg}")
|
||||
|
||||
end
|
||||
redirect(conn, external: hash)
|
||||
else
|
||||
text(conn, "Error 404")
|
||||
end
|
||||
end
|
||||
|
||||
defp get_hash_v2(accession) do
|
||||
|
||||
hash = ApiWeb.GetHash.get_hash(accession)
|
||||
if hash == "nil" do
|
||||
{:error, "Estudio no encontrado"}
|
||||
else
|
||||
{:ok, hash}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ defmodule ApiWeb.Router do
|
||||
post "/studies", StudiesController, :index
|
||||
post "/sharestudy", ShareController, :index
|
||||
get "/gethash/:study", GetHash, :index
|
||||
get "/redirect/:accession", Redirect, :index
|
||||
get "/study/:hash", StudyController, :index
|
||||
get "/downloadpdf/:idstudyreport", DownloadpdfController, :index
|
||||
get "/attachment/:idstudyattachment", AttachmentController, :index
|
||||
|
||||
Reference in New Issue
Block a user