aboutsummaryrefslogtreecommitdiff
path: root/src/ory_hydra.erl
blob: d31cd8259aad853b5ae5c1c7a11484846c588b4d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
-module(ory_hydra).
-export([url/0, admin_url/0, userinfo/1, login_request/1, accept_login_request/2, consent_request/1, accept_consent_request/2, reject_consent_request/2]).

login_request(Challenge) ->
    Url = [admin_url(), "/oauth2/auth/requests/login?login_challenge=", Challenge],
    Headers = [{"accept", "application/json"}],
    SSLOpts = application:get_env(ory, hackney_ssl_opts, []),
    Opts = [{ssl_options, SSLOpts}],
    api_response(hackney:request(get, Url, Headers, <<>>, Opts)).

accept_login_request(Challenge, Data) ->
    Url = [admin_url(), "/oauth2/auth/requests/login/accept?login_challenge=", Challenge],
    Headers = [{"accept", "application/json"}, {"content_type", "application/json"}],
    Json = jsone:encode(Data),
    SSLOpts = application:get_env(ory, hackney_ssl_opts, []),
    Opts = [{ssl_options, SSLOpts}],
    api_response(hackney:request(put, Url, Headers, Json, Opts)).

consent_request(Challenge) ->
    Url = [admin_url(), "/oauth2/auth/requests/consent?consent_challenge=", Challenge],
    Headers = [{"accept", "application/json"}],
    SSLOpts = application:get_env(ory, hackney_ssl_opts, []),
    Opts = [{ssl_options, SSLOpts}],
    api_response(hackney:request(get, Url, Headers, <<>>, Opts)).

accept_consent_request(Challenge, Data) ->
    Url = [admin_url(), "/oauth2/auth/requests/consent/accept?consent_challenge=", Challenge],
    Headers = [{"accept", "application/json"}, {"content_type", "application/json"}],
    Json = jsone:encode(Data),
    SSLOpts = application:get_env(ory, hackney_ssl_opts, []),
    Opts = [{ssl_options, SSLOpts}],
    api_response(hackney:request(put, Url, Headers, Json, Opts)).

reject_consent_request(Challenge, Data) ->
    Url = [admin_url(), "/oauth2/auth/requests/consent/reject?consent_challenge=", Challenge],
    Headers = [{"accept", "application/json"}, {"content_type", "application/json"}],
    Json = jsone:encode(Data),
    SSLOpts = application:get_env(ory, hackney_ssl_opts, []),
    Opts = [{ssl_options, SSLOpts}],
    api_response(hackney:request(put, Url, Headers, Json, Opts)).

userinfo(Authorization) ->
    Url = [url(), "/userinfo"],
    Headers = [{"accept", "application/json"}, {"authorization", Authorization}],
    SSLOpts = application:get_env(ory, hackney_ssl_opts, []),
    Opts = [{ssl_options, SSLOpts}],
    api_response(hackney:request(get, Url, Headers, <<>>, Opts)).

admin_url() ->
    {ok, Value} = application:get_env(ory, hydra_admin_url),
    Value.

url() ->
    {ok, Value} = application:get_env(ory, hydra_url),
    Value.

api_response(Error = {error, Error}) ->
    logger:error("ory_kratos hackney error: ~p", [Error]),
    {error, #{<<"code">> => 503, <<"status">> => "Not Available", <<"message">> => "This service isn't available at the moment."}};
api_response({ok, 200, _, Client}) ->
    {ok, Body} = hackney:body(Client),
    {ok, jsone:decode(Body)};
api_response({ok, _Code, _, Client}) ->
    {ok, Body} = hackney:body(Client),
    JSON = #{<<"error">> := Error} = jsone:decode(Body),
    logger:debug("hydra error: ~p", [JSON]),
    {error, Error}.