keystore static method

Future<void> keystore()

Implementation

static Future<void> keystore() async {
  final keystoreName = InputService.getValidatedInput(
      consoleMessage: Constants.kEnterKeyName,
      errorMessage: Constants.kInvalidValue,
      functionValidator: Validator.isValidProjectName
  );

  final projectPath = DirectoryService.getValidProjectPath('android');

  final password = InputService.getValidatedInput(
      consoleMessage: Constants.kEnterKeyPassword,
      errorMessage: Constants.kInvalidPassword,
      functionValidator: Validator.isValidPassword
  );

  final name = InputService.getValidatedInput(
      consoleMessage: Constants.kEnterName,
      errorMessage: Constants.kInvalidValue,
      functionValidator: Validator.isValidName
  );

  final orgName = InputService.getValidatedInput(
      consoleMessage: Constants.kEnterOrg,
      errorMessage: Constants.kInvalidValue,
      functionValidator: Validator.isValidName
  );

  final city = InputService.getValidatedInput(
      consoleMessage: Constants.kEnterCity,
      errorMessage: Constants.kInvalidValue,
      functionValidator: Validator.isValidName
  );

  final state = InputService.getValidatedInput(
      consoleMessage: Constants.kEnterState,
      errorMessage: Constants.kInvalidValue,
      functionValidator: Validator.isValidName
  );

  final countryCode = InputService.getValidatedInput(
      consoleMessage: Constants.kEnterCountryCode,
      errorMessage: Constants.kInvalidValue,
      functionValidator: Validator.isValidString
  );

  final inputData = [
    password,
    password,
    name,
    'Unknown',
    orgName,
    city,
    state,
    countryCode!.toUpperCase(),
    'yes'
  ];

  final process = await Process.start(
      'keytool',
      <String>[
        '-genkeypair',
        '-v',
        '-keystore',
        '$keystoreName.jks',
        '-keyalg',
        'RSA',
        '-keysize',
        '2048',
        '-validity',
        '10000',
        '-alias',
        'upload'
      ],
      workingDirectory: '$projectPath/android/app',
      runInShell: true
  );

  process.stdout.transform(SystemEncoding().decoder).listen((data) {
    Console.write(data);
  });
  process.stderr.transform(SystemEncoding().decoder).listen((data) {
    Console.write(data);
  });

  for (var data in inputData) {
    process.stdin.writeln(data);
  }

  await process.stdin.close();

  if (await process.exitCode != 0) {
    Console.writeLine(dcli.red('❌  Failed to create key: ${process.stderr}'));
    exit(1);
  }

  Console.writeLine(dcli.green('✅  (1/2) The key was created successfully!'));

  final content = '''
storePassword=$password
keyPassword=$password
keyAlias=upload
storeFile=$keystoreName.jks
  ''';

  FileService.createFile(filePath: '$projectPath/android/key.properties', content: content);
  FileModifier.addContentToBuildGradle(projectPath);

  Console.writeLine(dcli.green('✅  (2/2) Data written successfully!'));
}