public IEntitlementAccess Find(IEntitledProduct entitledProduct)
        {
            if (!EntitlementChecksEnabled.Enabled)
            {
                return(Create(null, EntitledAccessLevel.Individual));
            }

            if (entitledProduct == null)
            {
                return(Create(null, EntitledAccessLevel.None));
            }

            var productCode  = entitledProduct.ProductCode;
            var entitlements = EntitlementsContexts.SelectMany(ec => ec.Entitlements.Where(e => string.Equals(e.ProductCode, productCode, StringComparison.InvariantCultureIgnoreCase)).Select(e => Create(e, ec.AccessLevel)));

            foreach (var accessLevel in OrderedAccessLevels)
            {
                var entitlementAccess = entitlements.FirstOrDefault(e => e.AccessLevel == accessLevel);

                if (entitlementAccess != null)
                {
                    return(entitlementAccess);
                }
            }

            return(Create(null, EntitledAccessLevel.None));
        }
Beispiel #2
0
        public IEntitlementAccess Find(IEntitledProduct entitledProduct)
        {
            var matchingPurchase = ArticlePurchasesContext.ArticlesPurchases?.FirstOrDefault(ap => string.Equals(ap.DocumentId, entitledProduct.DocumentId, StringComparison.InvariantCultureIgnoreCase));

            if (matchingPurchase == null || entitledProduct.PublishedOn >= matchingPurchase.Expiration)
            {
                return(Create(EntitledAccessLevel.None));
            }

            return(Create(EntitledAccessLevel.Individual));
        }
Beispiel #3
0
        public bool IsArchiveLimited(IEntitlement entitlement, IEntitledProduct entitledProduct)
        {
            if (entitlement == null || !entitlement.ArchiveLimited)
            {
                return(false);
            }

            var productPublishedOn = entitledProduct.PublishedOn;
            var archiveLimit       = DateTime.Now.AddDays(entitlement.ArchiveLimitedDays * -1);

            return(archiveLimit >= productPublishedOn);
        }
Beispiel #4
0
        public bool IsEntitled(IEntitledProduct entitledProduct)
        {
            if (entitledProduct == null)
            {
                return(false);
            }

            if (entitledProduct.IsFree || (entitledProduct.IsFreeWithRegistration && AuthenticatedUserContext.IsAuthenticated))
            {
                return(true);
            }

            var entitlementAccesses         = EntitlementAccessContexts.Select(eac => eac.Find(entitledProduct));
            var filteredEntitlementAccesses = entitlementAccesses
                                              .Where(ea =>
                                                     ea != null &&
                                                     ea.AccessLevel != EntitledAccessLevel.None &&
                                                     !IsArchiveLimited(ea.Entitlement, entitledProduct)
                                                     )
                                              .ToList();

            return(filteredEntitlementAccesses.Any());
        }