From 68968f063082e5c2501b07c11c3123938b2dc2c6 Mon Sep 17 00:00:00 2001 From: David Peredo Date: Tue, 15 Mar 2016 13:48:21 -0700 Subject: [PATCH 1/6] Set TLS version to 1.2, changed to HTTPoison for ease of use. --- lib/vaultex/client.ex | 30 +++++++++++------------------- mix.exs | 6 +++--- mix.lock | 9 ++++++--- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/lib/vaultex/client.ex b/lib/vaultex/client.ex index 14630ba..5eaba45 100644 --- a/lib/vaultex/client.ex +++ b/lib/vaultex/client.ex @@ -117,27 +117,17 @@ defmodule Vaultex.Client do end defp request(method, url, params, auth) do case get_content(method, url, params, auth) do - {:ok, code, _headers, body_ref} -> - {:ok, res} = :hackney.body body_ref + {:ok, %HTTPoison.Response{status_code: 200, body: res}} -> Logger.debug("[body] #{inspect res}") - case Poison.decode(res) do - {:ok, json} -> - cond do - 200 -> - {:ok, json} - 204 -> - {:ok, :no_data} - code in 400..599 -> - {:error, {{:http_status, code}, json}} - true -> - {:error, res} - end - {:error, json_err} -> + case Poison.decode(res) do + {:ok, json} -> + {:ok, json} + {:error, json_err} -> case res do "" -> {:ok, :no_data} - _ -> {:error, json_err} + _ -> {:error, json_err} end - end + end error -> error end end @@ -154,10 +144,12 @@ defmodule Vaultex.Client do case Poison.encode(params) do # empty params {:ok, "null"} -> - :hackney.request(method, url, headers) + HTTPoison.request(method, url, "", headers, [hackney: [ssl_options: [versions: [:"tlsv1.2"]]]]) + {:ok, json} -> Logger.debug("[JSON] #{inspect json}") - :hackney.request(method, url, headers, json) + HTTPoison.request(method, url, json, headers, [hackney: [ssl_options: [versions: [:"tlsv1.2"]]]]) + error -> error end end diff --git a/mix.exs b/mix.exs index 11f47c5..29a457f 100644 --- a/mix.exs +++ b/mix.exs @@ -14,7 +14,7 @@ defmodule Vaultex.Mixfile do # # Type "mix help compile.app" for more information def application do - [applications: [:logger, :hackney, :poison], + [applications: [:logger, :httpoison, :poison], mod: {Vaultex, []}] end @@ -28,8 +28,8 @@ defmodule Vaultex.Mixfile do # # Type "mix help deps" for more examples and options defp deps do - [{:hackney, "~> 1.3"}, - {:poison, "~> 1.5"} + [{:httpoison, "~> 0.8.1"}, + {:poison, "~> 1.5"} ] end end diff --git a/mix.lock b/mix.lock index 493134e..22bc9ef 100644 --- a/mix.lock +++ b/mix.lock @@ -1,4 +1,7 @@ -%{"hackney": {:hex, :hackney, "1.3.2"}, - "idna": {:hex, :idna, "1.0.2"}, - "poison": {:hex, :poison, "1.5.0"}, +%{"certifi": {:hex, :certifi, "0.3.0"}, + "hackney": {:hex, :hackney, "1.4.10"}, + "httpoison": {:hex, :httpoison, "0.8.1"}, + "idna": {:hex, :idna, "1.1.0"}, + "mimerl": {:hex, :mimerl, "1.0.2"}, + "poison": {:hex, :poison, "1.5.2"}, "ssl_verify_hostname": {:hex, :ssl_verify_hostname, "1.0.5"}} From 12ec0d16b6b1d5c5aca890a0b262cad3cceda50f Mon Sep 17 00:00:00 2001 From: David Peredo Date: Tue, 15 Mar 2016 14:13:08 -0700 Subject: [PATCH 2/6] Added authentication using github token. --- lib/vaultex/client.ex | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/vaultex/client.ex b/lib/vaultex/client.ex index 5eaba45..f6aa9d4 100644 --- a/lib/vaultex/client.ex +++ b/lib/vaultex/client.ex @@ -38,7 +38,14 @@ defmodule Vaultex.Client do def init(state) do url = "#{get_env(:scheme)}://#{get_env(:host)}:#{get_env(:port)}/#{@version}/" - {:ok, Map.merge(state, %{url: url})} + {:ok, Map.merge(state, %{url: url})} + end + + def handle_call({:auth, {:github, github_token}}, _from, state) do + {:ok, req} = request(:post, "#{state.url}auth/github/login", %{token: github_token}) + Logger.debug("Got auth response: #{inspect req}") + + {:reply, {:ok, :authenticated}, Map.merge(state, %{token: req["auth"]["client_token"]})} end # authenticate and save the access token in `token` @@ -48,8 +55,9 @@ defmodule Vaultex.Client do {:ok, req} = request(:post, "#{state.url}auth/app-id/login", %{app_id: app_id, user_id: user_id}) Logger.debug("Got auth reponse: #{inspect req}") - {:reply, {:ok, :authenticated}, Map.merge(state, %{token: req["auth"]["client_token"]})} + {:reply, {:ok, :authenticated}, Map.merge(state, %{token: req["auth"]["client_token"]})} end + def handle_call({:auth, {:token, token}}, _from, state) do Logger.debug("Merged in token auth") {:reply, {:ok, :authenticated}, Map.merge(state, %{token: token})} From a3cafeb8108a693e9928cc4804c8dd8d303476ea Mon Sep 17 00:00:00 2001 From: David Peredo Date: Tue, 12 Apr 2016 17:57:04 -0700 Subject: [PATCH 3/6] Allow redirects. --- lib/vaultex/client.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/vaultex/client.ex b/lib/vaultex/client.ex index f6aa9d4..2293070 100644 --- a/lib/vaultex/client.ex +++ b/lib/vaultex/client.ex @@ -152,11 +152,11 @@ defmodule Vaultex.Client do case Poison.encode(params) do # empty params {:ok, "null"} -> - HTTPoison.request(method, url, "", headers, [hackney: [ssl_options: [versions: [:"tlsv1.2"]]]]) + HTTPoison.request(method, url, "", headers, [follow_redirect: true, hackney: [ssl_options: [versions: [:"tlsv1.2"]]]]) {:ok, json} -> Logger.debug("[JSON] #{inspect json}") - HTTPoison.request(method, url, json, headers, [hackney: [ssl_options: [versions: [:"tlsv1.2"]]]]) + HTTPoison.request(method, url, json, headers, [follow_redirect: true, hackney: [ssl_options: [versions: [:"tlsv1.2"]]]]) error -> error end From 595f76e5e1e58cf69d1c5656da4f9ab9f93c883a Mon Sep 17 00:00:00 2001 From: "Benny C. Wong" Date: Tue, 12 Apr 2016 17:58:30 -0700 Subject: [PATCH 4/6] Update mix.exs --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 29a457f..3607900 100644 --- a/mix.exs +++ b/mix.exs @@ -3,7 +3,7 @@ defmodule Vaultex.Mixfile do def project do [app: :vaultex, - version: "0.0.1", + version: "0.0.2", elixir: "~> 1.1", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, From 78ec73045589854fafe2bc9194d51a008ef1e176 Mon Sep 17 00:00:00 2001 From: David Peredo Date: Wed, 13 Apr 2016 14:45:19 -0700 Subject: [PATCH 5/6] Follow redirects. --- lib/vaultex/client.ex | 7 +++++++ mix.exs | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/vaultex/client.ex b/lib/vaultex/client.ex index 2293070..c1ecce0 100644 --- a/lib/vaultex/client.ex +++ b/lib/vaultex/client.ex @@ -136,6 +136,13 @@ defmodule Vaultex.Client do _ -> {:error, json_err} end end + {:ok, %HTTPoison.AsyncResponse{id: {:maybe_redirect, _status, headers, _client}}} -> + case Enum.find(headers, fn ({key, val}) -> key == "Location" end) do + nil -> + {:error, "Error redirecting"} + {_key, new_url} -> + request(method, new_url, params, auth) + end error -> error end end diff --git a/mix.exs b/mix.exs index 29a457f..3607900 100644 --- a/mix.exs +++ b/mix.exs @@ -3,7 +3,7 @@ defmodule Vaultex.Mixfile do def project do [app: :vaultex, - version: "0.0.1", + version: "0.0.2", elixir: "~> 1.1", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, From e6545b5d8485ac8e595a5919ea80dffd5de2436a Mon Sep 17 00:00:00 2001 From: "Benny C. Wong" Date: Wed, 13 Apr 2016 14:50:56 -0700 Subject: [PATCH 6/6] increment version --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 3607900..ba66085 100644 --- a/mix.exs +++ b/mix.exs @@ -3,7 +3,7 @@ defmodule Vaultex.Mixfile do def project do [app: :vaultex, - version: "0.0.2", + version: "0.0.3", elixir: "~> 1.1", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod,