Current section
Files
Jump to
Current section
Files
src/acumen@authorization.erl
-module(acumen@authorization).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/acumen/authorization.gleam").
-export([decoder/1, parse_authorization_response/2]).
-export_type([authorization/0, status/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Authorization types for ACME domain validation.\n"
"\n"
" An authorization represents the server's authorization for an account\n"
" to represent a specific identifier (domain). Each authorization contains\n"
" one or more challenges that can be completed to prove control.\n"
).
-type authorization() :: {authorization,
acumen@url:url(),
status(),
acumen:identifier_(),
list(acumen@challenge:challenge()),
gleam@option:option(gleam@time@timestamp:timestamp()),
boolean()}.
-type status() :: pending | valid | invalid | deactivated | expired | revoked.
-file("src/acumen/authorization.gleam", 90).
-spec status_decoder() -> gleam@dynamic@decode:decoder(status()).
status_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(String) -> case String of
<<"pending"/utf8>> ->
gleam@dynamic@decode:success(pending);
<<"valid"/utf8>> ->
gleam@dynamic@decode:success(valid);
<<"invalid"/utf8>> ->
gleam@dynamic@decode:success(invalid);
<<"deactivated"/utf8>> ->
gleam@dynamic@decode:success(deactivated);
<<"expired"/utf8>> ->
gleam@dynamic@decode:success(expired);
<<"revoked"/utf8>> ->
gleam@dynamic@decode:success(revoked);
_ ->
gleam@dynamic@decode:failure(
pending,
<<"AuthorizationStatus"/utf8>>
)
end end
).
-file("src/acumen/authorization.gleam", 53).
?DOC(false).
-spec decoder(acumen@url:url()) -> gleam@dynamic@decode:decoder(authorization()).
decoder(Url) ->
gleam@dynamic@decode:field(
<<"status"/utf8>>,
status_decoder(),
fun(Status) ->
gleam@dynamic@decode:field(
<<"identifier"/utf8>>,
acumen:identifier_decoder(),
fun(Identifier) ->
gleam@dynamic@decode:field(
<<"challenges"/utf8>>,
begin
_pipe = gleam@dynamic@decode:list(
acumen@challenge:optional_decoder()
),
gleam@dynamic@decode:map(
_pipe,
fun gleam@option:values/1
)
end,
fun(Challenges) ->
gleam@dynamic@decode:optional_field(
<<"expires"/utf8>>,
none,
gleam@dynamic@decode:optional(
acumen@internal@utils:timestamp_decoder()
),
fun(Expires) ->
gleam@dynamic@decode:optional_field(
<<"wildcard"/utf8>>,
false,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Wildcard) ->
gleam@dynamic@decode:success(
{authorization,
Url,
Status,
Identifier,
Challenges,
Expires,
Wildcard}
)
end
)
end
)
end
)
end
)
end
).
-file("src/acumen/authorization.gleam", 77).
?DOC(false).
-spec parse_authorization_response(
gleam@http@response:response(binary()),
acumen@url:url()
) -> {ok, authorization()} | {error, acumen:acme_error()}.
parse_authorization_response(Resp, Authorization_url) ->
_pipe = gleam@json:parse(
erlang:element(4, Resp),
decoder(Authorization_url)
),
gleam@result:map_error(
_pipe,
fun(Error) ->
{json_parse_error,
acumen@internal@utils:json_parse_error_message(
<<"authorization"/utf8>>,
Error
)}
end
).