@@ -7,7 +7,7 @@ use fs_err as fs;
77use hickory_resolver:: error:: ResolveErrorKind ;
88use instant_acme:: {
99 Account , AccountCredentials , AuthorizationStatus , ChallengeType , Identifier , NewAccount ,
10- NewOrder , Order , OrderStatus ,
10+ NewOrder , Order , OrderStatus , Problem ,
1111} ;
1212use rcgen:: { CertificateParams , DistinguishedName , KeyPair } ;
1313use serde:: { Deserialize , Serialize } ;
@@ -457,7 +457,14 @@ impl AcmeClient {
457457 return extract_certificate ( order) . await ;
458458 }
459459 // Something went wrong
460- OrderStatus :: Invalid => bail ! ( "order is invalid" ) ,
460+ OrderStatus :: Invalid => {
461+ let error = find_error ( & mut order) . await . unwrap_or ( Problem {
462+ r#type : None ,
463+ detail : None ,
464+ status : None ,
465+ } ) ;
466+ bail ! ( "order is invalid: {error}" ) ;
467+ }
461468 }
462469 }
463470 }
@@ -472,6 +479,20 @@ impl AcmeClient {
472479 }
473480}
474481
482+ async fn find_error ( order : & mut Order ) -> Option < Problem > {
483+ if let Some ( error) = order. state ( ) . error . as_ref ( ) {
484+ return Some ( error. clone ( ) ) ;
485+ }
486+ for auth in order. authorizations ( ) . await . ok ( ) ? {
487+ for challenge in auth. challenges {
488+ if let Some ( error) = challenge. error {
489+ return Some ( error) ;
490+ }
491+ }
492+ }
493+ None
494+ }
495+
475496fn make_csr ( key : & str , names : & [ String ] ) -> Result < Vec < u8 > > {
476497 let mut params =
477498 CertificateParams :: new ( names) . context ( "failed to create certificate params" ) ?;
0 commit comments