reprovisionIfEnabled method

Future<void> reprovisionIfEnabled({
  1. required String identity,
  2. required String password,
  3. String? previousIdentity,
  4. String? previousPassword,
})

Implementation

Future<void> reprovisionIfEnabled({
  required String identity,
  required String password,
  String? previousIdentity,
  String? previousPassword,
}) async {
  final enabled = await isEnabled();
  if (!enabled) {
    _logCampusWifi(
      'Skipped NTUT-802.1X auto reprovision because the flag is disabled',
    );
    return;
  }

  final storedState = await _stateStore.read();
  if (storedState.lastProvisioningMode ==
      Ntut8021xStoredProvisioningMode.none) {
    _logCampusWifi(
      'Skipped NTUT-802.1X auto reprovision because no provisioning mode is stored',
    );
    return;
  }

  if (previousIdentity == identity && previousPassword == password) {
    _logCampusWifi(
      'Skipped NTUT-802.1X auto reprovision because credentials did not change',
    );
    return;
  }

  if (storedState.lastProvisioningMode ==
      Ntut8021xStoredProvisioningMode.compat) {
    await _stateStore.setPendingCompatPrompt(
      reason: Ntut8021xStoredPendingPromptReason.credentialChanged,
      immediate: true,
    );
    _logCampusWifi(
      'Queued NTUT-802.1X compat prompt because last provisioning used compat mode',
    );
    return;
  }

  final capabilities = await _platform.getCapabilities();
  if (!capabilities.canProvisionNtut8021xSuggestion) {
    await _queueCompatPromptIfAvailable(capabilities, immediate: true);
    _logCampusWifi(
      'Skipped NTUT-802.1X auto reprovision because suggestion mode is unavailable',
    );
    return;
  }

  if (capabilities.suggestionPermissionState == 'disallowed') {
    await _queueCompatPromptIfAvailable(capabilities, immediate: true);
    _logCampusWifi(
      'Queued NTUT-802.1X compat prompt because suggestion permission is disallowed',
    );
    return;
  }

  _logCampusWifi(
    'Starting NTUT-802.1X auto reprovision; '
    'hasPreviousCredentials=${previousIdentity != null && previousPassword != null}',
  );

  final result = await _platform.provisionNtut8021x(
    identity: identity,
    password: password,
    previousIdentity: previousIdentity,
    previousPassword: previousPassword,
  );

  if (_isSuggestionSuccess(result.status)) {
    await _stateStore.markProvisioned(
      mode: Ntut8021xStoredProvisioningMode.suggestion,
    );
    _logCampusWifi('Finished NTUT-802.1X auto reprovision successfully');
    return;
  }

  await _queueCompatPromptIfAvailable(capabilities, immediate: true);
  _logCampusWifi(
    'Finished NTUT-802.1X auto reprovision without silent success; '
    'result=${result.status}',
  );
}