Current section
Files
Jump to
Current section
Files
lib/line.ex
defmodule Line do
alias Line.Environment
@endpoint_auth "https://access.line.me/oauth2/v2.1/authorize"
@endpoint_me "https://api.line.me"
def login_url(state) do
"#{@endpoint_auth}"
<> "?response_type=code"
<> "&client_id=#{Environment.channel_id()}"
<> "&redirect_uri=#{Environment.redirect_uri()}"
<> "&state=#{state}"
<> "&scope=profile"
end
def access_token(code) do
body = [
grant_type: "authorization_code",
code: code,
redirect_uri: Environment.redirect_uri(),
client_id: Environment.channel_id(),
client_secret: Environment.channel_secret()
]
headers = [{"Content-Type", "application/x-www-form-urlencoded"}]
"#{@endpoint_me}/oauth2/v2.1/token"
|> HTTPoison.post({:form, body}, headers)
|> decode()
end
def profile(access_token) do
headers = [{"Authorization", "Bearer #{access_token}"}]
"#{@endpoint_me}/v2/profile"
|> HTTPoison.get(headers)
|> decode()
end
defp decode(response) do
case response do
{:error, %HTTPoison.Error{reason: reason}} -> {:error, reason}
{:ok, %HTTPoison.Response{body: body}} ->
case Poison.decode!(body) do
%{"error_description" => error_description} -> {:error, error_description}
decoded_body -> {:ok, decoded_body}
end
end
end
end