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

Function processVersions

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

Source from the content-addressed store, hash-verified

102*/
103
104function processVersions(bucketName, listParams, list) {
105 const xml = [];
106 xml.push(
107 '<?xml version="1.0" encoding="UTF-8"?>',
108 '<ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">',
109 '<Name>', bucketName, '</Name>'
110 );
111 const isTruncated = list.IsTruncated ? 'true' : 'false';
112 const xmlParams = [
113 { tag: 'Prefix', value: listParams.prefix },
114 { tag: 'KeyMarker', value: listParams.keyMarker },
115 { tag: 'VersionIdMarker', value: listParams.versionIdMarker },
116 { tag: 'NextKeyMarker', value: list.NextKeyMarker },
117 { tag: 'NextVersionIdMarker', value: list.NextVersionIdMarker },
118 { tag: 'MaxKeys', value: listParams.maxKeys },
119 { tag: 'Delimiter', value: listParams.delimiter },
120 { tag: 'EncodingType', value: listParams.encoding },
121 { tag: 'IsTruncated', value: isTruncated },
122 ];
123
124 const escapeXmlFn = listParams.encoding === 'url' ? querystring.escape : escapeForXml;
125 xmlParams.forEach(p => {
126 if (p.value) {
127 const val = p.tag !== 'NextVersionIdMarker' || p.value === 'null' ?
128 p.value :
129 versionIdUtils.encode(p.value);
130 xml.push(`<${p.tag}>${escapeXmlFn(val)}</${p.tag}>`);
131 }
132 });
133 let lastKey = listParams.keyMarker ? escapeXmlFn(listParams.keyMarker) : undefined;
134 list.Versions.forEach(item => {
135 const v = item.value;
136 const objectKey = escapeXmlFn(item.key);
137 const isLatest = lastKey !== objectKey;
138 lastKey = objectKey;
139
140 xml.push(
141 v.IsDeleteMarker ? '<DeleteMarker>' : '<Version>',
142 `<Key>${objectKey}</Key>`,
143 '<VersionId>',
144 (v.IsNull || v.VersionId === undefined) ?
145 'null'
146 : versionIdUtils.encode(v.VersionId),
147 '</VersionId>',
148 `<IsLatest>${isLatest}</IsLatest>`,
149 `<LastModified>${v.LastModified}</LastModified>`,
150 `<ETag>&quot;${v.ETag}&quot;</ETag>`,
151 `<Size>${v.Size}</Size>`,
152 '<Owner>',
153 `<ID>${v.Owner.ID}</ID>`,
154 `<DisplayName>${v.Owner.DisplayName}</DisplayName>`,
155 '</Owner>',
156 );
157
158 if (!v.IsDeleteMarker) {
159 buildAttributesXml(v, v.userMetadata, listParams.optionalAttributes, xml);
160 }
161

Callers 2

handleResultFunction · 0.85
handleResultFunction · 0.85

Calls 1

buildAttributesXmlFunction · 0.85

Tested by

no test coverage detected