gitextract_go6x876s/ ├── .deployment/ │ └── storefront-app/ │ └── argoDeploy.json ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE.md │ ├── pull_request_template.md │ └── workflows/ │ ├── deploy.yml │ ├── main.yml │ ├── msteams.yml │ ├── pr-ci.yml │ ├── pr-deploy.yml │ ├── release-branch.yml │ └── release.yml ├── .gitignore ├── .nuke ├── CONTRIBUTING.md ├── Directory.Build.props ├── LICENSE ├── README.md ├── VirtoCommerce.LiquidThemeEngine/ │ ├── Converters/ │ │ └── CountryConverter.cs │ ├── Exceptions/ │ │ └── SaasCompileException.cs │ ├── Extensions/ │ │ ├── GraphQLResponseExtensions.cs │ │ ├── StringExtensions.cs │ │ └── UriExtensions.cs │ ├── Filters/ │ │ ├── ArrayFilters.cs │ │ ├── CommerceFilters.cs │ │ ├── CommonFilters.cs │ │ ├── DynamicDataSourceFilters.cs │ │ ├── FeatureFilter.cs │ │ ├── HtmlFilters.cs │ │ ├── MathFilters.cs │ │ ├── MoneyFilters.cs │ │ ├── StandardFilters.cs │ │ ├── StringFilters.cs │ │ ├── TranslationFilter.cs │ │ └── UrlFilters.cs │ ├── ILiquidThemeEngine.cs │ ├── ILiquidViewEngine.cs │ ├── ISassFileManager.cs │ ├── JsonConverters/ │ │ └── MutablePagedListAsArrayJsonConverter.cs │ ├── LiquidThemeEngineOptions.cs │ ├── LiquidThemedView.cs │ ├── LiquidThemedViewEngine.cs │ ├── Objects/ │ │ ├── Paginate.cs │ │ └── Part.cs │ ├── SassFileManager.cs │ ├── Scriban/ │ │ └── WorkContextConverter.cs │ ├── SettingsManager.cs │ ├── ShopifyLiquidThemeEngine.cs │ ├── ThemeEngineCacheRegion.cs │ └── VirtoCommerce.LiquidThemeEngine.csproj ├── VirtoCommerce.Storefront/ │ ├── .bowerrc │ ├── AutoRestClients/ │ │ ├── !readme.txt │ │ ├── CatalogModuleApi.cs │ │ ├── ContentModuleApi.cs │ │ ├── CoreModuleApi.cs │ │ ├── CustomerModuleApi.cs │ │ ├── NotificationsModuleApi.cs │ │ ├── PlatformModuleApi.cs │ │ ├── SitemapsModuleApi.cs │ │ ├── StoreModuleApi.cs │ │ └── array-in-query-fix.yml │ ├── Caching/ │ │ ├── Redis/ │ │ │ ├── RedisCachingMessage.cs │ │ │ ├── RedisCachingOptions.cs │ │ │ └── RedisStorefrontMemoryCache.cs │ │ ├── ServiceCollectionExtensions.cs │ │ └── StorefrontMemoryCache.cs │ ├── Connected Services/ │ │ └── Application Insights/ │ │ └── ConnectedService.json │ ├── Controllers/ │ │ ├── AccountController.cs │ │ ├── Api/ │ │ │ ├── ApiAccountController.cs │ │ │ ├── ApiBlogController.cs │ │ │ ├── ApiCommonController.cs │ │ │ ├── ApiStaticContentController.cs │ │ │ └── ApiThemeController.cs │ │ ├── AssetController.cs │ │ ├── CommonController.cs │ │ ├── DesignerPreviewController.cs │ │ ├── ErrorController.cs │ │ ├── HomeController.cs │ │ ├── SitemapController.cs │ │ └── StorefrontControllerBase.cs │ ├── DependencyInjection/ │ │ └── ServiceCollectionExtension.cs │ ├── Domain/ │ │ ├── Common/ │ │ │ ├── AddressConverter.cs │ │ │ ├── ContactUsFormConverter.cs │ │ │ ├── CurrencyConverter.cs │ │ │ ├── DynamicPropertyConverter.cs │ │ │ ├── NotificationConverter.cs │ │ │ ├── SeoInfoConverter.cs │ │ │ ├── SettingConverter.cs │ │ │ └── ToolsConverter.cs │ │ ├── ContentBlobProviders/ │ │ │ ├── AzureBlobContentOptions.cs │ │ │ ├── AzureBlobContentProvider.cs │ │ │ ├── BlobConnectionString.cs │ │ │ ├── ContentBlobCacheRegion.cs │ │ │ ├── FileSystemBlobContentOptions.cs │ │ │ └── FileSystemContentBlobProvider.cs │ │ ├── Countries/ │ │ │ ├── CountriesWorkContextBuilderExtensions.cs │ │ │ ├── FileSystemCountriesOptions.cs │ │ │ └── FileSystemCountriesService.cs │ │ ├── CurrencyService.cs │ │ ├── Customer/ │ │ │ ├── CutomerCacheRegion.cs │ │ │ ├── Handlers/ │ │ │ │ └── SecurityEventsHandler.cs │ │ │ ├── MemberConverter.cs │ │ │ └── MemberService.cs │ │ ├── IWorkContextBuilder.cs │ │ ├── Security/ │ │ │ ├── AnonymousUserForStoreAuthorizationRequirement.cs │ │ │ ├── CanEditOrganizationResourceAuthorizationHandler.cs │ │ │ ├── CanImpersonateAuthorizationHandler.cs │ │ │ ├── CanReadContentItemAuthorizationHandler.cs │ │ │ ├── CustomCookieAuthenticationEvents.cs │ │ │ ├── CustomSignInManager.cs │ │ │ ├── CustomUserManager.cs │ │ │ ├── Notifications/ │ │ │ │ ├── ChangePhoneNumberSmsNotification.cs │ │ │ │ ├── EmailConfirmationNotification.cs │ │ │ │ ├── RegistrationEmailNotification.cs │ │ │ │ ├── RegistrationInvitationNotification.cs │ │ │ │ ├── RemindUserNameNotification.cs │ │ │ │ ├── ResetPasswordEmailNotification.cs │ │ │ │ ├── ResetPasswordSmsNotification.cs │ │ │ │ ├── TwoFactorEmailNotification.cs │ │ │ │ └── TwoFactorSmsNotification.cs │ │ │ ├── OnlyRegisteredUserAuthorizationHandler.cs │ │ │ ├── PermissionAuthorizationHandler.cs │ │ │ ├── PermissionAuthorizationPolicyProvider.cs │ │ │ ├── PermissionAuthorizationRequirement.cs │ │ │ ├── PollingApiUserChangeToken.cs │ │ │ ├── SecurityCacheRegion.cs │ │ │ ├── SecurityConverter.cs │ │ │ ├── SecurityWorkContextBuilderExtensions.cs │ │ │ └── UserStoreStub.cs │ │ ├── SeoInfoService.cs │ │ ├── SpaRouteService.cs │ │ ├── StaticContent/ │ │ │ ├── LinkListConverter.cs │ │ │ ├── LinkListServiceImpl.cs │ │ │ ├── MarkdownContentLoader.cs │ │ │ ├── PageBuilderContentLoader.cs │ │ │ ├── StaticContentCacheRegion.cs │ │ │ ├── StaticContentItemFactory.cs │ │ │ ├── StaticContentLoader.cs │ │ │ ├── StaticContentLoaderFactory.cs │ │ │ ├── StaticContentService.cs │ │ │ └── StaticContentWorkContextBuilderExtensions.cs │ │ ├── Stores/ │ │ │ ├── SelectCurrentCurrencyPolicy.cs │ │ │ ├── SelectCurrentLanguagePolicy.cs │ │ │ ├── SelectCurrentStorePolicy.cs │ │ │ ├── StoreCacheRegion.cs │ │ │ ├── StoreConverter.cs │ │ │ ├── StoreService.cs │ │ │ └── StoreWorkContextBuilderExtensions.cs │ │ ├── WorkContextAccessor.cs │ │ └── WorkContextBuilder.cs │ ├── Extensions/ │ │ ├── ClaimsPrincipalExtensions.cs │ │ ├── HostingEnviromentExtension.cs │ │ ├── ObjectExtensions.cs │ │ ├── PathStringExtensions.cs │ │ ├── QueryCollectionExtensions.cs │ │ └── SeoExtensions.cs │ ├── Filters/ │ │ ├── AngularAntiforgeryCookieResultFilterAttribute.cs │ │ └── AnonymousUserForStoreAuthorizationFilter.cs │ ├── IISUrlRewrite.xml │ ├── Infrastructure/ │ │ ├── ApiAuthMode.cs │ │ ├── ApiChangesWatcher.cs │ │ ├── ApplicationInsights/ │ │ │ ├── ServiceCollectionExtension.cs │ │ │ ├── SnapshotCollectorTelemetryProcessorFactory.cs │ │ │ └── UserTelemetryInitializer.cs │ │ ├── Autorest/ │ │ │ ├── ApiKeySecretAuthHandler.cs │ │ │ ├── AuthenticationHandlerFactory.cs │ │ │ ├── BaseAuthHandler.cs │ │ │ ├── ClientCredentialsAuthHandler.cs │ │ │ ├── EmptyServiceClientCredentials.cs │ │ │ └── UserPasswordAuthHandler.cs │ │ ├── BlobChangeToken.cs │ │ ├── BlobChangesWatcher.cs │ │ ├── Exceptions/ │ │ │ ├── NoStoresException.cs │ │ │ └── NoThemeException.cs │ │ ├── HealthCheck/ │ │ │ └── PlatformConnectionHealthChecker.cs │ │ ├── HmacUtility.cs │ │ ├── IApiChangesWatcher.cs │ │ ├── IBlobChangesWatcher.cs │ │ ├── PlatformEndpointOptions.cs │ │ ├── PollingApiChangeToken.cs │ │ ├── RequireHttpsOptions.cs │ │ ├── StorefrontOptions.cs │ │ ├── StorefrontUrlBuilder.cs │ │ └── Swagger/ │ │ ├── ApiExplorerApiControllersConvention.cs │ │ ├── ArrayInQueryParametersFilter.cs │ │ ├── AuthResponsesOperationFilter.cs │ │ ├── ConsumeFromBodyFilter.cs │ │ ├── EnumSchemaFilter.cs │ │ ├── FileResponseTypeFilter.cs │ │ ├── FileUploadOperationFilter.cs │ │ ├── NewtonsoftJsonIgnoreFilter.cs │ │ ├── OptionalParametersFilter.cs │ │ ├── SwaggerFileResponseAttribute.cs │ │ ├── SwaggerOptionalAttribute.cs │ │ └── UploadFileAttribute.cs │ ├── Middleware/ │ │ ├── NoLiquidThemeMiddleware.cs │ │ ├── StoreMaintenanceMiddleware.cs │ │ └── WorkContextBuildMiddleware.cs │ ├── Models/ │ │ ├── NoThemeViewModel.cs │ │ └── ResetCacheModel.cs │ ├── Program.cs │ ├── Properties/ │ │ └── launchSettings.json │ ├── Routing/ │ │ ├── ISlugRouteService.cs │ │ ├── MapStorefrontRouteBuilderExtension.cs │ │ ├── RoutingCacheRegion.cs │ │ ├── SlugRoute.cs │ │ ├── SlugRouteResponse.cs │ │ ├── SlugRouteService.cs │ │ ├── StorefrontApiRouteAttribute.cs │ │ ├── StorefrontRoute.cs │ │ └── StorefrontRouteAttribute.cs │ ├── Startup.cs │ ├── Views/ │ │ ├── Common/ │ │ │ ├── Maintenance.cshtml │ │ │ └── NoTheme.cshtml │ │ ├── Error/ │ │ │ ├── 404.cshtml │ │ │ ├── 500.cshtml │ │ │ ├── AccessDenied.cshtml │ │ │ ├── Error.cshtml │ │ │ └── NoStore.cshtml │ │ ├── Shared/ │ │ │ ├── _Layout.cshtml │ │ │ └── _ValidationScriptsPartial.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ ├── VirtoCommerce.Storefront.csproj │ ├── appsettings.Development.json │ ├── appsettings.Production.json │ ├── appsettings.json │ ├── bower.json │ ├── bundleconfig.json │ ├── bundleconfig.json.bindings │ ├── web.config │ └── wwwroot/ │ ├── countries.json │ ├── css/ │ │ └── site.css │ ├── js/ │ │ └── site.js │ └── lib/ │ ├── bootstrap/ │ │ ├── .bower.json │ │ ├── LICENSE │ │ └── dist/ │ │ ├── css/ │ │ │ ├── bootstrap-theme.css │ │ │ └── bootstrap.css │ │ └── js/ │ │ ├── bootstrap.js │ │ └── npm.js │ ├── jquery/ │ │ ├── .bower.json │ │ ├── LICENSE.txt │ │ └── dist/ │ │ └── jquery.js │ ├── jquery-validation/ │ │ ├── .bower.json │ │ ├── LICENSE.md │ │ └── dist/ │ │ ├── additional-methods.js │ │ └── jquery.validate.js │ └── jquery-validation-unobtrusive/ │ ├── .bower.json │ └── jquery.validate.unobtrusive.js ├── VirtoCommerce.Storefront.Model/ │ ├── Address.cs │ ├── AddressType.cs │ ├── AmountType.cs │ ├── Attachment.cs │ ├── BankCardInfo.cs │ ├── Caching/ │ │ └── IStorefrontMemoryCache.cs │ ├── Common/ │ │ ├── AnonymousComparer.cs │ │ ├── ArrayExtensions.cs │ │ ├── AsyncLock.cs │ │ ├── Breadcrumb.cs │ │ ├── Bus/ │ │ │ ├── IHandlerRegistrar.cs │ │ │ └── InProcessBus.cs │ │ ├── Caching/ │ │ │ ├── CacheCancellableTokensRegistry.cs │ │ │ ├── CacheKey.cs │ │ │ ├── CancellableCacheRegion.cs │ │ │ ├── GlobalCacheRegion.cs │ │ │ ├── ICacheKey.cs │ │ │ ├── MemoryCacheExtensions.cs │ │ │ └── TokenCancelledEventArgs.cs │ │ ├── CollectionExtensions.cs │ │ ├── DefaultableDictionary.cs │ │ ├── DynamicPropertyExtension.cs │ │ ├── EmptyDisposable.cs │ │ ├── Entity.cs │ │ ├── EntryState.cs │ │ ├── EnumUtility.cs │ │ ├── EnumerableExtension.cs │ │ ├── EventThrottlingExtensions.cs │ │ ├── Events/ │ │ │ ├── DomainEvent.cs │ │ │ ├── ICancellableEventHandler.cs │ │ │ ├── IEvent.cs │ │ │ ├── IEventHandler.cs │ │ │ └── IEventPublisher.cs │ │ ├── Exceptions/ │ │ │ └── StorefrontException.cs │ │ ├── GenericSearchResult.cs │ │ ├── GeoPoint.cs │ │ ├── IAccessibleByIndexKey.cs │ │ ├── IEntity.cs │ │ ├── IHasBreadcrumbs.cs │ │ ├── IHasQueryKeyValues.cs │ │ ├── IMutablePagedList.cs │ │ ├── IQueryableExtensions.cs │ │ ├── IStorefrontUrlBuilder.cs │ │ ├── IValueObject.cs │ │ ├── LocalizationExtensions.cs │ │ ├── Messages/ │ │ │ ├── ICancellableHandler.cs │ │ │ ├── IHandler.cs │ │ │ └── IMessage.cs │ │ ├── Money/ │ │ │ ├── Currency.cs │ │ │ ├── IConvertible.cs │ │ │ └── Money.cs │ │ ├── MutablePagedList.cs │ │ ├── MutablePagedListExtensions.cs │ │ ├── Notifications/ │ │ │ ├── EmailNotificationBase.cs │ │ │ ├── NotificationBase.cs │ │ │ └── SmsNotificationBase.cs │ │ ├── NumericRange.cs │ │ ├── ObjectExtensions.cs │ │ ├── PagedSearchCriteria.cs │ │ ├── PathUtils.cs │ │ ├── ReflectionExtension.cs │ │ ├── SettingsExtension.cs │ │ ├── SortInfo.cs │ │ ├── Specifications/ │ │ │ └── ISpecification.cs │ │ ├── StreamExtensions.cs │ │ ├── StringExtensions.cs │ │ ├── TreeNode.cs │ │ ├── TypeExtensions.cs │ │ └── ValueObject.cs │ ├── ContactForm.cs │ ├── Country.cs │ ├── CountryRegion.cs │ ├── Customer/ │ │ ├── Contact.cs │ │ ├── Member.cs │ │ ├── Organization.cs │ │ ├── OrganizationContactsSearchCriteria.cs │ │ ├── SecurityAccount.cs │ │ └── Services/ │ │ └── IMemberService.cs │ ├── DynamicProperty.cs │ ├── DynamicPropertyDictionaryItem.cs │ ├── DynamicPropertyName.cs │ ├── EditorialReview.cs │ ├── Features/ │ │ ├── Exceptions/ │ │ │ └── FeaturesException.cs │ │ ├── Feature.cs │ │ ├── FeatureExtensions.cs │ │ ├── FeaturesAgent.cs │ │ └── IFeaturesAgent.cs │ ├── Form.cs │ ├── FormError.cs │ ├── ICountriesService.cs │ ├── ICurrencyService.cs │ ├── IHasLanguage.cs │ ├── IHasSettings.cs │ ├── ISeoInfoService.cs │ ├── ISpaRouteService.cs │ ├── IWorkContextAccessor.cs │ ├── Image.cs │ ├── Interaction/ │ │ ├── Client.cs │ │ ├── Page.cs │ │ ├── UserEvent.cs │ │ └── UserSession.cs │ ├── Language.cs │ ├── LinkList/ │ │ ├── CategoryMenuLink.cs │ │ ├── MenuLink.cs │ │ ├── MenuLinkList.cs │ │ ├── ProductMenuLink.cs │ │ └── Services/ │ │ └── ILinkListService.cs │ ├── LocalizedString.cs │ ├── LoginProvider.cs │ ├── Security/ │ │ ├── AccountState.cs │ │ ├── ChangePassword.cs │ │ ├── ChangeTwoFactorAuthenticationModel.cs │ │ ├── ChangeTwoFactorAuthenticationResult.cs │ │ ├── ConfirmEmailModel.cs │ │ ├── CustomSignInResult.cs │ │ ├── Events/ │ │ │ ├── UserDeletedEvent.cs │ │ │ ├── UserLoginEvent.cs │ │ │ └── UserRegisteredEvent.cs │ │ ├── ExternalUserLoginInfo.cs │ │ ├── ForgotPassword.cs │ │ ├── ForgotPasswordModel.cs │ │ ├── Login.cs │ │ ├── OrganizationRegistration.cs │ │ ├── OrganizationUserRegistration.cs │ │ ├── PasswordChangeResult.cs │ │ ├── RemovePhoneNumberResult.cs │ │ ├── ResetPassword.cs │ │ ├── ResetPasswordByCodeModel.cs │ │ ├── ResetPasswordModel.cs │ │ ├── Role.cs │ │ ├── SecurityConstants.cs │ │ ├── SecurityErrorDescriber.cs │ │ ├── Specifications/ │ │ │ ├── CanUserLoginToStoreSpecification.cs │ │ │ ├── IsUserLockedByRequiredEmailVerificationSpecification.cs │ │ │ ├── IsUserLockedOutSpecification.cs │ │ │ ├── IsUserPasswordExpiredSpecification.cs │ │ │ ├── IsUserSuspendedSpecification.cs │ │ │ └── IsUserTemporaryLockedOutSpecification.cs │ │ ├── UpdatePhoneNumberModel.cs │ │ ├── UpdatePhoneNumberResult.cs │ │ ├── User.cs │ │ ├── UserActionIdentityResult.cs │ │ ├── UserRegistration.cs │ │ ├── UserRegistrationByInvitation.cs │ │ ├── UserSearchResult.cs │ │ ├── UserUpdateInfo.cs │ │ ├── UsersInvitation.cs │ │ ├── ValidateTokenModel.cs │ │ ├── VerifyCodeViewModel.cs │ │ └── VerifyPhoneNumberModel.cs │ ├── SeoInfo.cs │ ├── SeoLinksType.cs │ ├── SettingEntry.cs │ ├── SlugInfoRequest.cs │ ├── SlugInfoResult.cs │ ├── SlugRoutingData.cs │ ├── SpaThemeContext.cs │ ├── StaticContent/ │ │ ├── Blog.cs │ │ ├── BlogArticle.cs │ │ ├── BlogSearchCriteria.cs │ │ ├── ContentInThemeSearchCriteria.cs │ │ ├── ContentItem.cs │ │ ├── ContentPage.cs │ │ ├── IContentBlobProvider.cs │ │ ├── IStaticContentItemFactory.cs │ │ ├── IStaticContentLoader.cs │ │ ├── IStaticContentLoaderFactory.cs │ │ ├── IStaticContentService.cs │ │ └── StaticContentSearchCriteria.cs │ ├── StorefrontNotification.cs │ ├── StorefrontNotificationType.cs │ ├── Stores/ │ │ ├── IStoreService.cs │ │ ├── Store.cs │ │ └── StoreStatus.cs │ ├── SwaggerCustomSchemaIdAttribute.cs │ ├── Term.cs │ ├── TermExtensions.cs │ ├── VirtoCommerce.Storefront.Model.csproj │ └── WorkContext.cs ├── VirtoCommerce.Storefront.Tests/ │ ├── Features/ │ │ ├── CustomServiceCollection.cs │ │ ├── FeaturesAgentTests.cs │ │ └── Samples/ │ │ ├── empty_data.json │ │ ├── empty_file.json │ │ ├── full_data.json │ │ ├── full_data_with_conflicts.json │ │ ├── full_data_with_disabled_feature.json │ │ ├── full_data_without_replaces.json │ │ └── test_data.json │ ├── JsonConverterTests.cs │ ├── LiquidThemeEngine/ │ │ └── ShopifyLiquidThemeEngineTests.cs │ ├── Model/ │ │ └── MoneyOperationTests.cs │ ├── ResponseCaching/ │ │ └── ResponseCachingTests.cs │ ├── Routing/ │ │ ├── Infrastructure/ │ │ │ ├── DummyAntiforgery.cs │ │ │ ├── RoutingDataResult.cs │ │ │ └── RoutingTestingActionFilter.cs │ │ └── PathStringExtensionsTests.cs │ ├── Scriban/ │ │ ├── ScribanTests.cs │ │ └── test.liquid │ ├── ValueObjectTests.cs │ └── VirtoCommerce.Storefront.Tests.csproj ├── VirtoCommerce.Storefront.sln └── azuredeploy.json