run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
void run() async {
  final credFile = defaultConfigFile;
  final hasCred = credFile.existsSync();
  String? approval;
  final credentials = <String, dynamic>{};
  if (hasCred) {
    print('Do you want to overwrite the default credentials [y/n]:');
    approval = stdin.readLineSync(encoding: Encoding.getByName('utf-8')!);
    //use existing credentials from filesystem
    if (approval != null && approval.startsWith('n')) {
      final content = credFile.readAsStringSync();
      try {
        credentials.addAll(json.decode(content));
      } catch (exception) {
        stderr.write('Error reading the credentials file.\n');
        exit(64);
      }
    }
  }
  print('Host:');
  credentials['host'] = stdin.readLineSync(
    encoding: Encoding.getByName('utf-8')!,
  );
  print('Username:');
  credentials['username'] = stdin.readLineSync(
    encoding: Encoding.getByName('utf-8')!,
  );
  print('Password:');
  stdin.echoMode = false;
  credentials['password'] = stdin.readLineSync(
    encoding: Encoding.getByName('utf-8')!,
  );
  if (credentials['host'] == null ||
      credentials['username'] == null ||
      credentials['password'] == null) {
    throw Exception('Error: missing required data.');
  }
  credFile.createSync(recursive: true);
  credFile.writeAsString(json.encode(credentials));
  print('Authorization completed.');
}