aws-cloudfront-sign
Version:
Utility module for signing AWS CloudFront URLs
58 lines • 2.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.assert = exports.getPrivateKey = exports.getIpRange = exports.getExpireTime = exports.createPolicySignature = exports.createPolicy = exports.normalizeBase64 = void 0;
const fs_1 = require("fs");
const crypto_1 = require("crypto");
const canned_policy_1 = __importDefault(require("./canned-policy"));
function normalizeBase64(str) {
return str
.replace(/\+/g, '-')
.replace(/=/g, '_')
.replace(/\//g, '~');
}
exports.normalizeBase64 = normalizeBase64;
function createPolicy(cfUrl, expireTime, ipRange) {
const defaultExpireTime = Math.round(Date.now() + 1800000);
expireTime = expireTime || defaultExpireTime;
return new canned_policy_1.default(cfUrl, expireTime, ipRange);
}
exports.createPolicy = createPolicy;
function createPolicySignature(policy, privateKey) {
const sign = (0, crypto_1.createSign)('RSA-SHA1');
sign.update(policy.toJSON());
return sign.sign(privateKey, 'base64');
}
exports.createPolicySignature = createPolicySignature;
function getExpireTime(opts) {
return +opts.expireTime || null;
}
exports.getExpireTime = getExpireTime;
function getIpRange(opts) {
return opts.ipRange || null;
}
exports.getIpRange = getIpRange;
function getPrivateKey(params) {
let privateKeyString = params.privateKeyString;
let pem;
if (params.privateKeyPath) {
pem = (0, fs_1.readFileSync)(params.privateKeyPath);
privateKeyString = pem.toString('ascii');
}
const newLinePattern = /\r|\n/;
const lineBreakExists = newLinePattern.test(privateKeyString);
if (!lineBreakExists) {
throw new Error('Invalid private key string, must include line breaks');
}
return privateKeyString;
}
exports.getPrivateKey = getPrivateKey;
function assert(assertion, msg) {
if (!assertion) {
throw new Error(msg);
}
}
exports.assert = assert;
//# sourceMappingURL=utils.js.map