MCPcopy
hub / github.com/scality/cloudserver / processMasterVersions

Function processMasterVersions

lib/api/bucketGet.js:177–256  ·  view source on GitHub ↗
(bucketName, listParams, list)

Source from the content-addressed store, hash-verified

175}
176
177function processMasterVersions(bucketName, listParams, list) {
178 const xml = [];
179 xml.push(
180 '<?xml version="1.0" encoding="UTF-8"?>',
181 '<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">',
182 '<Name>', bucketName, '</Name>'
183 );
184 const isTruncated = list.IsTruncated ? 'true' : 'false';
185 const xmlParams = [
186 { tag: 'Prefix', value: listParams.prefix || '' },
187 { tag: 'MaxKeys', value: listParams.maxKeys },
188 { tag: 'Delimiter', value: listParams.delimiter },
189 { tag: 'EncodingType', value: listParams.encoding },
190 { tag: 'IsTruncated', value: isTruncated },
191 ];
192
193 if (listParams.v2) {
194 xmlParams.push({ tag: 'StartAfter', value: listParams.startAfter || '' });
195 xmlParams.push({ tag: 'FetchOwner', value: `${listParams.fetchOwner}` });
196 xmlParams.push({ tag: 'ContinuationToken', value: generateToken(listParams.continuationToken) || '' });
197 xmlParams.push({ tag: 'NextContinuationToken', value: generateToken(list.NextContinuationToken) });
198 xmlParams.push({ tag: 'KeyCount', value: list.Contents ? list.Contents.length : 0 });
199 } else {
200 xmlParams.push({ tag: 'Marker', value: listParams.marker || '' });
201 xmlParams.push({ tag: 'NextMarker', value: list.NextMarker });
202 }
203
204 const escapeXmlFn = listParams.encoding === 'url' ? querystring.escape : escapeForXml;
205 xmlParams.forEach(p => {
206 if (p.value && xmlParamsToSkipUrlEncoding.has(p.tag)) {
207 xml.push(`<${p.tag}>${p.value}</${p.tag}>`);
208 } else if (p.value || p.tag === 'KeyCount' || p.tag === 'MaxKeys') {
209 xml.push(`<${p.tag}>${escapeXmlFn(p.value)}</${p.tag}>`);
210 } else if (p.tag !== 'NextMarker' &&
211 p.tag !== 'EncodingType' &&
212 p.tag !== 'Delimiter' &&
213 p.tag !== 'StartAfter' &&
214 p.tag !== 'NextContinuationToken') {
215 xml.push(`<${p.tag}/>`);
216 }
217 });
218
219 list.Contents.forEach(item => {
220 const v = item.value;
221 if (v.isDeleteMarker) {
222 return null;
223 }
224
225 const objectKey = escapeXmlFn(item.key);
226 xml.push(
227 '<Contents>',
228 `<Key>${objectKey}</Key>`,
229 `<LastModified>${v.LastModified}</LastModified>`,
230 `<ETag>&quot;${v.ETag}&quot;</ETag>`,
231 `<Size>${v.Size}</Size>`
232 );
233
234 if (!listParams.v2 || listParams.fetchOwner) {

Callers 2

handleResultFunction · 0.85
handleResultFunction · 0.85

Calls 2

generateTokenFunction · 0.85
buildAttributesXmlFunction · 0.85

Tested by

no test coverage detected