@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
JavaScript
;
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==