@@ -101,6 +101,8 @@ impl Default for ConfigArgs {
101101 ws_api : WebsocketApiArgs {
102102 address : Some ( default_listening_address ( ) ) ,
103103 ws_api_port : Some ( default_http_gateway_port ( ) ) ,
104+ token_ttl_seconds : None ,
105+ token_cleanup_interval_seconds : None ,
104106 } ,
105107 secrets : Default :: default ( ) ,
106108 log_level : Some ( tracing:: log:: LevelFilter :: Info ) ,
@@ -230,6 +232,12 @@ impl ConfigArgs {
230232 self . mode . get_or_insert ( cfg. mode ) ;
231233 self . ws_api . address . get_or_insert ( cfg. ws_api . address ) ;
232234 self . ws_api . ws_api_port . get_or_insert ( cfg. ws_api . port ) ;
235+ self . ws_api
236+ . token_ttl_seconds
237+ . get_or_insert ( cfg. ws_api . token_ttl_seconds ) ;
238+ self . ws_api
239+ . token_cleanup_interval_seconds
240+ . get_or_insert ( cfg. ws_api . token_cleanup_interval_seconds ) ;
233241 self . log_level . get_or_insert ( cfg. log_level ) ;
234242 self . config_paths . merge ( cfg. config_paths . as_ref ( ) . clone ( ) ) ;
235243 }
@@ -361,6 +369,14 @@ impl ConfigArgs {
361369 . ws_api
362370 . ws_api_port
363371 . unwrap_or ( default_http_gateway_port ( ) ) ,
372+ token_ttl_seconds : self
373+ . ws_api
374+ . token_ttl_seconds
375+ . unwrap_or ( default_token_ttl_seconds ( ) ) ,
376+ token_cleanup_interval_seconds : self
377+ . ws_api
378+ . token_cleanup_interval_seconds
379+ . unwrap_or ( default_token_cleanup_interval_seconds ( ) ) ,
364380 } ,
365381 secrets,
366382 log_level : self . log_level . unwrap_or ( tracing:: log:: LevelFilter :: Info ) ,
@@ -616,6 +632,19 @@ pub struct WebsocketApiArgs {
616632 #[ arg( long, env = "WS_API_PORT" ) ]
617633 #[ serde( rename = "ws-api-port" , skip_serializing_if = "Option::is_none" ) ]
618634 pub ws_api_port : Option < u16 > ,
635+
636+ /// Token time-to-live in seconds (default is 86400 = 24 hours)
637+ #[ arg( long, env = "TOKEN_TTL_SECONDS" ) ]
638+ #[ serde( rename = "token-ttl-seconds" , skip_serializing_if = "Option::is_none" ) ]
639+ pub token_ttl_seconds : Option < u64 > ,
640+
641+ /// Token cleanup interval in seconds (default is 300 = 5 minutes)
642+ #[ arg( long, env = "TOKEN_CLEANUP_INTERVAL_SECONDS" ) ]
643+ #[ serde(
644+ rename = "token-cleanup-interval-seconds" ,
645+ skip_serializing_if = "Option::is_none"
646+ ) ]
647+ pub token_cleanup_interval_seconds : Option < u64 > ,
619648}
620649
621650#[ derive( Debug , Copy , Clone , Serialize , Deserialize ) ]
@@ -627,13 +656,36 @@ pub struct WebsocketApiConfig {
627656 /// Port to expose api on
628657 #[ serde( default = "default_http_gateway_port" , rename = "ws-api-port" ) ]
629658 pub port : u16 ,
659+
660+ /// Token time-to-live in seconds
661+ #[ serde( default = "default_token_ttl_seconds" , rename = "token-ttl-seconds" ) ]
662+ pub token_ttl_seconds : u64 ,
663+
664+ /// Token cleanup interval in seconds
665+ #[ serde(
666+ default = "default_token_cleanup_interval_seconds" ,
667+ rename = "token-cleanup-interval-seconds"
668+ ) ]
669+ pub token_cleanup_interval_seconds : u64 ,
670+ }
671+
672+ #[ inline]
673+ const fn default_token_ttl_seconds ( ) -> u64 {
674+ 86400 // 24 hours
675+ }
676+
677+ #[ inline]
678+ const fn default_token_cleanup_interval_seconds ( ) -> u64 {
679+ 300 // 5 minutes
630680}
631681
632682impl From < SocketAddr > for WebsocketApiConfig {
633683 fn from ( addr : SocketAddr ) -> Self {
634684 Self {
635685 address : addr. ip ( ) ,
636686 port : addr. port ( ) ,
687+ token_ttl_seconds : default_token_ttl_seconds ( ) ,
688+ token_cleanup_interval_seconds : default_token_cleanup_interval_seconds ( ) ,
637689 }
638690 }
639691}
@@ -644,6 +696,8 @@ impl Default for WebsocketApiConfig {
644696 Self {
645697 address : default_listening_address ( ) ,
646698 port : default_http_gateway_port ( ) ,
699+ token_ttl_seconds : default_token_ttl_seconds ( ) ,
700+ token_cleanup_interval_seconds : default_token_cleanup_interval_seconds ( ) ,
647701 }
648702 }
649703}
0 commit comments