generator-jhipster
Version:
Spring Boot + Angular/React/Vue in one handy generator
69 lines (68 loc) • 2.36 kB
JavaScript
/**
* Copyright 2013-2026 the original author or authors from the JHipster project.
*
* This file is part of the JHipster project, see https://www.jhipster.tech/
* for more information.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { lstat, mkdir } from 'node:fs/promises';
import { dirname } from 'node:path';
import { execa } from 'execa';
/**
* Generate a KeyStore.
*/
export async function generateKeyStore(keyStoreFile, { packageName }) {
try {
const stat = await lstat(keyStoreFile);
if (stat.isFile()) {
return { info: `KeyStore '${keyStoreFile}' already exists. Leaving unchanged.` };
}
throw new Error(`${keyStoreFile} is not a file`);
}
catch {
/* File doesn't exist */
}
await mkdir(dirname(keyStoreFile), { recursive: true });
const javaHome = process.env.JAVA_HOME;
const keytoolCmd = javaHome ? `${javaHome}/bin/keytool` : 'keytool';
try {
// Generate the PKCS#12 keystore
const result = await execa(keytoolCmd, [
'-genkey',
'-noprompt',
'-storetype',
'PKCS12',
'-keyalg',
'RSA',
'-alias',
'selfsigned',
'-keystore',
keyStoreFile,
'-storepass',
'password',
'-keypass',
'password',
'-keysize',
'2048',
'-validity',
'99999',
'-dname',
`CN=Java Hipster, OU=Development, O=${packageName}, L=, ST=, C=`,
]);
return { info: [...result.stderr.split('\n').filter(Boolean), `KeyStore '${keyStoreFile}' generated successfully.`] };
}
catch (error) {
return { debug: error, warning: `Failed to create a KeyStore with 'keytool': ${error.message}` };
}
}