public static IDisposable RequestAccess(object accessToken, EnumLicenseFeature srcFeature, EnumLicenseFeature requestedAccess) { var accessType = accessToken.GetType(); if (srcFeature != EnumLicenseFeature.Client || requestedAccess != EnumLicenseFeature.Text || accessToken == null) { throw new LicenseException(ErrorMessages.UnauthorizedAccessRequest).Trace(); } if (accessType.Name == "AccessToken" && accessType.GetAssembly().ManifestModule.Name.StartsWith("<")) //Smart Assembly { return(new AccessToken(requestedAccess)); } if (!_approved.__tokens.Contains(accessType.FullName)) { var errorDetails = " __token: '{0}', Assembly: '{1}'".Fmt( accessType.Name, accessType.GetAssembly().ManifestModule.Name); throw new LicenseException(ErrorMessages.UnauthorizedAccessRequest + errorDetails).Trace(); } PclExport.Instance.VerifyInAssembly(accessType, _approved.__dlls); return(new AccessToken(requestedAccess)); }
public static void ApprovedUsage(EnumLicenseFeature licenseFeature, EnumLicenseFeature requestedFeature, int allowedUsage, int actualUsage, string message) { var hasFeature = (requestedFeature & licenseFeature) == requestedFeature; if (hasFeature) { return; } if (actualUsage > allowedUsage) { throw new LicenseException(message.Fmt(allowedUsage)).Trace(); } }
internal AccessToken(EnumLicenseFeature requested) { prevToken = AccessTokenScope; AccessTokenScope = this; tempFeatures = requested; }
public static void AssertValidUsage(EnumLicenseFeature feature, EnumQuotaType quotaType, int count) { var licensedFeatures = ActivatedLicenseFeatures(); if ((EnumLicenseFeature.All & licensedFeatures) == EnumLicenseFeature.All) //Standard Usage { return; } if (AccessTokenScope != null) { if ((feature & AccessTokenScope.tempFeatures) == feature) { return; } } //Free Quotas switch (feature) { case EnumLicenseFeature.Text: switch (quotaType) { case EnumQuotaType.Types: ApprovedUsage(licensedFeatures, feature, FreeQuotas.TextTypes, count, ErrorMessages.ExceededTextTypes); return; } break; case EnumLicenseFeature.Redis: switch (quotaType) { case EnumQuotaType.Types: ApprovedUsage(licensedFeatures, feature, FreeQuotas.RedisTypes, count, ErrorMessages.ExceededRedisTypes); return; case EnumQuotaType.RequestsPerHour: ApprovedUsage(licensedFeatures, feature, FreeQuotas.RedisRequestPerHour, count, ErrorMessages.ExceededRedisRequests); return; } break; case EnumLicenseFeature.OrmLite: switch (quotaType) { case EnumQuotaType.Tables: ApprovedUsage(licensedFeatures, feature, FreeQuotas.OrmLiteTables, count, ErrorMessages.ExceededOrmLiteTables); return; } break; case EnumLicenseFeature.ServiceStack: switch (quotaType) { case EnumQuotaType.Operations: ApprovedUsage(licensedFeatures, feature, FreeQuotas.ServiceStackOperations, count, ErrorMessages.ExceededServiceStackOperations); return; } break; case EnumLicenseFeature.Admin: switch (quotaType) { case EnumQuotaType.PremiumFeature: ApprovedUsage(licensedFeatures, feature, FreeQuotas.PremiumFeature, count, ErrorMessages.ExceededAdminUi); return; } break; case EnumLicenseFeature.Premium: switch (quotaType) { case EnumQuotaType.PremiumFeature: ApprovedUsage(licensedFeatures, feature, FreeQuotas.PremiumFeature, count, ErrorMessages.ExceededPremiumFeature); return; } break; } throw new LicenseException("Unknown Quota Usage: {0}, {1}".Fmt(feature, quotaType)).Trace(); }
public static bool HasLicensedFeature(EnumLicenseFeature feature) { var licensedFeatures = ActivatedLicenseFeatures(); return((feature & licensedFeatures) == feature); }