@@ -15,6 +15,7 @@ use tokio::sync::RwLock;
15
15
use torrust_index_located_error:: LocatedError ;
16
16
use url:: Url ;
17
17
18
+ use self :: v1:: tracker:: ApiToken ;
18
19
use crate :: web:: api:: server:: DynError ;
19
20
20
21
pub type Settings = v1:: Settings ;
@@ -55,7 +56,7 @@ pub const ENV_VAR_AUTH_SECRET_KEY: &str = "TORRUST_INDEX_AUTH_SECRET_KEY";
55
56
pub struct Info {
56
57
config_toml : Option < String > ,
57
58
config_toml_path : String ,
58
- tracker_api_token : Option < String > ,
59
+ tracker_api_token : Option < ApiToken > ,
59
60
auth_secret_key : Option < String > ,
60
61
}
61
62
@@ -88,7 +89,10 @@ impl Info {
88
89
default_config_toml_path
89
90
} ;
90
91
91
- let tracker_api_token = env:: var ( env_var_tracker_api_admin_token) . ok ( ) ;
92
+ let tracker_api_token = env:: var ( env_var_tracker_api_admin_token)
93
+ . ok ( )
94
+ . map ( |token| ApiToken :: new ( & token) ) ;
95
+
92
96
let auth_secret_key = env:: var ( env_var_auth_secret_key) . ok ( ) ;
93
97
94
98
Ok ( Self {
@@ -325,21 +329,18 @@ impl Configuration {
325
329
#[ derive( Debug , Clone , Serialize , Deserialize , PartialEq ) ]
326
330
pub struct ConfigurationPublic {
327
331
website_name : String ,
328
- tracker_url : String ,
332
+ tracker_url : Url ,
329
333
tracker_mode : TrackerMode ,
330
334
email_on_signup : EmailOnSignup ,
331
335
}
332
336
333
- fn parse_url ( url_str : & str ) -> Result < Url , url:: ParseError > {
334
- Url :: parse ( url_str)
335
- }
336
-
337
337
#[ cfg( test) ]
338
338
mod tests {
339
339
340
340
use url:: Url ;
341
341
342
342
use crate :: config:: v1:: auth:: SecretKey ;
343
+ use crate :: config:: v1:: tracker:: ApiToken ;
343
344
use crate :: config:: { Configuration , ConfigurationPublic , Info , Settings } ;
344
345
345
346
#[ cfg( test) ]
@@ -350,7 +351,7 @@ mod tests {
350
351
[tracker]
351
352
url = "udp://localhost:6969"
352
353
mode = "Public"
353
- api_url = "http://localhost:1212"
354
+ api_url = "http://localhost:1212/ "
354
355
token = "MyAccessToken"
355
356
token_valid_seconds = 7257600
356
357
@@ -475,15 +476,15 @@ mod tests {
475
476
let info = Info {
476
477
config_toml : Some ( default_config_toml ( ) ) ,
477
478
config_toml_path : String :: new ( ) ,
478
- tracker_api_token : Some ( "OVERRIDDEN API TOKEN" . to_string ( ) ) ,
479
+ tracker_api_token : Some ( ApiToken :: new ( "OVERRIDDEN API TOKEN" ) ) ,
479
480
auth_secret_key : None ,
480
481
} ;
481
482
482
483
let configuration = Configuration :: load ( & info) . expect ( "Failed to load configuration from info" ) ;
483
484
484
485
assert_eq ! (
485
486
configuration. get_all( ) . await . tracker. token,
486
- "OVERRIDDEN API TOKEN" . to_string ( )
487
+ ApiToken :: new ( "OVERRIDDEN API TOKEN" )
487
488
) ;
488
489
}
489
490
@@ -504,7 +505,7 @@ mod tests {
504
505
505
506
let settings = Configuration :: load_settings ( & info) . expect ( "Could not load configuration from file" ) ;
506
507
507
- assert_eq ! ( settings. tracker. token, "OVERRIDDEN API TOKEN" . to_string ( ) ) ;
508
+ assert_eq ! ( settings. tracker. token, ApiToken :: new ( "OVERRIDDEN API TOKEN" ) ) ;
508
509
509
510
Ok ( ( ) )
510
511
} ) ;
@@ -550,24 +551,9 @@ mod tests {
550
551
} ) ;
551
552
}
552
553
553
- mod syntax_checks {
554
- // todo: use rich types in configuration structs for basic syntax checks.
555
-
556
- use crate :: config:: validator:: Validator ;
557
- use crate :: config:: Configuration ;
558
-
559
- #[ tokio:: test]
560
- async fn tracker_url_should_be_a_valid_url ( ) {
561
- let configuration = Configuration :: default ( ) ;
562
-
563
- let mut settings_lock = configuration. settings . write ( ) . await ;
564
- settings_lock. tracker . url = "INVALID URL" . to_string ( ) ;
565
-
566
- assert ! ( settings_lock. validate( ) . is_err( ) ) ;
567
- }
568
- }
569
-
570
554
mod semantic_validation {
555
+ use url:: Url ;
556
+
571
557
use crate :: config:: validator:: Validator ;
572
558
use crate :: config:: { Configuration , TrackerMode } ;
573
559
@@ -577,7 +563,7 @@ mod tests {
577
563
578
564
let mut settings_lock = configuration. settings . write ( ) . await ;
579
565
settings_lock. tracker . mode = TrackerMode :: Private ;
580
- settings_lock. tracker . url = "udp://localhost:6969" . to_string ( ) ;
566
+ settings_lock. tracker . url = Url :: parse ( "udp://localhost:6969" ) . unwrap ( ) ;
581
567
582
568
assert ! ( settings_lock. validate( ) . is_err( ) ) ;
583
569
}
0 commit comments