| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var errors = _interopRequireWildcard(require("../errors.js"), true);
- var _helper = require("./helper.js");
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
- // Build PostPolicy object that can be signed by presignedPostPolicy
- class PostPolicy {
- policy = {
- conditions: []
- };
- formData = {};
- // set expiration date
- setExpires(date) {
- if (!date) {
- throw new errors.InvalidDateError('Invalid date: cannot be null');
- }
- this.policy.expiration = date.toISOString();
- }
- // set object name
- setKey(objectName) {
- if (!(0, _helper.isValidObjectName)(objectName)) {
- throw new errors.InvalidObjectNameError(`Invalid object name : ${objectName}`);
- }
- this.policy.conditions.push(['eq', '$key', objectName]);
- this.formData.key = objectName;
- }
- // set object name prefix, i.e policy allows any keys with this prefix
- setKeyStartsWith(prefix) {
- if (!(0, _helper.isValidPrefix)(prefix)) {
- throw new errors.InvalidPrefixError(`Invalid prefix : ${prefix}`);
- }
- this.policy.conditions.push(['starts-with', '$key', prefix]);
- this.formData.key = prefix;
- }
- // set bucket name
- setBucket(bucketName) {
- if (!(0, _helper.isValidBucketName)(bucketName)) {
- throw new errors.InvalidBucketNameError(`Invalid bucket name : ${bucketName}`);
- }
- this.policy.conditions.push(['eq', '$bucket', bucketName]);
- this.formData.bucket = bucketName;
- }
- // set Content-Type
- setContentType(type) {
- if (!type) {
- throw new Error('content-type cannot be null');
- }
- this.policy.conditions.push(['eq', '$Content-Type', type]);
- this.formData['Content-Type'] = type;
- }
- // set Content-Type prefix, i.e image/ allows any image
- setContentTypeStartsWith(prefix) {
- if (!prefix) {
- throw new Error('content-type cannot be null');
- }
- this.policy.conditions.push(['starts-with', '$Content-Type', prefix]);
- this.formData['Content-Type'] = prefix;
- }
- // set Content-Disposition
- setContentDisposition(value) {
- if (!value) {
- throw new Error('content-disposition cannot be null');
- }
- this.policy.conditions.push(['eq', '$Content-Disposition', value]);
- this.formData['Content-Disposition'] = value;
- }
- // set minimum/maximum length of what Content-Length can be.
- setContentLengthRange(min, max) {
- if (min > max) {
- throw new Error('min cannot be more than max');
- }
- if (min < 0) {
- throw new Error('min should be > 0');
- }
- if (max < 0) {
- throw new Error('max should be > 0');
- }
- this.policy.conditions.push(['content-length-range', min, max]);
- }
- // set user defined metadata
- setUserMetaData(metaData) {
- if (!(0, _helper.isObject)(metaData)) {
- throw new TypeError('metadata should be of type "object"');
- }
- Object.entries(metaData).forEach(([key, value]) => {
- const amzMetaDataKey = `x-amz-meta-${key}`;
- this.policy.conditions.push(['eq', `$${amzMetaDataKey}`, value]);
- this.formData[amzMetaDataKey] = value.toString();
- });
- }
- }
- exports.PostPolicy = PostPolicy;
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlcnJvcnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaGVscGVyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiUG9zdFBvbGljeSIsInBvbGljeSIsImNvbmRpdGlvbnMiLCJmb3JtRGF0YSIsInNldEV4cGlyZXMiLCJkYXRlIiwiSW52YWxpZERhdGVFcnJvciIsImV4cGlyYXRpb24iLCJ0b0lTT1N0cmluZyIsInNldEtleSIsIm9iamVjdE5hbWUiLCJpc1ZhbGlkT2JqZWN0TmFtZSIsIkludmFsaWRPYmplY3ROYW1lRXJyb3IiLCJwdXNoIiwia2V5Iiwic2V0S2V5U3RhcnRzV2l0aCIsInByZWZpeCIsImlzVmFsaWRQcmVmaXgiLCJJbnZhbGlkUHJlZml4RXJyb3IiLCJzZXRCdWNrZXQiLCJidWNrZXROYW1lIiwiaXNWYWxpZEJ1Y2tldE5hbWUiLCJJbnZhbGlkQnVja2V0TmFtZUVycm9yIiwiYnVja2V0Iiwic2V0Q29udGVudFR5cGUiLCJ0eXBlIiwiRXJyb3IiLCJzZXRDb250ZW50VHlwZVN0YXJ0c1dpdGgiLCJzZXRDb250ZW50RGlzcG9zaXRpb24iLCJ2YWx1ZSIsInNldENvbnRlbnRMZW5ndGhSYW5nZSIsIm1pbiIsIm1heCIsInNldFVzZXJNZXRhRGF0YSIsIm1ldGFEYXRhIiwiaXNPYmplY3QiLCJUeXBlRXJyb3IiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImFtek1ldGFEYXRhS2V5IiwidG9TdHJpbmciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsicG9zdC1wb2xpY3kudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQnVpbGQgUG9zdFBvbGljeSBvYmplY3QgdGhhdCBjYW4gYmUgc2lnbmVkIGJ5IHByZXNpZ25lZFBvc3RQb2xpY3lcbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tICcuLi9lcnJvcnMudHMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNWYWxpZEJ1Y2tldE5hbWUsIGlzVmFsaWRPYmplY3ROYW1lLCBpc1ZhbGlkUHJlZml4IH0gZnJvbSAnLi9oZWxwZXIudHMnXG5pbXBvcnQgdHlwZSB7IE9iamVjdE1ldGFEYXRhIH0gZnJvbSAnLi90eXBlLnRzJ1xuXG5leHBvcnQgY2xhc3MgUG9zdFBvbGljeSB7XG4gIHB1YmxpYyBwb2xpY3k6IHsgY29uZGl0aW9uczogKHN0cmluZyB8IG51bWJlcilbXVtdOyBleHBpcmF0aW9uPzogc3RyaW5nIH0gPSB7XG4gICAgY29uZGl0aW9uczogW10sXG4gIH1cbiAgcHVibGljIGZvcm1EYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cblxuICAvLyBzZXQgZXhwaXJhdGlvbiBkYXRlXG4gIHNldEV4cGlyZXMoZGF0ZTogRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkRGF0ZUVycm9yKCdJbnZhbGlkIGRhdGU6IGNhbm5vdCBiZSBudWxsJylcbiAgICB9XG4gICAgdGhpcy5wb2xpY3kuZXhwaXJhdGlvbiA9IGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG5cbiAgLy8gc2V0IG9iamVjdCBuYW1lXG4gIHNldEtleShvYmplY3ROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIWlzVmFsaWRPYmplY3ROYW1lKG9iamVjdE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRPYmplY3ROYW1lRXJyb3IoYEludmFsaWQgb2JqZWN0IG5hbWUgOiAke29iamVjdE5hbWV9YClcbiAgICB9XG4gICAgdGhpcy5wb2xpY3kuY29uZGl0aW9ucy5wdXNoKFsnZXEnLCAnJGtleScsIG9iamVjdE5hbWVdKVxuICAgIHRoaXMuZm9ybURhdGEua2V5ID0gb2JqZWN0TmFtZVxuICB9XG5cbiAgLy8gc2V0IG9iamVjdCBuYW1lIHByZWZpeCwgaS5lIHBvbGljeSBhbGxvd3MgYW55IGtleXMgd2l0aCB0aGlzIHByZWZpeFxuICBzZXRLZXlTdGFydHNXaXRoKHByZWZpeDogc3RyaW5nKSB7XG4gICAgaWYgKCFpc1ZhbGlkUHJlZml4KHByZWZpeCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFByZWZpeEVycm9yKGBJbnZhbGlkIHByZWZpeCA6ICR7cHJlZml4fWApXG4gICAgfVxuICAgIHRoaXMucG9saWN5LmNvbmRpdGlvbnMucHVzaChbJ3N0YXJ0cy13aXRoJywgJyRrZXknLCBwcmVmaXhdKVxuICAgIHRoaXMuZm9ybURhdGEua2V5ID0gcHJlZml4XG4gIH1cblxuICAvLyBzZXQgYnVja2V0IG5hbWVcbiAgc2V0QnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICAgIGlmICghaXNWYWxpZEJ1Y2tldE5hbWUoYnVja2V0TmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEJ1Y2tldE5hbWVFcnJvcihgSW52YWxpZCBidWNrZXQgbmFtZSA6ICR7YnVja2V0TmFtZX1gKVxuICAgIH1cbiAgICB0aGlzLnBvbGljeS5jb25kaXRpb25zLnB1c2goWydlcScsICckYnVja2V0JywgYnVja2V0TmFtZV0pXG4gICAgdGhpcy5mb3JtRGF0YS5idWNrZXQgPSBidWNrZXROYW1lXG4gIH1cblxuICAvLyBzZXQgQ29udGVudC1UeXBlXG4gIHNldENvbnRlbnRUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGlmICghdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb250ZW50LXR5cGUgY2Fubm90IGJlIG51bGwnKVxuICAgIH1cbiAgICB0aGlzLnBvbGljeS5jb25kaXRpb25zLnB1c2goWydlcScsICckQ29udGVudC1UeXBlJywgdHlwZV0pXG4gICAgdGhpcy5mb3JtRGF0YVsnQ29udGVudC1UeXBlJ10gPSB0eXBlXG4gIH1cblxuICAvLyBzZXQgQ29udGVudC1UeXBlIHByZWZpeCwgaS5lIGltYWdlLyBhbGxvd3MgYW55IGltYWdlXG4gIHNldENvbnRlbnRUeXBlU3RhcnRzV2l0aChwcmVmaXg6IHN0cmluZykge1xuICAgIGlmICghcHJlZml4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnRlbnQtdHlwZSBjYW5ub3QgYmUgbnVsbCcpXG4gICAgfVxuICAgIHRoaXMucG9saWN5LmNvbmRpdGlvbnMucHVzaChbJ3N0YXJ0cy13aXRoJywgJyRDb250ZW50LVR5cGUnLCBwcmVmaXhdKVxuICAgIHRoaXMuZm9ybURhdGFbJ0NvbnRlbnQtVHlwZSddID0gcHJlZml4XG4gIH1cblxuICAvLyBzZXQgQ29udGVudC1EaXNwb3NpdGlvblxuICBzZXRDb250ZW50RGlzcG9zaXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29udGVudC1kaXNwb3NpdGlvbiBjYW5ub3QgYmUgbnVsbCcpXG4gICAgfVxuICAgIHRoaXMucG9saWN5LmNvbmRpdGlvbnMucHVzaChbJ2VxJywgJyRDb250ZW50LURpc3Bvc2l0aW9uJywgdmFsdWVdKVxuICAgIHRoaXMuZm9ybURhdGFbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9IHZhbHVlXG4gIH1cblxuICAvLyBzZXQgbWluaW11bS9tYXhpbXVtIGxlbmd0aCBvZiB3aGF0IENvbnRlbnQtTGVuZ3RoIGNhbiBiZS5cbiAgc2V0Q29udGVudExlbmd0aFJhbmdlKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICAgIGlmIChtaW4gPiBtYXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWluIGNhbm5vdCBiZSBtb3JlIHRoYW4gbWF4JylcbiAgICB9XG4gICAgaWYgKG1pbiA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWluIHNob3VsZCBiZSA+IDAnKVxuICAgIH1cbiAgICBpZiAobWF4IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXggc2hvdWxkIGJlID4gMCcpXG4gICAgfVxuICAgIHRoaXMucG9saWN5LmNvbmRpdGlvbnMucHVzaChbJ2NvbnRlbnQtbGVuZ3RoLXJhbmdlJywgbWluLCBtYXhdKVxuICB9XG5cbiAgLy8gc2V0IHVzZXIgZGVmaW5lZCBtZXRhZGF0YVxuICBzZXRVc2VyTWV0YURhdGEobWV0YURhdGE6IE9iamVjdE1ldGFEYXRhKSB7XG4gICAgaWYgKCFpc09iamVjdChtZXRhRGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21ldGFkYXRhIHNob3VsZCBiZSBvZiB0eXBlIFwib2JqZWN0XCInKVxuICAgIH1cbiAgICBPYmplY3QuZW50cmllcyhtZXRhRGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBhbXpNZXRhRGF0YUtleSA9IGB4LWFtei1tZXRhLSR7a2V5fWBcbiAgICAgIHRoaXMucG9saWN5LmNvbmRpdGlvbnMucHVzaChbJ2VxJywgYCQke2Ftek1ldGFEYXRhS2V5fWAsIHZhbHVlXSlcbiAgICAgIHRoaXMuZm9ybURhdGFbYW16TWV0YURhdGFLZXldID0gdmFsdWUudG9TdHJpbmcoKVxuICAgIH0pXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFBMkYsU0FBQUQsd0JBQUFHLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFMLHVCQUFBLFlBQUFBLENBQUFHLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJB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
|