UNPKG

minio

Version:

S3 Compatible Cloud Storage client

168 lines (158 loc) 5.39 kB
/* * MinIO Javascript Library for Amazon S3 Compatible Cloud Storage, (C) 2015 MinIO, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import * as errors from './errors.ts' import { parseXml, sanitizeETag, sanitizeObjectKey, toArray } from './internal/helper.ts' // parse XML response for bucket notification export function parseBucketNotification(xml) { var result = { TopicConfiguration: [], QueueConfiguration: [], CloudFunctionConfiguration: [], } // Parse the events list var genEvents = function (events) { var result = [] if (events) { toArray(events).forEach((s3event) => { result.push(s3event) }) } return result } // Parse all filter rules var genFilterRules = function (filters) { var result = [] if (filters) { filters = toArray(filters) if (filters[0].S3Key) { filters[0].S3Key = toArray(filters[0].S3Key) if (filters[0].S3Key[0].FilterRule) { toArray(filters[0].S3Key[0].FilterRule).forEach((rule) => { var Name = toArray(rule.Name)[0] var Value = toArray(rule.Value)[0] result.push({ Name, Value }) }) } } } return result } var xmlobj = parseXml(xml) xmlobj = xmlobj.NotificationConfiguration // Parse all topic configurations in the xml if (xmlobj.TopicConfiguration) { toArray(xmlobj.TopicConfiguration).forEach((config) => { var Id = toArray(config.Id)[0] var Topic = toArray(config.Topic)[0] var Event = genEvents(config.Event) var Filter = genFilterRules(config.Filter) result.TopicConfiguration.push({ Id, Topic, Event, Filter }) }) } // Parse all topic configurations in the xml if (xmlobj.QueueConfiguration) { toArray(xmlobj.QueueConfiguration).forEach((config) => { var Id = toArray(config.Id)[0] var Queue = toArray(config.Queue)[0] var Event = genEvents(config.Event) var Filter = genFilterRules(config.Filter) result.QueueConfiguration.push({ Id, Queue, Event, Filter }) }) } // Parse all QueueConfiguration arrays if (xmlobj.CloudFunctionConfiguration) { toArray(xmlobj.CloudFunctionConfiguration).forEach((config) => { var Id = toArray(config.Id)[0] var CloudFunction = toArray(config.CloudFunction)[0] var Event = genEvents(config.Event) var Filter = genFilterRules(config.Filter) result.CloudFunctionConfiguration.push({ Id, CloudFunction, Event, Filter }) }) } return result } // parse XML response for list objects v2 in a bucket export function parseListObjectsV2(xml) { var result = { objects: [], isTruncated: false, } var xmlobj = parseXml(xml) if (!xmlobj.ListBucketResult) { throw new errors.InvalidXMLError('Missing tag: "ListBucketResult"') } xmlobj = xmlobj.ListBucketResult if (xmlobj.IsTruncated) { result.isTruncated = xmlobj.IsTruncated } if (xmlobj.NextContinuationToken) { result.nextContinuationToken = xmlobj.NextContinuationToken } if (xmlobj.Contents) { toArray(xmlobj.Contents).forEach((content) => { var name = sanitizeObjectKey(toArray(content.Key)[0]) var lastModified = new Date(content.LastModified) var etag = sanitizeETag(content.ETag) var size = content.Size result.objects.push({ name, lastModified, etag, size }) }) } if (xmlobj.CommonPrefixes) { toArray(xmlobj.CommonPrefixes).forEach((commonPrefix) => { result.objects.push({ prefix: sanitizeObjectKey(toArray(commonPrefix.Prefix)[0]), size: 0 }) }) } return result } // parse XML response for list objects v2 with metadata in a bucket export function parseListObjectsV2WithMetadata(xml) { var result = { objects: [], isTruncated: false, } var xmlobj = parseXml(xml) if (!xmlobj.ListBucketResult) { throw new errors.InvalidXMLError('Missing tag: "ListBucketResult"') } xmlobj = xmlobj.ListBucketResult if (xmlobj.IsTruncated) { result.isTruncated = xmlobj.IsTruncated } if (xmlobj.NextContinuationToken) { result.nextContinuationToken = xmlobj.NextContinuationToken } if (xmlobj.Contents) { toArray(xmlobj.Contents).forEach((content) => { var name = sanitizeObjectKey(content.Key) var lastModified = new Date(content.LastModified) var etag = sanitizeETag(content.ETag) var size = content.Size var metadata if (content.UserMetadata != null) { metadata = toArray(content.UserMetadata)[0] } else { metadata = null } result.objects.push({ name, lastModified, etag, size, metadata }) }) } if (xmlobj.CommonPrefixes) { toArray(xmlobj.CommonPrefixes).forEach((commonPrefix) => { result.objects.push({ prefix: sanitizeObjectKey(toArray(commonPrefix.Prefix)[0]), size: 0 }) }) } return result }