@@ -83,7 +83,7 @@ function buildXMLResponse(request, arrayOfFiles, versioned = false) {
8383 * @param {object } log - logger object
8484 * @returns {undefined } -
8585 */
86- function listVeeamFiles ( request , response , bucketMd , log ) {
86+ async function listVeeamFiles ( request , response , bucketMd , log ) {
8787 if ( ! bucketMd ) {
8888 return responseXMLBody ( errors . NoSuchBucket , null , response , log ) ;
8989 }
@@ -94,60 +94,64 @@ function listVeeamFiles(request, response, bucketMd, log) {
9494 . customizeDescription ( 'The Veeam folder does not support this action.' ) , null , response , log ) ;
9595 }
9696
97- return metadata . getBucket ( request . bucketName , log , ( err , data ) => {
98- if ( err ) {
99- return responseXMLBody ( errors . InternalError , null , response , log ) ;
100- }
101-
102- const buildAndRespond = bucketMetrics => {
103- const filesToBuild = [ ] ;
104- const fieldsToGenerate = [ ] ;
105- if ( data . _capabilities ?. VeeamSOSApi ?. SystemInfo ) {
106- fieldsToGenerate . push ( {
107- ...data . _capabilities ?. VeeamSOSApi ?. SystemInfo ,
108- name : `${ validPath } system.xml` ,
109- } ) ;
110- }
111- if ( data . _capabilities ?. VeeamSOSApi ?. CapacityInfo ) {
112- fieldsToGenerate . push ( {
113- ...data . _capabilities ?. VeeamSOSApi ?. CapacityInfo ,
114- name : `${ validPath } capacity.xml` ,
115- } ) ;
116- }
117- fieldsToGenerate . forEach ( file => {
118- const isCapacity = file . name . endsWith ( 'capacity.xml' ) ;
119- const lastModified = isCapacity
120- ? bucketMetrics . date
121- : file . LastModified ;
122- // eslint-disable-next-line no-param-reassign
123- delete file . LastModified ;
124- const builder = new xml2js . Builder ( {
125- headless : true ,
126- } ) ;
127- const dataBuffer = Buffer . from ( buildHeadXML ( builder . buildObject ( file ) ) ) ;
128- filesToBuild . push ( {
129- ...getResponseHeader ( request , data ,
130- dataBuffer , lastModified , log ) ,
131- name : file . name ,
132- } ) ;
133- } ) ;
134-
135- // When `versions` is present, listing should return a versioned list
136- return respondWithData ( request , response , log , data ,
137- buildXMLResponse ( request , filesToBuild , 'versions' in request . query ) ) ;
138- } ;
97+ let data ;
98+ try {
99+ data = await new Promise ( ( resolve , reject ) =>
100+ metadata . getBucket ( request . bucketName , log , ( err , result ) => {
101+ if ( err ) { return reject ( err ) ; }
102+ return resolve ( result ) ;
103+ } )
104+ ) ;
105+ } catch {
106+ return responseXMLBody ( errors . InternalError , null , response , log ) ;
107+ }
139108
140- if ( data . _capabilities ?. VeeamSOSApi ?. CapacityInfo ) {
141- return fetchCapacityMetrics ( bucketMd , request , log , 'listVeeamFiles' , ( err , bucketMetrics ) => {
142- if ( err ) {
143- return responseXMLBody ( errors . InternalError , null , response , log ) ;
144- }
145- return buildAndRespond ( bucketMetrics ) ;
146- } ) ;
109+ let bucketMetrics ;
110+ if ( data . _capabilities ?. VeeamSOSApi ?. CapacityInfo ) {
111+ try {
112+ bucketMetrics = await fetchCapacityMetrics ( bucketMd , request , log , 'listVeeamFiles' ) ;
113+ } catch {
114+ return responseXMLBody ( errors . InternalError , null , response , log ) ;
147115 }
116+ } else {
117+ bucketMetrics = { date : new Date ( ) } ;
118+ }
148119
149- return buildAndRespond ( { date : new Date ( ) } ) ;
120+ const filesToBuild = [ ] ;
121+ const fieldsToGenerate = [ ] ;
122+ if ( data . _capabilities ?. VeeamSOSApi ?. SystemInfo ) {
123+ fieldsToGenerate . push ( {
124+ ...data . _capabilities ?. VeeamSOSApi ?. SystemInfo ,
125+ name : `${ validPath } system.xml` ,
126+ } ) ;
127+ }
128+ if ( data . _capabilities ?. VeeamSOSApi ?. CapacityInfo ) {
129+ fieldsToGenerate . push ( {
130+ ...data . _capabilities ?. VeeamSOSApi ?. CapacityInfo ,
131+ name : `${ validPath } capacity.xml` ,
132+ } ) ;
133+ }
134+ fieldsToGenerate . forEach ( file => {
135+ const isCapacity = file . name . endsWith ( 'capacity.xml' ) ;
136+ const lastModified = isCapacity
137+ ? bucketMetrics . date
138+ : file . LastModified ;
139+ // eslint-disable-next-line no-param-reassign
140+ delete file . LastModified ;
141+ const builder = new xml2js . Builder ( {
142+ headless : true ,
143+ } ) ;
144+ const dataBuffer = Buffer . from ( buildHeadXML ( builder . buildObject ( file ) ) ) ;
145+ filesToBuild . push ( {
146+ ...getResponseHeader ( request , data ,
147+ dataBuffer , lastModified , log ) ,
148+ name : file . name ,
149+ } ) ;
150150 } ) ;
151+
152+ // When `versions` is present, listing should return a versioned list
153+ return respondWithData ( request , response , log , data ,
154+ buildXMLResponse ( request , filesToBuild , 'versions' in request . query ) ) ;
151155}
152156
153157module . exports = listVeeamFiles ;
0 commit comments