provisionNtut8021x method

Future<Ntut8021xProvisioningResult> provisionNtut8021x()

Implementation

Future<Ntut8021xProvisioningResult> provisionNtut8021x() async {
  final data = await getNtut8021xAssistantData();
  if (!data.canProvisionAutomatically) {
    return const Ntut8021xProvisioningResult.unsupported();
  }

  final provisioning = await _platform.provisionNtut8021x(
    identity: data.identity!,
    password: data.password!,
  );
  final suggestionResult = _provisioningResultFromDto(
    provisioning,
    defaultMode: Ntut8021xProvisioningMode.suggestion,
  );

  if (_isSuggestionSuccess(suggestionResult.status)) {
    await _autoReprovision.enable();
    await _stateStore.markProvisioned(
      mode: Ntut8021xStoredProvisioningMode.suggestion,
    );
    return suggestionResult;
  }

  if (_shouldAutoFallbackToCompat(
    capabilities: data.capabilities,
    result: suggestionResult,
  )) {
    final compatResult = await saveNtut8021xToSystem(
      identity: data.identity,
      password: data.password,
      pendingPromptReason:
          Ntut8021xPendingPromptReason.suggestionFallbackRequired,
    );
    return Ntut8021xProvisioningResult(
      status: compatResult.status,
      androidSdkInt: compatResult.androidSdkInt,
      usedHiddenCaPath: compatResult.usedHiddenCaPath,
      lastProvisioningMode: compatResult.lastProvisioningMode,
      pendingPromptReason: compatResult.pendingPromptReason,
      wifiEnabled: compatResult.wifiEnabled,
      networkSuggestionStatus: compatResult.networkSuggestionStatus,
      approvalStatus: compatResult.approvalStatus,
      compatResultCode: compatResult.compatResultCode,
      compatNetworkResultCode: compatResult.compatNetworkResultCode,
      compatNetworkResultCodes: compatResult.compatNetworkResultCodes,
      message: compatResult.message,
      usedCompatFallback: true,
    );
  }

  if (data.capabilities.isAndroid11OrNewer &&
      data.capabilities.canProvisionNtut8021xCompat) {
    await _stateStore.setPendingCompatPrompt(
      reason: Ntut8021xStoredPendingPromptReason.suggestionFallbackRequired,
      immediate: false,
    );
    return _copyResultWithPendingReason(
      suggestionResult,
      Ntut8021xPendingPromptReason.suggestionFallbackRequired,
    );
  }

  return suggestionResult;
}