@secretlint/secretlint-rule-sendgrid
Version:
A secretlint rule for sendgrid api keys.
54 lines • 1.8 kB
JavaScript
import { matchPatterns } from "@textlint/regexp-string-matcher";
export const messages = {
SENDGRID_KEY: {
en: (props) => `found Sendgrid api key: ${props.KEY}`,
ja: (props) => `Sendgrid APIキーが見つかりました: ${props.KEY}`,
},
};
function reportIfFoundKey({ source, options, context, t, }) {
const SENDGRID_KEY_PATTERN = /(?<![A-Za-z])SG\.\w{1,128}\.\w{1,128}([-_]?)\w{1,128}/g;
const results = source.content.matchAll(SENDGRID_KEY_PATTERN);
for (const result of results) {
const index = result.index || 0;
const match = result[0] || "";
if (match.length !== 69) {
// send grid api key is 69 characters long
continue;
}
const range = [index, index + match.length];
const allowedResults = matchPatterns(match, options.allows);
if (allowedResults.length > 0) {
continue;
}
context.report({
message: t("SENDGRID_KEY", {
KEY: match,
}),
range,
});
}
}
export const creator = {
messages,
meta: {
id: "@secretlint/secretlint-rule-sendgrid",
recommended: true,
type: "scanner",
supportedContentTypes: ["text"],
docs: {
url: "https://github.com/secretlint/secretlint/blob/master/packages/%40secretlint/secretlint-rule-sendgrid/README.md",
},
},
create(context, options) {
const t = context.createTranslator(messages);
const normalizedOptions = {
allows: options.allows || [],
};
return {
file(source) {
reportIfFoundKey({ source, options: normalizedOptions, context, t });
},
};
},
};
//# sourceMappingURL=index.js.map