UNPKG

@nomicfoundation/hardhat-keystore

Version:

A module for managing keystore files that store a map from IDs to encrypted string values.

67 lines 3.1 kB
import { randomBytes } from "node:crypto"; import { styleText } from "node:util"; import { HardhatError } from "@nomicfoundation/hardhat-errors"; import { readUtf8File, writeUtf8File } from "@nomicfoundation/hardhat-utils/fs"; import { PLUGIN_ID } from "../constants.js"; import { UserDisplayMessages } from "../ui/user-display-messages.js"; export function getPasswordHandlers(requestSecretInput, consoleLog, isDevKeystore, devPasswordFilePath) { if (isDevKeystore) { return { setUpPassword: () => setUpPasswordForDevKeystore(devPasswordFilePath), askPassword: () => askPasswordForDevKeystore(devPasswordFilePath), setNewPassword: () => { throw new HardhatError(HardhatError.ERRORS.HARDHAT_KEYSTORE.GENERAL.CANNOT_CHANGED_PASSWORD_FOR_DEV_KEYSTORE); }, }; } return { setUpPassword: () => setUpPassword(requestSecretInput, consoleLog), askPassword: () => askPassword(requestSecretInput), setNewPassword: () => setNewPassword(requestSecretInput, consoleLog), }; } export async function setUpPassword(requestSecretInput, consoleLog = console.log) { consoleLog(UserDisplayMessages.keystoreBannerMessage()); consoleLog(UserDisplayMessages.passwordSetUpMessage()); consoleLog(UserDisplayMessages.passwordRequirementsMessage()); consoleLog(""); return await createPassword(requestSecretInput, consoleLog); } export async function setUpPasswordForDevKeystore(devPasswordFilePath) { const password = randomBytes(16).toString("hex"); await writeUtf8File(devPasswordFilePath, password); return password; } export async function setNewPassword(requestSecretInput, consoleLog = console.log) { consoleLog(UserDisplayMessages.passwordChangeMessage()); consoleLog(UserDisplayMessages.passwordRequirementsMessage()); consoleLog(""); return await createPassword(requestSecretInput, consoleLog); } export async function askPassword(requestSecretInput) { return await requestSecretInput(PLUGIN_ID, UserDisplayMessages.enterPasswordMsg()); } export async function askPasswordForDevKeystore(devPasswordFilePath) { return await readUtf8File(devPasswordFilePath); } async function createPassword(requestSecretInput, consoleLog = console.log) { const PASSWORD_REGEX = /^.{8,}$/; let password; while (password === undefined) { password = await requestSecretInput(PLUGIN_ID, UserDisplayMessages.enterPasswordMsg()); if (!PASSWORD_REGEX.test(password)) { password = undefined; consoleLog(styleText("red", UserDisplayMessages.passwordRequirementsError())); } } let confirmPassword; while (confirmPassword === undefined) { confirmPassword = await requestSecretInput(PLUGIN_ID, UserDisplayMessages.confirmPasswordMessage()); if (password !== confirmPassword) { consoleLog(styleText("red", UserDisplayMessages.passwordsDoNotMatchError())); confirmPassword = undefined; } } return password; } //# sourceMappingURL=password.js.map