sls-dev-tools
Version:
The Dev Tools for the Serverless World
95 lines (76 loc) • 2.25 kB
JavaScript
;
var _fieldWithTitle = require("../components/fieldWithTitle");
var _box = require("../components/box");
var _modalLayout = require("../components/modalLayout");
var _modalTitle = require("../components/modalTitle");
const blessed = require("blessed");
function promptMfaModal(callback, screen) {
const mfaLayout = new _modalLayout.ModalLayout(screen, 112, 15, true);
let currentTextbox = 0;
const textboxes = [];
const closeModal = () => {
mfaLayout.destroy();
callback(null, textboxes[0].getValue());
screen.render();
};
const selectTextbox = index => {
textboxes[index].style.border.fg = "yellow";
if (index === 1) {
textboxes[index].style.fg = "yellow";
}
screen.render();
};
const unselectTextbox = index => {
textboxes[index].style.border.fg = "green";
if (index === 1) {
textboxes[index].style.fg = "green";
}
screen.render();
};
new _modalTitle.ModalTitle(mfaLayout, 110, "Enter your MFA Token");
const textboxWithTitle = (0, _fieldWithTitle.generateFieldWithTitle)(blessed, mfaLayout, "MFA Token", "", 110);
const {
textbox
} = textboxWithTitle;
textbox.on("cancel", () => {
closeModal();
});
textboxes.push(textbox);
const submit = new _box.Box(mfaLayout, 110, 4, "Submit");
textboxes.push(submit);
new _box.Box(mfaLayout, 110, 4, "Arrow keys to select field | ENTER to toggle edit mode \nENTER on Submit to inject event | ESC to close");
mfaLayout.focus();
selectTextbox(0);
screen.render();
mfaLayout.key(["enter"], () => {
// this is the submit button
if (currentTextbox === 1) {
closeModal();
} else {
textboxes[currentTextbox].focus();
}
});
mfaLayout.key(["up"], () => {
unselectTextbox(currentTextbox);
currentTextbox -= 1;
if (currentTextbox === -1) {
currentTextbox = 0;
}
selectTextbox(currentTextbox);
});
mfaLayout.key(["down"], () => {
unselectTextbox(currentTextbox);
currentTextbox += 1;
if (currentTextbox === 2) {
currentTextbox = 1;
}
selectTextbox(currentTextbox);
});
mfaLayout.key(["escape"], () => {
closeModal();
});
return mfaLayout;
}
module.exports = {
promptMfaModal
};