UNPKG

@pepperize/cdk-ses-smtp-credentials

Version:

Generate SES smtp credentials for a given user and store the credentials in a SecretsManager Secret.

30 lines 4.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateSesSmtpPassword = exports.sign = void 0; const buffer_1 = require("buffer"); const crypto_1 = require("crypto"); const sign = (key, message) => { const hmac = (0, crypto_1.createHmac)("sha256", buffer_1.Buffer.from(key.map((a) => a.charCodeAt(0)))).update(message); return hmac.digest("binary").toString().split(""); }; exports.sign = sign; /** * https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html#smtp-credentials-convert */ const calculateSesSmtpPassword = (secretAccessKey, region) => { const date = "11111111"; const service = "ses"; const terminal = "aws4_request"; const message = "SendRawEmail"; const version = [0x04]; let signature = (0, exports.sign)(`AWS4${secretAccessKey}`.split(""), date); signature = (0, exports.sign)(signature, region); signature = (0, exports.sign)(signature, service); signature = (0, exports.sign)(signature, terminal); signature = (0, exports.sign)(signature, message); const signatureAndVersion = version.slice(); // copy of array signature.forEach((a) => signatureAndVersion.push(a.charCodeAt(0))); return buffer_1.Buffer.from(signatureAndVersion).toString("base64"); }; exports.calculateSesSmtpPassword = calculateSesSmtpPassword; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLXNlcy1zbXRwLXBhc3N3b3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVyL2NhbGN1bGF0ZS1zZXMtc210cC1wYXNzd29yZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBZ0M7QUFDaEMsbUNBQW9DO0FBRTdCLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBYSxFQUFFLE9BQWUsRUFBWSxFQUFFO0lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLEVBQUUsZUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQVEsQ0FBQztJQUV2RyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUpXLFFBQUEsSUFBSSxRQUlmO0FBRUY7O0dBRUc7QUFDSSxNQUFNLHdCQUF3QixHQUFHLENBQUMsZUFBdUIsRUFBRSxNQUFjLEVBQVUsRUFBRTtJQUMxRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV2QixJQUFJLFNBQVMsR0FBRyxJQUFBLFlBQUksRUFBQyxPQUFPLGVBQWUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxTQUFTLEdBQUcsSUFBQSxZQUFJLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLFNBQVMsR0FBRyxJQUFBLFlBQUksRUFBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsU0FBUyxHQUFHLElBQUEsWUFBSSxFQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN0QyxTQUFTLEdBQUcsSUFBQSxZQUFJLEVBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsZ0JBQWdCO0lBRTdELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1RSxPQUFPLGVBQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBbEJXLFFBQUEsd0JBQXdCLDRCQWtCbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiYnVmZmVyXCI7XG5pbXBvcnQgeyBjcmVhdGVIbWFjIH0gZnJvbSBcImNyeXB0b1wiO1xuXG5leHBvcnQgY29uc3Qgc2lnbiA9IChrZXk6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGhtYWMgPSBjcmVhdGVIbWFjKFwic2hhMjU2XCIsIEJ1ZmZlci5mcm9tKGtleS5tYXAoKGEpID0+IGEuY2hhckNvZGVBdCgwKSkpKS51cGRhdGUobWVzc2FnZSkgYXMgYW55O1xuXG4gIHJldHVybiBobWFjLmRpZ2VzdChcImJpbmFyeVwiKS50b1N0cmluZygpLnNwbGl0KFwiXCIpO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VzL2xhdGVzdC9kZy9zbXRwLWNyZWRlbnRpYWxzLmh0bWwjc210cC1jcmVkZW50aWFscy1jb252ZXJ0XG4gKi9cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVTZXNTbXRwUGFzc3dvcmQgPSAoc2VjcmV0QWNjZXNzS2V5OiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGF0ZSA9IFwiMTExMTExMTFcIjtcbiAgY29uc3Qgc2VydmljZSA9IFwic2VzXCI7XG4gIGNvbnN0IHRlcm1pbmFsID0gXCJhd3M0X3JlcXVlc3RcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFwiU2VuZFJhd0VtYWlsXCI7XG4gIGNvbnN0IHZlcnNpb24gPSBbMHgwNF07XG5cbiAgbGV0IHNpZ25hdHVyZSA9IHNpZ24oYEFXUzQke3NlY3JldEFjY2Vzc0tleX1gLnNwbGl0KFwiXCIpLCBkYXRlKTtcbiAgc2lnbmF0dXJlID0gc2lnbihzaWduYXR1cmUsIHJlZ2lvbik7XG4gIHNpZ25hdHVyZSA9IHNpZ24oc2lnbmF0dXJlLCBzZXJ2aWNlKTtcbiAgc2lnbmF0dXJlID0gc2lnbihzaWduYXR1cmUsIHRlcm1pbmFsKTtcbiAgc2lnbmF0dXJlID0gc2lnbihzaWduYXR1cmUsIG1lc3NhZ2UpO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFuZFZlcnNpb24gPSB2ZXJzaW9uLnNsaWNlKCk7IC8vIGNvcHkgb2YgYXJyYXlcblxuICBzaWduYXR1cmUuZm9yRWFjaCgoYTogc3RyaW5nKSA9PiBzaWduYXR1cmVBbmRWZXJzaW9uLnB1c2goYS5jaGFyQ29kZUF0KDApKSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZUFuZFZlcnNpb24pLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xufTtcbiJdfQ==