use of utils.ArgumentSet.Setting in project jdchain-core by blockchain-jd-com.
the class KeyGenCommand method main.
/**
* 入口;
*
* @param args
*/
public static void main(String[] args) {
Configurator.setRootLevel(Level.ERROR);
Setting setting = ArgumentSet.setting().prefix(READ_ARG, NAME_ARG, OUT_DIR_ARG, LOCAL_CONF_ARG, CRYPTO_ALGORITHM).option(OPT_DECRYPTING, OPT_DEBUG);
ArgumentSet argSet = ArgumentSet.resolve(args, setting);
try {
ArgEntry[] argEntries = argSet.getArgs();
if (argEntries.length == 0) {
ConsoleUtils.info("Miss argument!\r\n" + "-r : Run in reading mode if set this option, or in generating mode if not set.\r\n" + "-d : Decrypt priv key in reading mode, optional.\r\n" + "-n : name of key.\r\n" + "-o : output dir of key under generating mode.\r\n");
return;
}
if (argSet.getArg(READ_ARG) != null) {
readKey(argSet.getArg(READ_ARG).getValue(), argSet.hasOption(OPT_DECRYPTING));
} else {
ArgEntry name = argSet.getArg(NAME_ARG);
if (name == null) {
ConsoleUtils.info("Miss name of key!");
return;
}
String outputDir = null;
ArgEntry dirArg = argSet.getArg(OUT_DIR_ARG);
if (dirArg == null || dirArg.getValue() == null) {
// 在当前目录生成;
outputDir = "." + File.separatorChar;
// ConsoleUtils.info("Miss storage dir of keys!");
// return;
} else {
outputDir = dirArg.getValue();
}
if (!FileUtils.existDirectory(outputDir)) {
// 创建目录;
ConsoleUtils.info("The storage dir[" + outputDir + "] doesn't exist, it will be created automatically!");
FileUtils.makeDirectory(outputDir);
// return;
}
ArgEntry cryptoAlgorithm = argSet.getArg(CRYPTO_ALGORITHM);
String algorithm = null != cryptoAlgorithm ? cryptoAlgorithm.getValue() : DEFAULT_CRYPTO_ALGORITHM;
ArgEntry localConfArg = argSet.getArg(LOCAL_CONF_ARG);
String localConfPath = localConfArg == null ? null : localConfArg.getValue();
generateKeyPair(algorithm, name.getValue(), outputDir, localConfPath);
}
} catch (Exception e) {
ConsoleUtils.info("Error!!! %s", e.getMessage());
if (argSet.hasOption(OPT_DEBUG)) {
e.printStackTrace();
}
}
}
use of utils.ArgumentSet.Setting in project jdchain-core by blockchain-jd-com.
the class LedgerInitCommand method main.
/**
* 入口;
*
* @param args
*/
public static void main(String[] args) {
Prompter prompter = DEFAULT_PROMPTER;
Setting argSetting = ArgumentSet.setting().prefix(LOCAL_ARG, INI_ARG).option(MONITOR_OPT);
ArgumentSet argSet = ArgumentSet.resolve(args, argSetting);
try {
if (argSet.hasOption(MONITOR_OPT)) {
prompter = LOG_PROMPTER;
}
ArgEntry localArg = argSet.getArg(LOCAL_ARG);
if (localArg == null) {
prompter.info("Miss local config file which can be specified with arg [%s]!!!", LOCAL_ARG);
}
LocalConfig localConf = LocalConfig.resolve(localArg.getValue());
ArgEntry iniArg = argSet.getArg(INI_ARG);
if (iniArg == null) {
prompter.info("Miss ledger initializing config file which can be specified with arg [%s]!!!", INI_ARG);
return;
}
// load ledger init setting;
LedgerInitProperties ledgerInitProperties = LedgerInitProperties.resolve(iniArg.getValue());
// 加载当前节点的私钥;
// 根据 identity-mode 验证 local.conf 参数的正确性
String base58Pwd = localConf.getLocal().getPassword();
PubKey localNodePubKey;
PrivKey privKey;
if (ledgerInitProperties.getIdentityMode() == IdentityMode.CA) {
X509Certificate certificate = CertificateUtils.parseCertificate(FileUtils.readText(localConf.getLocal().getCaPath()));
localNodePubKey = CertificateUtils.resolvePubKey(certificate);
if (StringUtils.isEmpty(base58Pwd)) {
privKey = CertificateUtils.parsePrivKey(localNodePubKey.getAlgorithm(), FileUtils.readText(localConf.getLocal().getPrivKeyPath()));
} else {
privKey = CertificateUtils.parsePrivKey(localNodePubKey.getAlgorithm(), FileUtils.readText(localConf.getLocal().getPrivKeyPath()), base58Pwd);
}
if (!StringUtils.isEmpty(base58Pwd)) {
base58Pwd = Base58Utils.encode(base58Pwd.getBytes());
}
} else {
if (StringUtils.isEmpty(base58Pwd)) {
base58Pwd = KeyGenUtils.readPasswordString();
}
localNodePubKey = KeyGenUtils.decodePubKey(localConf.getLocal().getPubKeyString());
privKey = KeyGenUtils.decodePrivKey(localConf.getLocal().getPrivKeyString(), base58Pwd);
}
// 地址根据公钥生成
String localNodeAddress = AddressEncoding.generateAddress(localNodePubKey).toBase58();
// 加载全部公钥;
int currId = -1;
for (int i = 0; i < ledgerInitProperties.getConsensusParticipantCount(); i++) {
ParticipantProperties partiConf = ledgerInitProperties.getConsensusParticipant(i);
if (localNodeAddress.equals(partiConf.getAddress().toBase58())) {
currId = i;
}
}
if (currId == -1) {
throw new IllegalStateException("The current node specified in local.conf is not found in ledger.init!");
}
// Output ledger binding config of peer;
if (!FileUtils.existDirectory(localConf.getBindingOutDir())) {
FileUtils.makeDirectory(localConf.getBindingOutDir());
}
File ledgerBindingFile = new File(localConf.getBindingOutDir(), LEDGER_BINDING_FILE_NAME);
LedgerBindingConfig conf;
if (ledgerBindingFile.exists()) {
conf = LedgerBindingConfig.resolve(ledgerBindingFile);
} else {
conf = new LedgerBindingConfig();
}
// 启动初始化;
LedgerInitCommand initCommand = new LedgerInitCommand();
HashDigest newLedgerHash = initCommand.startInit(currId, privKey, base58Pwd, ledgerInitProperties, localConf, prompter, conf);
if (newLedgerHash != null) {
// success;
// so save ledger binding config to file system;
conf.store(ledgerBindingFile);
prompter.info("\r\n------ Update Ledger binding configuration success! ------[%s]", ledgerBindingFile.getAbsolutePath());
}
} catch (Exception e) {
e.printStackTrace();
prompter.error("\r\n Ledger init process has been broken by error!");
}
prompter.confirm(InitializingStep.LEDGER_INIT_COMPLETED.toString(), "\r\n\r\n Press any key to quit. :>");
if (argSet.hasOption(MONITOR_OPT)) {
// 管理工具启动的方式下,需自动退出
System.exit(0);
}
}
Aggregations