defmodule NDCEx do require HTTPotion require Logger def request(method, data, config) do NDCEx.Message.Base.build_document(method, data, config) |> rest_call_with_message(config, method) end def rest_call_with_message(xml, params, method) do Logger.debug xml url = NDCEx.Message.Base.build_url(params[:server][:url], method) headers = get_headers(params[:rest][:headers], method) case HTTPotion.post(url, [body: xml, headers: headers, timeout: 30000 ]) do %HTTPotion.Response{body: body, headers: _headers, status_code: 200 } -> FileLogger.log(xml, body) process_response(body, params[:soap]) %HTTPotion.Response{body: body, headers: _headers, status_code: _status_code } -> {:error, remove_soap_tags(body, params[:soap])} %HTTPotion.Response{status_code: 404} -> {:error, error_message("Request does not exist")} _ -> {:error, error_message("Unknown Error")} end end defp process_response(body, params) when params == nil do if String.contains?(body, ""), do: {:error, body}, else: {:ok, body} end defp process_response(body, params) when is_list(params) do xml = remove_soap_tags(body, params[:soap]) if String.contains?(xml, ""), do: {:error, xml}, else: {:ok, xml} end defp get_headers(headers, method) do Enum.map(headers, fn ({key, value}) -> {key, String.replace(value, "{{NDC-method}}", Atom.to_string(method))} end) end defp remove_soap_tags(xml, params) do if params[:response_namespace] == nil do xml else ns = params[:response_namespace] #remove_tag(xml, "<#{ns}:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">") String.replace(xml, "<#{ns}:Envelope xmlns:#{ns}=\"http://schemas.xmlsoap.org/soap/envelope/\">", "") String.replace(xml, "<#{ns}:Body>", "") String.replace(xml, "", "") String.replace(xml, "", "") String.replace(xml, "", "") end end defp build_url(url, method), do: String.replace(url, "{{NDC-method}}", Atom.to_string(method)) defp error_message(message), do: "#{message}" defp remove_tag(doc, tag), do: String.replace(doc, tag, "") def get_mix_config(key) when is_atom(key), do: Application.get_env(:ndc_ex_sdk, key) end