diff --git a/packages/core/src/enums/taskName.ts b/packages/core/src/enums/taskName.ts index 393e1edd5..d61f291fe 100644 --- a/packages/core/src/enums/taskName.ts +++ b/packages/core/src/enums/taskName.ts @@ -61,4 +61,5 @@ export const RnvTaskName = { telemetryStatus: 'telemetry status', config: 'config', patchReset: 'patch reset', + tizenCertificate: 'tizen certificate', } as const; diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index 5d1e8061e..7b3669dc1 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -247,7 +247,7 @@ export const createDevelopTizenCertificate = (c: RnvContext) => ) .then(() => addDevelopTizenCertificate(c, { - profileName: DEFAULTS.certificateProfile, + profileName: getConfigProp('certificateProfile') || DEFAULTS.certificateProfile, certPath: path.join(certDirPath, `${certFilename}.p12`), certPassword, }) diff --git a/packages/sdk-tizen/src/index.ts b/packages/sdk-tizen/src/index.ts index f8b85b384..500c73958 100644 --- a/packages/sdk-tizen/src/index.ts +++ b/packages/sdk-tizen/src/index.ts @@ -6,10 +6,11 @@ export * from './constants'; import taskTargetLaunch from './tasks/taskTargetLaunch'; import taskTargetList from './tasks/taskTargetList'; import taskSdkConfigure from './tasks/taskSdkConfigure'; +import taskChangeCertificate from './tasks/taskChangeCertificate'; import { GetContextType, createRnvModule } from '@rnv/core'; const RnvModule = createRnvModule({ - tasks: [taskTargetLaunch, taskTargetList, taskSdkConfigure] as const, + tasks: [taskTargetLaunch, taskTargetList, taskSdkConfigure, taskChangeCertificate] as const, name: '@rnv/sdk-tizen', type: 'internal', }); diff --git a/packages/sdk-tizen/src/runner.ts b/packages/sdk-tizen/src/runner.ts index 335bcb2c3..5b1cedb4b 100644 --- a/packages/sdk-tizen/src/runner.ts +++ b/packages/sdk-tizen/src/runner.ts @@ -44,7 +44,10 @@ const DEFAULT_CERTIFICATE_NAME_WITH_EXTENSION = `${DEFAULT_CERTIFICATE_NAME}.p12 export const checkTizenStudioCert = async (): Promise => { try { - await execCLI(CLI_TIZEN, `security-profiles list -n ${DEFAULTS.certificateProfile}`); + await execCLI( + CLI_TIZEN, + `security-profiles list -n ${getConfigProp('certificateProfile') || DEFAULTS.certificateProfile}` + ); return true; } catch (e) { return false; @@ -74,7 +77,7 @@ export const configureTizenGlobal = () => const certPassword = '1234'; addDevelopTizenCertificate(c, { - profileName: DEFAULTS.certificateProfile, + profileName: getConfigProp('certificateProfile') || DEFAULTS.certificateProfile, certPath: path.join(certDirPath, `${certFilename}.p12`), certPassword, }) diff --git a/packages/sdk-tizen/src/tasks/taskChangeCertificate.ts b/packages/sdk-tizen/src/tasks/taskChangeCertificate.ts new file mode 100644 index 000000000..38db49619 --- /dev/null +++ b/packages/sdk-tizen/src/tasks/taskChangeCertificate.ts @@ -0,0 +1,51 @@ +import { createTask, inquirerPrompt, logInfo, RnvTaskName } from '@rnv/core'; +import fs from 'fs'; +import { checkTizenStudioCert } from '../runner'; + +export default createTask({ + description: 'Change tizen certificate', + dependsOn: [RnvTaskName.appConfigure], + fn: async ({ ctx }) => { + for (const config of ctx.paths.appConfig.configs) { + if (config.includes('base')) { + const configFile = await JSON.parse(fs.readFileSync(config, 'utf-8')); + const { confirm } = await inquirerPrompt({ + message: + 'Tizen - used certificate change. NOTE: you must create the certificate first through the tizens certificate-manager. Continue?', + type: 'confirm', + name: 'confirm', + }); + if (!confirm) { + return; + } + const { platform } = await inquirerPrompt({ + message: 'For which platform do you want to set the new certificate?', + type: 'list', + name: 'platform', + choices: ['tizen', 'tizenwatch', 'tizenmobile'], + }); + const { name } = await inquirerPrompt({ + message: 'Enter the new certificate name:', + type: 'input', + name: 'name', + }); + if (name === '') { + logInfo('No certificate name entered.'); + return; + } + + configFile.platforms[`${platform}`].certificateProfile = name; + + fs.writeFileSync(config, JSON.stringify(configFile, null, 2)); + + await checkTizenStudioCert(); + + // if user inputs a certificate name that doesn't exist, it still sets the certificate name. + // This isn't a problem if running rnv run -p tizen, because it will create the certificate, but that isn't ideal, so should be fixed. + return; + } + } + }, + task: RnvTaskName.tizenCertificate, + isGlobalScope: true, +});