run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
Future<void> run() async {
final resendEmail = argResults!['resend'] as String?;
if (resendEmail != null) {
await _resend(resendEmail);
return;
}
final acceptFlag = argResults!['accept-terms'] as bool;
final refusal = TermsAcceptance.refusalMessage(
hasTerminal: stdin.hasTerminal,
acceptFlag: acceptFlag,
);
if (refusal != null) {
AppLogger.error(refusal);
exit(ExitCodes.usage);
}
if (!acceptFlag) {
stdout.writeln(TermsAcceptance.promptText());
stdout.write(TermsAcceptance.question);
final answer = stdin.readLineSync() ?? '';
if (!TermsAcceptance.isYes(answer)) {
AppLogger.info('Cancelled.');
return;
}
}
final fullName = _prompt('Full name: ');
final email = _prompt('Email: ');
final password = _promptPassword('Password: ');
final confirmation = _promptPassword('Confirm password: ');
for (final error in [
validateFullName(fullName),
validateEmail(email),
validatePassword(password),
validateConfirmation(password, confirmation),
]) {
if (error != null) {
AppLogger.error(error);
exit(ExitCodes.usage);
}
}
AppLogger.info('Creating your account…');
try {
await SignupService.ins.signup(
apiDio: _plainDio(),
auth: AuthRestClient(),
email: email,
password: password,
fullName: fullName,
);
CliAnalytics.ins.logSignupCompleted();
AppLogger.success(successMessage(email: email));
} on AuthCliFault catch (e) {
AppLogger.error(e.message);
exit(e.exitCode);
} on DioException catch (e) {
AppLogger.error('Network error: ${e.message}');
exit(ExitCodes.usage);
}
}