validate method
Triggers the validation for the given challenge
RFC: https://datatracker.ietf.org/doc/html/rfc8555#section-7.5.1
Implementation
Future<bool> validate(Challenge challenge, {int maxAttempts = 15}) async {
var jws = await _createJWS(challenge.url!, useKid: true, payload: {
'keyAuthorization':
'${challenge.token!}.${AcmeUtils.getDigest(JsonWebKey.fromPem(publicKeyPem))}'
});
var body = json.encode(jws.toJson());
var headers = {'Content-Type': 'application/jose+json'};
try {
var response = await Dio().post(
challenge.url!,
data: body,
options: Options(headers: headers),
);
nonce = response.headers.map[HEADER_REPLAY_NONCE]!.first;
} on DioException catch (e) {
print(e.response!.data!.toString());
}
do {
var jws = await _createJWS(challenge.authorizationUrl!, useKid: true);
var body = json.encode(jws.toJson());
try {
var response = await Dio().post(
challenge.authorizationUrl!,
data: body,
options: Options(headers: headers),
);
nonce = response.headers.map[HEADER_REPLAY_NONCE]!.first;
var auth = Authorization.fromJson(response.data);
if (auth.status == 'valid') {
return true;
}
} on DioException catch (e) {
print(e.response!.data!.toString());
}
maxAttempts--;
await Future.delayed(Duration(seconds: 4));
} while (maxAttempts > 0);
return false;
}