mirror of
https://github.com/valitydev/bouncer-client-erlang.git
synced 2024-11-06 08:35:21 +00:00
Expose context fragment baking (#3)
Also allow to pass IPs as `inet:ip_address()`es.
This commit is contained in:
parent
41f766feba
commit
4cb77d31e4
@ -7,16 +7,18 @@
|
|||||||
|
|
||||||
-export([judge/3]).
|
-export([judge/3]).
|
||||||
|
|
||||||
|
-export([bake_context_fragment/1]).
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
-type woody_context() :: woody_context:ctx().
|
-type woody_context() :: woody_context:ctx().
|
||||||
|
|
||||||
-type context_fragment_id() :: binary().
|
-type context_fragment_id() :: binary().
|
||||||
-type ruleset_id() :: binary().
|
-type ruleset_id() :: binary().
|
||||||
-type encoded_bouncer_fragment() :: bouncer_context_thrift:'ContextFragment'().
|
-type encoded_context_fragment() :: bouncer_context_thrift:'ContextFragment'().
|
||||||
-type context_fragment() ::
|
-type context_fragment() ::
|
||||||
bouncer_context_helpers:context_fragment()
|
bouncer_context_helpers:context_fragment()
|
||||||
| {encoded_fragment, encoded_bouncer_fragment()}.
|
| {encoded_fragment, encoded_context_fragment()}.
|
||||||
|
|
||||||
-type judge_context() :: #{
|
-type judge_context() :: #{
|
||||||
fragments => #{context_fragment_id() => context_fragment()}
|
fragments => #{context_fragment_id() => context_fragment()}
|
||||||
@ -30,6 +32,7 @@
|
|||||||
-export_type([judgement/0]).
|
-export_type([judgement/0]).
|
||||||
-export_type([judge_context/0]).
|
-export_type([judge_context/0]).
|
||||||
-export_type([context_fragment/0]).
|
-export_type([context_fragment/0]).
|
||||||
|
-export_type([encoded_context_fragment/0]).
|
||||||
|
|
||||||
-spec judge(ruleset_id(), judge_context(), woody_context()) -> judgement().
|
-spec judge(ruleset_id(), judge_context(), woody_context()) -> judgement().
|
||||||
judge(RulesetID, JudgeContext, WoodyContext) ->
|
judge(RulesetID, JudgeContext, WoodyContext) ->
|
||||||
@ -71,12 +74,7 @@ collect_fragments(_, Context) ->
|
|||||||
collect_fragments_(FragmentID, {encoded_fragment, EncodedFragment}, Acc0) ->
|
collect_fragments_(FragmentID, {encoded_fragment, EncodedFragment}, Acc0) ->
|
||||||
Acc0#{FragmentID => EncodedFragment};
|
Acc0#{FragmentID => EncodedFragment};
|
||||||
collect_fragments_(FragmentID, ContextFragment = #bctx_v1_ContextFragment{}, Acc0) ->
|
collect_fragments_(FragmentID, ContextFragment = #bctx_v1_ContextFragment{}, Acc0) ->
|
||||||
Acc0#{
|
collect_fragments_(FragmentID, bake_context_fragment(ContextFragment), Acc0).
|
||||||
FragmentID => #bctx_ContextFragment{
|
|
||||||
type = v1_thrift_binary,
|
|
||||||
content = encode_context_fragment(ContextFragment)
|
|
||||||
}
|
|
||||||
}.
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
@ -87,6 +85,14 @@ parse_judgement(#bdcs_Judgement{resolution = forbidden}) ->
|
|||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
-spec bake_context_fragment(bouncer_context_helpers:context_fragment()) ->
|
||||||
|
{encoded_fragment, encoded_context_fragment()}.
|
||||||
|
bake_context_fragment(ContextFragment) ->
|
||||||
|
{encoded_fragment, #bctx_ContextFragment{
|
||||||
|
type = v1_thrift_binary,
|
||||||
|
content = encode_context_fragment(ContextFragment)
|
||||||
|
}}.
|
||||||
|
|
||||||
encode_context_fragment(ContextFragment) ->
|
encode_context_fragment(ContextFragment) ->
|
||||||
Type = {struct, struct, {bouncer_context_v1_thrift, 'ContextFragment'}},
|
Type = {struct, struct, {bouncer_context_v1_thrift, 'ContextFragment'}},
|
||||||
Codec = thrift_strict_binary_codec:new(),
|
Codec = thrift_strict_binary_codec:new(),
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
-type method() :: binary().
|
-type method() :: binary().
|
||||||
-type email() :: binary().
|
-type email() :: binary().
|
||||||
-type timestamp() :: binary().
|
-type timestamp() :: binary().
|
||||||
-type ip() :: string().
|
-type ip() :: inet:ip_address() | string() | binary().
|
||||||
-type context_fragment() :: bouncer_context_v1_thrift:'ContextFragment'().
|
-type context_fragment() :: bouncer_context_v1_thrift:'ContextFragment'().
|
||||||
-type woody_context() :: woody_context:ctx().
|
-type woody_context() :: woody_context:ctx().
|
||||||
|
|
||||||
@ -248,7 +248,9 @@ maybe_marshal_user_role(Role) ->
|
|||||||
)
|
)
|
||||||
}.
|
}.
|
||||||
|
|
||||||
|
maybe_marshal_ip(IP) when is_tuple(IP) ->
|
||||||
|
list_to_binary(inet:ntoa(IP));
|
||||||
|
maybe_marshal_ip(IP) when is_list(IP) ->
|
||||||
|
list_to_binary(IP);
|
||||||
maybe_marshal_ip(undefined) ->
|
maybe_marshal_ip(undefined) ->
|
||||||
undefined;
|
undefined.
|
||||||
maybe_marshal_ip(IP) ->
|
|
||||||
list_to_binary(IP).
|
|
||||||
|
Loading…
Reference in New Issue
Block a user