public async Task <bool> TwoFactorIsEnabledAsync(ITwoFactorProvidersUser user)
        {
            var providers = user.GetTwoFactorProviders();

            if (providers == null)
            {
                return(false);
            }

            foreach (var p in providers)
            {
                if (p.Value?.Enabled ?? false)
                {
                    if (!TwoFactorProvider.RequiresPremium(p.Key))
                    {
                        return(true);
                    }
                    if (await CanAccessPremium(user))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
        public async Task <bool> CanAccessPremium(ITwoFactorProvidersUser user)
        {
            var userId = user.GetUserId();

            if (!userId.HasValue)
            {
                return(false);
            }
            if (user.GetPremium())
            {
                return(true);
            }
            var orgs = await _currentContext.OrganizationMembershipAsync(_organizationUserRepository, userId.Value);

            if (!orgs.Any())
            {
                return(false);
            }
            var orgAbilities = await _applicationCacheService.GetOrganizationAbilitiesAsync();

            return(orgs.Any(o => orgAbilities.ContainsKey(o.Id) &&
                            orgAbilities[o.Id].UsersGetPremium && orgAbilities[o.Id].Enabled));
        }
        public async Task <bool> TwoFactorProviderIsEnabledAsync(TwoFactorProviderType provider, ITwoFactorProvidersUser user)
        {
            var providers = user.GetTwoFactorProviders();

            if (providers == null || !providers.ContainsKey(provider) || !providers[provider].Enabled)
            {
                return(false);
            }

            if (!TwoFactorProvider.RequiresPremium(provider))
            {
                return(true);
            }

            return(await CanAccessPremium(user));
        }