@@ -13,35 +13,49 @@ use tracing::debug;
1313use tracing:: error;
1414
1515pub async fn resolve_secrets ( config : Arc < Config > , aws_config : & AwsConfig ) -> Option < String > {
16- if !config. api_key_secret_arn . is_empty ( ) || !config. kms_api_key . is_empty ( ) {
17- let before_decrypt = Instant :: now ( ) ;
18-
19- let client = match Client :: builder ( ) . use_rustls_tls ( ) . build ( ) {
20- Ok ( client) => client,
21- Err ( err) => {
22- error ! ( "Error creating reqwest client: {}" , err) ;
23- return None ;
16+ let api_key_candidate =
17+ if !config. api_key_secret_arn . is_empty ( ) || !config. kms_api_key . is_empty ( ) {
18+ let before_decrypt = Instant :: now ( ) ;
19+
20+ let client = match Client :: builder ( ) . use_rustls_tls ( ) . build ( ) {
21+ Ok ( client) => client,
22+ Err ( err) => {
23+ error ! ( "Error creating reqwest client: {}" , err) ;
24+ return None ;
25+ }
26+ } ;
27+
28+ let decrypted_key = if config. kms_api_key . is_empty ( ) {
29+ decrypt_aws_sm ( & client, config. api_key_secret_arn . clone ( ) , aws_config) . await
30+ } else {
31+ decrypt_aws_kms ( & client, config. kms_api_key . clone ( ) , aws_config) . await
32+ } ;
33+
34+ debug ! ( "Decrypt took {}ms" , before_decrypt. elapsed( ) . as_millis( ) ) ;
35+
36+ match decrypted_key {
37+ Ok ( key) => Some ( key) ,
38+ Err ( err) => {
39+ error ! ( "Error decrypting key: {}" , err) ;
40+ None
41+ }
2442 }
25- } ;
26-
27- let decrypted_key = if config. kms_api_key . is_empty ( ) {
28- decrypt_aws_sm ( & client, config. api_key_secret_arn . clone ( ) , aws_config) . await
2943 } else {
30- decrypt_aws_kms ( & client , config. kms_api_key . clone ( ) , aws_config ) . await
44+ Some ( config. api_key . clone ( ) )
3145 } ;
3246
33- debug ! ( "Decrypt took {}ms" , before_decrypt. elapsed( ) . as_millis( ) ) ;
47+ clean_api_key ( api_key_candidate)
48+ }
3449
35- match decrypted_key {
36- Ok ( key) => Some ( key) ,
37- Err ( err) => {
38- error ! ( "Error decrypting key: {}" , err) ;
39- None
40- }
50+ fn clean_api_key ( maybe_key : Option < String > ) -> Option < String > {
51+ if let Some ( key) = maybe_key {
52+ let clean_key = key. trim_end_matches ( '\n' ) . replace ( ' ' , "" ) . to_string ( ) ;
53+ if !clean_key. is_empty ( ) {
54+ return Some ( clean_key) ;
4155 }
42- } else {
43- Some ( config. api_key . clone ( ) )
56+ error ! ( "API key has invalid format" ) ;
4457 }
58+ None
4559}
4660
4761struct RequestArgs < ' a > {
@@ -250,6 +264,14 @@ mod tests {
250264 use super :: * ;
251265 use chrono:: { NaiveDateTime , TimeZone } ;
252266
267+ #[ test]
268+ fn key_cleanup ( ) {
269+ let key = clean_api_key ( Some ( " 32alxcxf\n " . to_string ( ) ) ) ;
270+ assert_eq ! ( key. unwrap( ) , "32alxcxf" ) ;
271+ let key = clean_api_key ( Some ( " \n " . to_string ( ) ) ) ;
272+ assert_eq ! ( key, None ) ;
273+ }
274+
253275 #[ test]
254276 #[ allow( clippy:: unwrap_used) ]
255277 fn test_build_get_secret_signed_headers ( ) {
0 commit comments