diff --git a/README.md b/README.md index 54e310f..bedaa4d 100644 --- a/README.md +++ b/README.md @@ -236,7 +236,8 @@ is the following format: id: 194400, following: 173, login: "nelsonic", - collaborators: 8 + collaborators: 8, + scope: "repo,user:email" } ``` diff --git a/lib/elixir_auth_github.ex b/lib/elixir_auth_github.ex index e018259..12616cb 100644 --- a/lib/elixir_auth_github.ex +++ b/lib/elixir_auth_github.ex @@ -82,13 +82,22 @@ defmodule ElixirAuthGithub do |> check_authenticated end - defp check_authenticated(%{"access_token" => access_token}) do + defp check_authenticated(%{"access_token" => access_token, "scope" => scope}) do access_token |> get_user_details + |> set_scope(scope) end defp check_authenticated(error), do: {:error, error} + defp set_scope({:ok, user_details}, scope) do + user_details + |> Map.put(:scope, scope) + |> then(&{:ok, &1}) + end + + defp set_scope({:error, error}, _scope), do: {:error, error} + defp get_user_details(access_token) do inject_poison().get!("https://api.github.com/user", [ #  https://developer.github.com/v3/#user-agent-required diff --git a/lib/httpoison_mock.ex b/lib/httpoison_mock.ex index 95056f7..ea0cd6b 100644 --- a/lib/httpoison_mock.ex +++ b/lib/httpoison_mock.ex @@ -103,7 +103,7 @@ defmodule ElixirAuthGithub.HTTPoisonMock do _headers, _options ) do - %{body: "access_token=123"} + %{body: "access_token=123&scope=user"} end def post!( @@ -112,11 +112,15 @@ defmodule ElixirAuthGithub.HTTPoisonMock do _headers, _options ) do - %{body: "access_token=42"} + %{body: "access_token=42&scope=user"} end - # for some reason GitHub's Post returns a URI encoded string - def post!(_url, _body, _headers, _options) do - %{body: URI.encode_query(@valid_body)} + def post!( + "https://github.com/login/oauth/access_token?client_id=TEST_ID&client_secret=TEST_SECRET&code=12345", + _body, + _headers, + _options + ) do + %{body: "access_token=12345&scope=user"} end end diff --git a/test/elixir_auth_github_test.exs b/test/elixir_auth_github_test.exs index 031279d..434e127 100644 --- a/test/elixir_auth_github_test.exs +++ b/test/elixir_auth_github_test.exs @@ -53,6 +53,12 @@ defmodule ElixirAuthGithubTest do assert res.id == "19" end + test "github_auth returns scope string" do + setup_test_environment_variables() + {:ok, res} = ElixirAuthGithub.github_auth("12345") + assert res.scope == "user" + end + test "github_auth returns an error with a bad code" do setup_test_environment_variables() assert ElixirAuthGithub.github_auth("1234") ==