Packages
oidcc
3.0.0-alpha.1
3.7.2
3.7.1
3.7.0
3.6.0
3.5.2
3.5.1
3.5.0
retired
3.4.0
3.3.0
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.2.0-beta.3
3.2.0-beta.2
retired
3.2.0-beta.1
retired
3.1.2
3.1.2-beta.1
retired
3.1.1
retired
3.1.0
retired
3.1.0-beta.2
retired
3.1.0-beta.1
retired
3.0.2
3.0.1
retired
3.0.0
retired
3.0.0-rc.6
retired
3.0.0-rc.5
retired
3.0.0-rc.4
retired
3.0.0-rc.3
retired
3.0.0-rc.2
retired
3.0.0-rc.1
retired
3.0.0-alpha.5
retired
3.0.0-alpha.4
retired
3.0.0-alpha.3
retired
3.0.0-alpha.2
retired
3.0.0-alpha.1
retired
2.0.0-alpha.2
retired
2.0.0-alpha.1
retired
1.8.1
retired
1.8.0
retired
1.7.0
retired
1.6.0
retired
1.5.1
retired
1.5.0
retired
1.4.0
retired
1.3.0
retired
1.2.1
retired
1.2.0
retired
1.1.0
retired
1.0.1
retired
1.0.0
retired
OpenID Connect client library for the BEAM.
Retired package: Security issue - DoS Vulnerability, see https://github.com/erlef/oidcc/security/advisories/GHSA-mj35-2rgf-cv8p
Current section
Files
Jump to
Current section
Files
src/oidcc_scope.erl
%%%-------------------------------------------------------------------
%% @doc OpenID Scope Utilities
%% @end
%%%-------------------------------------------------------------------
-module(oidcc_scope).
-feature(maybe_expr, enable).
-export([parse/1]).
-export([query_append_scope/2]).
-export([scopes_to_bin/1]).
-export_type([scopes/0]).
-export_type([t/0]).
-type scopes() :: [nonempty_binary() | atom() | nonempty_string()].
-type t() :: binary().
%% @doc Compose {@link scopes()} into {@link t()}
%%
%% <h2>Examples</h2>
%%
%% ```
%% <<"openid profile email">> = oidcc_scope:scopes_to_bin(
%% [<<"openid">>, profile, "email"]).
%% '''
-spec scopes_to_bin(Scopes :: scopes()) -> t().
scopes_to_bin(Scopes) ->
NormalizedScopes =
lists:map(
fun
(Scope) when is_binary(Scope) ->
Scope;
(Scope) when is_atom(Scope) ->
atom_to_binary(Scope, utf8);
(Scope) when is_list(Scope) ->
list_to_binary(Scope)
end,
Scopes
),
SeparatedScopes = lists:join(<<" ">>, NormalizedScopes),
list_to_binary(SeparatedScopes).
%% @private
-spec query_append_scope(Scope, QueryList) -> QueryList when
Scope :: t() | scopes(),
QueryList :: [{unicode:chardata(), unicode:chardata() | true}].
query_append_scope(<<>>, QueryList) ->
QueryList;
query_append_scope(Scope, QueryList) when is_binary(Scope) ->
[{<<"scope">>, Scope} | QueryList];
query_append_scope(Scopes, QueryList) when is_list(Scopes) ->
query_append_scope(scopes_to_bin(Scopes), QueryList).
%% @doc Parse {@link t()} into {@link scopes()}
%%
%% <h2>Examples</h2>
%%
%% ```
%% [<<"openid">>, <<"profile">>] = oidcc_scope:parse(<<"openid profile">>).
%% '''
-spec parse(Scope :: t()) -> scopes().
parse(Scope) ->
binary:split(Scope, [<<" ">>], [trim_all, global]).