-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 ).