Current section
Files
Jump to
Current section
Files
lib/authorization/user.ex
defmodule ZupplerUsers.Auth.User do
@moduledoc """
This module contains the functions to work with Zuppler User.
## Notes
* The token is requred to load the user info
## Example:
```
{:ok, token} = ZupplerUsers.Auth.Oauth.get_user_token("12345")
```
"""
def has_any_role?(user_info, user_roles) when is_list(user_roles) do
r1 = MapSet.new user_roles
r2 = MapSet.new user_info.roles
Enum.count(MapSet.intersection(r1, r2)) > 0
end
def has_any_role?(user_info, user_role) do
has_any_role? user_info, List.wrap(user_role)
end
def acls_for(user_info, kind), do: user_info.acls[kind]
@doc """
Loads user info from Zuppler Users based on user token.
Response is in this format:
```
{:ok, %{info:
%{acls: %{}, email: "test@zuppler.com", id: 14802,
name: "Test Account", phone: "1234567890",
roles: ["restaurant"]
}, provider: "zuppler", uid: "10768"}
}
```
If token is not valid response will be
```
{:fail, "Not authorized"}
```
"""
def auth(token) do
case HTTPotion.get user_url, query: [access_token: token] do
%{status_code: 200, body: body} ->
{:ok, Poison.Parser.parse!(body, keys: :atoms).info}
%{status_code: 401, body: _body} ->
{:fail, "Not authorized"}
end
end
def user_url do
config = Application.get_env(:zuppler_users_client, ZupplerUsers.Endpoint)
config[:current_user_url]
end
end