UNPKG

generator-jhipster

Version:

Spring Boot + Angular/React/Vue in one handy generator

69 lines (68 loc) 2.36 kB
/** * 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}` }; } }