@@ -9,7 +9,20 @@ use schemars::JsonSchema;
99use std:: { fmt:: Display , path:: Path } ;
1010use tracing:: { debug, info, trace} ;
1111
12- use crate :: { discovery:: command_discovery:: { load_manifest, ImportedManifest } , dscerror:: DscError , dscresources:: { command_resource:: { invoke_command, process_args} , dscresource:: DscResource } , extensions:: { import:: ImportArgKind , secret:: SecretResult } } ;
12+ use crate :: {
13+ discovery:: command_discovery:: {
14+ load_manifest, ImportedManifest
15+ } ,
16+ dscerror:: DscError ,
17+ dscresources:: {
18+ command_resource:: {
19+ invoke_command,
20+ process_args
21+ } ,
22+ dscresource:: DscResource
23+ } ,
24+ extensions:: import:: ImportArgKind
25+ } ;
1326
1427use super :: { discover:: DiscoverResult , extension_manifest:: ExtensionManifest , secret:: SecretArgKind } ;
1528
@@ -229,21 +242,18 @@ impl DscExtension {
229242 extension. exit_codes . as_ref ( ) ,
230243 ) ?;
231244 if stdout. is_empty ( ) {
232- info ! ( "{}" , t!( "extensions.dscextension.secretNoResults " , extension = self . type_name) ) ;
245+ debug ! ( "{}" , t!( "extensions.dscextension.extensionReturnedNoSecret " , extension = self . type_name) ) ;
233246 Ok ( None )
234247 } else {
235- let result: SecretResult = match serde_json:: from_str ( & stdout) {
236- Ok ( value) => value,
237- Err ( err) => {
238- return Err ( DscError :: Extension ( t ! ( "extensions.dscextension.secretExtensionReturnedInvalidJson" , extension = self . type_name, error = err) . to_string ( ) ) ) ;
239- }
240- } ;
241- if result. secure_string . is_some ( ) {
242- debug ! ( "{}" , t!( "extensions.dscextension.extensionReturnedSecret" , extension = self . type_name) ) ;
248+ // see if multiple lines were returned
249+ let secret = if stdout. lines ( ) . count ( ) > 1 {
250+ return Err ( DscError :: NotSupported ( t ! ( "extensions.dscextension.secretMultipleLinesReturned" , extension = self . type_name) . to_string ( ) ) ) ;
243251 } else {
244- debug ! ( "{}" , t!( "extensions.dscextension.extensionReturnedNoSecret" , extension = self . type_name) ) ;
245- }
246- Ok ( result. secure_string )
252+ debug ! ( "{}" , t!( "extensions.dscextension.extensionReturnedSecret" , extension = self . type_name) ) ;
253+ // remove any trailing newline characters
254+ stdout. trim_end_matches ( '\n' ) . to_string ( )
255+ } ;
256+ Ok ( Some ( secret) )
247257 }
248258 } else {
249259 Err ( DscError :: UnsupportedCapability (
0 commit comments