in impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnenc/goals/Init.java [64:202]
public int doExecute(EncryptContext context) throws Exception {
EncryptOptions options = (EncryptOptions) context.invokerRequest.options();
boolean force = options.force().orElse(false);
boolean yes = options.yes().orElse(false);
if (configExists() && !force) {
context.logger.error(messageBuilderFactory
.builder()
.error("Error: configuration exist. Use --force if you want to reset existing configuration.")
.build());
return BAD_OPERATION;
}
context.addInHeader(context.style.italic().bold().foreground(Colors.rgbColor("yellow")), "goal: init");
context.addInHeader("");
ConsolePrompt.UiConfig promptConfig;
if (OSUtils.IS_WINDOWS) {
promptConfig = new ConsolePrompt.UiConfig(">", "( )", "(x)", "( )");
} else {
promptConfig = new ConsolePrompt.UiConfig("❯", "◯ ", "◉ ", "◯ ");
}
promptConfig.setCancellableFirstPrompt(true);
SettingsSecurity config = secDispatcher.readConfiguration(true);
// reset config
config.setDefaultDispatcher(null);
config.getConfigurations().clear();
Map<String, PromptResultItemIF> dispatcherResult;
Map<String, PromptResultItemIF> dispatcherConfigResult;
Map<String, PromptResultItemIF> confirmChoice;
ConsolePrompt prompt = new ConsolePrompt(context.reader, context.terminal, promptConfig);
dispatcherResult = prompt.prompt(
context.header, dispatcherPrompt(prompt.getPromptBuilder()).build());
if (dispatcherResult.isEmpty()) {
throw new InterruptedException();
}
if (NONE.equals(dispatcherResult.get("defaultDispatcher").getResult())) {
context.terminal
.writer()
.println(messageBuilderFactory
.builder()
.warning(
"Maven4 SecDispatcher disabled; Maven3 fallback may still work, use `mvnenc diag` to check")
.build());
} else {
config.setDefaultDispatcher(
dispatcherResult.get("defaultDispatcher").getResult());
DispatcherMeta meta = secDispatcher.availableDispatchers().stream()
.filter(d -> Objects.equals(config.getDefaultDispatcher(), d.name()))
.findFirst()
.orElseThrow();
if (!meta.fields().isEmpty()) {
dispatcherConfigResult = prompt.prompt(
context.header,
configureDispatcher(context, meta, prompt.getPromptBuilder())
.build());
if (dispatcherConfigResult.isEmpty()) {
throw new InterruptedException();
}
List<Map.Entry<String, PromptResultItemIF>> editables = dispatcherConfigResult.entrySet().stream()
.filter(e -> e.getValue().getResult().contains("$"))
.toList();
if (!editables.isEmpty()) {
context.addInHeader("");
context.addInHeader("Please customize the editable value:");
Map<String, PromptResultItemIF> editMap;
for (Map.Entry<String, PromptResultItemIF> editable : editables) {
String template = editable.getValue().getResult();
editMap = prompt.prompt(
context.header,
prompt.getPromptBuilder()
.createInputPrompt()
.name("edit")
.message(template)
.addPrompt()
.build());
if (editMap.isEmpty()) {
throw new InterruptedException();
}
dispatcherConfigResult.put(editable.getKey(), editMap.get("edit"));
}
}
Config dispatcherConfig = new Config();
dispatcherConfig.setName(meta.name());
for (DispatcherMeta.Field field : meta.fields()) {
ConfigProperty property = new ConfigProperty();
property.setName(field.getKey());
property.setValue(dispatcherConfigResult.get(field.getKey()).getResult());
dispatcherConfig.addProperty(property);
}
if (!dispatcherConfig.getProperties().isEmpty()) {
config.addConfiguration(dispatcherConfig);
}
}
}
if (yes) {
secDispatcher.writeConfiguration(config);
} else {
context.addInHeader("");
context.addInHeader("Values set:");
context.addInHeader("defaultDispatcher=" + config.getDefaultDispatcher());
for (Config c : config.getConfigurations()) {
context.addInHeader(" dispatcherName=" + c.getName());
for (ConfigProperty cp : c.getProperties()) {
context.addInHeader(" " + cp.getName() + "=" + cp.getValue());
}
}
confirmChoice = prompt.prompt(
context.header, confirmPrompt(prompt.getPromptBuilder()).build());
ConfirmResult confirm = (ConfirmResult) confirmChoice.get("confirm");
if (confirm.getConfirmed() == ConfirmChoice.ConfirmationValue.YES) {
context.terminal
.writer()
.println(messageBuilderFactory
.builder()
.info("Writing out the configuration...")
.build());
secDispatcher.writeConfiguration(config);
} else {
context.terminal
.writer()
.println(messageBuilderFactory
.builder()
.warning("Values not accepted; not saving configuration.")
.build());
return CANCELED;
}
}
return OK;
}