refreshCredentials method

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

Implementation

@override
Future<void> refreshCredentials({
  required String identity,
  required String password,
  String? previousIdentity,
  String? previousPassword,
}) async {
  final storedState = await _stateStore.read();
  if (storedState.lastProvisioningMode ==
          Ntut8021xStoredProvisioningMode.compat ||
      storedState.lastProvisioningMode ==
          Ntut8021xStoredProvisioningMode.direct) {
    await _stateStore.setPendingCompatPrompt(
      reason: Ntut8021xStoredPendingPromptReason.credentialChanged,
      immediate: true,
    );
    _logCampusWifi(
      'Queued NTUT-802.1X update prompt because provisioning requires consent',
    );
    return;
  }
  final capabilities = await getCapabilities();
  if (capabilities.isSuggestionPermissionDisallowed) {
    await _clearSuggestionFallbackPrompt();
    _logCampusWifi(
      'Skipped NTUT-802.1X refresh: Wi-Fi control permission is required',
    );
    return;
  }
  if (!capabilities.isSupported ||
      !capabilities.canProvisionNtut8021xSuggestion) {
    await _queueCompatPromptIfAvailable(capabilities);
    _logCampusWifi(
      'Skipped NTUT-802.1X auto reprovision because suggestion mode is unavailable',
    );
    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 (result.status == 'approvalRejected' ||
      result.status == 'approvalPending' ||
      result.suggestionPermissionState == 'disallowed') {
    await _clearSuggestionFallbackPrompt();
    _logCampusWifi(
      'Skipped compatibility fallback: Wi-Fi suggestion approval is required',
    );
    return;
  }
  if (result.status == 'success' || result.status == 'successPendingWifi') {
    await _stateStore.markProvisioned(
      mode: Ntut8021xStoredProvisioningMode.suggestion,
    );
    _logCampusWifi('Finished NTUT-802.1X auto reprovision successfully');
    return;
  }
  await _queueCompatPromptIfAvailable(capabilities);
  _logCampusWifi(
    'Finished NTUT-802.1X auto reprovision without silent success; '
    'result=${result.status}',
  );
}