onboard method

  1. @override
Future<bool> onboard()
override

perform initial one_time authentication to activate the atsign returns true if onboarded

Implementation

@override
Future<bool> onboard() async {
  // cram auth doesn't use at_chops. So create at_lookup here.
  AtLookupImpl atLookUpImpl = AtLookupImpl(_atSign,
      atOnboardingPreference.rootDomain, atOnboardingPreference.rootPort);

  // get cram_secret from either from AtOnboardingPreference
  // or fetch from the registrar using verification code sent to email
  atOnboardingPreference.cramSecret ??= await OnboardingUtil()
      .getCramUsingOtp(_atSign, atOnboardingPreference.registrarUrl);
  if (atOnboardingPreference.cramSecret == null) {
    logger.info('Root Server address is ${atOnboardingPreference.rootDomain}:'
        '${atOnboardingPreference.rootPort}');
    logger
        .info('Registrar url is \'${atOnboardingPreference.registrarUrl}\'');
    throw AtKeyNotFoundException(
        'Could not fetch cram secret for \'$_atSign\' from registrar');
  }

  // check and wait till secondary exists
  await _waitUntilSecondaryCreated(atLookUpImpl);

  if (await isOnboarded()) {
    throw AtActivateException('atsign is already activated');
  }

  atAuth ??= at_auth.atAuthBase.atAuth();
  var atOnboardingRequest = at_auth.AtOnboardingRequest(_atSign);
  atOnboardingRequest.rootDomain = atOnboardingPreference.rootDomain;
  atOnboardingRequest.rootPort = atOnboardingPreference.rootPort;
  atOnboardingRequest.appName = atOnboardingPreference.appName;
  atOnboardingRequest.deviceName = atOnboardingPreference.deviceName;
  atOnboardingRequest.publicKeyId = atOnboardingPreference.publicKeyId;
  var atOnboardingResponse = await atAuth!
      .onboard(atOnboardingRequest, atOnboardingPreference.cramSecret!);
  logger.finer('Onboarding Response: $atOnboardingResponse');
  if (atOnboardingResponse.isSuccessful) {
    logger.finer(
        'Onboarding successful.Generating keyfile in path: ${atOnboardingPreference.atKeysFilePath}');
    await _generateAtKeysFile(
      atOnboardingResponse.atAuthKeys!,
      enrollmentId: atOnboardingResponse.enrollmentId,
    );
  }
  _isAtsignOnboarded = atOnboardingResponse.isSuccessful;
  return _isAtsignOnboarded;
}