1
- use crate :: acme:: ACMEManager ;
1
+ use crate :: acme:: ACMEManager ;
2
2
use crate :: admin_server:: request:: {
3
3
DeleteDomainVersionOption , DomainWithOptVersionOption , DomainWithVersionOption ,
4
4
GetDomainOption , GetDomainPositionOption , UpdateUploadingStatusOption , UploadFileOption ,
@@ -44,17 +44,18 @@ impl AdminServer {
44
44
45
45
fn routes ( & self ) -> impl Filter < Extract = impl warp:: Reply , Error = warp:: Rejection > + Clone {
46
46
self . auth ( ) . and (
47
- ( warp:: get ( ) . and (
47
+ warp:: get ( ) . and (
48
48
self . get_domain_info ( )
49
49
. or ( self . get_domain_upload_path ( ) )
50
- . or ( self . get_files_metadata ( ) ) ,
51
- ) )
50
+ . or ( self . get_files_metadata ( ) )
51
+ . or ( self . get_acme_cert_info ( ) )
52
+ )
52
53
. or ( warp:: post ( ) . and (
53
54
self . update_domain_version ( )
54
55
. or ( self . reload_server ( ) )
55
56
. or ( self . change_upload_status ( ) )
56
57
. or ( self . upload_file ( ) )
57
- . or ( self . remove_domain_version ( ) ) ,
58
+ . or ( self . remove_domain_version ( ) )
58
59
) ) ,
59
60
)
60
61
}
@@ -180,6 +181,13 @@ impl AdminServer {
180
181
. and ( warp:: query :: < DeleteDomainVersionOption > ( ) )
181
182
. map ( service:: remove_domain_version)
182
183
}
184
+
185
+ fn get_acme_cert_info ( & self ) -> impl Filter < Extract = ( impl warp:: Reply , ) , Error = Rejection > + Clone {
186
+ warp:: path!( "cert" / "acme" )
187
+ . and ( with ( self . acme_manager . clone ( ) ) )
188
+ . and ( warp:: query :: < GetDomainOption > ( ) )
189
+ . and_then ( service:: get_acme_cert_info)
190
+ }
183
191
}
184
192
185
193
pub mod service {
@@ -324,7 +332,7 @@ pub mod service {
324
332
storage. save_file ( query. domain , query. version , query. path , file) ?;
325
333
return Ok ( Response :: default ( ) ) ;
326
334
}
327
- return Err ( anyhow ! ( "bad params, please check the api doc: https://github.com/fornetcode/spa-server/blob/master/docs/guide/sap-server-api.md" ) ) ;
335
+ Err ( anyhow ! ( "bad params, please check the api doc: https://github.com/fornetcode/spa-server/blob/master/docs/guide/sap-server-api.md" ) )
328
336
}
329
337
330
338
pub ( super ) fn get_files_metadata (
@@ -351,7 +359,7 @@ pub mod service {
351
359
storage
352
360
. get_domain_info_by_domain ( & domain)
353
361
. map ( |v| vec ! [ v] )
354
- . unwrap_or ( vec ! [ ] )
362
+ . unwrap_or_default ( )
355
363
} else {
356
364
storage. get_domain_info ( ) . unwrap_or_else ( |_| vec ! [ ] )
357
365
} ;
@@ -362,7 +370,7 @@ pub mod service {
362
370
. or ( info. versions . iter ( ) . max ( ) . map ( |x| * x) )
363
371
{
364
372
//TODO: fix it, get reserve versions by array index compare, rather than -.
365
- max_version = max_version - max_reserve;
373
+ max_version -= max_reserve;
366
374
info. versions
367
375
. into_iter ( )
368
376
. filter ( |v| * v < max_version)
@@ -384,6 +392,20 @@ pub mod service {
384
392
}
385
393
Response :: default ( )
386
394
}
395
+ pub ( super ) async fn get_acme_cert_info (
396
+ acme_manager : Arc < ACMEManager > ,
397
+ query : GetDomainOption ,
398
+ ) -> Result < Response , Infallible > {
399
+ let resp = match acme_manager. get_cert_data ( query. domain . as_ref ( ) ) . await {
400
+ Ok ( data) => warp:: reply:: json ( & data) . into_response ( ) ,
401
+ Err ( err) => {
402
+ let mut resp = Response :: new ( Body :: from ( err. to_string ( ) ) ) ;
403
+ * resp. status_mut ( ) = StatusCode :: BAD_REQUEST ;
404
+ resp
405
+ }
406
+ } ;
407
+ Ok ( resp)
408
+ }
387
409
}
388
410
389
411
pub mod request {
@@ -395,16 +417,12 @@ pub mod request {
395
417
pub domain : Option < String > ,
396
418
}
397
419
398
- #[ derive( Deserialize , Serialize , Debug , Eq , PartialEq ) ]
420
+ #[ derive( Deserialize , Serialize , Debug , Eq , PartialEq , Default ) ]
399
421
pub enum GetDomainPositionFormat {
422
+ #[ default]
400
423
Path ,
401
424
Json ,
402
425
}
403
- impl Default for GetDomainPositionFormat {
404
- fn default ( ) -> Self {
405
- GetDomainPositionFormat :: Path
406
- }
407
- }
408
426
409
427
#[ derive( Deserialize , Serialize , Debug ) ]
410
428
pub struct GetDomainPositionOption {
@@ -492,7 +510,7 @@ mod test {
492
510
assert ! ( task. is_valid( ) ) ;
493
511
for _ in 0 ..10 {
494
512
let time = task. get_next_exec_timestamp ( ) . unwrap ( ) as i64 ;
495
- let time = NaiveDateTime :: from_timestamp ( time, 0 ) ;
513
+ let time = NaiveDateTime :: from_timestamp_opt ( time, 0 ) . unwrap ( ) ;
496
514
let time: DateTime < Utc > = DateTime :: from_utc ( time, Utc ) ;
497
515
println ! ( "{}" , time. format( "%Y-%m-%d %H:%M:%S" ) ) ;
498
516
}
0 commit comments