859612dd8b3a2c5c913dc42b9fa7e24e7d7ba89346d2e1ffe9cc56181022ab4f.json 260 KB

1
  1. {"ast":null,"code":"/**\n * Copyright 2019 Huawei Technologies Co.,Ltd.\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n * this file except in compliance with the License. You may obtain a copy of the\n * License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed\n * under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations under the License.\n *\n */\n\nimport URI from 'urijs';\nimport axios from 'axios';\nimport SHA from 'jssha';\nimport { Base64 } from 'js-base64';\nimport md5 from 'blueimp-md5';\nimport xml2js from './xml2js';\nimport obsModel from './obsModel';\nimport v2Model from './v2Model';\nimport { ContentMD5, ContentSHA256 } from './enums';\nconst crypto = {\n createHmac: function (algorithm, key) {\n let algorithmKey;\n if (algorithm === 'sha1') {\n algorithmKey = 'SHA-1';\n } else if (algorithm === 'sha512') {\n algorithmKey = 'SHA-512';\n } else {\n algorithmKey = 'SHA-256';\n }\n let shaObj = new SHA(algorithmKey, 'TEXT');\n shaObj.setHMACKey(key, key instanceof ArrayBuffer ? 'ARRAYBUFFER' : 'TEXT');\n return {\n update: function (message) {\n shaObj.update(message);\n return this;\n },\n digest: function (type) {\n if (type === 'hex') {\n return shaObj.getHMAC('HEX');\n }\n if (type === 'base64') {\n return shaObj.getHMAC('B64');\n }\n return shaObj.getHMAC('ARRAYBUFFER');\n }\n };\n },\n createHash: function (algorithm) {\n if (algorithm === 'md5') {\n return {\n update: function (message) {\n if (!this.message) {\n this.message = message;\n } else {\n this.message += message;\n }\n return this;\n },\n digest: function (type) {\n if (type === 'hex') {\n return md5(this.message);\n }\n if (type === 'base64') {\n let encodeFunc = window.btoa ? window.btoa : Base64.encode;\n return encodeFunc(md5(this.message, false, true));\n }\n if (type === 'rawbase64') {\n let encodeFunc = window.btoa ? window.btoa : Base64.encode;\n return encodeFunc(md5(this.message, false, true));\n }\n return md5(this.message, false, true);\n }\n };\n }\n let algorithmKey;\n if (algorithm === 'sha1') {\n algorithmKey = 'SHA-1';\n } else if (algorithm === 'sha512') {\n algorithmKey = 'SHA-512';\n } else {\n algorithmKey = 'SHA-256';\n }\n let shaObj = new SHA(algorithmKey, 'TEXT');\n return {\n update: function (message) {\n shaObj.update(message);\n return this;\n },\n digest: function (type) {\n if (type === 'hex') {\n return shaObj.getHash('HEX');\n }\n if (type === 'base64') {\n return shaObj.getHash('B64');\n }\n return shaObj.getHash('ARRAYBUFFER');\n }\n };\n }\n};\nconst urlLib = {\n parse: function (url) {\n let uri = URI.parse(url);\n return {\n hostname: uri.hostname,\n port: uri.port,\n host: uri.hostname,\n protocol: uri.protocol ? uri.protocol + ':' : '',\n query: uri.query,\n path: uri.path + (uri.query ? '?' + uri.query : ''),\n pathname: uri.path,\n search: uri.query ? '?' + uri.query : ''\n };\n }\n};\nconst CONTENT_SHA256 = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855';\nconst OBS_SDK_VERSION = '3.22.3';\nconst mimeTypes = {\n '7z': 'application/x-7z-compressed',\n 'aac': 'audio/x-aac',\n 'ai': 'application/postscript',\n 'aif': 'audio/x-aiff',\n 'asc': 'text/plain',\n 'asf': 'video/x-ms-asf',\n 'atom': 'application/atom+xml',\n 'avi': 'video/x-msvideo',\n 'bmp': 'image/bmp',\n 'bz2': 'application/x-bzip2',\n 'cer': 'application/pkix-cert',\n 'crl': 'application/pkix-crl',\n 'crt': 'application/x-x509-ca-cert',\n 'css': 'text/css',\n 'csv': 'text/csv',\n 'cu': 'application/cu-seeme',\n 'deb': 'application/x-debian-package',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'dvi': 'application/x-dvi',\n 'eot': 'application/vnd.ms-fontobject',\n 'eps': 'application/postscript',\n 'epub': 'application/epub+zip',\n 'etx': 'text/x-setext',\n 'flac': 'audio/flac',\n 'flv': 'video/x-flv',\n 'gif': 'image/gif',\n 'gz': 'application/gzip',\n 'htm': 'text/html',\n 'html': 'text/html',\n 'ico': 'image/x-icon',\n 'ics': 'text/calendar',\n 'ini': 'text/plain',\n 'iso': 'application/x-iso9660-image',\n 'jar': 'application/java-archive',\n 'jpe': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'js': 'text/javascript',\n 'json': 'application/json',\n 'latex': 'application/x-latex',\n 'log': 'text/plain',\n 'm4a': 'audio/mp4',\n 'm4v': 'video/mp4',\n 'mid': 'audio/midi',\n 'midi': 'audio/midi',\n 'mov': 'video/quicktime',\n 'mp3': 'audio/mpeg',\n 'mp4': 'video/mp4',\n 'mp4a': 'audio/mp4',\n 'mp4v': 'video/mp4',\n 'mpe': 'video/mpeg',\n 'mpeg': 'video/mpeg',\n 'mpg': 'video/mpeg',\n 'mpg4': 'video/mp4',\n 'oga': 'audio/ogg',\n 'ogg': 'audio/ogg',\n 'ogv': 'video/ogg',\n 'ogx': 'application/ogg',\n 'pbm': 'image/x-portable-bitmap',\n 'pdf': 'application/pdf',\n 'pgm': 'image/x-portable-graymap',\n 'png': 'image/png',\n 'pnm': 'image/x-portable-anymap',\n 'ppm': 'image/x-portable-pixmap',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'ps': 'application/postscript',\n 'qt': 'video/quicktime',\n 'rar': 'application/x-rar-compressed',\n 'ras': 'image/x-cmu-raster',\n 'rss': 'application/rss+xml',\n 'rtf': 'application/rtf',\n 'sgm': 'text/sgml',\n 'sgml': 'text/sgml',\n 'svg': 'image/svg+xml',\n 'swf': 'application/x-shockwave-flash',\n 'tar': 'application/x-tar',\n 'tif': 'image/tiff',\n 'tiff': 'image/tiff',\n 'torrent': 'application/x-bittorrent',\n 'ttf': 'application/x-font-ttf',\n 'txt': 'text/plain',\n 'wav': 'audio/x-wav',\n 'webm': 'video/webm',\n 'wma': 'audio/x-ms-wma',\n 'wmv': 'video/x-ms-wmv',\n 'woff': 'application/x-font-woff',\n 'wsdl': 'application/wsdl+xml',\n 'xbm': 'image/x-xbitmap',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'xml': 'application/xml',\n 'xpm': 'image/x-xpixmap',\n 'xwd': 'image/x-xwindowdump',\n 'yaml': 'text/yaml',\n 'yml': 'text/yaml',\n 'zip': 'application/zip'\n};\nconst allowedResourceParameterNames = ['inventory', 'acl', 'backtosource', 'policy', 'torrent', 'logging', 'location', 'storageinfo', 'quota', 'storageclass', 'storagepolicy', 'mirrorbacktosource', 'requestpayment', 'versions', 'versioning', 'versionid', 'uploads', 'uploadid', 'partnumber', 'website', 'notification', 'replication', 'lifecycle', 'deletebucket', 'delete', 'cors', 'restore', 'tagging', 'append', 'position', 'response-content-type', 'response-content-language', 'response-expires', 'response-cache-control', 'response-content-disposition', 'response-content-encoding', 'x-image-process', 'x-image-save-object', 'x-image-save-bucket', 'x-oss-process', 'encryption', 'obsworkflowtriggerpolicy', 'x-workflow-limit', 'x-workflow-prefix', 'x-workflow-start', 'x-workflow-template-name', 'x-workflow-graph-name', 'x-workflow-execution-state', 'x-workflow-category', 'x-workflow-prefix', 'x-workflow-create', 'directcoldaccess', 'customdomain', 'cdnnotifyconfiguration', 'metadata', 'dispolicy', 'obscompresspolicy', 'template_name', 'template_name_prefix', 'x-workflow-status', 'x-workflow-type', 'x-workflow-forbid', 'sfsacl', 'obsbucketalias', 'obsalias', 'rename', 'name', 'modify', 'attname', 'inventory', 'truncate', 'object-lock', \"retention\", 'x-obs-security-token'];\nconst allowedResponseHttpHeaderMetadataNames = ['content-type', 'content-md5', 'content-length', 'content-language', 'expires', 'origin', 'cache-control', 'content-disposition', 'content-encoding', 'x-default-storage-class', 'location', 'date', 'etag', 'host', 'last-modified', 'content-range', 'x-reserved', 'access-control-allow-origin', 'access-control-allow-headers', 'access-control-max-age', 'access-control-allow-methods', 'access-control-expose-headers', 'connection', 'x-obs-location-clustergroup-id'];\nconst commonHeaders = {\n 'content-length': 'ContentLength',\n 'date': 'Date',\n 'x-reserved': 'Reserved'\n};\nconst obsAllowedStorageClass = ['STANDARD', 'WARM', 'COLD', 'DEEP_ARCHIVE', 'INTELLIGENT_TIERING'];\nconst v2AllowedStorageClass = ['STANDARD', 'STANDARD_IA', 'GLACIER', 'DEEP_ARCHIVE', 'INTELLIGENT_TIERING'];\nconst obsAllowedAcl = ['private', 'public-read', 'public-read-write', 'public-read-delivered', 'public-read-write-delivered'];\nconst v2AllowedAcl = ['private', 'public-read', 'public-read-write', 'authenticated-read', 'bucket-owner-read', 'bucket-owner-full-control', 'log-delivery-write'];\nconst obsAllowedUri = ['Everyone', 'LogDelivery'];\nconst v2AllowedUri = ['http://acs.amazonaws.com/groups/global/AllUsers', 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers', 'http://acs.amazonaws.com/groups/s3/LogDelivery'];\nconst obsAllowedEvent = ['ObjectCreated', 'ObjectCreated:*', 'ObjectCreated:Put', 'ObjectCreated:Post', 'ObjectCreated:Copy', 'ObjectCreated:CompleteMultipartUpload', 'ObjectRemoved', 'ObjectRemoved:*', 'ObjectRemoved:Delete', 'ObjectRemoved:DeleteMarkerCreated', 'ObjectChanged:*', 'ObjectChanged:Rename', 'ObjectChanged:Truncate', 'ObjectChanged:Modify'];\nconst v2AllowedEvent = ['ObjectCreated', 's3:ObjectCreated:*', 's3:ObjectCreated:Put', 's3:ObjectCreated:Post', 's3:ObjectCreated:Copy', 's3:ObjectCreated:CompleteMultipartUpload', 'ObjectRemoved', 's3:ObjectRemoved:*', 's3:ObjectRemoved:Delete', 's3:ObjectRemoved:DeleteMarkerCreated', 'ObjectRemoved:*', 'ObjectRemoved:Delete', 'ObjectRemoved:DeleteMarkerCreated', 'ObjectChanged:*', 'ObjectChanged:Rename', 'ObjectChanged:Truncate', 'ObjectChanged:Modify'];\nconst ignoreNegotiationMethod = ['CreateBucket', 'SetBucketAlias', 'BindBucketAlias', 'UnbindBucketAlias', 'DeleteBucketAlias', 'GetBucketAlias'];\nconst negotiateMethod = 'HeadApiVersion';\nconst obsSignatureContext = {\n signature: 'obs',\n headerPrefix: 'x-obs-',\n headerMetaPrefix: 'x-obs-meta-',\n authPrefix: 'OBS'\n};\nconst v2SignatureContext = {\n signature: 'v2',\n headerPrefix: 'x-amz-',\n headerMetaPrefix: 'x-amz-meta-',\n authPrefix: 'AWS'\n};\nfunction encodeURIWithSafe(str, safe, skipEncoding) {\n str = String(str);\n if (str.length === 0) {\n return '';\n }\n if (skipEncoding) {\n return str;\n }\n let ret;\n if (safe) {\n ret = [];\n for (const element of str) {\n ret.push(safe.indexOf(element) >= 0 ? element : encodeURIComponent(element));\n }\n ret = ret.join('');\n } else {\n ret = encodeURIComponent(str);\n }\n return ret.replace(/!/g, '%21').replace(/\\*/g, '%2A').replace(/'/g, '%27').replace(/\\(/g, '%28').replace(/\\)/g, '%29');\n}\nfunction headerTostring(obj) {\n return JSON ? JSON.stringify(obj) : '';\n}\nfunction parseObjectFromHeaders(sentAs, headers) {\n let metadata = {};\n for (let key in headers) {\n if ({}.hasOwnProperty.call(headers, key)) {\n let k = String(key).toLowerCase();\n if (k.indexOf(sentAs) === 0) {\n metadata[k.slice(sentAs.length)] = headers[key];\n }\n }\n }\n return metadata;\n}\nfunction isArray(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\nfunction isFunction(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n}\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\nfunction makeObjFromXml(xml, bc) {\n if (typeof xml === 'object') {\n return bc(null, xml);\n }\n try {\n return bc(null, xml2js.parseString(xml));\n } catch (err) {\n return bc(err, null);\n }\n}\nfunction getExpireDate(utcDateStr) {\n let date = new Date(Date.parse(utcDateStr));\n let hour = date.getUTCHours();\n let min = date.getUTCMinutes();\n let sec = date.getUTCSeconds();\n let day = date.getUTCDate();\n let moth = date.getUTCMonth() + 1;\n let year = date.getUTCFullYear();\n let expireDate = '';\n expireDate += year + '-';\n if (moth < 10) {\n expireDate += '0';\n }\n expireDate += moth + '-';\n if (day < 10) {\n expireDate += '0';\n }\n expireDate += day + 'T';\n if (hour < 10) {\n expireDate += '0';\n }\n expireDate += hour + ':';\n if (min < 10) {\n expireDate += '0';\n }\n expireDate += min + ':';\n if (sec < 10) {\n expireDate += '0';\n }\n expireDate += sec + 'Z';\n return expireDate;\n}\nfunction getDates(utcDateStr) {\n let date = new Date(Date.parse(utcDateStr));\n let hour = date.getUTCHours();\n let min = date.getUTCMinutes();\n let sec = date.getUTCSeconds();\n let day = date.getUTCDate();\n let moth = date.getUTCMonth() + 1;\n let year = date.getUTCFullYear();\n let shortDate = '';\n let longDate = '';\n shortDate += year;\n if (moth < 10) {\n shortDate += '0';\n }\n shortDate += moth;\n if (day < 10) {\n shortDate += '0';\n }\n shortDate += day;\n longDate += shortDate + 'T';\n if (hour < 10) {\n longDate += '0';\n }\n longDate += hour;\n if (min < 10) {\n longDate += '0';\n }\n longDate += min;\n if (sec < 10) {\n longDate += '0';\n }\n longDate += sec + 'Z';\n return [shortDate, longDate];\n}\nfunction getSignedAndCanonicalHeaders(header) {\n let arrheadKey = [];\n let arrhead = {};\n for (let key in header) {\n if ({}.hasOwnProperty.call(header, key)) {\n arrheadKey.push(key.toLowerCase());\n arrhead[key.toLowerCase()] = header[key];\n }\n }\n arrheadKey = arrheadKey.sort();\n let signedHeaders = '';\n let canonicalHeaders = '';\n for (let i = 0; i < arrheadKey.length; i++) {\n if (i !== 0) {\n signedHeaders += ';';\n }\n signedHeaders += arrheadKey[i];\n canonicalHeaders += arrheadKey[i] + ':' + arrhead[arrheadKey[i]] + '\\n';\n }\n return [signedHeaders, canonicalHeaders];\n}\nfunction createV4Signature(shortDate, sk, region, stringToSign) {\n let dateKey = crypto.createHmac('sha256', 'AWS4' + sk).update(shortDate).digest();\n let dateRegionKey = crypto.createHmac('sha256', dateKey).update(region).digest();\n let dateRegionServiceKey = crypto.createHmac('sha256', dateRegionKey).update('s3').digest();\n let signingKey = crypto.createHmac('sha256', dateRegionServiceKey).update('aws4_request').digest();\n let signature = crypto.createHmac('sha256', signingKey).update(stringToSign).digest('hex');\n return signature;\n}\nfunction getV4Signature(shortDate, longDate, sk, region, canonicalRequest) {\n let scop = shortDate + '/' + region + '/s3/aws4_request';\n let stringToSign = 'AWS4-HMAC-SHA256\\n';\n stringToSign += longDate + '\\n';\n stringToSign += scop + '\\n';\n stringToSign += crypto.createHash('sha256').update(canonicalRequest).digest('hex');\n return createV4Signature(shortDate, sk, region, stringToSign);\n}\nfunction Utils(log_in) {\n this.log = log_in;\n this.ak = null;\n this.sk = null;\n this.securityToken = null;\n this.isSecure = true;\n this.server = null;\n this.pathStyle = false;\n this.signatureContext = null;\n this.isSignatureNegotiation = true;\n this.bucketSignatureCache = {};\n this.region = 'region';\n this.port = null;\n this.timeout = 300;\n this.obsSdkVersion = OBS_SDK_VERSION;\n this.isCname = false;\n this.bucketEventEmitters = {};\n this.useRawXhr = false;\n}\nUtils.prototype.encodeURIWithSafe = encodeURIWithSafe;\nUtils.prototype.mimeTypes = mimeTypes;\nUtils.prototype.refresh = function (ak, sk, securityToken) {\n this.ak = ak ? String(ak).trim() : null;\n this.sk = sk ? String(sk).trim() : null;\n this.securityToken = securityToken ? String(securityToken).trim() : null;\n};\nUtils.prototype.initFactory = function (ak, sk, isSecure, server, pathStyle, signature, region, port, timeout, securityToken, isSignatureNegotiation, isCname, urlPrefix, regionDomains, setRequestHeaderHook, useRawXhr, checksumAlgorithm) {\n this.refresh(ak, sk, securityToken);\n this.urlPrefix = urlPrefix || '';\n this.regionDomains = regionDomains || null;\n this.setRequestHeaderHook = setRequestHeaderHook || null;\n this.checkAlgorithm = ContentMD5;\n if (typeof checksumAlgorithm === 'string' && checksumAlgorithm.toLowerCase() === 'sha256') {\n this.checkAlgorithm = ContentSHA256;\n }\n if (!server) {\n throw new Error('Server is not set');\n }\n server = String(server).trim();\n if (server.indexOf('https://') === 0) {\n server = server.slice('https://'.length);\n isSecure = true;\n } else if (server.indexOf('http://') === 0) {\n server = server.slice('http://'.length);\n isSecure = false;\n }\n let index = server.lastIndexOf('/');\n while (index >= 0) {\n server = server.slice(0, index);\n index = server.lastIndexOf('/');\n }\n index = server.indexOf(':');\n if (index >= 0) {\n port = server.slice(index + 1);\n server = server.slice(0, index);\n }\n this.server = server;\n if (/^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$/.test(this.server)) {\n pathStyle = true;\n }\n if (isSecure !== undefined) {\n this.isSecure = isSecure;\n }\n if (pathStyle !== undefined) {\n this.pathStyle = pathStyle;\n }\n if (signature !== undefined) {\n signature = String(signature).trim().toLowerCase();\n } else {\n signature = 'obs';\n }\n if (isSignatureNegotiation !== undefined) {\n this.isSignatureNegotiation = isSignatureNegotiation;\n }\n this.isCname = isCname;\n if (this.pathStyle || this.isCname) {\n this.isSignatureNegotiation = false;\n if (signature === 'obs') {\n signature = 'v2';\n }\n }\n this.signatureContext = signature === 'obs' ? obsSignatureContext : v2SignatureContext;\n if (region !== undefined) {\n this.region = String(region);\n }\n this.port = port ? parseInt(port, 10) : this.isSecure ? 443 : 80;\n if (timeout !== undefined) {\n this.timeout = parseInt(timeout, 10);\n }\n if (useRawXhr !== undefined) {\n this.useRawXhr = useRawXhr;\n }\n};\nUtils.prototype.SseKmsAdapter = function (value, signatureContext) {\n value = value || '';\n value = String(value);\n let index = value.indexOf('aws:');\n if (signatureContext.signature === 'obs') {\n return index === 0 ? value.slice(4) : value;\n }\n return index === 0 ? value : 'aws:' + value;\n};\nUtils.prototype.SseModeAdapter = function (value, signatureContext) {\n value = value || '';\n value = String(value);\n let index = value.indexOf('aws:');\n if (signatureContext.signature === 'obs') {\n return index === 0 ? value.slice(4) : value;\n }\n return index === 0 ? value : 'aws:' + value;\n};\nUtils.prototype.BucketAdapter = function (value, signatureContext) {\n value = value || '';\n value = String(value);\n let index = value.indexOf('arn:aws:s3:::');\n if (signatureContext.signature === 'obs') {\n return index === 0 ? value.slice('arn:aws:s3:::'.length) : value;\n }\n return index === 0 ? value : 'arn:aws:s3:::' + value;\n};\nUtils.prototype.EventAdapter = function (value, signatureContext) {\n value = value || '';\n value = String(value);\n if (signatureContext.signature === 'obs') {\n if (obsAllowedEvent.indexOf(value) >= 0) {\n return value;\n }\n if (v2AllowedEvent.indexOf(value) >= 0) {\n return value.substring(3);\n }\n return '';\n }\n if (v2AllowedEvent.indexOf(value) >= 0) {\n return value;\n }\n if (obsAllowedEvent.indexOf(value) >= 0) {\n return 's3:' + value;\n }\n return '';\n};\nUtils.prototype.EventsAdapter = function (value, signatureContext) {\n return this.EventAdapter(value, signatureContext);\n};\nUtils.prototype.URIAdapter = function (value, signatureContext) {\n value = value || '';\n value = String(value);\n if (signatureContext.signature === 'obs') {\n if (obsAllowedUri.indexOf(value) >= 0) {\n return value;\n }\n if (value === 'AllUsers' || value === 'http://acs.amazonaws.com/groups/global/AllUsers') {\n return 'Everyone';\n }\n return '';\n }\n if (v2AllowedUri.indexOf(value) >= 0) {\n return value;\n }\n if (value === 'Everyone' || value === 'AllUsers') {\n return 'http://acs.amazonaws.com/groups/global/AllUsers';\n }\n if (value === 'AuthenticatedUsers') {\n return 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers';\n }\n if (value === 'LogDelivery') {\n return 'http://acs.amazonaws.com/groups/s3/LogDelivery';\n }\n return '';\n};\nUtils.prototype.StorageClassAdapter = function (value, signatureContext) {\n value = value || '';\n value = String(value).toUpperCase();\n if (signatureContext.signature === 'obs') {\n if (obsAllowedStorageClass.indexOf(value) >= 0) {\n return value;\n }\n if (value === 'STANDARD_IA') {\n return 'WARM';\n }\n if (value === 'GLACIER') {\n return 'COLD';\n }\n return '';\n }\n if (v2AllowedStorageClass.indexOf(value) >= 0) {\n return value;\n }\n if (value === 'WARM') {\n return 'STANDARD_IA';\n }\n if (value === 'COLD') {\n return 'GLACIER';\n }\n return '';\n};\nUtils.prototype.ACLAdapter = function (value, signatureContext) {\n value = value || '';\n value = String(value).toLowerCase();\n if (signatureContext.signature === 'obs') {\n if (obsAllowedAcl.indexOf(value) >= 0) {\n return value;\n }\n return '';\n }\n if (value === 'public-read-delivered') {\n value = 'public-read';\n } else if (value === 'public-read-write-delivered') {\n value = 'public-read-write';\n }\n if (v2AllowedAcl.indexOf(value) >= 0) {\n return value;\n }\n return '';\n};\nUtils.prototype.doExec = function (funcName, param, callback) {\n let opt = this.makeParam(funcName, param);\n if ('err' in opt) {\n return callback(opt.err, null);\n }\n this.sendRequest(funcName, opt, callback);\n};\nUtils.prototype.doNegotiation = function (funcName, param, callback, checkBucket, checkCache, setCache) {\n let o = null;\n let that = this;\n if (checkCache && param.Bucket) {\n let item = this.bucketSignatureCache[param.Bucket];\n if (item && item.signatureContext && item.expireTime > new Date().getTime()) {\n param.signatureContext = item.signatureContext;\n let opt = this.makeParam(funcName, param);\n if ('err' in opt) {\n return callback(opt.err, null);\n }\n opt.signatureContext = item.signatureContext;\n return this.sendRequest(funcName, opt, callback);\n }\n o = this.bucketEventEmitters[param.Bucket];\n if (!o) {\n o = {\n s: 0,\n n: function () {\n while (this.e && this.e.length > 0) {\n this.e.shift()();\n }\n }\n };\n this.bucketEventEmitters[param.Bucket] = o;\n }\n if (o.s) {\n o.e.push(function () {\n that.doNegotiation(funcName, param, callback, checkBucket, checkCache, setCache);\n });\n return;\n }\n o.e = [];\n o.s = 1;\n }\n this.doExec(negotiateMethod, checkBucket ? {\n Bucket: param.Bucket,\n hasRegion: param.hasRegion\n } : {}, function (err, result) {\n if (err) {\n callback(err, null);\n if (o) {\n o.s = 0;\n o.n();\n }\n return;\n }\n if (checkBucket && result.CommonMsg.Status === 404 || result.CommonMsg.Status >= 500) {\n callback(err, result);\n if (o) {\n o.s = 0;\n o.n();\n }\n return;\n }\n let signatureContext = v2SignatureContext;\n if (result.CommonMsg.Status < 300 && result.InterfaceResult && result.InterfaceResult.ApiVersion >= '3.0') {\n signatureContext = obsSignatureContext;\n }\n if (setCache) {\n that.bucketSignatureCache[param.Bucket] = {\n signatureContext: signatureContext,\n expireTime: new Date().getTime() + 15 + Math.ceil(Math.random() * 5) * 60 * 1000\n };\n }\n if (o) {\n o.s = 0;\n o.n();\n }\n param.signatureContext = signatureContext;\n let opt = that.makeParam(funcName, param);\n if ('err' in opt) {\n return callback(opt.err, null);\n }\n opt.signatureContext = signatureContext;\n that.sendRequest(funcName, opt, callback);\n });\n};\nUtils.prototype.exec = function (funcName, param, callback) {\n let that = this;\n if (that.isSignatureNegotiation && funcName !== negotiateMethod) {\n if (funcName === 'ListBuckets') {\n that.doNegotiation(funcName, param, callback, false, false, false);\n } else if (ignoreNegotiationMethod.indexOf(funcName) > -1) {\n let _callback = function (err, result) {\n if (!err && result.CommonMsg.Status === 400 && result.CommonMsg.Message === 'Unsupported Authorization Type' && param.signatureContext && param.signatureContext.signature === 'v2') {\n param.signatureContext = v2SignatureContext;\n let opt = that.makeParam(funcName, param);\n if ('err' in opt) {\n return callback(opt.err, null);\n }\n opt.signatureContext = param.signatureContext;\n that.sendRequest(funcName, opt, callback);\n return;\n }\n callback(err, result);\n };\n that.doNegotiation(funcName, param, _callback, false, true, false);\n } else {\n that.doNegotiation(funcName, param, callback, true, true, true);\n }\n return;\n }\n that.doExec(funcName, param, callback);\n};\nUtils.prototype.sliceBlob = function (blob, start, end, type) {\n type = type || blob.type;\n if (blob.mozSlice) {\n return blob.mozSlice(start, end, type);\n }\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end, type);\n }\n return blob.slice(start, end, type);\n};\nUtils.prototype.toXml = function (mXml, xmlMeta, root, sentAs, signatureContext) {\n let xml = '';\n if (root !== null) {\n xml += this.buildXml(mXml, xmlMeta, root, sentAs, signatureContext);\n return xml;\n }\n for (let key in xmlMeta) {\n if (key in mXml) {\n let _sentAs = xmlMeta[key].sentAs || key;\n xml += this.buildXml(mXml, xmlMeta[key], key, _sentAs, signatureContext);\n }\n }\n return xml;\n};\nUtils.prototype.buildXml = function (mXml, xmlMeta, key, sentAs, signatureContext) {\n let xml = '';\n let type = xmlMeta.type;\n if (type === 'array') {\n for (let i = 0; i < mXml[key].length; i++) {\n if (xmlMeta.items.type === 'object') {\n if (!mXml[key][i]) {\n return xml;\n }\n let result = this.toXml(mXml[key][i], xmlMeta.items.parameters, null, null, signatureContext);\n if (result !== '') {\n xml += '<' + sentAs + '>' + result + '</' + sentAs + '>';\n }\n } else if (xmlMeta.items.type === 'adapter') {\n xml += '<' + sentAs + '>' + String(this[key + 'Adapter'](mXml[key][i], signatureContext)).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</' + sentAs + '>';\n } else if (xmlMeta.items.type !== 'array') {\n xml += '<' + sentAs + '>' + String(mXml[key][i]).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</' + sentAs + '>';\n }\n }\n } else if (type === 'object') {\n if (!mXml[key]) {\n return xml;\n }\n let result = this.toXml(mXml[key], xmlMeta.parameters, null, null, signatureContext);\n if (result !== '') {\n xml += '<' + sentAs;\n if ('data' in xmlMeta) {\n if ('xsiNamespace' in xmlMeta.data) {\n xml += ' xmlns:xsi=\"' + xmlMeta.data.xsiNamespace + '\"';\n }\n if ('xsiType' in xmlMeta.data) {\n xml += ' xsi:type=\"' + mXml[key][xmlMeta.data.xsiType] + '\"';\n }\n }\n xml += '>';\n xml += result + '</' + sentAs + '>';\n }\n } else if (type === 'adapter') {\n xml += '<' + sentAs + '>' + String(this[key + 'Adapter'](mXml[key], signatureContext)).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</' + sentAs + '>';\n } else if (type !== 'ignore') {\n xml += '<' + sentAs + '>' + String(mXml[key]).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</' + sentAs + '>';\n }\n if (xml && xmlMeta.wrapper) {\n let _wrapper = xmlMeta.wrapper;\n xml = '<' + _wrapper + '>' + xml + '</' + _wrapper + '>';\n }\n return xml;\n};\nUtils.prototype.jsonToObject = function (model, obj, root, ifRootXMlDecode) {\n let opt = {};\n if (root !== null) {\n this.buildObject(model, obj, root, opt, ifRootXMlDecode);\n } else {\n for (let key in model) {\n if ({}.hasOwnProperty.call(model, key)) {\n this.buildObject(model, obj, key, opt, ifRootXMlDecode);\n }\n }\n }\n return opt;\n};\nUtils.prototype.buildObject = function (model, obj, key, opt, ifRootXMlDecode) {\n let setValue = function (value) {\n if (value === undefined) {\n return \"\";\n }\n return value && model[key].decode && ifRootXMlDecode ? decodeURIComponent(value.replace(/\\+/g, '%20')) : value;\n };\n if (isObject(obj)) {\n let flag = true;\n let wrapper = model[key].wrapper;\n if (wrapper && wrapper in obj) {\n obj = obj[wrapper];\n flag = isObject(obj);\n }\n if (flag) {\n let sentAs = model[key].sentAs || key;\n if (sentAs in obj) {\n if (model[key].type === 'object') {\n opt[key] = this.jsonToObject(model[key].parameters, obj[sentAs], null, ifRootXMlDecode);\n } else if (model[key].type === 'array') {\n let arr = [];\n if (!isArray(obj[sentAs])) {\n arr[0] = model[key].items.type === 'object' ? this.jsonToObject(model[key].items.parameters, obj[sentAs], null, ifRootXMlDecode) : setValue(obj[sentAs]['#text'] || '');\n } else {\n for (let i = 0; i < obj[sentAs].length; i++) {\n arr[i] = model[key].items.type === 'object' ? this.jsonToObject(model[key].items.parameters, obj[sentAs][i], null, ifRootXMlDecode) : setValue(obj[sentAs][i]['#text']);\n }\n }\n opt[key] = arr;\n } else {\n opt[key] = setValue(obj[sentAs]['#text']);\n }\n }\n }\n }\n if (opt[key] === undefined) {\n if (model[key].type === 'object') {\n opt[key] = model[key].parameters ? this.jsonToObject(model[key].parameters, null, null, ifRootXMlDecode) : {};\n } else if (model[key].type === 'array') {\n opt[key] = [];\n }\n }\n};\nUtils.prototype.makeParam = function (methodName, param) {\n let signatureContext = param.signatureContext || this.signatureContext;\n let model = signatureContext.signature === 'obs' ? obsModel[methodName] : v2Model[methodName];\n let method = model.httpMethod;\n let uri = '/';\n let urlPath = '';\n let xml = '';\n let exheaders = {};\n let opt = {};\n opt.$requestParam = param;\n if ('urlPath' in model) {\n urlPath += '?';\n urlPath += model.urlPath;\n }\n for (let key in model.parameters) {\n if ({}.hasOwnProperty.call(model.parameters, key)) {\n let meta = model.parameters[key];\n if (key === 'Bucket' && this.isCname) {\n continue;\n }\n let _value = param[key];\n if (meta.type === 'callback' && _value === undefined && meta.parameters && (param['CallbackUrl'] !== undefined || param['CallbackBody'] !== undefined)) {\n _value = {};\n for (let _key of Object.keys(meta.parameters)) {\n const _meta = meta.parameters[_key];\n const _keyValue = param[_key];\n if (_meta.required && (_keyValue === null || _keyValue === undefined || Object.prototype.toString.call(_keyValue) === '[object String]' && _keyValue === '')) {\n opt.err = _key + ' is a required element!';\n this.log.runLog('error', methodName, opt.err);\n return opt;\n }\n const newKey = _key.slice(0, 1).toLowerCase() + _key.slice(1);\n _value[newKey] = _keyValue;\n }\n }\n if (meta.required && (_value === null || _value === undefined || Object.prototype.toString.call(_value) === '[object String]' && _value === '')) {\n opt.err = key + ' is a required element!';\n this.log.runLog('error', methodName, opt.err);\n return opt;\n }\n if (_value !== null && _value !== undefined) {\n if (meta.type === 'srcFile' || meta.type === 'dstFile') {\n opt[meta.type] = _value;\n continue;\n }\n if (meta.type === 'plain') {\n opt[key] = _value;\n }\n let sentAs = meta.sentAs || key;\n if (meta.withPrefix) {\n sentAs = signatureContext.headerPrefix + sentAs;\n }\n if (meta.location === 'uri') {\n if (uri !== '/') {\n uri += '/';\n }\n uri += _value;\n } else if (meta.location === 'header') {\n let safe = meta.encodingSafe || ' ;/?:@&=+$,';\n if (meta.type === 'object') {\n if (signatureContext.headerMetaPrefix === sentAs) {\n for (let item in _value) {\n if ({}.hasOwnProperty.call(_value, item)) {\n let value = _value[item];\n item = String(item).trim().toLowerCase();\n exheaders[item.indexOf(sentAs) === 0 ? item : sentAs + item] = encodeURIWithSafe(value, safe);\n }\n }\n }\n } else if (meta.type === 'array') {\n let arr = [];\n for (let item in _value) {\n if ({}.hasOwnProperty.call(_value, item)) {\n arr[item] = encodeURIWithSafe(_value[item], safe);\n }\n }\n exheaders[sentAs] = arr;\n } else if (meta.type === 'password') {\n let encodeFunc = window.btoa ? window.btoa : Base64.encode;\n exheaders[sentAs] = encodeFunc(_value);\n let pwdSentAs = meta.pwdSentAs || sentAs + '-MD5';\n exheaders[pwdSentAs] = this.rawBufMD5(_value);\n } else if (meta.type === 'number' && Number(_value)) {\n exheaders[sentAs] = encodeURIWithSafe(String(_value), safe);\n } else if (meta.type === 'boolean') {\n exheaders[sentAs] = encodeURIWithSafe(_value ? 'true' : 'false', safe);\n } else if (meta.type === 'callback') {\n exheaders[sentAs] = Base64.encode(JSON.stringify(_value));\n } else if (meta.type === 'adapter') {\n let val = this[key + 'Adapter'](_value, signatureContext);\n if (val) {\n exheaders[sentAs] = encodeURIWithSafe(String(val), safe);\n }\n } else {\n exheaders[sentAs] = encodeURIWithSafe(String(_value), safe, meta.skipEncoding);\n }\n } else if (meta.location === 'urlPath') {\n let sep = urlPath === '' ? '?' : '&';\n let value = _value;\n if (meta.type !== 'number' || meta.type === 'number' && Number(value) >= 0) {\n urlPath += sep + encodeURIWithSafe(sentAs, '/') + '=' + encodeURIWithSafe(String(value), '/');\n }\n } else if (meta.location === 'xml') {\n let mxml = this.toXml(param, meta, key, sentAs, signatureContext);\n if (mxml) {\n xml += mxml;\n }\n } else if (meta['location'] === 'body') {\n xml = _value;\n }\n }\n }\n }\n let isFile = opt.dstFile === 'file';\n if (!('Content-Type' in exheaders) && !isFile) {\n exheaders['Content-Type'] = 'binary/octet-stream';\n }\n if ('data' in model && 'xmlRoot' in model.data) {\n if (xml || model.data.xmlAllowEmpty) {\n let xmlRoot = model.data.xmlRoot;\n xml = '<' + xmlRoot + '>' + xml + '</' + xmlRoot + '>';\n exheaders['Content-Type'] = 'application/xml';\n }\n }\n if (isFile) {\n opt.rawUri = uri;\n }\n exheaders.Host = this.server + (this.port === 80 || this.port === 443 ? '' : ':' + this.port);\n if (!this.pathStyle && !this.isCname) {\n let uriList = uri.split('/');\n if (uriList.length >= 2 && uriList[1]) {\n exheaders.Host = uriList[1] + '.' + exheaders.Host;\n let requestUri = uri.replace(uriList[1], '');\n if (requestUri.indexOf('//') === 0) {\n requestUri = requestUri.slice(1);\n }\n if (signatureContext.signature === 'v4') {\n uri = requestUri;\n } else if (requestUri === '/') {\n uri += '/';\n }\n opt.requestUri = encodeURIWithSafe(requestUri, '/');\n }\n }\n opt.method = method;\n opt.uri = encodeURIWithSafe(uri, '/');\n opt.urlPath = urlPath;\n if (xml) {\n if (model.data && model.data.md5) {\n this.checkAlgorithm === ContentSHA256 ? exheaders[`${signatureContext.headerPrefix}${ContentSHA256.toLowerCase()}`] = this.bufSHA256(xml, 'hex') : exheaders[ContentMD5] = this.bufMD5(xml);\n exheaders['Content-Length'] = xml.length === 0 ? '0' : String(xml.length);\n }\n opt.xml = xml;\n this.log.runLog('debug', methodName, 'request content:' + xml);\n }\n opt.headers = exheaders;\n if ('srcFile' in opt) {\n if (opt.srcFile instanceof window.File || opt.srcFile instanceof window.Blob) {\n let fileSize = opt.srcFile.size;\n if ('Content-Length' in opt.headers || 'PartSize' in opt || 'Offset' in opt) {\n let offset = opt.Offset;\n offset = offset && offset >= 0 && offset < fileSize ? offset : 0;\n let partSize;\n if ('PartSize' in opt) {\n partSize = opt.PartSize;\n } else if ('Content-Length' in opt.headers) {\n partSize = parseInt(opt.headers['Content-Length'], 10);\n } else {\n partSize = fileSize;\n }\n partSize = partSize && partSize > 0 && partSize <= fileSize - offset ? partSize : fileSize - offset;\n opt.PartSize = partSize;\n opt.Offset = offset;\n opt.headers['Content-Length'] = String(opt.PartSize);\n }\n }\n }\n return opt;\n};\nUtils.prototype.parseCommonHeaders = function (opt, headers, signatureContext) {\n for (let key in commonHeaders) {\n if ({}.hasOwnProperty.call(commonHeaders, key)) {\n opt.InterfaceResult[commonHeaders[key]] = headers[key];\n }\n }\n opt.InterfaceResult.RequestId = headers[signatureContext.headerPrefix + 'request-id'];\n opt.InterfaceResult.Id2 = headers[signatureContext.headerPrefix + 'id-2'];\n opt.CommonMsg.RequestId = opt.InterfaceResult.RequestId;\n opt.CommonMsg.Id2 = opt.InterfaceResult.Id2;\n};\nUtils.prototype.contrustCommonMsg = function (opt, obj, headers, signatureContext) {\n opt.InterfaceResult = {};\n this.parseCommonHeaders(opt, headers, signatureContext);\n for (let key in obj) {\n if (obj[key].location !== 'header') {\n continue;\n }\n let sentAs = obj[key].sentAs || key;\n if (obj[key].withPrefix) {\n sentAs = signatureContext.headerPrefix + sentAs;\n }\n if (obj[key].type === 'object') {\n opt.InterfaceResult[key] = parseObjectFromHeaders(sentAs, headers);\n } else {\n let val = null;\n if (sentAs in headers) {\n val = headers[sentAs];\n } else if (sentAs.toLowerCase() in headers) {\n val = headers[sentAs.toLowerCase()];\n }\n if (val !== null) {\n opt.InterfaceResult[key] = val;\n }\n }\n }\n};\nUtils.prototype.getRequest = function (methodName, serverback, signatureContext, retryCount, params, bc) {\n let regionDomains = this.regionDomains;\n let opt = {};\n let log = this.log;\n let model = signatureContext.signature === 'obs' ? obsModel[methodName + 'Output'] : v2Model[methodName + 'Output'];\n model = model || {};\n let obj = model.parameters || {};\n opt.CommonMsg = {\n Status: serverback.status,\n Code: '',\n Message: '',\n HostId: '',\n RequestId: '',\n InterfaceResult: null\n };\n let headers = serverback.headers;\n let headersStr = headerTostring(headers);\n log.runLog('info', methodName, 'get response start, statusCode:' + serverback.status);\n log.runLog('debug', methodName, 'response msg :statusCode:' + serverback.status + ', headers:' + headersStr);\n let doLog = function () {\n let logMsg = 'Status:' + opt.CommonMsg.Status + ', Code:' + opt.CommonMsg.Code + ', Message:' + opt.CommonMsg.Message;\n log.runLog('debug', methodName, 'exec interface ' + methodName + ' finish, ' + logMsg);\n bc(null, opt);\n };\n if (serverback.status >= 300 && serverback.status < 400 && serverback.status !== 304 && retryCount <= 5) {\n let location = headers.location || headers.Location;\n if (location) {\n let err = 'http code is 3xx, need to redirect to ' + location;\n log.runLog('warn', methodName, err);\n let redirectErr = new Error('redirect');\n redirectErr.location = location;\n redirectErr.bucketLocation = headers['x-amz-bucket-region'] || headers['x-obs-bucket-region'];\n return bc(redirectErr);\n }\n let bucketLocation = headers['x-amz-bucket-region'] || headers['x-obs-bucket-location'];\n if (bucketLocation && regionDomains[bucketLocation]) {\n let regionServer = (this.isSecure ? 'https://' : 'http://') + regionDomains[bucketLocation];\n if (isFunction(this.setRequestHeaderHook)) {\n this.setRequestHeaderHook(headers, params, methodName, regionDomains[bucketLocation]);\n }\n let err = 'get redirect code 3xx, need to redirect to' + regionServer;\n log.runLog('error', methodName, err);\n let redirectErr = new Error('redirect');\n redirectErr.location = regionServer;\n return bc(redirectErr);\n }\n log.runLog('error', methodName, 'get redirect code 3xx, but no location in headers');\n }\n if (serverback.status < 300) {\n let body = serverback.data;\n this.contrustCommonMsg(opt, obj, headers, signatureContext);\n let respMsg = 'Status: ' + opt.CommonMsg.Status + ', headers: ' + headersStr;\n if (body) {\n respMsg += 'body length: ' + body.length;\n log.runLog('debug', methodName, 'response body length:' + body.length);\n }\n log.runLog('debug', methodName, respMsg);\n if (body && 'data' in model) {\n if (params.CallbackUrl && model.CallbackResponse) {\n opt.InterfaceResult[model.CallbackResponse.sentAs] = body;\n doLog();\n return;\n }\n if (model.data.type === 'xml') {\n let that = this;\n return makeObjFromXml(body, function (err, result) {\n if (err) {\n log.runLog('error', methodName, 'change xml to json err [' + headerTostring(err) + ']');\n return bc(err, null);\n }\n let tempResult = result;\n if (model.data.xmlRoot && model.data.xmlRoot in tempResult) {\n tempResult = result[model.data.xmlRoot];\n }\n let ifRootXMlDecode = tempResult.EncodingType ? true : false;\n if (isObject(tempResult)) {\n for (let key in obj) {\n if (obj[key].location === 'xml') {\n opt.InterfaceResult[key] = that.jsonToObject(obj, tempResult, key, ifRootXMlDecode)[key];\n }\n }\n }\n doLog();\n });\n }\n if (model.data.type === 'body') {\n for (let key in obj) {\n if (obj[key].location === 'body') {\n opt.InterfaceResult[key] = body;\n break;\n }\n }\n }\n }\n return doLog();\n }\n let body = serverback.data;\n let respMsg = 'Status: ' + opt.CommonMsg.Status + ', headers: ' + headersStr;\n if (body !== '') {\n respMsg += 'body: ' + body;\n log.runLog('debug', methodName, 'response body :' + body);\n }\n opt.CommonMsg.RequestId = headers[signatureContext.headerPrefix + 'request-id'];\n opt.CommonMsg.Id2 = headers[signatureContext.headerPrefix + 'id2'];\n opt.CommonMsg.Indicator = headers['x-reserved-indicator'];\n log.runLog('info', methodName, 'request finished with request id:' + opt.CommonMsg.RequestId);\n log.runLog('debug', methodName, respMsg);\n if (!body) {\n return doLog();\n }\n return makeObjFromXml(body, function (err, re) {\n if (err) {\n log.runLog('error', methodName, 'change xml to json err [' + headerTostring(err) + ']');\n opt.CommonMsg.Message = err.message;\n } else if (re) {\n if ('Error' in re) {\n let errMsg = re.Error;\n for (let param in errMsg) {\n if (errMsg[param] && errMsg[param]['#text']) {\n opt.CommonMsg[param] = errMsg[param]['#text'];\n }\n }\n } else {\n let errMsg = re;\n if ('code' in errMsg) {\n opt.CommonMsg.Code = errMsg.code;\n }\n if ('message' in errMsg) {\n opt.CommonMsg.Message = errMsg.message;\n }\n if ('hostId' in errMsg) {\n opt.CommonMsg.HostId = errMsg.hostId;\n }\n if ('request_id' in errMsg && errMsg.request_id) {\n opt.CommonMsg.RequestId = errMsg.request_id;\n }\n }\n log.runLog('error', methodName, 'request error with error code:' + opt.CommonMsg.Code + ', error message:' + opt.CommonMsg.Message + ', request id:' + opt.CommonMsg.RequestId);\n }\n doLog();\n });\n};\nUtils.prototype.makeRequest = function (methodName, opt, retryCount, bc) {\n let log = this.log;\n let body = opt.xml || null;\n let signatureContext = opt.signatureContext || this.signatureContext;\n delete opt.headers.Authorization; // retry bug fix\n\n if (opt.dstFile === 'file') {\n let queryParams = {};\n if (opt.urlPath) {\n let path = opt.urlPath.slice(1);\n let arrPath = path.split('&');\n for (let i = 0; i < arrPath.length; i++) {\n if (arrPath[i].indexOf('=') === -1) {\n queryParams[arrPath[i]] = '';\n } else {\n let temp = arrPath[i].split('=');\n queryParams[temp[0]] = temp[1];\n }\n }\n }\n let rawUri = opt.rawUri.split('/');\n let bucketName = rawUri[1];\n let objectKey = opt.rawUri.slice(('/' + bucketName + '/').length);\n if (this.isCname) {\n objectKey = opt.rawUri.slice(1);\n bucketName = '';\n }\n let ret = {};\n ret.CommonMsg = {\n Status: 0,\n Code: '',\n Message: '',\n HostId: ''\n };\n ret.InterfaceResult = {};\n let model = signatureContext.signature === 'obs' ? obsModel[methodName + 'Output'] : v2Model[methodName + 'Output'];\n let obj = model.parameters;\n for (let key in obj) {\n if (obj[key].location === 'body') {\n ret.InterfaceResult[key] = this.createSignedUrlSync({\n Method: opt.method,\n Bucket: bucketName,\n Key: objectKey,\n Expires: 3600,\n Headers: opt.headers,\n QueryParams: queryParams,\n signatureContext: signatureContext\n });\n break;\n }\n }\n return bc(null, ret);\n }\n let requestDate = opt.$requestParam.RequestDate;\n let nowDate;\n let requestDateType = Object.prototype.toString.call(requestDate);\n if (requestDateType === '[object Date]') {\n nowDate = requestDate;\n } else if (requestDateType === '[object String]') {\n try {\n nowDate = new Date();\n nowDate.setTime(Date.parse(requestDate));\n } catch (e) {\n // ignore\n }\n }\n if (!nowDate) {\n nowDate = new Date();\n }\n let utcDateStr = nowDate.toUTCString();\n let isV4 = signatureContext.signature.toLowerCase() === 'v4';\n opt.headers[signatureContext.headerPrefix + 'date'] = isV4 ? getDates(utcDateStr)[1] : utcDateStr;\n let path = (opt.requestUri ? opt.requestUri : opt.uri) + opt.urlPath;\n if (this.ak && this.sk && methodName !== negotiateMethod) {\n if (this.securityToken) {\n opt.headers[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n }\n if (isV4) {\n this.v4Auth(opt, methodName, signatureContext);\n } else {\n this.doAuth(opt, methodName, signatureContext);\n }\n }\n let ex = opt.headers;\n if (isFunction(this.setRequestHeaderHook)) {\n this.setRequestHeaderHook(ex, opt.$requestParam, methodName);\n }\n let host = ex.Host;\n let method = opt.method;\n let header_msg = {};\n for (let key in ex) {\n if ({}.hasOwnProperty.call(ex, key)) {\n header_msg[key] = ex[key];\n }\n }\n header_msg.Authorization = '****';\n let msg = 'method:' + method + ', path:' + path + 'headers:' + headerTostring(header_msg);\n if (body) {\n msg += 'body:' + body;\n }\n log.runLog('info', methodName, 'prepare request parameters ok,then Send request to service start');\n log.runLog('debug', methodName, 'request msg:' + msg);\n let _isSecure = opt.protocol ? opt.protocol.toLowerCase().indexOf('https') === 0 : this.isSecure;\n let port = opt.port || this.port;\n\n // avoid to set unsafe headers\n delete ex.Host;\n delete ex['Content-Length'];\n let responseType = 'text';\n if (opt.dstFile && opt.dstFile !== 'file' && (opt.dstFile === 'arraybuffer' || opt.dstFile === 'blob')) {\n responseType = String(opt.dstFile);\n }\n let start = nowDate.getTime();\n let that = this;\n let dealingError = function (err) {\n // with angular, headerTostring may lead to exception.\n try {\n let headerStr = headerTostring(err);\n log.runLog('error', methodName, 'Send request to service error [' + headerStr + ']');\n } catch (e) {\n if (err.toString) {\n log.runLog('error', methodName, 'Send request to service error [' + err.toString() + ']');\n }\n }\n log.runLog('info', methodName, 'http cost ' + (new Date().getTime() - start) + ' ms');\n bc(err, null);\n };\n if (!this.useRawXhr) {\n let onUploadProgress = null;\n let onDownloadProgress = null;\n if (isFunction(opt.ProgressCallback)) {\n let progressListener = function (event) {\n if (event.lengthComputable) {\n opt.ProgressCallback(event.loaded, event.total, (new Date().getTime() - start) / 1000);\n }\n };\n if (method === 'GET') {\n onDownloadProgress = progressListener;\n } else if (method === 'PUT' || method === 'POST') {\n onUploadProgress = progressListener;\n }\n }\n let portInfo = ':' + port;\n if (host.indexOf(':') >= 0) {\n portInfo = '';\n }\n // 适配cf2,在请求中增加通配符\n let baseUrl = '';\n let httpPrefix = _isSecure ? 'https://' : 'http://';\n if (this.urlPrefix && isFunction(this.setRequestHeaderHook) && methodName !== 'UploadPart') {\n let defaultRegion = true;\n if (opt.$requestParam['hasRegion'] || opt.$requestParam['redirectRegion']) {\n defaultRegion = false;\n }\n let portFlag = '';\n if (port === 5443) {\n portFlag = '-5443';\n }\n if (defaultRegion) {\n if (opt.$requestParam['Bucket']) {\n if (opt.$requestParam['Bucket'].indexOf('.') !== -1) {\n baseUrl = httpPrefix + this.urlPrefix + '/bucket' + portFlag;\n }\n baseUrl = httpPrefix + this.urlPrefix + '/bucket' + portFlag;\n } else {\n if (path.split('?')[0] === '/') {\n baseUrl = httpPrefix + this.urlPrefix + portFlag;\n } else {\n baseUrl = httpPrefix + this.urlPrefix + '/place' + portFlag;\n }\n }\n } else {\n if (opt.$requestParam['Bucket']) {\n baseUrl = httpPrefix + this.urlPrefix + '/region-bucket' + portFlag;\n } else {\n baseUrl = httpPrefix + this.urlPrefix + '/region' + portFlag;\n }\n }\n } else {\n baseUrl = httpPrefix + host + portInfo;\n }\n let reopt = {\n method: method,\n // fix bug, axios will abandon the base url if the request url starts with '//', so use the completed url to avoid it\n url: baseUrl + path,\n withCredentials: false,\n headers: ex,\n validateStatus: function (status) {\n return status >= 200;\n },\n maxRedirects: 0,\n responseType: responseType,\n data: body,\n timeout: this.timeout * 1000,\n onUploadProgress: onUploadProgress,\n onDownloadProgress: onDownloadProgress,\n cancelToken: new axios.CancelToken(function (cancelHook) {\n opt.$requestParam.cancelHook = cancelHook;\n })\n };\n if (opt.srcFile) {\n if (!(opt.srcFile instanceof window.File) && !(opt.srcFile instanceof window.Blob)) {\n return bc(new Error('source file must be an instance of window.File or window.Blob'), null);\n }\n let srcFile = opt.srcFile;\n try {\n if (opt.Offset >= 0 && opt.PartSize > 0) {\n srcFile = this.sliceBlob(srcFile, opt.Offset, opt.Offset + opt.PartSize);\n } else if ('ContentLength' in opt) {\n let contentLength = parseInt(opt.ContentLength, 10);\n if (contentLength > 0) {\n srcFile = this.sliceBlob(srcFile, 0, contentLength);\n }\n }\n } catch (e) {\n return bc(e);\n }\n reopt.data = srcFile;\n }\n axios.request(reopt).then(function (response) {\n log.runLog('info', methodName, 'http cost ' + (new Date().getTime() - start) + ' ms');\n that.getRequest(methodName, response, signatureContext, retryCount, opt.$requestParam, bc);\n }).catch(function (err) {\n dealingError(err);\n });\n return;\n }\n let xhr = null;\n // Firefox, Opera 8.0+, Safari\n try {\n xhr = new XMLHttpRequest();\n } catch (e) {\n try {\n // InternetExplorer\n xhr = new ActiveXObject('Msxml2.XMLHTTP');\n } catch (e1) {\n try {\n xhr = new ActiveXObject('Microsoft.XMLHTTP');\n } catch (e2) {}\n }\n }\n if (xhr === null) {\n return bc(new Error('XHR is not available'), null);\n }\n if (opt.srcFile) {\n if (!(opt.srcFile instanceof window.File) && !(opt.srcFile instanceof window.Blob)) {\n return bc(new Error('source file must be an instance of window.File or window.Blob'), null);\n }\n try {\n let srcFile = opt.srcFile;\n if (opt.Offset >= 0 && opt.PartSize > 0) {\n srcFile = this.sliceBlob(srcFile, opt.Offset, opt.Offset + opt.PartSize);\n } else if ('ContentLength' in opt) {\n let contentLength = parseInt(opt.ContentLength, 10);\n if (contentLength > 0) {\n srcFile = this.sliceBlob(srcFile, 0, contentLength);\n }\n }\n body = srcFile;\n } catch (e) {\n return bc(e);\n }\n }\n xhr.open(method, (_isSecure ? 'https://' + this.urlPrefix + host : 'http://' + this.urlPrefix + host) + path);\n xhr.withCredentials = false;\n for (let key in ex) {\n if ({}.hasOwnProperty.call(ex, key)) {\n xhr.setRequestHeader(key, ex[key]);\n }\n }\n xhr.timeout = that.timeout * 1000;\n xhr.responseType = responseType;\n opt.$requestParam.cancelHook = function () {\n xhr.abort();\n };\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status >= 200) {\n log.runLog('info', methodName, 'http cost ' + (new Date().getTime() - start) + ' ms');\n let headers = xhr.getAllResponseHeaders();\n let arr = headers.trim().split(/[\\r\\n]+/);\n let headerMap = {};\n for (let i = 0; i < arr.length; i++) {\n let line = arr[i];\n let parts = line.split(': ');\n let header = parts.shift();\n let value = parts.join(': ');\n headerMap[header.toLowerCase()] = value;\n }\n let data = xhr.response;\n if (!data && (responseType === '' || responseType === 'text')) {\n data = xhr.responseText;\n }\n let response = {\n status: xhr.status,\n headers: headerMap,\n data: data\n };\n that.getRequest(methodName, response, signatureContext, retryCount, opt.$requestParam, bc);\n }\n };\n let handled = false;\n let errHandler = function (err) {\n if (handled) {\n return;\n }\n handled = true;\n dealingError(err);\n };\n\n // For the compatibility with Axios\n xhr.ontimeout = function () {\n errHandler(new Error('timeout of ' + xhr.timeout + 'ms exceed'));\n };\n\n // For the compatibility with Axios\n xhr.onerror = function () {\n errHandler(new Error('Network Error'));\n };\n\n // For the compatibility with Axios\n xhr.onabort = function () {\n errHandler(new Error('Cancel'));\n };\n if (xhr.upload) {\n // For the compatibility with Axios\n xhr.upload.ontimeout = function () {\n errHandler(new Error('timeout of ' + xhr.timeout + 'ms exceed'));\n };\n\n // For the compatibility with Axios\n xhr.upload.onerror = function () {\n errHandler(new Error('Network Error'));\n };\n\n // For the compatibility with Axios\n xhr.upload.onabort = function (e) {\n errHandler(new Error('Cancel'));\n };\n }\n if (isFunction(opt.ProgressCallback)) {\n if (method === 'GET' || !xhr.upload) {\n xhr.onprogress = function (event) {\n if (event.lengthComputable) {\n opt.ProgressCallback(event.loaded, event.total, (new Date().getTime() - start) / 1000);\n }\n };\n } else if (method === 'PUT' || method === 'POST') {\n xhr.upload.onprogress = function (event) {\n if (event.lengthComputable) {\n opt.ProgressCallback(event.loaded, event.total, (new Date().getTime() - start) / 1000);\n }\n };\n }\n }\n xhr.send(body);\n};\nUtils.prototype.sendRequest = function (funcName, opt, backcall, retryCount) {\n if (retryCount === undefined) {\n retryCount = 1;\n }\n let uploadPartRetry = false;\n if (retryCount <= opt.$requestParam.maxPartRetryCount) {\n uploadPartRetry = true;\n }\n const host = opt.headers.Host;\n let that = this;\n that.makeRequest(funcName, opt, retryCount, function (err, msg) {\n if (err && err.message === 'redirect') {\n let uri = urlLib.parse(err.location);\n if (err.bucketLocation && uri.hostname.indexOf(opt.$requestParam['Bucket']) !== -1) {\n opt.$requestParam.redirectRegion = err.bucketLocation;\n }\n opt.headers.Host = uri.hostname;\n opt.protocol = uri.protocol;\n opt.port = uri.port || (opt.protocol && opt.protocol.toLowerCase().indexOf('https') === 0 ? 443 : 80);\n that.sendRequest(funcName, opt, backcall, retryCount + 1);\n } else if (funcName === 'UploadPart' && uploadPartRetry && (err || msg.CommonMsg.Status > 300)) {\n opt.headers.Host = host;\n that.sendRequest(funcName, opt, backcall, retryCount + 1);\n } else {\n backcall(err, msg);\n }\n });\n};\nUtils.prototype.doAuth = function (opt, methodName, signatureContext) {\n let interestHeader = ['Content-MD5', 'Content-Type'];\n let stringToSign = opt.method + '\\n';\n for (let i = 0; i < interestHeader.length; i++) {\n if (interestHeader[i] in opt.headers) {\n stringToSign += opt.headers[interestHeader[i]];\n }\n stringToSign += '\\n';\n }\n if (!(signatureContext.headerPrefix + 'date' in opt.headers)) {\n stringToSign += opt.headers.Date;\n }\n stringToSign += '\\n';\n let temp = [];\n for (let originKey in opt.headers) {\n if ({}.hasOwnProperty.call(opt.headers, originKey)) {\n let lowerKey = originKey.toLowerCase();\n if (lowerKey.indexOf(signatureContext.headerPrefix) === 0) {\n temp.push({\n key: lowerKey,\n value: opt.headers[originKey]\n });\n }\n }\n }\n temp = temp.sort(function (obj1, obj2) {\n if (obj1.key < obj2.key) {\n return -1;\n }\n if (obj1.key > obj2.key) {\n return 1;\n }\n return 0;\n });\n for (let i = 0; i < temp.length; i++) {\n let key = temp[i].key;\n let val = key.indexOf(signatureContext.headerMetaPrefix) === 0 ? temp[i].value.trim() : temp[i].value;\n stringToSign += key + ':' + val + '\\n';\n }\n let path = opt.uri;\n if (this.isCname) {\n if (path === '/') {\n path += opt.headers.Host + '/';\n } else if (path.indexOf('/') === 0) {\n path = '/' + opt.headers.Host + path;\n }\n }\n if (opt.urlPath) {\n let _path = opt.urlPath.slice(1);\n let arrPath = _path.split('&').sort();\n let urlPath = '';\n for (let i = 0; i < arrPath.length; i++) {\n let listvar = arrPath[i].split('=');\n let key = decodeURIComponent(listvar[0]);\n if (allowedResourceParameterNames.indexOf(key.toLowerCase()) >= 0) {\n urlPath += urlPath === '' ? '?' : '&';\n urlPath += key;\n if (listvar.length === 2 && listvar[1]) {\n urlPath += '=' + decodeURIComponent(listvar[1]);\n }\n }\n }\n path += urlPath;\n }\n stringToSign += path;\n this.log.runLog('debug', methodName, 'stringToSign:' + stringToSign);\n opt.headers.Authorization = signatureContext.authPrefix + ' ' + this.ak + ':' + crypto.createHmac('sha1', this.sk).update(stringToSign).digest('base64');\n};\nUtils.prototype.v4Auth = function (opt, methodName, signatureContext) {\n opt.headers[signatureContext.headerPrefix + 'content-sha256'] = CONTENT_SHA256;\n let header = opt.headers;\n let log = this.log;\n let shortDate = null;\n let longDate = null;\n if (signatureContext.headerPrefix + 'date' in header) {\n longDate = header[signatureContext.headerPrefix + 'date'];\n shortDate = longDate.slice(0, longDate.indexOf('T'));\n } else {\n let dates = getDates(header.Date);\n shortDate = dates[0];\n longDate = dates[1];\n }\n let credenttial = this.ak + '/' + shortDate + '/' + this.region + '/s3/aws4_request';\n let signedAndCanonicalHeaders = getSignedAndCanonicalHeaders(header);\n let signedHeaders = signedAndCanonicalHeaders[0];\n let canonicalHeaders = signedAndCanonicalHeaders[1];\n let canonicalQueryString = '';\n if (opt.urlPath) {\n let path = opt.urlPath.slice(1);\n let arrPath = path.split('&');\n arrPath = arrPath.sort();\n for (let i = 0; i < arrPath.length; i++) {\n canonicalQueryString += arrPath[i];\n if (arrPath[i].indexOf('=') === -1) {\n canonicalQueryString += '=';\n }\n if (i !== arrPath.length - 1) {\n canonicalQueryString += '&';\n }\n }\n }\n let canonicalRequest = opt.method + '\\n';\n canonicalRequest += opt.uri + '\\n';\n canonicalRequest += canonicalQueryString + '\\n';\n canonicalRequest += canonicalHeaders + '\\n';\n canonicalRequest += signedHeaders + '\\n';\n canonicalRequest += CONTENT_SHA256;\n log.runLog('debug', methodName, 'canonicalRequest:' + canonicalRequest);\n let signature = getV4Signature(shortDate, longDate, this.sk, this.region, canonicalRequest);\n opt.headers.Authorization = 'AWS4-HMAC-SHA256 Credential=' + credenttial + ',SignedHeaders=' + signedHeaders + ',Signature=' + signature;\n};\nUtils.prototype.bufMD5 = function (buf) {\n return crypto.createHash('md5').update(buf).digest('base64');\n};\nUtils.prototype.bufSHA256 = function (buf, type = 'base64') {\n return crypto.createHash('sha256').update(buf).digest(type);\n};\nUtils.prototype.rawBufMD5 = function (buf) {\n return crypto.createHash('md5').update(buf).digest('rawbase64');\n};\nUtils.prototype.createSignedUrl = function (param) {\n let signatureContext = param.signatureContext || this.signatureContext;\n return signatureContext.signature.toLowerCase() === 'v4' ? this.createV4SignedUrlSync(param) : this.createV2SignedUrl(param);\n};\nUtils.prototype.createSignedUrlSync = function (param) {\n let signatureContext = param.signatureContext || this.signatureContext;\n return signatureContext.signature.toLowerCase() === 'v4' ? this.createV4SignedUrlSync(param) : this.createV2SignedUrlSync(param);\n};\nUtils.prototype.getStringToSign = function (opt, param) {\n let {\n isShareFolder,\n queryParams,\n queryParamsKeys\n } = opt;\n let signatureContext = param.signatureContext || this.signatureContext;\n let method = param.Method ? String(param.Method) : 'GET';\n let bucketName = param.Bucket ? String(param.Bucket) : null;\n let objectKey = param.Key ? String(param.Key) : null;\n let policy = param.Policy ? String(param.Policy) : null;\n let expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n if (expires < 0) {\n expires = 300;\n }\n expires = parseInt(new Date().getTime() / 1000, 10) + expires;\n let headers = {};\n if (param.Headers && param.Headers instanceof Object && !(param.Headers instanceof Array)) {\n for (let key in param.Headers) {\n if ({}.hasOwnProperty.call(param.Headers, key)) {\n headers[key] = param.Headers[key];\n }\n }\n }\n let interestHeaders = {};\n for (let name in headers) {\n if ({}.hasOwnProperty.call(headers, name)) {\n let key = String(name).toLowerCase();\n if (key === 'content-type' || key === 'content-md5' || key.length > signatureContext.headerPrefix.length && key.slice(0, signatureContext.headerPrefix.length) === signatureContext.headerPrefix) {\n interestHeaders[key] = headers[name];\n }\n }\n }\n let resource = '';\n let host = this.server;\n if (this.isCname) {\n resource += '/' + host + '/';\n } else if (bucketName) {\n resource += '/' + bucketName;\n if (!this.pathStyle) {\n host = bucketName + '.' + host;\n resource += '/';\n }\n }\n if (objectKey) {\n if (resource.lastIndexOf('/') !== resource.length - 1) {\n resource += '/';\n }\n objectKey = encodeURIWithSafe(objectKey, '/');\n resource += objectKey;\n }\n if (resource === '') {\n resource = '/';\n }\n\n // 拼接查询参数\n queryParamsKeys.sort();\n let flag = false;\n let _resource = [];\n let safeKey = isShareFolder ? '' : '/';\n for (let i = 0; i < queryParamsKeys.length; i++) {\n let key = queryParamsKeys[i];\n let val = queryParams[key];\n key = encodeURIWithSafe(key, safeKey);\n val = encodeURIWithSafe(val, safeKey);\n // 分享文件夹不需要query信息不需要增加 policy\n if ((!isShareFolder || key.toLowerCase() !== 'policy') && (allowedResourceParameterNames.indexOf(key.toLowerCase()) >= 0 || key.toLowerCase().indexOf(signatureContext.headerPrefix) === 0)) {\n flag = true;\n let _val = val ? key + '=' + decodeURIComponent(val) : key;\n _resource.push(_val);\n }\n }\n _resource = _resource.join('&');\n if (flag) {\n _resource = '?' + _resource;\n }\n resource += _resource;\n let stringToSign = [method];\n stringToSign.push('\\n');\n if ('content-md5' in interestHeaders) {\n stringToSign.push(interestHeaders['content-md5']);\n }\n stringToSign.push('\\n');\n if ('content-type' in interestHeaders) {\n stringToSign.push(interestHeaders['content-type']);\n }\n stringToSign.push('\\n');\n if (isShareFolder) {\n stringToSign.push(policy);\n } else {\n stringToSign.push(String(expires));\n }\n stringToSign.push('\\n');\n if (!isShareFolder) {\n let temp = [];\n let i = 0;\n for (let key in interestHeaders) {\n if (key.length > signatureContext.headerPrefix.length && key.slice(0, signatureContext.headerPrefix.length) === signatureContext.headerPrefix) {\n temp[i++] = key;\n }\n }\n temp = temp.sort();\n for (let j = 0; j < temp.length; j++) {\n stringToSign.push(temp[j]);\n stringToSign.push(':');\n stringToSign.push(interestHeaders[temp[j]]);\n stringToSign.push('\\n');\n }\n stringToSign.push(resource);\n } else {\n stringToSign.push(_resource);\n }\n return {\n stringToSign: stringToSign.join(''),\n headers,\n host\n };\n};\nfunction covertStorageClass(storageClass, signature) {\n if (!['storageClass', 'storagePolicy'].includes(storageClass)) {\n return;\n }\n if (signature === 'obs') {\n return 'storageClass';\n }\n if (signature === 'v2') {\n return 'storagePolicy';\n }\n}\n;\nUtils.prototype.getQueryParams = function (param) {\n let policy = param.Policy ? String(param.Policy) : null;\n let prefix = param.Prefix ? String(param.Prefix) : null;\n let expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n // 循环获取参数中的queryParams\n let queryParams = {};\n if (param.QueryParams && param.QueryParams instanceof Object && !(param.QueryParams instanceof Array)) {\n for (let key of Object.keys(param.QueryParams)) {\n queryParams[key] = param.QueryParams[key];\n }\n }\n let specialParam = param.SpecialParam ? String(param.SpecialParam) : null;\n\n // 添加specialParam\n let signatureContext = param.signatureContext || this.signatureContext;\n let sc = covertStorageClass(specialParam, signatureContext.signature.toLowerCase());\n if (sc) {\n specialParam = sc;\n }\n if (specialParam) {\n queryParams[specialParam] = '';\n }\n if (param.AfterStringToSign) {\n const pre = '$';\n queryParams[signatureContext.headerPrefix + 'security-token'] = pre + '{hws:security-token}';\n } else if (this.securityToken && !queryParams[signatureContext.headerPrefix + 'security-token']) {\n queryParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n }\n if (expires < 0) {\n expires = 300;\n }\n expires = parseInt(new Date().getTime() / 1000, 10) + expires;\n let isShareFolder = policy && prefix;\n // 添加policy、prefix、expires\n if (isShareFolder) {\n queryParams.Policy = policy;\n queryParams.prefix = prefix;\n } else {\n queryParams.Expires = String(expires);\n }\n let queryParamsKeys = [];\n Object.keys(queryParams).forEach(e => {\n queryParamsKeys.push(e);\n });\n queryParamsKeys.sort();\n return {\n isShareFolder,\n queryParams,\n queryParamsKeys\n };\n};\nUtils.prototype.getSignResult = function (opt, ak, stsToken) {\n // 获取计算签名时的resulet\n let {\n bucketName,\n objectKey,\n signatureContext,\n isShareFolder,\n queryParams,\n queryParamsKeys\n } = opt;\n // 为queryParams添加钩子函数获取到的ak和token\n if (stsToken) {\n queryParams[signatureContext.headerPrefix + 'security-token'] = stsToken;\n }\n if (signatureContext.signature.toLowerCase() === 'v2') {\n queryParams.AWSAccessKeyId = ak;\n queryParamsKeys.push('AWSAccessKeyId');\n } else {\n queryParams.AccessKeyId = ak;\n queryParamsKeys.push('AccessKeyId');\n }\n let result = '';\n if (bucketName && this.pathStyle) {\n result += '/' + bucketName;\n }\n if (objectKey) {\n objectKey = encodeURIWithSafe(objectKey, '/');\n result += '/' + objectKey;\n }\n result += '?';\n queryParamsKeys.sort();\n let safeKey = isShareFolder ? '' : '/';\n for (let i = 0; i < queryParamsKeys.length; i++) {\n let key = queryParamsKeys[i];\n let val = queryParams[key];\n key = encodeURIWithSafe(key, safeKey);\n val = encodeURIWithSafe(val, safeKey);\n result += key;\n if (val) {\n result += '=' + val;\n }\n result += '&';\n }\n return result;\n};\nUtils.prototype.createV2SignedUrl = function (param) {\n const isSecure = this.isSecure;\n const port = this.port;\n let {\n isShareFolder,\n queryParams,\n queryParamsKeys\n } = this.getQueryParams(param);\n let {\n stringToSign,\n headers,\n host\n } = this.getStringToSign({\n isShareFolder,\n queryParams,\n queryParamsKeys\n }, param);\n let getSignResultOpt = {\n bucketName: param.Bucket ? String(param.Bucket) : null,\n objectKey: param.Key ? String(param.Key) : null,\n signatureContext: param.signatureContext || this.signatureContext,\n isShareFolder,\n queryParams,\n queryParamsKeys\n };\n if (isFunction(param.AfterStringToSign)) {\n return Promise.resolve(param.AfterStringToSign(stringToSign)).then(({\n signature,\n ak,\n stsToken\n }) => {\n let result = this.getSignResult(getSignResultOpt, ak, stsToken);\n return getSignedUrl(signature, result);\n });\n }\n function getSignedUrl(signature, result) {\n if (isShareFolder) {\n result += 'Signature=' + encodeURIWithSafe(signature);\n } else {\n result += 'Signature=' + encodeURIWithSafe(signature, '/');\n }\n return {\n ActualSignedRequestHeaders: headers,\n SignedUrl: (isSecure ? 'https' : 'http') + '://' + host + ':' + port + result\n };\n }\n};\nUtils.prototype.createV2SignedUrlSync = function (param) {\n let {\n isShareFolder,\n queryParams,\n queryParamsKeys\n } = this.getQueryParams(param);\n let {\n stringToSign,\n headers,\n host\n } = this.getStringToSign({\n isShareFolder,\n queryParams,\n queryParamsKeys\n }, param);\n let getSignResultOpt = {\n bucketName: param.Bucket ? String(param.Bucket) : null,\n objectKey: param.Key ? String(param.Key) : null,\n signatureContext: param.signatureContext || this.signatureContext,\n isShareFolder,\n queryParams,\n queryParamsKeys\n };\n let result = this.getSignResult(getSignResultOpt, this.ak, this.securityToken);\n let hmac = crypto.createHmac('sha1', this.sk);\n hmac.update(stringToSign);\n if (isShareFolder) {\n result += 'Signature=' + encodeURIWithSafe(hmac.digest('base64'));\n } else {\n result += 'Signature=' + encodeURIWithSafe(hmac.digest('base64'), '/');\n }\n return {\n ActualSignedRequestHeaders: headers,\n SignedUrl: (this.isSecure ? 'https' : 'http') + '://' + host + ':' + this.port + result\n };\n};\nUtils.prototype.createV4SignedUrlSync = function (param) {\n param = param || {};\n let signatureContext = param.signatureContext || this.signatureContext;\n let method = param.Method ? String(param.Method) : 'GET';\n let bucketName = param.Bucket ? String(param.Bucket) : null;\n let objectKey = param.Key ? String(param.Key) : null;\n let specialParam = param.SpecialParam ? String(param.SpecialParam) : null;\n if (specialParam === 'storageClass') {\n specialParam = 'storagePolicy';\n }\n let expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n let headers = {};\n if (param.Headers && param.Headers instanceof Object && !(param.Headers instanceof Array)) {\n for (let key in param.Headers) {\n if ({}.hasOwnProperty.call(param.Headers, key)) {\n headers[key] = param.Headers[key];\n }\n }\n }\n let queryParams = {};\n if (param.QueryParams && param.QueryParams instanceof Object && !(param.QueryParams instanceof Array)) {\n for (let key in param.QueryParams) {\n if ({}.hasOwnProperty.call(param.QueryParams, key)) {\n queryParams[key] = param.QueryParams[key];\n }\n }\n }\n if (this.securityToken && !queryParams[signatureContext.headerPrefix + 'security-token']) {\n queryParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n }\n let result = '';\n let resource = '';\n let host = this.server;\n if (bucketName) {\n if (this.pathStyle) {\n result += '/' + bucketName;\n resource += '/' + bucketName;\n } else {\n host = bucketName + '.' + host;\n }\n }\n if (objectKey) {\n objectKey = encodeURIWithSafe(objectKey, '/');\n result += '/' + objectKey;\n resource += '/' + objectKey;\n }\n if (resource === '') {\n resource = '/';\n }\n result += '?';\n if (specialParam) {\n queryParams[specialParam] = '';\n }\n if (expires < 0) {\n expires = 300;\n }\n let utcDateStr = headers['date'] || headers['Date'] || new Date().toUTCString();\n let dates = getDates(utcDateStr);\n let shortDate = dates[0];\n let longDate = dates[1];\n headers.Host = host + (this.port === 80 || this.port === 443 ? '' : ':' + this.port);\n queryParams['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n queryParams['X-Amz-Credential'] = this.ak + '/' + shortDate + '/' + this.region + '/s3/aws4_request';\n queryParams['X-Amz-Date'] = longDate;\n queryParams['X-Amz-Expires'] = String(expires);\n let signedAndCanonicalHeaders = getSignedAndCanonicalHeaders(headers);\n queryParams['X-Amz-SignedHeaders'] = signedAndCanonicalHeaders[0];\n let _queryParams = {};\n let queryParamsKeys = [];\n for (let key in queryParams) {\n if ({}.hasOwnProperty.call(queryParams, key)) {\n let val = queryParams[key];\n key = encodeURIWithSafe(key, '/');\n val = encodeURIWithSafe(val);\n _queryParams[key] = val;\n queryParamsKeys.push(key);\n result += key;\n if (val) {\n result += '=' + val;\n }\n result += '&';\n }\n }\n let canonicalQueryString = '';\n queryParamsKeys.sort();\n for (let i = 0; i < queryParamsKeys.length;) {\n canonicalQueryString += queryParamsKeys[i] + '=' + _queryParams[queryParamsKeys[i]];\n if (++i !== queryParamsKeys.length) {\n canonicalQueryString += '&';\n }\n }\n let canonicalRequest = method + '\\n';\n canonicalRequest += resource + '\\n';\n canonicalRequest += canonicalQueryString + '\\n';\n canonicalRequest += signedAndCanonicalHeaders[1] + '\\n';\n canonicalRequest += signedAndCanonicalHeaders[0] + '\\n';\n canonicalRequest += 'UNSIGNED-PAYLOAD';\n let signature = getV4Signature(shortDate, longDate, this.sk, this.region, canonicalRequest);\n result += 'X-Amz-Signature=' + encodeURIWithSafe(signature);\n return {\n ActualSignedRequestHeaders: headers,\n SignedUrl: (this.isSecure ? 'https' : 'http') + '://' + host + ':' + this.port + result\n };\n};\nUtils.prototype.createPostSignatureSync = function (param) {\n let signatureContext = param.signatureContext || this.signatureContext;\n if (signatureContext.signature === 'v4') {\n return this.createV4PostSignatureSync(param);\n }\n param = param || {};\n let bucketName = param.Bucket ? String(param.Bucket) : null;\n let objectKey = param.Key ? String(param.Key) : null;\n let expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n let formParams = {};\n if (param.FormParams && param.FormParams instanceof Object && !(param.FormParams instanceof Array)) {\n for (let key in param.FormParams) {\n if ({}.hasOwnProperty.call(param.FormParams, key)) {\n formParams[key] = param.FormParams[key];\n }\n }\n }\n if (this.securityToken && !formParams[signatureContext.headerPrefix + 'security-token']) {\n formParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n }\n let expireDate = new Date();\n expireDate.setTime(parseInt(new Date().getTime(), 10) + expires * 1000);\n expireDate = getExpireDate(expireDate.toUTCString());\n if (bucketName) {\n formParams.bucket = bucketName;\n }\n if (objectKey) {\n formParams.key = objectKey;\n }\n let policy = [];\n policy.push('{\"expiration\":\"');\n policy.push(expireDate);\n policy.push('\", \"conditions\":[');\n let matchAnyBucket = true;\n let matchAnyKey = true;\n let conditionAllowKeys = ['acl', 'bucket', 'key', 'success_action_redirect', 'redirect', 'success_action_status'];\n for (let key in formParams) {\n if (!key) {\n continue;\n }\n let val = formParams[key];\n key = String(key).toLowerCase();\n if (key === 'bucket') {\n matchAnyBucket = false;\n } else if (key === 'key') {\n matchAnyKey = false;\n }\n if (allowedResponseHttpHeaderMetadataNames.indexOf(key) < 0 && conditionAllowKeys.indexOf(key) < 0 && key.indexOf(signatureContext.headerPrefix) !== 0) {\n continue;\n }\n policy.push('{\"');\n policy.push(key);\n policy.push('\":\"');\n policy.push(val !== null ? String(val) : '');\n policy.push('\"},');\n }\n if (matchAnyBucket) {\n policy.push('[\"starts-with\", \"$bucket\", \"\"],');\n }\n if (matchAnyKey) {\n policy.push('[\"starts-with\", \"$key\", \"\"],');\n }\n policy.push(']}');\n let originPolicy = policy.join('');\n if (window.btoa) {\n policy = window.btoa(originPolicy);\n } else {\n policy = Base64.encode(originPolicy);\n }\n let signature = crypto.createHmac('sha1', this.sk).update(policy).digest('base64');\n return {\n OriginPolicy: originPolicy,\n Policy: policy,\n Signature: signature,\n Token: this.ak + ':' + signature + ':' + policy\n };\n};\nUtils.prototype.createV4PostSignatureSync = function (param) {\n param = param || {};\n let signatureContext = param.signatureContext || this.signatureContext;\n let bucketName = param.Bucket ? String(param.Bucket) : null;\n let objectKey = param.Key ? String(param.Key) : null;\n let expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n let formParams = {};\n if (param.FormParams && param.FormParams instanceof Object && !(param.FormParams instanceof Array)) {\n for (let key in param.FormParams) {\n if ({}.hasOwnProperty.call(param.FormParams, key)) {\n formParams[key] = param.FormParams[key];\n }\n }\n }\n if (this.securityToken && !formParams[signatureContext.headerPrefix + 'security-token']) {\n formParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n }\n let utcDateStr = new Date().toUTCString();\n let dates = getDates(utcDateStr);\n let shortDate = dates[0];\n let longDate = dates[1];\n let credential = this.ak + '/' + shortDate + '/' + this.region + '/s3/aws4_request';\n let expireDate = new Date();\n expireDate.setTime(parseInt(new Date().getTime(), 10) + expires * 1000);\n expireDate = getExpireDate(expireDate.toUTCString());\n formParams['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n formParams['X-Amz-Date'] = longDate;\n formParams['X-Amz-Credential'] = credential;\n if (bucketName) {\n formParams.bucket = bucketName;\n }\n if (objectKey) {\n formParams.key = objectKey;\n }\n let policy = [];\n policy.push('{\"expiration\":\"');\n policy.push(expireDate);\n policy.push('\", \"conditions\":[');\n let matchAnyBucket = true;\n let matchAnyKey = true;\n let conditionAllowKeys = ['acl', 'bucket', 'key', 'success_action_redirect', 'redirect', 'success_action_status'];\n for (let key in formParams) {\n if (!key) {\n continue;\n }\n let val = formParams[key];\n key = String(key).toLowerCase();\n if (key === 'bucket') {\n matchAnyBucket = false;\n } else if (key === 'key') {\n matchAnyKey = false;\n }\n if (allowedResponseHttpHeaderMetadataNames.indexOf(key) < 0 && conditionAllowKeys.indexOf(key) < 0 && key.indexOf(signatureContext.headerPrefix) !== 0) {\n continue;\n }\n policy.push('{\"');\n policy.push(key);\n policy.push('\":\"');\n policy.push(val !== null ? String(val) : '');\n policy.push('\"},');\n }\n if (matchAnyBucket) {\n policy.push('[\"starts-with\", \"$bucket\", \"\"],');\n }\n if (matchAnyKey) {\n policy.push('[\"starts-with\", \"$key\", \"\"],');\n }\n policy.push(']}');\n let originPolicy = policy.join('');\n if (window.btoa) {\n policy = window.btoa(originPolicy);\n } else {\n policy = Base64.encode(originPolicy);\n }\n let signature = createV4Signature(shortDate, this.sk, this.region, policy);\n return {\n OriginPolicy: originPolicy,\n Policy: policy,\n Algorithm: formParams['X-Amz-Algorithm'],\n Credential: formParams['X-Amz-Credential'],\n Date: formParams['X-Amz-Date'],\n Signature: signature\n };\n};\nexport default Utils;","map":{"version":3,"names":["URI","axios","SHA","Base64","md5","xml2js","obsModel","v2Model","ContentMD5","ContentSHA256","crypto","createHmac","algorithm","key","algorithmKey","shaObj","setHMACKey","ArrayBuffer","update","message","digest","type","getHMAC","createHash","encodeFunc","window","btoa","encode","getHash","urlLib","parse","url","uri","hostname","port","host","protocol","query","path","pathname","search","CONTENT_SHA256","OBS_SDK_VERSION","mimeTypes","allowedResourceParameterNames","allowedResponseHttpHeaderMetadataNames","commonHeaders","obsAllowedStorageClass","v2AllowedStorageClass","obsAllowedAcl","v2AllowedAcl","obsAllowedUri","v2AllowedUri","obsAllowedEvent","v2AllowedEvent","ignoreNegotiationMethod","negotiateMethod","obsSignatureContext","signature","headerPrefix","headerMetaPrefix","authPrefix","v2SignatureContext","encodeURIWithSafe","str","safe","skipEncoding","String","length","ret","element","push","indexOf","encodeURIComponent","join","replace","headerTostring","obj","JSON","stringify","parseObjectFromHeaders","sentAs","headers","metadata","hasOwnProperty","call","k","toLowerCase","slice","isArray","Object","prototype","toString","isFunction","isObject","makeObjFromXml","xml","bc","parseString","err","getExpireDate","utcDateStr","date","Date","hour","getUTCHours","min","getUTCMinutes","sec","getUTCSeconds","day","getUTCDate","moth","getUTCMonth","year","getUTCFullYear","expireDate","getDates","shortDate","longDate","getSignedAndCanonicalHeaders","header","arrheadKey","arrhead","sort","signedHeaders","canonicalHeaders","i","createV4Signature","sk","region","stringToSign","dateKey","dateRegionKey","dateRegionServiceKey","signingKey","getV4Signature","canonicalRequest","scop","Utils","log_in","log","ak","securityToken","isSecure","server","pathStyle","signatureContext","isSignatureNegotiation","bucketSignatureCache","timeout","obsSdkVersion","isCname","bucketEventEmitters","useRawXhr","refresh","trim","initFactory","urlPrefix","regionDomains","setRequestHeaderHook","checksumAlgorithm","checkAlgorithm","Error","index","lastIndexOf","test","undefined","parseInt","SseKmsAdapter","value","SseModeAdapter","BucketAdapter","EventAdapter","substring","EventsAdapter","URIAdapter","StorageClassAdapter","toUpperCase","ACLAdapter","doExec","funcName","param","callback","opt","makeParam","sendRequest","doNegotiation","checkBucket","checkCache","setCache","o","that","Bucket","item","expireTime","getTime","s","n","e","shift","hasRegion","result","CommonMsg","Status","InterfaceResult","ApiVersion","Math","ceil","random","exec","_callback","Message","sliceBlob","blob","start","end","mozSlice","webkitSlice","toXml","mXml","xmlMeta","root","buildXml","_sentAs","items","parameters","data","xsiNamespace","xsiType","wrapper","_wrapper","jsonToObject","model","ifRootXMlDecode","buildObject","setValue","decode","decodeURIComponent","flag","arr","methodName","method","httpMethod","urlPath","exheaders","$requestParam","meta","_value","_key","keys","_meta","_keyValue","required","runLog","newKey","withPrefix","location","encodingSafe","pwdSentAs","rawBufMD5","Number","val","sep","mxml","isFile","dstFile","xmlAllowEmpty","xmlRoot","rawUri","Host","uriList","split","requestUri","bufSHA256","bufMD5","srcFile","File","Blob","fileSize","size","offset","Offset","partSize","PartSize","parseCommonHeaders","RequestId","Id2","contrustCommonMsg","getRequest","serverback","retryCount","params","status","Code","HostId","headersStr","doLog","logMsg","Location","redirectErr","bucketLocation","regionServer","body","respMsg","CallbackUrl","CallbackResponse","tempResult","EncodingType","Indicator","re","errMsg","code","hostId","request_id","makeRequest","Authorization","queryParams","arrPath","temp","bucketName","objectKey","createSignedUrlSync","Method","Key","Expires","Headers","QueryParams","requestDate","RequestDate","nowDate","requestDateType","setTime","toUTCString","isV4","v4Auth","doAuth","ex","header_msg","msg","_isSecure","responseType","dealingError","headerStr","onUploadProgress","onDownloadProgress","ProgressCallback","progressListener","event","lengthComputable","loaded","total","portInfo","baseUrl","httpPrefix","defaultRegion","portFlag","reopt","withCredentials","validateStatus","maxRedirects","cancelToken","CancelToken","cancelHook","contentLength","ContentLength","request","then","response","catch","xhr","XMLHttpRequest","ActiveXObject","e1","e2","open","setRequestHeader","abort","onreadystatechange","readyState","getAllResponseHeaders","headerMap","line","parts","responseText","handled","errHandler","ontimeout","onerror","onabort","upload","onprogress","send","backcall","uploadPartRetry","maxPartRetryCount","redirectRegion","interestHeader","originKey","lowerKey","obj1","obj2","_path","listvar","dates","credenttial","signedAndCanonicalHeaders","canonicalQueryString","buf","createSignedUrl","createV4SignedUrlSync","createV2SignedUrl","createV2SignedUrlSync","getStringToSign","isShareFolder","queryParamsKeys","policy","Policy","expires","Array","interestHeaders","name","resource","_resource","safeKey","_val","j","covertStorageClass","storageClass","includes","getQueryParams","prefix","Prefix","specialParam","SpecialParam","sc","AfterStringToSign","pre","forEach","getSignResult","stsToken","AWSAccessKeyId","AccessKeyId","getSignResultOpt","Promise","resolve","getSignedUrl","ActualSignedRequestHeaders","SignedUrl","hmac","_queryParams","createPostSignatureSync","createV4PostSignatureSync","formParams","FormParams","bucket","matchAnyBucket","matchAnyKey","conditionAllowKeys","originPolicy","OriginPolicy","Signature","Token","credential","Algorithm","Credential"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/esdk-obs-browserjs/src/utils.js"],"sourcesContent":["/**\n * Copyright 2019 Huawei Technologies Co.,Ltd.\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n * this file except in compliance with the License. You may obtain a copy of the\n * License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed\n * under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations under the License.\n *\n */\n\nimport URI from 'urijs';\nimport axios from 'axios';\nimport SHA from 'jssha';\nimport { Base64 } from 'js-base64';\nimport md5 from 'blueimp-md5';\nimport xml2js from './xml2js';\nimport obsModel from './obsModel';\nimport v2Model from './v2Model';\nimport { ContentMD5, ContentSHA256 } from './enums';\n\nconst crypto = {\n\t\tcreateHmac : function(algorithm, key){\n\t\t\tlet algorithmKey;\n\t\t\tif(algorithm === 'sha1'){\n\t\t\t\talgorithmKey = 'SHA-1';\n\t\t\t}else if(algorithm === 'sha512'){\n\t\t\t\talgorithmKey = 'SHA-512';\n\t\t\t}else{\n\t\t\t\talgorithmKey = 'SHA-256';\n\t\t\t}\n\t\t\tlet shaObj = new SHA(algorithmKey, 'TEXT');\n\t\t\tshaObj.setHMACKey(key, (key instanceof ArrayBuffer) ? 'ARRAYBUFFER' : 'TEXT');\n\t\t\treturn {\n\t\t\t\tupdate : function(message){\n\t\t\t\t\tshaObj.update(message);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tdigest : function(type){\n\t\t\t\t\tif(type === 'hex'){\n\t\t\t\t\t\treturn shaObj.getHMAC('HEX');\n\t\t\t\t\t}\n\t\t\t\t\tif(type === 'base64'){\n\t\t\t\t\t\treturn shaObj.getHMAC('B64');\n\t\t\t\t\t}\n\t\t\t\t\treturn shaObj.getHMAC('ARRAYBUFFER');\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\tcreateHash : function(algorithm){\n\t\t\tif(algorithm === 'md5'){\n\t\t\t\treturn {\n\t\t\t\t\tupdate : function(message){\n\t\t\t\t\t\tif(!this.message){\n\t\t\t\t\t\t\tthis.message = message;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.message += message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\tdigest : function(type){\n\t\t\t\t\t\tif(type === 'hex'){\n\t\t\t\t\t\t\treturn md5(this.message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(type === 'base64'){\n\t\t\t\t\t\t\tlet encodeFunc = window.btoa ? window.btoa : Base64.encode;\n\t\t\t\t\t\t\treturn encodeFunc(md5(this.message, false, true));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(type === 'rawbase64'){\n\t\t\t\t\t\t\tlet encodeFunc = window.btoa ? window.btoa : Base64.encode;\n\t\t\t\t\t\t\treturn encodeFunc(md5(this.message, false, true));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn md5(this.message, false, true);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet algorithmKey;\n\t\t\tif(algorithm === 'sha1'){\n\t\t\t\talgorithmKey = 'SHA-1';\n\t\t\t}else if(algorithm === 'sha512'){\n\t\t\t\talgorithmKey = 'SHA-512';\n\t\t\t}else{\n\t\t\t\talgorithmKey = 'SHA-256';\n\t\t\t}\n\t\t\tlet shaObj = new SHA(algorithmKey, 'TEXT');\n\n\t\t\treturn {\n\t\t\t\tupdate : function(message){\n\t\t\t\t\tshaObj.update(message);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\tdigest : function(type){\n\t\t\t\t\tif(type === 'hex'){\n\t\t\t\t\t\treturn shaObj.getHash('HEX');\n\t\t\t\t\t}\n\t\t\t\t\tif(type === 'base64'){\n\t\t\t\t\t\treturn shaObj.getHash('B64');\n\t\t\t\t\t}\n\t\t\t\t\treturn shaObj.getHash('ARRAYBUFFER');\n\t\t\t\t}\n\t\t\t};\n\t\t}\n};\n\nconst urlLib = {\n\t\tparse : function(url){\n\t\t\tlet uri = URI.parse(url);\n\t\t\treturn {\n\t\t\t\thostname : uri.hostname,\n\n\t\t\t\tport : uri.port,\n\n\t\t\t\thost : uri.hostname,\n\n\t\t\t\tprotocol : uri.protocol ? uri.protocol + ':' : '',\n\n\t\t\t\tquery : uri.query,\n\n\t\t\t path : uri.path + (uri.query ? '?' + uri.query : ''),\n\n\t\t\t pathname :uri.path,\n\n\t\t\t search : uri.query ? '?' + uri.query : ''\n\t\t\t};\n\t\t}\n};\n\nconst CONTENT_SHA256 = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855';\nconst OBS_SDK_VERSION = '3.22.3';\n\nconst mimeTypes = {\n '7z' : 'application/x-7z-compressed',\n 'aac' : 'audio/x-aac',\n 'ai' : 'application/postscript',\n 'aif' : 'audio/x-aiff',\n 'asc' : 'text/plain',\n 'asf' : 'video/x-ms-asf',\n 'atom' : 'application/atom+xml',\n 'avi' : 'video/x-msvideo',\n 'bmp' : 'image/bmp',\n 'bz2' : 'application/x-bzip2',\n 'cer' : 'application/pkix-cert',\n 'crl' : 'application/pkix-crl',\n 'crt' : 'application/x-x509-ca-cert',\n 'css' : 'text/css',\n 'csv' : 'text/csv',\n 'cu' : 'application/cu-seeme',\n 'deb' : 'application/x-debian-package',\n 'doc' : 'application/msword',\n 'docx' : 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'dvi' : 'application/x-dvi',\n 'eot' : 'application/vnd.ms-fontobject',\n 'eps' : 'application/postscript',\n 'epub' : 'application/epub+zip',\n 'etx' : 'text/x-setext',\n 'flac' : 'audio/flac',\n 'flv' : 'video/x-flv',\n 'gif' : 'image/gif',\n 'gz' : 'application/gzip',\n 'htm' : 'text/html',\n 'html' : 'text/html',\n 'ico' : 'image/x-icon',\n 'ics' : 'text/calendar',\n 'ini' : 'text/plain',\n 'iso' : 'application/x-iso9660-image',\n 'jar' : 'application/java-archive',\n 'jpe' : 'image/jpeg',\n 'jpeg' : 'image/jpeg',\n 'jpg' : 'image/jpeg',\n 'js' : 'text/javascript',\n 'json' : 'application/json',\n 'latex' : 'application/x-latex',\n 'log' : 'text/plain',\n 'm4a' : 'audio/mp4',\n 'm4v' : 'video/mp4',\n 'mid' : 'audio/midi',\n 'midi' : 'audio/midi',\n 'mov' : 'video/quicktime',\n 'mp3' : 'audio/mpeg',\n 'mp4' : 'video/mp4',\n 'mp4a' : 'audio/mp4',\n 'mp4v' : 'video/mp4',\n 'mpe' : 'video/mpeg',\n 'mpeg' : 'video/mpeg',\n 'mpg' : 'video/mpeg',\n 'mpg4' : 'video/mp4',\n 'oga' : 'audio/ogg',\n 'ogg' : 'audio/ogg',\n 'ogv' : 'video/ogg',\n 'ogx' : 'application/ogg',\n 'pbm' : 'image/x-portable-bitmap',\n 'pdf' : 'application/pdf',\n 'pgm' : 'image/x-portable-graymap',\n 'png' : 'image/png',\n 'pnm' : 'image/x-portable-anymap',\n 'ppm' : 'image/x-portable-pixmap',\n 'ppt' : 'application/vnd.ms-powerpoint',\n 'pptx' : 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'ps' : 'application/postscript',\n 'qt' : 'video/quicktime',\n 'rar' : 'application/x-rar-compressed',\n 'ras' : 'image/x-cmu-raster',\n 'rss' : 'application/rss+xml',\n 'rtf' : 'application/rtf',\n 'sgm' : 'text/sgml',\n 'sgml' : 'text/sgml',\n 'svg' : 'image/svg+xml',\n 'swf' : 'application/x-shockwave-flash',\n 'tar' : 'application/x-tar',\n 'tif' : 'image/tiff',\n 'tiff' : 'image/tiff',\n 'torrent' : 'application/x-bittorrent',\n 'ttf' : 'application/x-font-ttf',\n 'txt' : 'text/plain',\n 'wav' : 'audio/x-wav',\n 'webm' : 'video/webm',\n 'wma' : 'audio/x-ms-wma',\n 'wmv' : 'video/x-ms-wmv',\n 'woff' : 'application/x-font-woff',\n 'wsdl' : 'application/wsdl+xml',\n 'xbm' : 'image/x-xbitmap',\n 'xls' : 'application/vnd.ms-excel',\n 'xlsx' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'xml' : 'application/xml',\n 'xpm' : 'image/x-xpixmap',\n 'xwd' : 'image/x-xwindowdump',\n 'yaml' : 'text/yaml',\n 'yml' : 'text/yaml',\n 'zip' : 'application/zip',\n};\n\n\nconst allowedResourceParameterNames = [\n\t'inventory',\n\t'acl',\n\t'backtosource',\n 'policy',\n 'torrent',\n 'logging',\n 'location',\n 'storageinfo',\n 'quota',\n 'storageclass',\n 'storagepolicy',\n 'mirrorbacktosource',\n 'requestpayment',\n 'versions',\n 'versioning',\n 'versionid',\n 'uploads',\n 'uploadid',\n 'partnumber',\n 'website',\n 'notification',\n 'replication',\n 'lifecycle',\n 'deletebucket',\n 'delete',\n 'cors',\n 'restore',\n 'tagging',\n 'append',\n 'position',\n 'response-content-type',\n 'response-content-language',\n 'response-expires',\n 'response-cache-control',\n 'response-content-disposition',\n 'response-content-encoding',\n 'x-image-process',\n\t'x-image-save-object',\n 'x-image-save-bucket',\n 'x-oss-process',\n\t'encryption',\n\t'obsworkflowtriggerpolicy',\n\t'x-workflow-limit',\n\t'x-workflow-prefix',\n\t'x-workflow-start',\n\t'x-workflow-template-name',\n\t'x-workflow-graph-name',\n\t'x-workflow-execution-state',\n\t'x-workflow-category',\n\t'x-workflow-prefix',\n\t'x-workflow-create',\n\t'directcoldaccess',\n\t'customdomain',\n\t'cdnnotifyconfiguration',\n\t'metadata',\n\t'dispolicy',\n\t'obscompresspolicy',\n\t'template_name',\n\t'template_name_prefix',\n\t'x-workflow-status',\n\t'x-workflow-type',\n\t'x-workflow-forbid',\n\t'sfsacl',\n\t'obsbucketalias',\n\t'obsalias',\n\t'rename',\n 'name',\n 'modify',\n\t'attname',\n\t'inventory',\n\t'truncate',\n\t'object-lock',\n\t\"retention\",\n\t'x-obs-security-token',\n];\n\n\nconst allowedResponseHttpHeaderMetadataNames = [\n 'content-type',\n 'content-md5',\n 'content-length',\n 'content-language',\n 'expires',\n 'origin',\n 'cache-control',\n 'content-disposition',\n 'content-encoding',\n 'x-default-storage-class',\n 'location',\n 'date',\n 'etag',\n 'host',\n 'last-modified',\n 'content-range',\n 'x-reserved',\n 'access-control-allow-origin',\n 'access-control-allow-headers',\n 'access-control-max-age',\n 'access-control-allow-methods',\n 'access-control-expose-headers',\n\t'connection',\n\t'x-obs-location-clustergroup-id'\n];\n\nconst commonHeaders = {\n\t'content-length' : 'ContentLength',\n\t'date' : 'Date',\n\t'x-reserved' : 'Reserved'\n};\n\nconst obsAllowedStorageClass = ['STANDARD', 'WARM', 'COLD', 'DEEP_ARCHIVE', 'INTELLIGENT_TIERING'];\n\nconst v2AllowedStorageClass = ['STANDARD', 'STANDARD_IA', 'GLACIER', 'DEEP_ARCHIVE', 'INTELLIGENT_TIERING'];\n\nconst obsAllowedAcl = ['private', 'public-read', 'public-read-write', 'public-read-delivered', 'public-read-write-delivered'];\n\nconst v2AllowedAcl = ['private', 'public-read', 'public-read-write', 'authenticated-read', 'bucket-owner-read', 'bucket-owner-full-control', 'log-delivery-write'];\n\nconst obsAllowedUri = ['Everyone', 'LogDelivery'];\n\nconst v2AllowedUri = ['http://acs.amazonaws.com/groups/global/AllUsers', 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers', 'http://acs.amazonaws.com/groups/s3/LogDelivery'];\n\nconst obsAllowedEvent = ['ObjectCreated', 'ObjectCreated:*', 'ObjectCreated:Put', 'ObjectCreated:Post', 'ObjectCreated:Copy', 'ObjectCreated:CompleteMultipartUpload', \n\t'ObjectRemoved', 'ObjectRemoved:*', 'ObjectRemoved:Delete', 'ObjectRemoved:DeleteMarkerCreated',\n\t'ObjectChanged:*', 'ObjectChanged:Rename', 'ObjectChanged:Truncate', 'ObjectChanged:Modify'];\nconst v2AllowedEvent = ['ObjectCreated', 's3:ObjectCreated:*', 's3:ObjectCreated:Put', 's3:ObjectCreated:Post', 's3:ObjectCreated:Copy','s3:ObjectCreated:CompleteMultipartUpload', \n\t'ObjectRemoved', 's3:ObjectRemoved:*', 's3:ObjectRemoved:Delete', 's3:ObjectRemoved:DeleteMarkerCreated', 'ObjectRemoved:*', 'ObjectRemoved:Delete', 'ObjectRemoved:DeleteMarkerCreated',\n 'ObjectChanged:*', 'ObjectChanged:Rename', 'ObjectChanged:Truncate', 'ObjectChanged:Modify'];\n\nconst ignoreNegotiationMethod =['CreateBucket','SetBucketAlias','BindBucketAlias','UnbindBucketAlias','DeleteBucketAlias','GetBucketAlias'];\nconst negotiateMethod = 'HeadApiVersion';\n\nconst obsSignatureContext = {\n\tsignature :\t'obs',\n\theaderPrefix : 'x-obs-',\n\theaderMetaPrefix : 'x-obs-meta-',\n\tauthPrefix : 'OBS'\n};\n\nconst v2SignatureContext = {\n\tsignature :\t'v2',\n\theaderPrefix : 'x-amz-',\n\theaderMetaPrefix : 'x-amz-meta-',\n\tauthPrefix : 'AWS'\n};\n\nfunction encodeURIWithSafe(str, safe, skipEncoding){\n\tstr = String(str);\n\tif(str.length === 0){\n\t\treturn '';\n\t}\n\tif(skipEncoding){\n\t\treturn str;\n\t}\n\tlet ret;\n\tif (safe) {\n\t\tret = [];\n\t\tfor (const element of str) {\n\t\t\tret.push(safe.indexOf(element) >= 0 ? element : encodeURIComponent(element));\n\t\t}\n\t\tret = ret.join('');\n\t}else{\n\t\tret = encodeURIComponent(str);\n\t}\n\treturn ret.replace(/!/g, '%21')\n\t\t\t .replace(/\\*/g, '%2A')\n\t\t\t .replace(/'/g, '%27')\n\t\t\t .replace(/\\(/g, '%28')\n\t\t\t .replace(/\\)/g, '%29');\n}\n\nfunction headerTostring(obj){\n\treturn JSON ? JSON.stringify(obj) : '';\n}\n\nfunction parseObjectFromHeaders(sentAs, headers){\n\tlet metadata = {};\n\tfor(let key in headers){\n\t\tif ({}.hasOwnProperty.call(headers, key)) {\n\t\t\tlet k = String(key).toLowerCase();\n\t\t\tif (k.indexOf(sentAs) === 0) {\n\t\t\t\tmetadata[k.slice(sentAs.length)] = headers[key];\n\t\t\t}\n\t\t}\n\t}\n\treturn metadata;\n}\n\nfunction isArray(obj){\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction isFunction(obj){\n\treturn Object.prototype.toString.call(obj) === '[object Function]';\n}\n\nfunction isObject(obj){\n\treturn Object.prototype.toString.call(obj) === '[object Object]';\n}\n\n\nfunction makeObjFromXml(xml, bc){\n\tif (typeof xml === 'object') {\n\t\treturn bc(null, xml);\n\t}\n\ttry{\n\t\treturn bc(null, xml2js.parseString(xml));\n\t}catch(err){\n\t\treturn bc(err, null);\n\t}\n}\n\nfunction getExpireDate(utcDateStr){\n\tlet date = new Date(Date.parse(utcDateStr));\n\tlet hour = date.getUTCHours();\n\tlet min = date.getUTCMinutes();\n\tlet sec = date.getUTCSeconds();\n\tlet day = date.getUTCDate();\n\tlet moth = date.getUTCMonth() + 1;\n\tlet year = date.getUTCFullYear();\n\tlet expireDate = '';\n\texpireDate += year + '-';\n\n\tif(moth < 10){\n\t\texpireDate += '0';\n\t}\n\texpireDate += moth + '-';\n\n\tif(day < 10){\n\t\texpireDate += '0';\n\t}\n\texpireDate += day + 'T';\n\n\tif(hour < 10){\n\t\texpireDate += '0';\n\t}\n\texpireDate += hour + ':';\n\n\tif(min < 10){\n\t\texpireDate += '0';\n\t}\n\texpireDate += min + ':';\n\n\tif(sec < 10){\n\t\texpireDate += '0';\n\t}\n\texpireDate += sec + 'Z';\n\treturn expireDate;\n}\n\nfunction getDates(utcDateStr){\n\tlet date = new Date(Date.parse(utcDateStr));\n\tlet hour = date.getUTCHours();\n\tlet min = date.getUTCMinutes();\n\tlet sec = date.getUTCSeconds();\n\tlet day = date.getUTCDate();\n\tlet moth = date.getUTCMonth() + 1;\n\tlet year = date.getUTCFullYear();\n\tlet shortDate = '';\n\tlet longDate = '';\n\tshortDate += year;\n\n\tif(moth < 10){\n\t\tshortDate += '0';\n\t}\n\tshortDate += moth;\n\n\tif(day < 10){\n\t\tshortDate += '0';\n\t}\n\tshortDate += day;\n\n\tlongDate += shortDate + 'T';\n\tif(hour < 10){\n\t\tlongDate += '0';\n\t}\n\tlongDate += hour;\n\n\tif(min < 10){\n\t\tlongDate += '0';\n\t}\n\tlongDate += min;\n\n\tif(sec < 10){\n\t\tlongDate += '0';\n\t}\n\tlongDate += sec + 'Z';\n\treturn [shortDate, longDate];\n}\n\nfunction getSignedAndCanonicalHeaders(header){\n\tlet arrheadKey = [];\n\tlet arrhead = {};\n\tfor(let key in header){\n\t\tif ({}.hasOwnProperty.call(header, key)) {\n\t\t\tarrheadKey.push(key.toLowerCase());\n\t\t\tarrhead[key.toLowerCase()] = header[key];\n\t\t}\n\t}\n\tarrheadKey = arrheadKey.sort();\n\tlet signedHeaders = '';\n\tlet canonicalHeaders = '';\n\tfor(let i = 0; i < arrheadKey.length; i++){\n\t\tif(i !== 0){\n\t\t\tsignedHeaders += ';';\n\t\t}\n\t\tsignedHeaders += arrheadKey[i];\n\t\tcanonicalHeaders += arrheadKey[i] + ':' + arrhead[arrheadKey[i]] + '\\n';\n\t}\n\treturn [signedHeaders, canonicalHeaders];\n}\n\nfunction createV4Signature(shortDate, sk, region, stringToSign){\n\tlet dateKey = crypto.createHmac('sha256', 'AWS4' + sk).update(shortDate).digest();\n\tlet dateRegionKey = crypto.createHmac('sha256', dateKey).update(region).digest();\n\tlet dateRegionServiceKey = crypto.createHmac('sha256', dateRegionKey).update('s3').digest();\n\tlet signingKey = crypto.createHmac('sha256', dateRegionServiceKey).update('aws4_request').digest();\n\tlet signature = crypto.createHmac('sha256', signingKey).update(stringToSign).digest('hex');\n\treturn signature;\n}\n\nfunction getV4Signature(shortDate,longDate, sk, region, canonicalRequest){\n\tlet scop = shortDate + '/' + region + '/s3/aws4_request';\n\tlet stringToSign = 'AWS4-HMAC-SHA256\\n';\n\tstringToSign += longDate + '\\n';\n\tstringToSign += scop + '\\n';\n\tstringToSign += crypto.createHash('sha256').update(canonicalRequest).digest('hex');\n\treturn createV4Signature(shortDate, sk, region, stringToSign);\n}\n\nfunction Utils(log_in) {\n\tthis.log = log_in;\n\tthis.ak = null;\n\tthis.sk = null;\n\tthis.securityToken = null;\n\tthis.isSecure = true;\n\tthis.server = null;\n\tthis.pathStyle = false;\n\tthis.signatureContext = null;\n\tthis.isSignatureNegotiation = true;\n\tthis.bucketSignatureCache = {};\n\tthis.region = 'region';\n\tthis.port = null;\n\tthis.timeout = 300;\n\tthis.obsSdkVersion = OBS_SDK_VERSION;\n\tthis.isCname = false;\n\tthis.bucketEventEmitters = {};\n\tthis.useRawXhr = false;\n}\n\nUtils.prototype.encodeURIWithSafe = encodeURIWithSafe;\n\nUtils.prototype.mimeTypes = mimeTypes;\n\nUtils.prototype.refresh = function(ak, sk, securityToken){\n\tthis.ak = ak ? String(ak).trim() : null;\n\tthis.sk = sk ? String(sk).trim(): null;\n\tthis.securityToken = securityToken ? String(securityToken).trim() : null;\n};\n\nUtils.prototype.initFactory = function(ak, sk, isSecure,\n\t\tserver, pathStyle, signature, region, port, timeout, securityToken, isSignatureNegotiation,\n\t\tisCname, urlPrefix, regionDomains, setRequestHeaderHook, useRawXhr, checksumAlgorithm){\n\n\tthis.refresh(ak, sk, securityToken);\n\n this.urlPrefix = urlPrefix || '';\n this.regionDomains = regionDomains || null;\n this.setRequestHeaderHook = setRequestHeaderHook || null;\n\tthis.checkAlgorithm = ContentMD5;\n\n\tif (typeof checksumAlgorithm === 'string' && checksumAlgorithm.toLowerCase() === 'sha256') {\n\t\tthis.checkAlgorithm = ContentSHA256;\n\t}\n\t\n\tif (!server) {\n\t\tthrow new Error('Server is not set');\n\t}\n\n\tserver = String(server).trim();\n\n\tif(server.indexOf('https://') === 0){\n\t\tserver = server.slice('https://'.length);\n\t\tisSecure = true;\n\t}else if(server.indexOf('http://') === 0){\n\t\tserver = server.slice('http://'.length);\n\t\tisSecure = false;\n\t}\n\n\tlet index = server.lastIndexOf('/');\n\twhile(index >= 0){\n\t\tserver = server.slice(0, index);\n\t\tindex = server.lastIndexOf('/');\n\t}\n\n\tindex = server.indexOf(':');\n\tif(index >= 0){\n\t\tport = server.slice(index + 1);\n\t\tserver = server.slice(0, index);\n\t}\n\tthis.server = server;\n\n\tif(/^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$/.test(this.server)){\n\t\tpathStyle = true;\n\t}\n\n\tif (isSecure !== undefined) {\n\t\tthis.isSecure = isSecure;\n\t}\n\tif (pathStyle !== undefined) {\n\t\tthis.pathStyle = pathStyle;\n\t}\n\n\tif (signature !== undefined) {\n\t\tsignature = String(signature).trim().toLowerCase();\n\t}else{\n\t\tsignature = 'obs';\n\t}\n\n\tif(isSignatureNegotiation !== undefined){\n\t\tthis.isSignatureNegotiation = isSignatureNegotiation;\n\t}\n\n\tthis.isCname = isCname;\n\n\tif(this.pathStyle || this.isCname){\n\t\tthis.isSignatureNegotiation = false;\n\t\tif(signature === 'obs'){\n\t\t\tsignature = 'v2';\n\t\t}\n\t}\n\n\tthis.signatureContext = signature === 'obs' ? obsSignatureContext : v2SignatureContext;\n\n\tif(region !== undefined){\n\t\tthis.region = String(region);\n\t}\n\n\tthis.port = port ? parseInt(port, 10) : (this.isSecure ? 443 : 80);\n\n\tif(timeout !== undefined){\n\t\tthis.timeout = parseInt(timeout, 10);\n\t}\n\n\tif(useRawXhr !== undefined){\n\t\tthis.useRawXhr = useRawXhr;\n\t}\n};\n\nUtils.prototype.SseKmsAdapter = function(value, signatureContext){\n\tvalue = value || '';\n\tvalue = String(value);\n\tlet index = value.indexOf('aws:');\n\tif(signatureContext.signature === 'obs'){\n\t\treturn index === 0 ? value.slice(4) : value;\n\t}\n\treturn index === 0 ? value : 'aws:' + value;\n};\n\nUtils.prototype.SseModeAdapter = function(value, signatureContext){\n\tvalue = value || '';\n\tvalue = String(value);\n\tlet index = value.indexOf('aws:');\n\tif(signatureContext.signature === 'obs'){\n\t\treturn index === 0 ? value.slice(4) : value;\n\t}\n\treturn index === 0 ? value : 'aws:' + value;\n};\n\nUtils.prototype.BucketAdapter = function(value, signatureContext){\n\tvalue = value || '';\n\tvalue = String(value);\n\tlet index = value.indexOf('arn:aws:s3:::');\n\tif(signatureContext.signature === 'obs'){\n\t\treturn index === 0 ? value.slice('arn:aws:s3:::'.length) : value;\n\t}\n\treturn index === 0 ? value : 'arn:aws:s3:::' + value;\n};\n\nUtils.prototype.EventAdapter = function(value, signatureContext){\n\tvalue = value || '';\n\tvalue = String(value);\n\tif(signatureContext.signature === 'obs'){\n\t\tif(obsAllowedEvent.indexOf(value) >= 0){\n\t\t\treturn value;\n\t\t}\n\t\tif(v2AllowedEvent.indexOf(value) >= 0){\n\t\t\treturn value.substring(3);\n\t\t}\n\t\treturn '';\n\t}\n\tif(v2AllowedEvent.indexOf(value) >= 0){\n\t\treturn value;\n\t}\n\tif(obsAllowedEvent.indexOf(value) >= 0){\n\t\treturn 's3:' + value;\n\t}\n\treturn '';\n};\n\nUtils.prototype.EventsAdapter = function(value, signatureContext){\n\treturn this.EventAdapter(value, signatureContext);\n};\n\n\nUtils.prototype.URIAdapter = function(value, signatureContext){\n\tvalue = value || '';\n\tvalue = String(value);\n\tif(signatureContext.signature === 'obs'){\n\t\tif(obsAllowedUri.indexOf(value) >= 0){\n\t\t\treturn value;\n\t\t}\n\t\tif(value === 'AllUsers' || value === 'http://acs.amazonaws.com/groups/global/AllUsers'){\n\t\t\treturn 'Everyone';\n\t\t}\n\t\treturn '';\n\t}\n\tif(v2AllowedUri.indexOf(value) >= 0){\n\t\treturn value;\n\t}\n\tif(value === 'Everyone' || value === 'AllUsers'){\n\t\treturn 'http://acs.amazonaws.com/groups/global/AllUsers';\n\t}\n\tif(value === 'AuthenticatedUsers'){\n\t\treturn 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers';\n\t}\n\tif(value === 'LogDelivery'){\n\t\treturn 'http://acs.amazonaws.com/groups/s3/LogDelivery';\n\t}\n\treturn '';\n};\n\n\nUtils.prototype.StorageClassAdapter = function(value, signatureContext){\n\tvalue = value || '';\n\tvalue = String(value).toUpperCase();\n\tif(signatureContext.signature === 'obs'){\n\t\tif(obsAllowedStorageClass.indexOf(value) >= 0){\n\t\t\treturn value;\n\t\t}\n\t\tif(value === 'STANDARD_IA'){\n\t\t\treturn 'WARM';\n\t\t}\n\t\tif(value === 'GLACIER'){\n\t\t\treturn 'COLD';\n\t\t}\n\t\treturn '';\n\t}\n\tif(v2AllowedStorageClass.indexOf(value) >= 0){\n\t\treturn value;\n\t}\n\tif(value === 'WARM'){\n\t\treturn 'STANDARD_IA';\n\t}\n\tif(value === 'COLD'){\n\t\treturn 'GLACIER';\n\t}\n\treturn '';\n};\n\nUtils.prototype.ACLAdapter = function(value, signatureContext){\n\tvalue = value || '';\n\tvalue = String(value).toLowerCase();\n\tif(signatureContext.signature === 'obs'){\n\t\tif(obsAllowedAcl.indexOf(value) >= 0){\n\t\t\treturn value;\n\t\t}\n\t\treturn '';\n\t}\n\tif(value === 'public-read-delivered'){\n\t\tvalue = 'public-read';\n\t}else if(value === 'public-read-write-delivered'){\n\t\tvalue = 'public-read-write';\n\t}\n\n\tif(v2AllowedAcl.indexOf(value) >= 0){\n\t\treturn value;\n\t}\n\treturn '';\n};\n\nUtils.prototype.doExec = function(funcName, param, callback){\n\tlet opt = this.makeParam(funcName, param);\n\tif('err' in opt){\n\t\treturn callback(opt.err, null);\n\t}\n\tthis.sendRequest(funcName, opt, callback);\n};\n\nUtils.prototype.doNegotiation = function(funcName, param, callback, checkBucket, checkCache, setCache){\n\tlet o = null;\n\tlet that = this;\n\tif(checkCache && param.Bucket){\n\t\tlet item = this.bucketSignatureCache[param.Bucket];\n\t\tif(item && item.signatureContext && item.expireTime > new Date().getTime()){\n\t\t\tparam.signatureContext = item.signatureContext;\n\t\t\tlet opt = this.makeParam(funcName, param);\n\t\t\tif('err' in opt){\n\t\t\t\treturn callback(opt.err, null);\n\t\t\t}\n\t\t\topt.signatureContext = item.signatureContext;\n\t\t\treturn this.sendRequest(funcName, opt, callback);\n\t\t}\n\n\t\to = this.bucketEventEmitters[param.Bucket];\n\t\tif(!o){\n\t\t\to = {\n\t\t\t\ts : 0,\n\t\t\t\tn : function(){\n\t\t\t\t\twhile(this.e && this.e.length > 0){\n\t\t\t\t\t\tthis.e.shift()();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.bucketEventEmitters[param.Bucket] = o;\n\t\t}\n\n\t\tif(o.s){\n\t\t\to.e.push(function(){\n\t\t\t\tthat.doNegotiation(funcName, param, callback, checkBucket, checkCache, setCache);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\to.e = [];\n\t\to.s = 1;\n\t}\n\n\tthis.doExec(negotiateMethod, checkBucket ? {Bucket:param.Bucket, hasRegion: param.hasRegion} : {}, function(err, result){\n\t\tif(err){\n\t\t\tcallback(err, null);\n\t\t\tif(o){\n\t\t\t\to.s = 0;\n\t\t\t\to.n();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif((checkBucket && result.CommonMsg.Status === 404) || result.CommonMsg.Status >= 500){\n\t\t\tcallback(err, result);\n\t\t\tif(o){\n\t\t\t\to.s = 0;\n\t\t\t\to.n();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet signatureContext = v2SignatureContext;\n\t\tif(result.CommonMsg.Status < 300 && result.InterfaceResult && result.InterfaceResult.ApiVersion >= '3.0'){\n\t\t\tsignatureContext = obsSignatureContext;\n\t\t}\n\t\tif(setCache){\n\t\t\tthat.bucketSignatureCache[param.Bucket] = {\n\t\t\t\tsignatureContext : signatureContext,\n\t\t\t\texpireTime : new Date().getTime() + 15 + (Math.ceil(Math.random()*5)) * 60 * 1000\n\t\t\t};\n\t\t}\n\n\t\tif(o){\n\t\t\to.s = 0;\n\t\t\to.n();\n\t\t}\n\t\tparam.signatureContext = signatureContext;\n\t\tlet opt = that.makeParam(funcName, param);\n\t\tif('err' in opt){\n\t\t\treturn callback(opt.err, null);\n\t\t}\n\t\topt.signatureContext = signatureContext;\n\t\tthat.sendRequest(funcName, opt, callback);\n\t});\n};\n\nUtils.prototype.exec = function(funcName, param, callback){\n\tlet that = this;\n\tif(that.isSignatureNegotiation && funcName !== negotiateMethod){\n\t\tif (funcName === 'ListBuckets') {\n\t\t\tthat.doNegotiation(funcName, param, callback, false, false, false);\n\t\t} else if (ignoreNegotiationMethod.indexOf(funcName) > -1) {\n\t\t\tlet _callback = function(err, result){\n\t\t\t\tif(!err && result.CommonMsg.Status === 400 &&\n\t\t\t\t\t\tresult.CommonMsg.Message === 'Unsupported Authorization Type' &&\n\t\t\t\t\t\tparam.signatureContext &&\n\t\t\t\t\t\tparam.signatureContext.signature === 'v2'){\n\t\t\t\t\tparam.signatureContext = v2SignatureContext;\n\t\t\t\t\tlet opt = that.makeParam(funcName, param);\n\t\t\t\t\tif('err' in opt){\n\t\t\t\t\t\treturn callback(opt.err, null);\n\t\t\t\t\t}\n\t\t\t\t\topt.signatureContext = param.signatureContext;\n\t\t\t\t\tthat.sendRequest(funcName, opt, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcallback(err, result);\n\t\t\t};\n\n\t\t\tthat.doNegotiation(funcName, param, _callback, false, true, false);\n\t\t}else{\n\t\t\tthat.doNegotiation(funcName, param, callback, true, true, true);\n\t\t}\n\t\treturn;\n\t}\n\tthat.doExec(funcName, param, callback);\n};\n\n\nUtils.prototype.sliceBlob = function (blob, start, end, type) {\n type = type || blob.type;\n if (blob.mozSlice) {\n return blob.mozSlice(start, end, type);\n }\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end, type);\n }\n return blob.slice(start, end, type);\n};\n\n\nUtils.prototype.toXml = function(mXml, xmlMeta, root, sentAs, signatureContext){\n\tlet xml = '';\n\tif(root !== null){\n\t\txml += this.buildXml(mXml, xmlMeta, root, sentAs, signatureContext);\n\t\treturn xml;\n\t}\n\tfor (let key in xmlMeta){\n\t\tif(key in mXml){\n\t\t\tlet _sentAs = xmlMeta[key].sentAs || key;\n\t\t\txml += this.buildXml(mXml, xmlMeta[key], key, _sentAs, signatureContext);\n\t\t}\n\t}\n\treturn xml;\n};\n\nUtils.prototype.buildXml = function(mXml, xmlMeta, key, sentAs, signatureContext){\n\tlet xml = '';\n\tlet type = xmlMeta.type;\n\tif(type === 'array'){\n\t\tfor(let i = 0; i < mXml[key].length; i++){\n\t\t\tif(xmlMeta.items.type === 'object'){\n\t\t\t\tif (!mXml[key][i]) {\n\t\t\t\t\treturn xml;\n\t\t\t\t}\n\t\t\t\tlet result = this.toXml(mXml[key][i], xmlMeta.items.parameters, null, null, signatureContext);\n\t\t\t\tif(result !== ''){\n\t\t\t\t\txml += '<'+sentAs +'>'+ result + '</'+sentAs +'>';\n\t\t\t\t}\n\t\t\t}else if(xmlMeta.items.type === 'adapter'){\n\t\t\t\txml += '<' + sentAs + '>' + String(this[key + 'Adapter'](mXml[key][i], signatureContext)).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</' + sentAs + '>';\n\t\t\t}else if(xmlMeta.items.type !== 'array'){\n\t\t\t\txml += '<' + sentAs + '>'+ String(mXml[key][i]).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</' + sentAs +'>';\n\t\t\t}\n\t\t}\n\t}else if(type === 'object'){\n\t\tif (!mXml[key]) {\n\t\t\treturn xml;\n\t\t}\n\t\tlet result = this.toXml(mXml[key], xmlMeta.parameters, null, null, signatureContext);\n\t\tif(result !== ''){\n\t\t\txml += '<'+sentAs;\n\t\t\tif('data' in xmlMeta){\n\t\t\t\tif('xsiNamespace' in xmlMeta.data){\n\t\t\t\t\txml += ' xmlns:xsi=\"' + xmlMeta.data.xsiNamespace + '\"';\n\t\t\t\t}\n\t\t\t\tif('xsiType' in xmlMeta.data){\n\t\t\t\t\txml += ' xsi:type=\"' + mXml[key][xmlMeta.data.xsiType] + '\"';\n\t\t\t\t}\n\t\t\t}\n\t\t\txml += '>';\n\t\t\txml += result + '</'+sentAs +'>';\n\t\t}\n\n\t}else if(type === 'adapter'){\n\t\txml += '<' + sentAs + '>' + String(this[key + 'Adapter'](mXml[key], signatureContext)).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</' + sentAs + '>';\n\t}else if(type !== 'ignore'){\n\t\txml += '<'+ sentAs + '>' + String(mXml[key]).replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/\"/g, '&quot;') + '</'+sentAs+'>';\n\t}\n\tif(xml && xmlMeta.wrapper){\n\t\tlet _wrapper = xmlMeta.wrapper;\n\t\txml = '<' + _wrapper + '>' + xml + '</' + _wrapper + '>';\n\t}\n\treturn xml;\n};\n\nUtils.prototype.jsonToObject = function(model, obj, root, ifRootXMlDecode){\n\tlet opt = {};\n\tif(root !== null){\n\t\tthis.buildObject(model, obj, root, opt, ifRootXMlDecode);\n\t}else{\n\t\tfor(let key in model){\n\t\t\tif ({}.hasOwnProperty.call(model, key)) {\n\t\t\t\tthis.buildObject(model, obj, key, opt, ifRootXMlDecode);\n\t\t\t}\n\t\t}\n\t}\n\treturn opt;\n};\n\nUtils.prototype.buildObject = function(model, obj, key, opt, ifRootXMlDecode){\n\n\tlet setValue = function (value) {\n\t\tif(value === undefined) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn value && model[key].decode && ifRootXMlDecode\n\t\t? decodeURIComponent(value.replace(/\\+/g, '%20'))\n\t\t: value;\n\t}\n\n\tif(isObject(obj)){\n\t\tlet flag = true;\n\t\tlet wrapper = model[key].wrapper;\n\t\tif(wrapper && wrapper in obj){\n\t\t\tobj = obj[wrapper];\n\t\t\tflag = isObject(obj);\n\t\t}\n\t\tif(flag){\n\t\t\tlet sentAs = model[key].sentAs || key;\n\t\t\tif(sentAs in obj){\n\t\t\t\tif(model[key].type === 'object'){\n\t\t\t\t\topt[key] = this.jsonToObject(model[key].parameters, obj[sentAs], null, ifRootXMlDecode);\n\t\t\t\t}else if(model[key].type === 'array'){\n\t\t\t\t\tlet arr = [];\n\t\t\t\t\tif(!isArray(obj[sentAs])){\n\t\t\t\t\t\tarr[0] = model[key].items.type === 'object' ? this.jsonToObject(model[key].items.parameters, obj[sentAs], null, ifRootXMlDecode) : setValue(obj[sentAs]['#text'] || '');\n\t\t\t\t\t}else{\n\t\t\t\t\t\tfor (let i = 0; i < obj[sentAs].length; i++ ){\n\t\t\t\t\t\t\tarr[i] = model[key].items.type === 'object' ? this.jsonToObject(model[key].items.parameters, obj[sentAs][i], null, ifRootXMlDecode) : setValue(obj[sentAs][i]['#text']);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\topt[key] = arr;\n\t\t\t\t}else{\n\t\t\t\t\topt[key] = setValue(obj[sentAs]['#text']);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif(opt[key] === undefined){\n\t\tif(model[key].type === 'object'){\n\t\t\topt[key] = model[key].parameters ? this.jsonToObject(model[key].parameters,null,null,ifRootXMlDecode) : {};\n\t\t}else if(model[key].type === 'array'){\n\t\t\topt[key] = [];\n\t\t}\n\t}\n\n};\n\nUtils.prototype.makeParam = function(methodName, param){\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\tlet model = signatureContext.signature === 'obs' ? obsModel[methodName] : v2Model[methodName];\n\tlet method = model.httpMethod;\n\tlet uri = '/';\n\tlet urlPath = '';\n\tlet xml = '';\n\tlet exheaders = {};\n\tlet opt = {};\n\topt.$requestParam = param;\n\n\tif ('urlPath' in model){\n\t\turlPath += '?';\n\t\turlPath += model.urlPath;\n\t}\n\tfor (let key in model.parameters){\n\t\tif ({}.hasOwnProperty.call(model.parameters, key)) {\n\t\t\tlet meta = model.parameters[key];\n\t\t\tif (key === 'Bucket' && this.isCname) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet _value = param[key];\n\n\t\t\tif (meta.type === 'callback' && _value === undefined && meta.parameters && (param['CallbackUrl'] !== undefined || param['CallbackBody'] !== undefined)) {\n\t\t\t\t_value = {};\n\t\t\t\tfor (let _key of Object.keys(meta.parameters)) {\n\t\t\t\t\tconst _meta = meta.parameters[_key];\n\t\t\t\t\tconst _keyValue = param[_key];\n\t\t\t\t\tif (_meta.required && (_keyValue === null || _keyValue === undefined || (Object.prototype.toString.call(_keyValue) === '[object String]' && _keyValue === ''))) {\n\t\t\t\t\t\topt.err = _key + ' is a required element!';\n\t\t\t\t\t\tthis.log.runLog('error', methodName, opt.err);\n\t\t\t\t\t\treturn opt;\n\t\t\t\t\t}\n\t\t\t\t\tconst newKey = _key.slice(0, 1).toLowerCase() + _key.slice(1); \n\t\t\t\t\t_value[newKey] = _keyValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (meta.required && (_value === null || _value === undefined || (Object.prototype.toString.call(_value) === '[object String]' && _value === ''))) {\n\t\t\t\topt.err = key + ' is a required element!';\n\t\t\t\tthis.log.runLog('error', methodName, opt.err);\n\t\t\t\treturn opt;\n\t\t\t}\n\n\t\t\tif (_value !== null && _value !== undefined) {\n\t\t\t\tif (meta.type === 'srcFile' || meta.type === 'dstFile') {\n\t\t\t\t\topt[meta.type] = _value;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (meta.type === 'plain') {\n\t\t\t\t\topt[key] = _value;\n\t\t\t\t}\n\n\t\t\t\tlet sentAs = meta.sentAs || key;\n\n\t\t\t\tif (meta.withPrefix) {\n\t\t\t\t\tsentAs = signatureContext.headerPrefix + sentAs;\n\t\t\t\t}\n\n\t\t\t\tif (meta.location === 'uri') {\n\t\t\t\t\tif (uri !== '/') {\n\t\t\t\t\t\turi += '/';\n\t\t\t\t\t}\n\t\t\t\t\turi += _value;\n\t\t\t\t} else if (meta.location === 'header') {\n\t\t\t\t\tlet safe = meta.encodingSafe || ' ;/?:@&=+$,';\n\t\t\t\t\tif (meta.type === 'object') {\n\t\t\t\t\t\tif (signatureContext.headerMetaPrefix === sentAs) {\n\t\t\t\t\t\t\tfor (let item in _value) {\n\t\t\t\t\t\t\t\tif ({}.hasOwnProperty.call(_value, item)) {\n\t\t\t\t\t\t\t\t\tlet value = _value[item];\n\t\t\t\t\t\t\t\t\titem = String(item).trim().toLowerCase();\n\t\t\t\t\t\t\t\t\texheaders[item.indexOf(sentAs) === 0 ? item : sentAs + item] = encodeURIWithSafe(value, safe);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (meta.type === 'array') {\n\t\t\t\t\t\tlet arr = [];\n\t\t\t\t\t\tfor (let item in _value) {\n\t\t\t\t\t\t\tif ({}.hasOwnProperty.call(_value, item)) {\n\t\t\t\t\t\t\t\tarr[item] = encodeURIWithSafe(_value[item], safe);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\texheaders[sentAs] = arr;\n\t\t\t\t\t} else if (meta.type === 'password') {\n\t\t\t\t\t\tlet encodeFunc = window.btoa ? window.btoa : Base64.encode;\n\t\t\t\t\t\texheaders[sentAs] = encodeFunc(_value);\n\t\t\t\t\t\tlet pwdSentAs = meta.pwdSentAs || (sentAs + '-MD5');\n\t\t\t\t\t\texheaders[pwdSentAs] = this.rawBufMD5(_value);\n\t\t\t\t\t} else if (meta.type === 'number' && Number(_value)) {\n\t\t\t\t\t\texheaders[sentAs] = encodeURIWithSafe(String(_value), safe);\n\t\t\t\t\t} else if (meta.type === 'boolean') {\n\t\t\t\t\t\texheaders[sentAs] = encodeURIWithSafe(_value ? 'true' : 'false', safe);\n\t\t\t\t\t} else if (meta.type === 'callback') {\n\t\t\t\t\t\texheaders[sentAs] = Base64.encode(JSON.stringify(_value))\n\t\t\t\t\t} else if (meta.type === 'adapter') {\n\t\t\t\t\t\tlet val = this[key + 'Adapter'](_value, signatureContext);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\texheaders[sentAs] = encodeURIWithSafe(String(val), safe);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\texheaders[sentAs] = encodeURIWithSafe(String(_value), safe, meta.skipEncoding);\n\t\t\t\t\t}\n\t\t\t\t} else if (meta.location === 'urlPath') {\n\t\t\t\t\tlet sep = urlPath === '' ? '?' : '&';\n\t\t\t\t\tlet value = _value;\n\t\t\t\t\tif (meta.type !== 'number' || (meta.type === 'number' && Number(value) >= 0)) {\n\t\t\t\t\t\turlPath += sep + encodeURIWithSafe(sentAs, '/') + '=' + encodeURIWithSafe(String(value), '/');\n\t\t\t\t\t}\n\t\t\t\t} else if (meta.location === 'xml') {\n\t\t\t\t\tlet mxml = this.toXml(param, meta, key, sentAs, signatureContext);\n\t\t\t\t\tif (mxml) {\n\t\t\t\t\t\txml += mxml;\n\t\t\t\t\t}\n\t\t\t\t} else if (meta['location'] === 'body') {\n\t\t\t\t\txml = _value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlet isFile = opt.dstFile === 'file';\n\n\tif(!('Content-Type' in exheaders) && !isFile){\n\t\texheaders['Content-Type'] = 'binary/octet-stream';\n\t}\n\n\tif('data' in model && 'xmlRoot' in model.data){\n\t\tif(xml || model.data.xmlAllowEmpty){\n\t\t\tlet xmlRoot = model.data.xmlRoot;\n\t\t\txml = '<' + xmlRoot + '>' + xml + '</' + xmlRoot + '>';\n\t\t\texheaders['Content-Type'] = 'application/xml';\n\t\t}\n\t}\n\tif(isFile){\n\t\topt.rawUri = uri;\n\t}\n\n\texheaders.Host = this.server + ((this.port === 80 || this.port === 443) ? '' : ':' + this.port);\n\n\tif(!this.pathStyle && !this.isCname){\n\t\tlet uriList = uri.split('/');\n\t\tif(uriList.length >= 2 && uriList[1]){\n\t\t\texheaders.Host = uriList[1] + '.' + exheaders.Host;\n\t\t\tlet requestUri = uri.replace(uriList[1], '');\n\t\t\tif(requestUri.indexOf('//') === 0){\n\t\t\t\trequestUri = requestUri.slice(1);\n\t\t\t}\n\t\t\tif(signatureContext.signature === 'v4'){\n\t\t\t\turi = requestUri;\n\t\t\t}else if(requestUri === '/'){\n\t\t\t\turi += '/';\n\t\t\t}\n\t\t\topt.requestUri = encodeURIWithSafe(requestUri, '/');\n\t\t}\n\t}\n\topt.method = method;\n\topt.uri = encodeURIWithSafe(uri, '/');\n\topt.urlPath = urlPath;\n\tif(xml){\n\t\tif(model.data && model.data.md5){\n\t\t\tthis.checkAlgorithm === ContentSHA256 \n\t\t\t\t? exheaders[`${signatureContext.headerPrefix}${ContentSHA256.toLowerCase()}`] = this.bufSHA256(xml, 'hex')\n\t\t\t\t: exheaders[ContentMD5] = this.bufMD5(xml);\n\t\t\texheaders['Content-Length'] = xml.length === 0 ? '0' : String(xml.length);\n\t\t}\n\t\topt.xml = xml;\n\t\tthis.log.runLog('debug', methodName, 'request content:' + xml);\n\t}\n\n\topt.headers = exheaders;\n\n\tif('srcFile' in opt){\n\t\tif((opt.srcFile instanceof window.File) || (opt.srcFile instanceof window.Blob)){\n\t\t\tlet fileSize = opt.srcFile.size;\n\t\t\tif ('Content-Length' in opt.headers || 'PartSize' in opt || 'Offset' in opt) {\n\t\t\t\tlet offset = opt.Offset;\n\t\t\t\toffset = (offset && offset >= 0 && offset < fileSize) ? offset : 0;\n\t\t\t\tlet partSize;\n\t\t\t\tif('PartSize' in opt){\n\t\t\t\t\tpartSize = opt.PartSize;\n\t\t\t\t}else if('Content-Length' in opt.headers){\n\t\t\t\t\tpartSize = parseInt(opt.headers['Content-Length'], 10);\n\t\t\t\t}else{\n\t\t\t\t\tpartSize = fileSize;\n\t\t\t\t}\n\t\t\t\tpartSize = (partSize && partSize > 0 && partSize <= fileSize - offset) ? partSize : fileSize - offset;\n\t\t\t\topt.PartSize = partSize;\n\t\t\t\topt.Offset = offset;\n\t\t\t\topt.headers['Content-Length'] = String(opt.PartSize);\n\t\t\t}\n\t\t}\n\t}\n\treturn opt;\n};\n\nUtils.prototype.parseCommonHeaders = function(opt, headers, signatureContext){\n\tfor(let key in commonHeaders){\n\t\tif ({}.hasOwnProperty.call(commonHeaders, key)) {\n\t\t\topt.InterfaceResult[commonHeaders[key]] = headers[key];\n\t\t}\n\t}\n\topt.InterfaceResult.RequestId = headers[signatureContext.headerPrefix + 'request-id'];\n\topt.InterfaceResult.Id2 = headers[signatureContext.headerPrefix + 'id-2'];\n\topt.CommonMsg.RequestId = opt.InterfaceResult.RequestId;\n\topt.CommonMsg.Id2 = opt.InterfaceResult.Id2;\n};\n\nUtils.prototype.contrustCommonMsg = function(opt, obj, headers, signatureContext){\n\topt.InterfaceResult = {};\n\tthis.parseCommonHeaders(opt, headers, signatureContext);\n\tfor (let key in obj){\n\t\tif(obj[key].location !== 'header'){\n\t\t\tcontinue;\n\t\t}\n\t\tlet sentAs = obj[key].sentAs || key;\n\n\t\tif(obj[key].withPrefix){\n\t\t\tsentAs = signatureContext.headerPrefix + sentAs;\n\t\t}\n\n\t\tif(obj[key].type === 'object'){\n\t\t\topt.InterfaceResult[key] = parseObjectFromHeaders(sentAs, headers);\n\t\t}else{\n\t\t\tlet val = null;\n\t\t\tif(sentAs in headers){\n\t\t\t\tval = headers[sentAs];\n\t\t\t}else if(sentAs.toLowerCase() in headers){\n\t\t\t\tval = headers[sentAs.toLowerCase()];\n\t\t\t}\n\t\t\tif(val !== null){\n\t\t\t\topt.InterfaceResult[key] = val;\n\t\t\t}\n\t\t}\n\t}\n};\n\n\nUtils.prototype.getRequest = function(methodName, serverback, signatureContext, retryCount, params, bc){\n let regionDomains = this.regionDomains;\n\tlet opt = {};\n\tlet log = this.log;\n\tlet model = signatureContext.signature === 'obs' ? obsModel[methodName + 'Output'] : v2Model[methodName + 'Output'];\n\tmodel = model || {};\n\tlet obj = model.parameters || {};\n\topt.CommonMsg = {\n\t\tStatus : serverback.status,\n\t\tCode : '',\n\t\tMessage : '',\n\t\tHostId : '',\n\t\tRequestId : '',\n\t\tInterfaceResult : null\n\t};\n\n\tlet headers = serverback.headers;\n\tlet headersStr = headerTostring(headers);\n\n\tlog.runLog('info', methodName, 'get response start, statusCode:' + serverback.status);\n\tlog.runLog('debug', methodName, 'response msg :statusCode:' + serverback.status + ', headers:' + headersStr);\n\n\tlet doLog = function(){\n\t\tlet logMsg = 'Status:' + opt.CommonMsg.Status + ', Code:' + opt.CommonMsg.Code + ', Message:' + opt.CommonMsg.Message;\n\t\tlog.runLog('debug', methodName, 'exec interface ' + methodName + ' finish, ' + logMsg);\n\t\tbc(null, opt);\n\t};\n\n\tif(serverback.status >= 300 && serverback.status < 400 && serverback.status !== 304 && retryCount <= 5){\n let location = headers.location || headers.Location;\n\t\tif(location){\n\t\t\tlet err = 'http code is 3xx, need to redirect to ' + location;\n\t\t\tlog.runLog('warn', methodName, err);\n\t\t\tlet redirectErr = new Error('redirect');\n\t\t\tredirectErr.location = location;\n\t\t\tredirectErr.bucketLocation = headers['x-amz-bucket-region'] || headers['x-obs-bucket-region'];\n\t\t\treturn bc(redirectErr);\n\t\t}\n\t\tlet bucketLocation = headers['x-amz-bucket-region'] || headers['x-obs-bucket-location'];\n\t\tif (bucketLocation && regionDomains[bucketLocation]) {\n let regionServer = (this.isSecure ? 'https://' : 'http://') + regionDomains[bucketLocation];\n\t\t\tif (isFunction(this.setRequestHeaderHook)) {\n\t\t\t\tthis.setRequestHeaderHook(headers, params, methodName, regionDomains[bucketLocation]);\n\t\t\t}\n let err = 'get redirect code 3xx, need to redirect to' + regionServer;\n log.runLog('error', methodName, err);\n let redirectErr = new Error('redirect');\n\t\t\tredirectErr.location = regionServer;\n return bc(redirectErr);\n }\n\t\tlog.runLog('error', methodName, 'get redirect code 3xx, but no location in headers');\n\t}\n\n\tif(serverback.status < 300){\n\t\tlet body = serverback.data;\n\t\tthis.contrustCommonMsg(opt, obj, headers, signatureContext);\n\t\tlet respMsg = 'Status: ' + opt.CommonMsg.Status + ', headers: ' + headersStr;\n\t\tif(body){\n\t\t\trespMsg += 'body length: ' + body.length;\n\t\t\tlog.runLog('debug', methodName, 'response body length:' + body.length);\n\t\t}\n\t\tlog.runLog('debug', methodName, respMsg);\n\n\t\tif(body && ('data' in model)){\n\t\t\tif (params.CallbackUrl && model.CallbackResponse) {\n\t\t\t\topt.InterfaceResult[model.CallbackResponse.sentAs] = body;\n\t\t\t\tdoLog();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(model.data.type === 'xml'){\n\t\t\t\tlet that = this;\n\t\t\t\treturn makeObjFromXml(body, function(err, result){\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tlog.runLog('error', methodName, 'change xml to json err [' + headerTostring(err) + ']' );\n\t\t\t\t\t\treturn bc(err, null);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tempResult = result;\n\t\t\t\t\tif(model.data.xmlRoot && (model.data.xmlRoot in tempResult)){\n\t\t\t\t\t\ttempResult = result[model.data.xmlRoot];\n\t\t\t\t\t}\n\t\t\t\t\tlet ifRootXMlDecode = tempResult.EncodingType ? true : false;\n\t\t\t\t\tif(isObject(tempResult)){\n\t\t\t\t\t\tfor (let key in obj){\n\t\t\t\t\t\t\tif(obj[key].location === 'xml'){\n\t\t\t\t\t\t\t\topt.InterfaceResult[key] = that.jsonToObject(obj,tempResult,key,ifRootXMlDecode)[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tdoLog();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(model.data.type === 'body'){\n\t\t\t\tfor (let key in obj){\n\t\t\t\t\tif(obj[key].location === 'body'){\n\t\t\t\t\t\topt.InterfaceResult[key] = body;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn doLog();\n\t}\n\n\tlet body = serverback.data;\n\tlet respMsg = 'Status: ' + opt.CommonMsg.Status + ', headers: ' + headersStr;\n\tif(body !== ''){\n\t\trespMsg += 'body: ' + body;\n\t\tlog.runLog('debug', methodName, 'response body :' + body);\n\t}\n\topt.CommonMsg.RequestId = headers[signatureContext.headerPrefix + 'request-id'];\n\topt.CommonMsg.Id2 = headers[signatureContext.headerPrefix + 'id2'];\n\topt.CommonMsg.Indicator = headers['x-reserved-indicator'];\n\n\tlog.runLog('info', methodName, 'request finished with request id:' + opt.CommonMsg.RequestId);\n\tlog.runLog('debug', methodName, respMsg);\n\n\tif(!body){\n\t\treturn doLog();\n\t}\n\n\treturn makeObjFromXml(body, function(err, re){\n\t\tif(err){\n\t\t\tlog.runLog('error', methodName, 'change xml to json err [' + headerTostring(err) + ']' );\n\t\t\topt.CommonMsg.Message = err.message;\n\t\t}else if(re){\n\t\t\tif ('Error' in re) {\n\t\t\t\tlet errMsg = re.Error;\n\t\t\t\tfor(let param in errMsg) {\n\t\t\t\t\tif (errMsg[param] && errMsg[param]['#text']) {\n\t\t\t\t\t\topt.CommonMsg[param] = errMsg[param]['#text'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet errMsg = re;\n\t\t\t\tif('code' in errMsg){\n\t\t\t\t\topt.CommonMsg.Code = errMsg.code;\n\t\t\t\t}\n\t\t\t\tif('message' in errMsg){\n\t\t\t\t\topt.CommonMsg.Message = errMsg.message;\n\t\t\t\t}\n\t\t\t\tif('hostId' in errMsg){\n\t\t\t\t\topt.CommonMsg.HostId = errMsg.hostId;\n\t\t\t\t}\n\t\t\t\tif(('request_id' in errMsg) && errMsg.request_id){\n\t\t\t\t\topt.CommonMsg.RequestId = errMsg.request_id;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlog.runLog('error', methodName, 'request error with error code:' + opt.CommonMsg.Code + ', error message:' + opt.CommonMsg.Message + ', request id:' + opt.CommonMsg.RequestId);\n\t\t}\n\t\tdoLog();\n\t});\n};\n\nUtils.prototype.makeRequest = function(methodName, opt, retryCount, bc){\n\tlet log = this.log;\n\tlet body = opt.xml || null;\n\tlet signatureContext = opt.signatureContext || this.signatureContext;\n\tdelete opt.headers.Authorization; // retry bug fix\n\n\tif(opt.dstFile === 'file'){\n\t\tlet queryParams = {};\n\t\tif(opt.urlPath){\n\t\t\tlet path = opt.urlPath.slice(1);\n\t\t\tlet arrPath = path.split('&');\n\t\t\tfor(let i=0;i<arrPath.length;i++){\n\t\t\t\tif(arrPath[i].indexOf('=') === -1){\n\t\t\t\t\tqueryParams[arrPath[i]] = '';\n\t\t\t\t}else{\n\t\t\t\t\tlet temp = arrPath[i].split('=');\n\t\t\t\t\tqueryParams[temp[0]] = temp[1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet rawUri = opt.rawUri.split('/');\n\t\tlet bucketName = rawUri[1];\n\t\tlet objectKey = opt.rawUri.slice(('/' + bucketName + '/').length);\n\t\t\n\t\tif (this.isCname) {\n\t\t\tobjectKey = opt.rawUri.slice(1);\n\t\t\tbucketName = ''\n\t\t}\n\n\t\tlet ret = {};\n\t\tret.CommonMsg = {\n\t\t\tStatus : 0,\n\t\t\tCode : '',\n\t\t\tMessage : '',\n\t\t\tHostId : ''\n\t\t};\n\t\tret.InterfaceResult = {};\n\t\tlet model = signatureContext.signature === 'obs' ? obsModel[methodName + 'Output'] : v2Model[methodName + 'Output'];\n\t\tlet obj = model.parameters;\n\t\tfor (let key in obj){\n\t\t\tif(obj[key].location === 'body'){\n\t\t\t\tret.InterfaceResult[key] = this.createSignedUrlSync({\n\t\t\t\t\tMethod : opt.method,\n\t\t\t\t\tBucket : bucketName,\n\t\t\t\t\tKey : objectKey,\n\t\t\t\t\tExpires : 3600,\n\t\t\t\t\tHeaders : opt.headers,\n\t\t\t\t\tQueryParams : queryParams,\n\t\t\t\t\tsignatureContext : signatureContext\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn bc(null, ret);\n\t}\n\n\tlet requestDate = opt.$requestParam.RequestDate;\n\tlet nowDate;\n\tlet requestDateType = Object.prototype.toString.call(requestDate);\n\tif(requestDateType === '[object Date]'){\n\t\tnowDate = requestDate;\n\t}else if(requestDateType === '[object String]'){\n\t\ttry{\n\t\t\tnowDate = new Date();\n\t\t\tnowDate.setTime(Date.parse(requestDate));\n\t\t}catch(e){\n\t\t\t// ignore\n\t\t}\n\t}\n\n\tif(!nowDate){\n\t\tnowDate = new Date();\n\t}\n\n\tlet utcDateStr = nowDate.toUTCString();\n\tlet isV4 = signatureContext.signature.toLowerCase() === 'v4';\n\topt.headers[signatureContext.headerPrefix + 'date'] = isV4 ? getDates(utcDateStr)[1] : utcDateStr;\n\tlet path = (opt.requestUri ? opt.requestUri : opt.uri) + opt.urlPath;\n\n\tif(this.ak && this.sk && methodName !== negotiateMethod){\n\t\tif(this.securityToken){\n\t\t\topt.headers[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n\t\t}\n\t\tif(isV4){\n\t\t\tthis.v4Auth(opt, methodName, signatureContext);\n\t\t}else{\n\t\t\tthis.doAuth(opt, methodName, signatureContext);\n\t\t}\n\t}\n\n\tlet ex = opt.headers;\n if (isFunction(this.setRequestHeaderHook)) {\n this.setRequestHeaderHook(ex, opt.$requestParam, methodName);\n }\n\tlet host = ex.Host;\n\tlet method = opt.method;\n\tlet header_msg = {};\n\tfor (let key in ex){\n\t\tif ({}.hasOwnProperty.call(ex, key)) {\n\t\t\theader_msg[key] = ex[key];\n\t\t}\n\t}\n\theader_msg.Authorization = '****';\n\tlet msg = 'method:' + method + ', path:' + path + 'headers:' + headerTostring(header_msg);\n\tif (body) {\n\t\tmsg += 'body:' + body;\n\t}\n\tlog.runLog('info', methodName, 'prepare request parameters ok,then Send request to service start');\n\tlog.runLog('debug', methodName, 'request msg:' + msg);\n\n\tlet _isSecure = opt.protocol ? opt.protocol.toLowerCase().indexOf('https') === 0 : this.isSecure;\n\tlet port = opt.port || this.port;\n\n\t// avoid to set unsafe headers\n\tdelete ex.Host;\n\tdelete ex['Content-Length'];\n\n\tlet responseType = 'text';\n\tif(opt.dstFile && opt.dstFile !== 'file' && (opt.dstFile === 'arraybuffer' || opt.dstFile === 'blob')){\n\t\tresponseType = String(opt.dstFile);\n\t}\n\n\tlet start = nowDate.getTime();\n\tlet that = this;\n\n\tlet dealingError = function(err) {\n\t\t// with angular, headerTostring may lead to exception.\n\t\ttry {\n\t\t\tlet headerStr = headerTostring(err);\n\t\t\tlog.runLog('error', methodName, 'Send request to service error [' + headerStr + ']');\n\t\t} catch(e) {\n\t\t\tif (err.toString) {\n\t\t\t\tlog.runLog('error', methodName, 'Send request to service error [' + err.toString() + ']');\n\t\t\t}\n\t\t}\n\t\tlog.runLog('info', methodName, 'http cost ' + (new Date().getTime()-start) + ' ms');\n\t\tbc(err, null);\n\t}\n\n\tif(!this.useRawXhr){\n\t\tlet onUploadProgress = null;\n\t\tlet onDownloadProgress = null;\n\t\tif(isFunction(opt.ProgressCallback)){\n\t\t\tlet progressListener = function(event){\n\t\t\t\tif(event.lengthComputable){\n\t\t\t\t\topt.ProgressCallback(event.loaded, event.total, (new Date().getTime() - start) / 1000);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif(method === 'GET'){\n\t\t\t\tonDownloadProgress = progressListener;\n\t\t\t}else if(method === 'PUT' || method === 'POST'){\n\t\t\t\tonUploadProgress = progressListener;\n\t\t\t}\n\t\t}\n\t\tlet portInfo = ':' + port;\n\t\tif (host.indexOf(':') >=0 ) {\n\t\t\tportInfo = '';\n\t\t}\n\t\t// 适配cf2,在请求中增加通配符\n\t\tlet baseUrl='';\n\t\tlet httpPrefix = _isSecure ? 'https://' : 'http://';\n\t\tif (this.urlPrefix && isFunction(this.setRequestHeaderHook) && methodName !== 'UploadPart') {\n\t\t\tlet defaultRegion = true;\n\t\t\tif(opt.$requestParam['hasRegion']||opt.$requestParam['redirectRegion']){\n\t\t\t\tdefaultRegion = false;\n\t\t\t}\n\n\t\t\tlet portFlag='';\n\t\t\tif(port === 5443){\n\t\t\t\tportFlag='-5443';\n\t\t\t}\n\n\t\t\tif (defaultRegion) {\n\t\t\t\tif (opt.$requestParam['Bucket']) {\n\t\t\t\t\tif(opt.$requestParam['Bucket'].indexOf('.') !== -1){\n\t\t\t\t\t\tbaseUrl = httpPrefix + this.urlPrefix + '/bucket'+ portFlag;\n\t\t\t\t\t}\n\t\t\t\t\tbaseUrl = httpPrefix + this.urlPrefix + '/bucket'+ portFlag;\n\t\t\t\t} else {\n\t\t\t\t\tif (path.split('?')[0] === '/') {\n\t\t\t\t\t\tbaseUrl = httpPrefix + this.urlPrefix + portFlag;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbaseUrl = httpPrefix + this.urlPrefix + '/place' + portFlag;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (opt.$requestParam['Bucket']) {\n\t\t\t\t\tbaseUrl = httpPrefix + this.urlPrefix + '/region-bucket'+ portFlag;\n\t\t\t\t} else {\n\t\t\t\t\tbaseUrl = httpPrefix + this.urlPrefix + '/region'+ portFlag;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tbaseUrl = httpPrefix + host + portInfo;\n\t\t}\n\n\t\tlet reopt = {\n\t\t\tmethod : method,\n\t\t\t// fix bug, axios will abandon the base url if the request url starts with '//', so use the completed url to avoid it\n\t\t\turl : baseUrl + path,\n\t\t\twithCredentials: false,\n\t\t\theaders : ex,\n\t\t\tvalidateStatus: function(status){\n\t\t\t\treturn status >= 200;\n\t\t\t},\n\t\t\tmaxRedirects : 0,\n\t\t\tresponseType : responseType,\n\t\t\tdata : body,\n\t\t\ttimeout : this.timeout * 1000,\n\t\t\tonUploadProgress : onUploadProgress,\n\t\t\tonDownloadProgress : onDownloadProgress,\n\t\t\tcancelToken : new axios.CancelToken(function(cancelHook){\n\t\t\t\topt.$requestParam.cancelHook = cancelHook;\n\t\t\t})\n\t\t};\n\t\tif(opt.srcFile){\n\t\t\tif(!(opt.srcFile instanceof window.File) && !(opt.srcFile instanceof window.Blob)){\n\t\t\t\treturn bc(new Error('source file must be an instance of window.File or window.Blob'), null);\n\t\t\t}\n\n\t\t\tlet srcFile = opt.srcFile;\n\t\t\ttry{\n\t\t\t\tif(opt.Offset >= 0 && opt.PartSize > 0){\n\t\t\t\t\tsrcFile = this.sliceBlob(srcFile, opt.Offset, opt.Offset + opt.PartSize);\n\t\t\t\t}else if('ContentLength' in opt){\n\t\t\t\t\tlet contentLength = parseInt(opt.ContentLength, 10);\n\t\t\t\t\tif(contentLength > 0){\n\t\t\t\t\t\tsrcFile = this.sliceBlob(srcFile, 0, contentLength);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch (e) {\n\t\t\t\treturn bc(e);\n\t\t\t}\n\n\t\t\treopt.data = srcFile;\n\t\t}\n\t\taxios.request(reopt).then(function (response) {\n\t\t\tlog.runLog('info', methodName, 'http cost ' + (new Date().getTime()-start) + ' ms');\n\t\t\tthat.getRequest(methodName, response, signatureContext, retryCount, opt.$requestParam, bc);\n\t\t}).catch(function (err) {\n\t\t\tdealingError(err);\n\t\t});\n\t\treturn;\n\t}\n\n\tlet xhr = null;\n\t// Firefox, Opera 8.0+, Safari\n\ttry {\n\t\txhr = new XMLHttpRequest();\n\t} catch (e) {\n\t\ttry { // InternetExplorer\n\t\t\txhr = new ActiveXObject('Msxml2.XMLHTTP');\n\t\t} catch (e1) {\n\t\t\ttry {\n\t\t\t\txhr = new ActiveXObject('Microsoft.XMLHTTP');\n\t\t\t} catch (e2) {\n\t\t\t}\n\t\t}\n\t}\n\n \tif(xhr === null){\n \t\treturn bc(new Error('XHR is not available'), null);\n \t}\n\n\tif(opt.srcFile){\n\t\tif(!(opt.srcFile instanceof window.File) && !(opt.srcFile instanceof window.Blob)){\n\t\t\treturn bc(new Error('source file must be an instance of window.File or window.Blob'), null);\n\t\t}\n\n\t\ttry{\n\t\t\tlet srcFile = opt.srcFile;\n\t\t\tif(opt.Offset >= 0 && opt.PartSize > 0){\n\t\t\t\tsrcFile = this.sliceBlob(srcFile, opt.Offset, opt.Offset + opt.PartSize);\n\t\t\t}else if('ContentLength' in opt){\n\t\t\t\tlet contentLength = parseInt(opt.ContentLength, 10);\n\t\t\t\tif(contentLength > 0){\n\t\t\t\t\tsrcFile = this.sliceBlob(srcFile, 0, contentLength);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbody = srcFile;\n\t\t}catch (e) {\n\t\t\treturn bc(e);\n\t\t}\n\t}\n\txhr.open(method, (_isSecure ? 'https://' + this.urlPrefix + host : 'http://' + this.urlPrefix + host) + path);\n\txhr.withCredentials = false;\n\tfor(let key in ex){\n\t\tif ({}.hasOwnProperty.call(ex, key)) {\n\t\t\txhr.setRequestHeader(key, ex[key]);\n\t\t}\n\t}\n\txhr.timeout = that.timeout * 1000;\n\txhr.responseType = responseType;\n\topt.$requestParam.cancelHook = function(){\n\t\txhr.abort();\n\t};\n\txhr.onreadystatechange = function(){\n\t\tif(xhr.readyState === 4 && xhr.status >= 200) {\n\t\t\tlog.runLog('info', methodName, 'http cost ' + (new Date().getTime()-start) + ' ms');\n\t\t\tlet headers = xhr.getAllResponseHeaders();\n\t\t let arr = headers.trim().split(/[\\r\\n]+/);\n\t\t let headerMap = {};\n\t\t for(let i=0;i<arr.length;i++){\n\t\t \tlet line = arr[i];\n\t\t \tlet parts = line.split(': ');\n\t\t\t let header = parts.shift();\n\t\t\t let value = parts.join(': ');\n\t\t\t headerMap[header.toLowerCase()] = value;\n\t\t }\n\t\t let data = xhr.response;\n\t\t if(!data && (responseType === '' || responseType === 'text')){\n\t\t \tdata = xhr.responseText;\n\t\t }\n\t\t\tlet response = {\n\t\t\t\tstatus : xhr.status,\n\t\t\t\theaders : headerMap,\n\t\t\t\tdata : data\n\t\t\t};\n\t\t\tthat.getRequest(methodName, response, signatureContext, retryCount, opt.$requestParam, bc);\n\t\t}\n\t};\n\n\tlet handled = false;\n\tlet errHandler = function(err){\n\t\tif(handled){\n\t\t\treturn;\n\t\t}\n\t\thandled = true;\n\t\tdealingError(err);\n\t};\n\n\t// For the compatibility with Axios\n\txhr.ontimeout = function(){\n\t\terrHandler(new Error('timeout of ' + xhr.timeout + 'ms exceed'));\n\t};\n\n\t// For the compatibility with Axios\n\txhr.onerror = function(){\n\t\terrHandler(new Error('Network Error'));\n\t};\n\n\t// For the compatibility with Axios\n\txhr.onabort = function(){\n\t\terrHandler(new Error('Cancel'));\n\t};\n\n\tif(xhr.upload){\n\t\t// For the compatibility with Axios\n\t\txhr.upload.ontimeout = function(){\n\t\t\terrHandler(new Error('timeout of ' + xhr.timeout + 'ms exceed'));\n\t\t};\n\n\t\t// For the compatibility with Axios\n\t\txhr.upload.onerror = function(){\n\t\t\terrHandler(new Error('Network Error'));\n\t\t};\n\n\t\t// For the compatibility with Axios\n\t\txhr.upload.onabort = function(e){\n\t\t\terrHandler(new Error('Cancel'));\n\t\t};\n\t}\n\n\tif(isFunction(opt.ProgressCallback)){\n\t\tif(method === 'GET' || !xhr.upload){\n\t\t\txhr.onprogress = function(event){\n\t\t\t\tif(event.lengthComputable){\n\t\t\t\t\topt.ProgressCallback(event.loaded, event.total, (new Date().getTime() - start) / 1000);\n\t\t\t\t}\n\t\t\t};\n\t\t}else if(method === 'PUT' || method === 'POST'){\n\t\t\txhr.upload.onprogress = function(event){\n\t\t\t\tif(event.lengthComputable){\n\t\t\t\t\topt.ProgressCallback(event.loaded, event.total, (new Date().getTime() - start) / 1000);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\txhr.send(body);\n};\n\nUtils.prototype.sendRequest = function(funcName, opt, backcall, retryCount){\n\tif(retryCount === undefined){\n\t\tretryCount = 1;\n\t}\n\tlet uploadPartRetry = false\n\tif(retryCount <= opt.$requestParam.maxPartRetryCount){\n\t\tuploadPartRetry = true\n\t}\n\tconst host = opt.headers.Host\n\tlet that = this;\n\tthat.makeRequest(funcName, opt, retryCount, function(err, msg){\n\t\tif(err && err.message === 'redirect'){\n\t\t\tlet uri = urlLib.parse(err.location);\n\t\t\tif(err.bucketLocation && uri.hostname.indexOf(opt.$requestParam['Bucket']) !== -1){\n\t\t\t\topt.$requestParam.redirectRegion =err.bucketLocation;\n\t\t\t}\n\t\t\topt.headers.Host = uri.hostname;\n\t\t\topt.protocol = uri.protocol;\n\t\t\topt.port = uri.port || ((opt.protocol && opt.protocol.toLowerCase().indexOf('https') === 0) ? 443 : 80);\n\t\t\tthat.sendRequest(funcName, opt, backcall, retryCount + 1);\n\t\t}else if(funcName === 'UploadPart' && uploadPartRetry && (err || msg.CommonMsg.Status > 300)){\n\t\t\topt.headers.Host = host\n\t\t\tthat.sendRequest(funcName, opt, backcall, retryCount + 1);\n\t\t}else{\n\t\t\tbackcall(err, msg);\n\t\t}\n\t});\n};\n\n\nUtils.prototype.doAuth = function(opt, methodName, signatureContext) {\n\tlet interestHeader = ['Content-MD5', 'Content-Type'];\n\tlet stringToSign = opt.method + '\\n';\n\tfor(let i=0;i<interestHeader.length;i++){\n\t\tif(interestHeader[i] in opt.headers){\n\t\t\tstringToSign += opt.headers[interestHeader[i]];\n\t\t}\n\t\tstringToSign += '\\n';\n\t}\n\tif (!((signatureContext.headerPrefix + 'date') in opt.headers)){\n\t\tstringToSign += opt.headers.Date;\n\t}\n\tstringToSign += '\\n';\n\n\tlet temp = [];\n\tfor(let originKey in opt.headers){\n\t\tif ({}.hasOwnProperty.call(opt.headers, originKey)) {\n\t\t\tlet lowerKey = originKey.toLowerCase();\n\t\t\tif (lowerKey.indexOf(signatureContext.headerPrefix) === 0) {\n\t\t\t\ttemp.push({\n\t\t\t\t\tkey: lowerKey,\n\t\t\t\t\tvalue: opt.headers[originKey]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\ttemp = temp.sort(function (obj1, obj2) {\n\t\tif (obj1.key < obj2.key) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (obj1.key > obj2.key) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n\tfor(let i=0;i<temp.length;i++){\n\t\tlet key = temp[i].key;\n\t\tlet val = key.indexOf(signatureContext.headerMetaPrefix) === 0 ? temp[i].value.trim() : temp[i].value;\n\t\tstringToSign += key + ':' + val + '\\n';\n\t}\n\n\tlet path = opt.uri;\n\tif(this.isCname){\n\t\tif(path === '/'){\n\t\t\tpath += opt.headers.Host + '/';\n\t\t}else if(path.indexOf('/') === 0){\n\t\t\tpath = '/' + opt.headers.Host + path;\n\t\t}\n\t}\n\tif(opt.urlPath){\n\t\tlet _path = opt.urlPath.slice(1);\n\t\tlet arrPath = _path.split('&').sort();\n\t\tlet urlPath = '';\n\t\tfor(let i=0;i<arrPath.length;i++){\n\t\t\tlet listvar = arrPath[i].split('=');\n\t\t\tlet key = decodeURIComponent(listvar[0]);\n\t\t\tif(allowedResourceParameterNames.indexOf(key.toLowerCase()) >= 0){\n\t\t\t\turlPath += urlPath === '' ? '?' : '&';\n\t\t\t\turlPath += key;\n\t\t\t\tif(listvar.length === 2 && listvar[1]){\n\t\t\t\t\turlPath += '=' + decodeURIComponent(listvar[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tpath += urlPath;\n\t}\n\tstringToSign += path;\n\tthis.log.runLog('debug', methodName, 'stringToSign:' + stringToSign);\n\topt.headers.Authorization = signatureContext.authPrefix + ' ' + this.ak + ':' + crypto.createHmac('sha1', this.sk).update(stringToSign).digest('base64');\n};\n\nUtils.prototype.v4Auth = function(opt, methodName, signatureContext){\n\topt.headers[signatureContext.headerPrefix + 'content-sha256'] = CONTENT_SHA256;\n\tlet header = opt.headers;\n\tlet log = this.log;\n\tlet shortDate = null;\n\tlet longDate = null;\n\n\tif((signatureContext.headerPrefix + 'date') in header){\n\t\tlongDate = header[signatureContext.headerPrefix + 'date'];\n\t\tshortDate = longDate.slice(0, longDate.indexOf('T'));\n\t}else{\n\t\tlet dates = getDates(header.Date);\n\t\tshortDate = dates[0];\n\t\tlongDate = dates[1];\n\t}\n\n\tlet credenttial = this.ak + '/' + shortDate + '/' + this.region + '/s3/aws4_request';\n\n\tlet signedAndCanonicalHeaders = getSignedAndCanonicalHeaders(header);\n\n\tlet signedHeaders = signedAndCanonicalHeaders[0];\n\tlet canonicalHeaders = signedAndCanonicalHeaders[1];\n\n\tlet canonicalQueryString = '';\n\tif(opt.urlPath){\n\t\tlet path = opt.urlPath.slice(1);\n\t\tlet arrPath = path.split('&');\n\t\tarrPath = arrPath.sort();\n\t\tfor(let i=0;i<arrPath.length;i++){\n\t\t\tcanonicalQueryString += arrPath[i];\n\t\t\tif(arrPath[i].indexOf('=') === -1){\n\t\t\t\tcanonicalQueryString += '=';\n\t\t\t}\n\t\t\tif(i !== arrPath.length -1){\n\t\t\t\tcanonicalQueryString += '&';\n\t\t\t}\n\t\t}\n\t}\n\tlet canonicalRequest = opt.method + '\\n';\n\tcanonicalRequest += opt.uri + '\\n';\n\tcanonicalRequest += canonicalQueryString + '\\n';\n\tcanonicalRequest += canonicalHeaders + '\\n';\n\tcanonicalRequest += signedHeaders + '\\n';\n\tcanonicalRequest += CONTENT_SHA256;\n\tlog.runLog('debug', methodName, 'canonicalRequest:' + canonicalRequest);\n\n\tlet signature = getV4Signature(shortDate, longDate, this.sk, this.region, canonicalRequest);\n\n\topt.headers.Authorization = 'AWS4-HMAC-SHA256 Credential=' + credenttial + ',SignedHeaders=' + signedHeaders + ',Signature=' + signature;\n};\n\n\nUtils.prototype.bufMD5 = function(buf) {\n\treturn crypto.createHash('md5').update(buf).digest('base64');\n};\n\nUtils.prototype.bufSHA256 = function(buf, type = 'base64') {\n\treturn crypto.createHash('sha256').update(buf).digest(type);\n};\n\nUtils.prototype.rawBufMD5 = function(buf) {\n\treturn crypto.createHash('md5').update(buf).digest('rawbase64');\n};\n\nUtils.prototype.createSignedUrl = function(param){\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\treturn signatureContext.signature.toLowerCase() === 'v4' ? this.createV4SignedUrlSync(param) : this.createV2SignedUrl(param);\n};\n\nUtils.prototype.createSignedUrlSync = function(param){\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\treturn signatureContext.signature.toLowerCase() === 'v4' ? this.createV4SignedUrlSync(param) : this.createV2SignedUrlSync(param);\n};\n\nUtils.prototype.getStringToSign = function(opt, param) {\n\tlet {isShareFolder, queryParams, queryParamsKeys} = opt\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\tlet method = param.Method ? String(param.Method) : 'GET';\n\tlet bucketName = param.Bucket ? String(param.Bucket) : null;\n\tlet objectKey = param.Key ? String(param.Key) : null;\n\tlet policy = param.Policy ? String(param.Policy) : null;\n\tlet expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n\tif(expires < 0){\n\t\texpires = 300;\n\t}\n\texpires = parseInt(new Date().getTime() / 1000, 10) + expires;\n\t\n\tlet headers = {};\n\tif(param.Headers && (param.Headers instanceof Object) && !(param.Headers instanceof Array)){\n\t\tfor(let key in param.Headers) {\n\t\t\tif ({}.hasOwnProperty.call(param.Headers, key)) {\n\t\t\t\theaders[key] = param.Headers[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tlet interestHeaders = {};\n\tfor(let name in headers){\n\t\tif ({}.hasOwnProperty.call(headers, name)) {\n\t\t\tlet key = String(name).toLowerCase();\n\t\t\tif (key === 'content-type' || key === 'content-md5' || key.length > signatureContext.headerPrefix.length && key.slice(0, signatureContext.headerPrefix.length) === signatureContext.headerPrefix) {\n\t\t\t\tinterestHeaders[key] = headers[name];\n\t\t\t}\n\t\t}\n\t}\n\n\tlet resource = '';\n\tlet host = this.server;\n\tif(this.isCname){\n\t\tresource += '/' + host + '/';\n\t}else if(bucketName){\n\t\tresource += '/' + bucketName;\n\t\tif(!this.pathStyle){\n\t\t\thost = bucketName + '.' + host;\n\t\t\tresource += '/';\n\t\t}\n\t}\n\n\tif(objectKey){\n\t\tif(resource.lastIndexOf('/') !== resource.length - 1){\n\t\t\tresource += '/';\n\t\t}\n\t\tobjectKey = encodeURIWithSafe(objectKey, '/');\n\t\tresource += objectKey;\n\t}\n\n\tif(resource === ''){\n\t\tresource = '/';\n\t}\n\n\t// 拼接查询参数\n\tqueryParamsKeys.sort();\n\tlet flag = false;\n\tlet _resource = [];\n\tlet safeKey = isShareFolder ? '': '/';\n\tfor(let i=0;i<queryParamsKeys.length;i++){\n\t\tlet key = queryParamsKeys[i];\n\t\tlet val = queryParams[key];\n\t\tkey = encodeURIWithSafe(key, safeKey);\n\t\tval = encodeURIWithSafe(val, safeKey);\n\t\t// 分享文件夹不需要query信息不需要增加 policy\n\t\tif((!isShareFolder || key.toLowerCase() !== 'policy') && (allowedResourceParameterNames.indexOf(key.toLowerCase())>=0 || key.toLowerCase().indexOf(signatureContext.headerPrefix) === 0)){\n\t\t\tflag = true;\n\t\t\tlet _val = val ? key + '=' + decodeURIComponent(val) : key;\n\t\t\t_resource.push(_val);\n\t\t}\n\t}\n\t_resource = _resource.join('&');\n\tif(flag){\n\t\t_resource = '?' + _resource;\n\t}\n\tresource += _resource;\n\tlet stringToSign = [method];\n\tstringToSign.push('\\n');\n\n\tif('content-md5' in interestHeaders){\n\t\tstringToSign.push(interestHeaders['content-md5']);\n\t}\n\tstringToSign.push('\\n');\n\n\tif('content-type' in interestHeaders){\n\t\tstringToSign.push(interestHeaders['content-type']);\n\t}\n\tstringToSign.push('\\n');\n\tif(isShareFolder) {\n\t\tstringToSign.push(policy);\n\t} else {\n\t\tstringToSign.push(String(expires));\n\t}\n\n\tstringToSign.push('\\n');\n\n\tif(!isShareFolder){\n\t\tlet temp = [];\n\t\tlet i = 0;\n\t\tfor(let key in interestHeaders){\n\t\t\tif (key.length > signatureContext.headerPrefix.length && key.slice(0, signatureContext.headerPrefix.length) === signatureContext.headerPrefix){\n\t\t\t\ttemp[i++] = key;\n\t\t\t}\n\t\t}\n\t\ttemp = temp.sort();\n\t\tfor(let j=0;j<temp.length;j++){\n\t\t\tstringToSign.push(temp[j]);\n\t\t\tstringToSign.push(':');\n\t\t\tstringToSign.push(interestHeaders[temp[j]]);\n\t\t\tstringToSign.push('\\n');\n\t\t}\n\n\t\tstringToSign.push(resource);\n\t}else {\n\t\tstringToSign.push(_resource);\n\t}\n\treturn {\n\t\tstringToSign: stringToSign.join(''),\n\t\theaders,\n\t\thost\n\t};\n};\n\nfunction covertStorageClass(storageClass, signature) {\n\tif (!['storageClass', 'storagePolicy'].includes(storageClass)) {\n\t\treturn\n\t}\n\tif (signature === 'obs') {\n\t\treturn 'storageClass';\n\t}\n\tif (signature === 'v2') {\n\t\treturn 'storagePolicy';\n\t}\n};\n\nUtils.prototype.getQueryParams = function(param){\n\tlet policy = param.Policy ? String(param.Policy) : null;\n\tlet prefix = param.Prefix ? String(param.Prefix) : null;\n\tlet expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n\t// 循环获取参数中的queryParams\n\tlet queryParams = {};\n\tif(param.QueryParams && (param.QueryParams instanceof Object) && !(param.QueryParams instanceof Array)){\n\t\tfor(let key of Object.keys(param.QueryParams)){\n\t\t\tqueryParams[key] = param.QueryParams[key];\n\t\t}\n\t}\n\tlet specialParam = param.SpecialParam ? String(param.SpecialParam) : null;\n\n\t// 添加specialParam\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\tlet sc = covertStorageClass(specialParam, signatureContext.signature.toLowerCase());\n\tif (sc) {\n\t\tspecialParam = sc;\n\t}\n\tif(specialParam){\n\t\tqueryParams[specialParam] = '';\n\t}\n\tif(param.AfterStringToSign){\n\t\tconst pre = '$';\n\t\tqueryParams[signatureContext.headerPrefix + 'security-token'] = pre + '{hws:security-token}';\n\t}else if(this.securityToken && !queryParams[signatureContext.headerPrefix + 'security-token']){\n\t\tqueryParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n\t}\n\n\tif(expires < 0){\n\t\texpires = 300;\n\t}\n\texpires = parseInt(new Date().getTime() / 1000, 10) + expires;\n\n\tlet isShareFolder = policy && prefix; \n\t// 添加policy、prefix、expires\n\tif(isShareFolder) {\n\t\tqueryParams.Policy = policy;\n\t\tqueryParams.prefix = prefix;\n\t} else {\n\t\tqueryParams.Expires = String(expires);\n\t}\n\n\tlet queryParamsKeys = [];\n\tObject.keys(queryParams).forEach(e => {\n\t\tqueryParamsKeys.push(e);\n\t})\n\n\tqueryParamsKeys.sort();\n\n\treturn {isShareFolder, queryParams, queryParamsKeys}\n}\n\nUtils.prototype.getSignResult = function(opt, ak, stsToken) {\n\t// 获取计算签名时的resulet\n\tlet {bucketName, objectKey, signatureContext, isShareFolder, queryParams, queryParamsKeys} = opt\n\t// 为queryParams添加钩子函数获取到的ak和token\n\tif(stsToken){\n\t\tqueryParams[signatureContext.headerPrefix + 'security-token'] = stsToken;\n\t}\n\n\tif(signatureContext.signature.toLowerCase() === 'v2'){\n\t\tqueryParams.AWSAccessKeyId = ak;\n\t\tqueryParamsKeys.push('AWSAccessKeyId')\n\t}else{\n\t\tqueryParams.AccessKeyId = ak;\n\t\tqueryParamsKeys.push('AccessKeyId')\n\t}\n\n\tlet result = '';\n\tif(bucketName && this.pathStyle){\n\t\tresult += '/' + bucketName;\n\t}\n\tif(objectKey){\n\t\tobjectKey = encodeURIWithSafe(objectKey, '/');\n\t\tresult += '/' + objectKey;\n\t}\n\tresult += '?';\n\t\n\tqueryParamsKeys.sort();\n\tlet safeKey = isShareFolder ? '': '/';\n\tfor(let i=0;i<queryParamsKeys.length;i++){\n\t\tlet key = queryParamsKeys[i];\n\t\tlet val = queryParams[key];\n\t\tkey = encodeURIWithSafe(key, safeKey);\n\t\tval = encodeURIWithSafe(val, safeKey);\n\t\tresult += key;\n\t\tif(val){\n\t\t\tresult += '=' + val;\n\t\t}\n\t\tresult += '&';\n\t}\n\treturn result\n}\n\nUtils.prototype.createV2SignedUrl = function(param){\n\tconst isSecure = this.isSecure\n\tconst port = this.port\n\tlet {isShareFolder, queryParams, queryParamsKeys} = this.getQueryParams(param)\n\n\tlet {stringToSign, headers, host} = this.getStringToSign({isShareFolder, queryParams, queryParamsKeys}, param)\n\tlet getSignResultOpt = {\n\t\tbucketName : param.Bucket ? String(param.Bucket) : null,\n\t\tobjectKey : param.Key ? String(param.Key) : null,\n\t\tsignatureContext : param.signatureContext || this.signatureContext,\n\t\tisShareFolder,\n\t\tqueryParams, \n\t\tqueryParamsKeys, \n\t}\n\n\tif (isFunction(param.AfterStringToSign)) {\n\t\treturn Promise.resolve(param.AfterStringToSign(stringToSign))\n\t\t\t.then(({signature, ak, stsToken}) => {\n\t\t\t\tlet result = this.getSignResult(getSignResultOpt, ak, stsToken)\n\t\t\t\treturn getSignedUrl(signature, result)\n\t\t\t})\n\t}\n\n\tfunction getSignedUrl(signature, result){\n\t\tif(isShareFolder) {\n\t\t\tresult += 'Signature=' + encodeURIWithSafe(signature);\n\t\t} else {\n\t\t\tresult += 'Signature=' + encodeURIWithSafe(signature, '/');\n\t\t}\n\t\treturn {\n\t\t\tActualSignedRequestHeaders : headers,\n\t\t\tSignedUrl : (isSecure ? 'https' : 'http') + '://' + host + ':' + port + result\n\t\t};\n\t}\n\n};\n\nUtils.prototype.createV2SignedUrlSync = function(param){\n\tlet {isShareFolder, queryParams, queryParamsKeys} = this.getQueryParams(param)\n\n\tlet {stringToSign, headers, host} = this.getStringToSign({isShareFolder, queryParams, queryParamsKeys}, param)\n\tlet getSignResultOpt = {\n\t\tbucketName : param.Bucket ? String(param.Bucket) : null,\n\t\tobjectKey : param.Key ? String(param.Key) : null,\n\t\tsignatureContext : param.signatureContext || this.signatureContext,\n\t\tisShareFolder,\n\t\tqueryParams, \n\t\tqueryParamsKeys, \n\t}\n\t\n\tlet result = this.getSignResult(getSignResultOpt, this.ak, this.securityToken)\n\n\tlet hmac = crypto.createHmac('sha1', this.sk);\n\thmac.update(stringToSign);\n\tif(isShareFolder) {\n\t\tresult += 'Signature=' + encodeURIWithSafe(hmac.digest('base64'));\n\t} else {\n\t\tresult += 'Signature=' + encodeURIWithSafe(hmac.digest('base64'), '/');\n\t}\n\n\treturn {\n\t\tActualSignedRequestHeaders : headers,\n\t\tSignedUrl : (this.isSecure ? 'https' : 'http') + '://' + host + ':' + this.port + result\n\t};\n};\n\nUtils.prototype.createV4SignedUrlSync = function(param){\n\tparam = param || {};\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\tlet method = param.Method ? String(param.Method) : 'GET';\n\tlet bucketName = param.Bucket ? String(param.Bucket) : null;\n\tlet objectKey = param.Key ? String(param.Key) : null;\n\tlet specialParam = param.SpecialParam ? String(param.SpecialParam) : null;\n\n\tif(specialParam === 'storageClass'){\n\t\tspecialParam = 'storagePolicy';\n\t}\n\n\tlet expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n\tlet headers = {};\n\tif(param.Headers && (param.Headers instanceof Object) && !(param.Headers instanceof Array)){\n\t\tfor(let key in param.Headers){\n\t\t\tif ({}.hasOwnProperty.call(param.Headers, key)) {\n\t\t\t\theaders[key] = param.Headers[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tlet queryParams = {};\n\tif(param.QueryParams && (param.QueryParams instanceof Object) && !(param.QueryParams instanceof Array)){\n\t\tfor(let key in param.QueryParams){\n\t\t\tif ({}.hasOwnProperty.call(param.QueryParams, key)) {\n\t\t\t\tqueryParams[key] = param.QueryParams[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tif(this.securityToken && !queryParams[signatureContext.headerPrefix + 'security-token']){\n\t\tqueryParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n\t}\n\n\tlet result = '';\n\tlet resource = '';\n\tlet host = this.server;\n\tif(bucketName){\n\t\tif(this.pathStyle){\n\t\t\tresult += '/' + bucketName;\n\t\t\tresource += '/' + bucketName;\n\t\t}else{\n\t\t\thost = bucketName + '.' + host;\n\t\t}\n\t}\n\n\tif(objectKey){\n\t\tobjectKey = encodeURIWithSafe(objectKey, '/');\n\t\tresult += '/' + objectKey;\n\t\tresource += '/' + objectKey;\n\t}\n\n\tif(resource === ''){\n\t\tresource = '/';\n\t}\n\n\tresult += '?';\n\n\tif(specialParam){\n\t\tqueryParams[specialParam] = '';\n\t}\n\n\tif(expires < 0){\n\t\texpires = 300;\n\t}\n\n\tlet utcDateStr = headers['date'] || headers['Date'] || new Date().toUTCString();\n\n\tlet dates = getDates(utcDateStr);\n\tlet shortDate = dates[0];\n\tlet longDate = dates[1];\n\n\theaders.Host = host + ((this.port === 80 || this.port === 443) ? '' : ':' + this.port);\n\n\tqueryParams['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n\tqueryParams['X-Amz-Credential'] = this.ak + '/' + shortDate + '/' + this.region + '/s3/aws4_request';\n\tqueryParams['X-Amz-Date'] = longDate;\n\tqueryParams['X-Amz-Expires'] = String(expires);\n\n let signedAndCanonicalHeaders = getSignedAndCanonicalHeaders(headers);\n\n\tqueryParams['X-Amz-SignedHeaders'] = signedAndCanonicalHeaders[0];\n\n\tlet _queryParams = {};\n\tlet queryParamsKeys = [];\n\tfor(let key in queryParams) {\n\t\tif ({}.hasOwnProperty.call(queryParams, key)) {\n\t\t\tlet val = queryParams[key];\n\t\t\tkey = encodeURIWithSafe(key, '/');\n\t\t\tval = encodeURIWithSafe(val);\n\t\t\t_queryParams[key] = val;\n\t\t\tqueryParamsKeys.push(key);\n\t\t\tresult += key;\n\t\t\tif (val) {\n\t\t\t\tresult += '=' + val;\n\t\t\t}\n\t\t\tresult += '&';\n\t\t}\n\t}\n\n\tlet canonicalQueryString = '';\n\n\tqueryParamsKeys.sort();\n\n\tfor(let i=0;i<queryParamsKeys.length;){\n\t\tcanonicalQueryString += queryParamsKeys[i] + '=' + _queryParams[queryParamsKeys[i]];\n\t\tif(++i !== queryParamsKeys.length){\n\t\t\tcanonicalQueryString += '&';\n\t\t}\n\t}\n\n\tlet canonicalRequest = method + '\\n';\n\tcanonicalRequest += resource + '\\n';\n\tcanonicalRequest += canonicalQueryString + '\\n';\n\tcanonicalRequest += signedAndCanonicalHeaders[1] + '\\n';\n\tcanonicalRequest += signedAndCanonicalHeaders[0] + '\\n';\n\tcanonicalRequest += 'UNSIGNED-PAYLOAD';\n\n\tlet signature = getV4Signature(shortDate, longDate, this.sk, this.region, canonicalRequest);\n\tresult += 'X-Amz-Signature=' + encodeURIWithSafe(signature);\n\treturn {\n\t\tActualSignedRequestHeaders : headers,\n\t\tSignedUrl : (this.isSecure ? 'https' : 'http') + '://' + host + ':' + this.port + result\n\t};\n\n};\n\nUtils.prototype.createPostSignatureSync = function(param){\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\tif(signatureContext.signature === 'v4'){\n\t\treturn this.createV4PostSignatureSync(param);\n\t}\n\n\tparam = param || {};\n\tlet bucketName = param.Bucket ? String(param.Bucket) : null;\n\tlet objectKey = param.Key ? String(param.Key) : null;\n\tlet expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n\tlet formParams = {};\n\n\tif(param.FormParams && (param.FormParams instanceof Object) && !(param.FormParams instanceof Array)){\n\t\tfor(let key in param.FormParams){\n\t\t\tif ({}.hasOwnProperty.call(param.FormParams, key)) {\n\t\t\t\tformParams[key] = param.FormParams[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tif(this.securityToken && !formParams[signatureContext.headerPrefix + 'security-token']){\n\t\tformParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n\t}\n\n\tlet expireDate = new Date();\n\texpireDate.setTime(parseInt(new Date().getTime(), 10) + expires * 1000);\n\texpireDate = getExpireDate(expireDate.toUTCString());\n\n\tif(bucketName){\n\t\tformParams.bucket = bucketName;\n\t}\n\n\tif(objectKey){\n\t\tformParams.key = objectKey;\n\t}\n\n\tlet policy = [];\n\tpolicy.push('{\"expiration\":\"');\n\tpolicy.push(expireDate);\n\tpolicy.push('\", \"conditions\":[');\n\n\tlet matchAnyBucket = true;\n\tlet matchAnyKey = true;\n\n\tlet conditionAllowKeys = ['acl', 'bucket', 'key', 'success_action_redirect', 'redirect', 'success_action_status'];\n\n\tfor(let key in formParams){\n\t\tif(!key){\n\t\t\tcontinue;\n\t\t}\n\t\tlet val = formParams[key];\n\t\tkey = String(key).toLowerCase();\n\n\t\tif(key === 'bucket'){\n\t\t\tmatchAnyBucket = false;\n\t\t}else if(key === 'key'){\n\t\t\tmatchAnyKey = false;\n\t\t}\n\t\tif(allowedResponseHttpHeaderMetadataNames.indexOf(key) < 0 && conditionAllowKeys.indexOf(key) < 0 && key.indexOf(signatureContext.headerPrefix) !== 0){\n\t\t\tcontinue;\n\t\t}\n\n\t\tpolicy.push('{\"');\n\t\tpolicy.push(key);\n\t\tpolicy.push('\":\"');\n\t\tpolicy.push(val !== null ? String(val) : '');\n\t\tpolicy.push('\"},');\n\t}\n\n\n\tif(matchAnyBucket){\n\t\tpolicy.push('[\"starts-with\", \"$bucket\", \"\"],');\n\t}\n\n\tif(matchAnyKey){\n\t\tpolicy.push('[\"starts-with\", \"$key\", \"\"],');\n\t}\n\n\tpolicy.push(']}');\n\n\tlet originPolicy = policy.join('');\n\n\tif(window.btoa){\n\t\tpolicy = window.btoa(originPolicy);\n\t}else{\n\t\tpolicy = Base64.encode(originPolicy);\n\t}\n\tlet signature = crypto.createHmac('sha1', this.sk).update(policy).digest('base64');\n\n\treturn {\n\t\tOriginPolicy : originPolicy,\n\t\tPolicy : policy,\n\t\tSignature : signature,\n\t\tToken : this.ak + ':' + signature + ':' + policy\n\t};\n};\n\nUtils.prototype.createV4PostSignatureSync = function(param){\n\tparam = param || {};\n\tlet signatureContext = param.signatureContext || this.signatureContext;\n\tlet bucketName = param.Bucket ? String(param.Bucket) : null;\n\tlet objectKey = param.Key ? String(param.Key) : null;\n\tlet expires = param.Expires ? parseInt(param.Expires, 10) : 300;\n\tlet formParams = {};\n\n\tif(param.FormParams && (param.FormParams instanceof Object) && !(param.FormParams instanceof Array)){\n\t\tfor(let key in param.FormParams){\n\t\t\tif ({}.hasOwnProperty.call(param.FormParams, key)) {\n\t\t\t\tformParams[key] = param.FormParams[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tif(this.securityToken && !formParams[signatureContext.headerPrefix + 'security-token']){\n\t\tformParams[signatureContext.headerPrefix + 'security-token'] = this.securityToken;\n\t}\n\n\tlet utcDateStr = new Date().toUTCString();\n\tlet dates = getDates(utcDateStr);\n\tlet shortDate = dates[0];\n\tlet longDate = dates[1];\n\n\tlet credential = this.ak + '/' + shortDate + '/' + this.region + '/s3/aws4_request';\n\n\tlet expireDate = new Date();\n\texpireDate.setTime(parseInt(new Date().getTime(), 10) + expires * 1000);\n\n\texpireDate = getExpireDate(expireDate.toUTCString());\n\n\tformParams['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n\tformParams['X-Amz-Date'] = longDate;\n\tformParams['X-Amz-Credential'] = credential;\n\n\tif(bucketName){\n\t\tformParams.bucket = bucketName;\n\t}\n\n\tif(objectKey){\n\t\tformParams.key = objectKey;\n\t}\n\n\tlet policy = [];\n\tpolicy.push('{\"expiration\":\"');\n\tpolicy.push(expireDate);\n\tpolicy.push('\", \"conditions\":[');\n\n\tlet matchAnyBucket = true;\n\tlet matchAnyKey = true;\n\n\tlet conditionAllowKeys = ['acl', 'bucket', 'key', 'success_action_redirect', 'redirect', 'success_action_status'];\n\n\tfor(let key in formParams){\n\t\tif(!key){\n\t\t\tcontinue;\n\t\t}\n\t\tlet val = formParams[key];\n\t\tkey = String(key).toLowerCase();\n\n\t\tif(key === 'bucket'){\n\t\t\tmatchAnyBucket = false;\n\t\t}else if(key === 'key'){\n\t\t\tmatchAnyKey = false;\n\t\t}\n\n\t\tif(allowedResponseHttpHeaderMetadataNames.indexOf(key) < 0 && conditionAllowKeys.indexOf(key) < 0 && key.indexOf(signatureContext.headerPrefix) !== 0){\n\t\t\tcontinue;\n\t\t}\n\n\t\tpolicy.push('{\"');\n\t\tpolicy.push(key);\n\t\tpolicy.push('\":\"');\n\t\tpolicy.push(val !== null ? String(val) : '');\n\t\tpolicy.push('\"},');\n\t}\n\n\tif(matchAnyBucket){\n\t\tpolicy.push('[\"starts-with\", \"$bucket\", \"\"],');\n\t}\n\n\tif(matchAnyKey){\n\t\tpolicy.push('[\"starts-with\", \"$key\", \"\"],');\n\t}\n\n\tpolicy.push(']}');\n\n\tlet originPolicy = policy.join('');\n\n\tif(window.btoa){\n\t\tpolicy = window.btoa(originPolicy);\n\t}else{\n\t\tpolicy = Base64.encode(originPolicy);\n\t}\n\n\tlet signature = createV4Signature(shortDate, this.sk, this.region, policy);\n\n\treturn {\n\t\tOriginPolicy : originPolicy,\n\t\tPolicy : policy,\n\t\tAlgorithm : formParams['X-Amz-Algorithm'],\n\t\tCredential : formParams['X-Amz-Credential'],\n\t\tDate : formParams['X-Amz-Date'],\n\t\tSignature : signature\n\t};\n};\n\nexport default Utils;\n\n\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}