Current section
Files
Jump to
Current section
Files
lib/wykop_api/user.ex
defmodule WykopAPI.User do
@moduledoc """
http://www.wykop.pl/dla-programistow/dokumentacja/#info6_7
"""
@api_url WykopAPI.get_api_url <> "user/"
defmodule ConnectResp do
@derive [Poison.Encoder]
defstruct [:appkey, :login, :token, :sign]
end
@doc """
Generates URL that will redirect Wykop user to `redirect_url` with auth data.
User's browser will do `POST \#{redirect_url}` with content parsable by
`connect_callback(connectData)`
"""
def connect(redirect_url) do
map = %{
appkey: WykopAPI.get_app_key,
redirect: Base.url_encode64(redirect_url),
secure: WykopAPI.sign(redirect_url)
}
@api_url <> "connect/" <> WykopAPI.param_api(map)
end
@doc """
Parses `Connect` POST callback.
`connect_data` contains:
arr |> json_encode |> base64_encode
arr = %{
"appkey" => "",
"login" => "",
"token" => "",
"sign" => sign
}
where sign = md5(secret + appkey + login + token)
"""
def connect_callback(connect_data) do
{:ok, json} = connect_data
|> Base.decode64
resp = Poison.decode! json, as: ConnectResp
%{login: login, token: token} = resp
app_key = WykopAPI.get_app_key()
sign = WykopAPI.sign(app_key, login, token)
%{sign: ^sign, appkey: ^app_key} = resp
resp
end
end