From d782c8840a31749c57e632a8a4d0cdc18ef19e58 Mon Sep 17 00:00:00 2001 From: Mykola Morhun Date: Tue, 5 May 2020 12:33:17 +0300 Subject: [PATCH] [Helm] Generate password for Keycloak Signed-off-by: Mykola Morhun --- src/tasks/installers/common-tasks.ts | 2 +- src/tasks/installers/helm.ts | 8 ++++++++ src/util.ts | 29 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/tasks/installers/common-tasks.ts b/src/tasks/installers/common-tasks.ts index 99d0b8411..11f8fc212 100644 --- a/src/tasks/installers/common-tasks.ts +++ b/src/tasks/installers/common-tasks.ts @@ -88,7 +88,7 @@ export function createEclipeCheCluster(flags: any, kube: KubeHelper): ListrTask } if (cr.spec.auth && cr.spec.auth.updateAdminPassword) { - ctx.highlightedMessages.push('You will be asked to change the default Che admin password on the first login.') + ctx.highlightedMessages.push('Eclipse Che admin credentials are: "admin:admin". You will be asked to change default Che admin password on the first login.') } task.title = `${task.title}...done.` diff --git a/src/tasks/installers/helm.ts b/src/tasks/installers/helm.ts index 79cd8a8e2..d0703edf6 100644 --- a/src/tasks/installers/helm.ts +++ b/src/tasks/installers/helm.ts @@ -21,6 +21,7 @@ import { KubeHelper } from '../../api/kube' import { VersionHelper } from '../../api/version' import { CHE_TLS_SECRET_NAME } from '../../constants' import { CertManagerTasks } from '../../tasks/component-installers/cert-manager' +import { generatePassword } from '../../util' export class HelmTasks { protected kubeHelper: KubeHelper @@ -333,6 +334,13 @@ error: E_COMMAND_FAILED`) setOptions.push(`--set global.chePostgresPVCStorageClassName=${flags['postgres-pvc-storage-class-name']}`) } + if (flags.multiuser) { + // Generate Keycloak admin password + const keycloakPassword = generatePassword(12) + setOptions.push(`--set che-keycloak.keycloakAdminUserPassword=${keycloakPassword}`) + ctx.highlightedMessages.push(`Autogenerated Keycloak credentials are: "admin:${keycloakPassword}"`) + } + setOptions.push(`--set global.ingressDomain=${flags.domain}`) setOptions.push(`--set cheImage=${flags.cheimage}`) setOptions.push(`--set che.disableProbes=${flags.debug}`) diff --git a/src/util.ts b/src/util.ts index 39a5fd639..2c64404ad 100644 --- a/src/util.ts +++ b/src/util.ts @@ -31,3 +31,32 @@ export function isKubernetesPlatformFamily(platform: string): boolean { export function isOpenshiftPlatformFamily(platform: string): boolean { return platform === 'openshift' || platform === 'minishift' || platform === 'crc' } + +export function generatePassword(passwodLength: number, charactersSet = '') { + let dictionary: string[] + if (!charactersSet) { + const ZERO_CHAR_CODE = 48 + const NINE_CHAR_CODE = 57 + const A_CHAR_CODE = 65 + const Z_CHAR_CODE = 90 + const a_CHAR_CODE = 97 + const z_CHAR_CODE = 122 + const ranges = [[ZERO_CHAR_CODE, NINE_CHAR_CODE], [A_CHAR_CODE, Z_CHAR_CODE], [a_CHAR_CODE, z_CHAR_CODE]] + + dictionary = [] + for (let range of ranges) { + for (let charCode = range[0]; charCode <= range[1]; charCode++) { + dictionary.push(String.fromCharCode(charCode)) + } + } + } else { + dictionary = [...charactersSet] + } + + let generatedPassword = '' + for (let i = 0; i < passwodLength; i++) { + const randomIndex = Math.floor(Math.random() * dictionary.length) + generatedPassword += dictionary[randomIndex] + } + return generatedPassword +}