An awesome multiple award-winning electric enduro bike
An awesome descent, with some high speed ripping at the top, some root drops in the middle, and some great bank turns at the bottom. Fun!
See your customer specific price
Create orders through express buy
Create & save favorite lists
Possible to see your orders & invoices
When you are a customer get all the benefits
Get professional advice
Webshop with your own prices
Error executing template "Designs/Swift/Paragraph/Swift_ProductComponentSlider.cshtml"
System.Exception: The Client Secret is expired. Visit the Azure portal to create new keys for your '6945a908-9a4b-44fa-9ced-6fa84bd4a866' app. GetTokenForClientCredentialsFlow failed: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 1080dbe6-23f5-4d23-b81c-f1d21d343700 Correlation ID: a73cb4e8-cef3-4de1-9f71-91e3811fc87e Timestamp: 2025-11-15 04:38:47Z. Tenant:7dd45d63-24fc-4edd-8ad8-5fd66b6f9733 Client:6945a908-9a4b-44fa-9ced-6fa84bd4a866.
---> MSAL.NetCore.4.61.3.0.MsalServiceException:
ErrorCode: invalid_client
Microsoft.Identity.Client.MsalServiceException: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 1080dbe6-23f5-4d23-b81c-f1d21d343700 Correlation ID: a73cb4e8-cef3-4de1-9f71-91e3811fc87e Timestamp: 2025-11-15 04:38:47Z
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ThrowServerException(HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.CreateResponse[T](HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ExecuteRequestAsync[T](Uri endPoint, HttpMethod method, RequestContext requestContext, Boolean expectErrorsOn200OK, Boolean addCommonHeaders, Func`2 onBeforePostRequestData)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, String scopeOverride, String tokenEndpointOverride, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.GetAccessTokenAsync(CancellationToken cancellationToken, ILoggerAdapter logger)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.ExecuteAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.<>c__DisplayClass11_1.<<RunAsync>b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.Identity.Client.Utils.StopwatchService.MeasureCodeBlockAsync(Func`1 codeBlock)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.RunAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.ApiConfig.Executors.ConfidentialClientExecutor.ExecuteAsync(AcquireTokenCommonParameters commonParameters, AcquireTokenForClientParameters clientParameters, CancellationToken cancellationToken)
StatusCode: 401
ResponseBody: {"error":"invalid_client","error_description":"AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: 1080dbe6-23f5-4d23-b81c-f1d21d343700 Correlation ID: a73cb4e8-cef3-4de1-9f71-91e3811fc87e Timestamp: 2025-11-15 04:38:47Z","error_codes":[7000222],"timestamp":"2025-11-15 04:38:47Z","trace_id":"1080dbe6-23f5-4d23-b81c-f1d21d343700","correlation_id":"a73cb4e8-cef3-4de1-9f71-91e3811fc87e","error_uri":"https://login.microsoftonline.com/error?code=7000222"}
Headers: Cache-Control: no-store, no-cache
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
client-request-id: a73cb4e8-cef3-4de1-9f71-91e3811fc87e
x-ms-request-id: 1080dbe6-23f5-4d23-b81c-f1d21d343700
x-ms-ests-server: 2.1.22549.2 - FRC ProdSlices
x-ms-clitelem: 1,7000222,0,,
x-ms-srs: 1.P
Content-Security-Policy-Report-Only: object-src 'none'; base-uri 'self'; script-src 'self' 'nonce-BSBaWaoi6Uf7zVmPlHE3cQ' 'unsafe-inline' 'unsafe-eval' https://*.msauth.net https://*.msftauth.net https://*.msftauthimages.net https://*.msauthimages.net https://*.msidentity.com https://*.microsoftonline-p.com https://*.microsoftazuread-sso.com https://*.azureedge.net https://*.outlook.com https://*.office.com https://*.office365.com https://*.microsoft.com https://*.bing.com 'report-sample'; report-uri https://csp.microsoft.com/report/ESTS-UX-All
X-XSS-Protection: 0
Set-Cookie: fpc=AiTWj0wQZK9Nv7sPf-NlaaR1fVnmAQAAANb6qeAOAAAA; expires=Mon, 15-Dec-2025 04:38:47 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; path=/; secure; httponly
Date: Sat, 15 Nov 2025 04:38:46 GMT
--- End of inner exception stack trace ---
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.HandleException(Exception ex, Endpoint endpoint) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 668
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.GetResponse(Endpoint endpoint, String requestBody, TimeSpan requestTimeout) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 535
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.Execute(Endpoint endpoint) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 436
at DynamicwebLiveIntegration3.EndpointManager.ExecuteEndpointRequest(String urlSuffix, Object requestBody)
at DynamicwebLiveIntegration3.Caching.StockCache.FetchMissing(IEnumerable`1 keys)
at Dynamicweb.Caching.ServiceCache`2.GetCache(IEnumerable`1 keys) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 267
at Dynamicweb.Caching.ServiceCache`2.GetCache(TKey key) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 254
at DynamicwebLiveIntegration3.LiveIntegrationService.GetStock(ProductStockCacheKey productStockCacheKey, Boolean silent)
at DynamicwebLiveIntegration3.Providers.ProductStockProvider.FindStockLevel(Product product, String unitId, StockLocation stockLocation)
at Dynamicweb.Ecommerce.Stocks.StockLevelManager.FindStockLevel(Product product, String unitId, StockLocation stockLocation) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Stocks\StockLevelManager.cs:line 25
at Dynamicweb.Ecommerce.Products.ProductExtentions.GetUnitStock(Product product, StockLocation stockLocation, String unitId) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Products\ProductExtentions.cs:line 187
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.<>c__DisplayClass3_1.<BulkCreateView>b__21() in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 127
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at System.Lazy`1.get_Value()
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.<>c__DisplayClass3_2.<BulkCreateView>b__22() in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 128
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelPropertyFiller`1.Fill[S](T model, String propertyName, Func`1 source) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelPropertyFiller.cs:line 49
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.BulkCreateView(ProductViewModelSettings settings, Boolean isRecursive, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 128
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.<>c__DisplayClass23_0.<CreateView>b__0() in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 602
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelPropertyFiller`1.Fill[S](T model, String propertyName, Func`1 source) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelPropertyFiller.cs:line 49
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductListViewModelSettings settings, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 602
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductListViewModelSettings settings, Group group, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 586
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelFactory.CreateView(ProductListViewModelSettings settings, IList`1 products, Group group) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelFactory.cs:line 197
at Dynamicweb.Ecommerce.Content.Items.Editors.ProductCatalogEditor.GetViewModelValue(Object value) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Content\Items\Editors\ProductCatalogEditor.cs:line 55
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Dynamicweb.Frontend.ItemFieldViewModel.GetValue[T]() in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemFieldViewModel.cs:line 276
at Dynamicweb.Frontend.ItemViewModel.GetValue[T](String systemName) in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemViewModel.cs:line 769
at CompiledRazorTemplates.Dynamic.RazorEngine_2626ad77b7fa47aeb25d0cb8c269638f.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) in /_/src/Application/Providers/Dynamicweb.Rendering.Providers.NetCore/Razor/RazorTemplateRenderingProvider.cs:line 100
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\TemplateRenderingService.cs:line 22
at Dynamicweb.Rendering.Template.RenderRazorTemplate() in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\Template.cs:line 694
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
@using Dynamicweb.Core
@using Dynamicweb.Ecommerce.ProductCatalog
@{
ProductViewModel product = null;
if (Dynamicweb.Context.Current.Items.Contains("ProductDetails"))
{
product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"];
}
else if (Pageview.Page.Item["DummyProduct"] != null && Pageview.IsVisualEditorMode)
{
var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page);
ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel();
if (productList?.Products is object)
{
product = productList.Products[0];
}
}
string layout = Model.Item.GetRawValueString("Layout") == "slider" ? "ProductSliderComponent" : "ProductGridComponent";
string lazyHeight = Model.Item.GetBoolean("SetMinHeightForLazyLoading") ? "min-height: 360px" : "";
string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : "";
//Link generation
string pageId = Model.Item.GetLink("ProductSliderServicePage") != null ? Model.Item.GetLink("ProductSliderServicePage").PageId.ToString() : "";
string servicePageByNavigationTag = GetPageIdByNavigationTag("ProductSliderService") != 0 ? GetPageIdByNavigationTag("ProductSliderService").ToString() : "";
pageId = pageId == "" ? servicePageByNavigationTag : pageId;
string url = "/Default.aspx?ID=" + pageId;
if (Pageview.IsVisualEditorMode)
{
url += "&VisualEdit=True";
}
bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsLazyLoadingForProductInfoEnabled"]);
if (isLazyLoadingForProductInfoEnabled)
{
url += "&getproductinfo=true";
}
url += $"&ProductListPartial={layout}"; //Use this to render either a slider or a grid
//Source type
string sourceType = Model.Item.GetRawValueString("RelationType", "trending");
IList<string> relateFromProductIds = new List<string> { };
IList<string> relateFromProductVariantIds = new List<string> { };
IList<string> relateFromGroupIds = new List<string> { };
bool hasVariants = false;
ProductListViewModel relateToViewModel = Model.Item.GetValue<ProductListViewModel>("RelateTo");
//--- PRODUCTS ---
if (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected")
{
if (relateToViewModel?.Products != null)
{
hasVariants = relateToViewModel.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relateToViewModel.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.Id} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.Id}");
}
}
relateFromProductIds.Add($"{fromProduct.Id}");
}
}
}
//--- GROUPS ---
if (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest" || sourceType == "custom")
{
var groupsToRelateTo = Model.Item.GetList("RelateTo")?.GetRawValue().OfType<string>().ToList();
if (groupsToRelateTo != null) {
foreach (var fromGroup in groupsToRelateTo)
{
var groupId = fromGroup.Length > 2 ? fromGroup.Remove(0, 2) : fromGroup;
if (!fromGroup.Contains("p_"))
{
relateFromGroupIds.Add(groupId);
}
}
}
if (relateToViewModel?.Products != null)
{
foreach (var fromProduct in relateToViewModel.Products)
{
var groupId = fromProduct.PrimaryOrDefaultGroup.Id;
relateFromGroupIds.Add(groupId);
}
}
}
string relationGroupId = Model.Item.GetRawValueString("RelationGroup", string.Empty);
//--- RELATED GROUP ---
if (sourceType == "related")
{
if (relateToViewModel?.Products != null)
{
product = relateToViewModel.Products.FirstOrDefault();
}
if (product?.RelatedGroups != null)
{
foreach (var relationGroup in product.RelatedGroups)
{
if (relationGroup.Id == relationGroupId) {
hasVariants = relationGroup.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relationGroup.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId}");
}
}
relateFromProductIds.Add($"{fromProduct.ProductId}");
}
}
}
}
}
//Create group id collection and products id collection strings
string productIds = relateFromProductIds.Count > 0 ? string.Join(",", relateFromProductIds) : "";
string productVariantIds = relateFromProductVariantIds.Count > 0 ? string.Join(",", relateFromProductVariantIds) : "";
string groupIds = relateFromGroupIds.Count > 0 ? string.Join(",", relateFromGroupIds) : "";
if (product is object)
{
if (string.IsNullOrEmpty(productIds) && (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected" || sourceType == "custom"))
{
productIds = product.Id;
}
if (string.IsNullOrEmpty(groupIds) && (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest"))
{
groupIds = product.PrimaryOrDefaultGroup.Id;
}
}
}
@*Container element for the request*@
@if (!string.IsNullOrEmpty(productIds) || !string.IsNullOrEmpty(groupIds) || (string.IsNullOrEmpty(productIds) && string.IsNullOrEmpty(groupIds) && sourceType != "related"))
{
<form method="post" action="@url" id="ComponentSliderProductsForm_@Model.ID" data-response-target-element="ComponentSliderProducts_@Model.ID" data-preloader="inline" data-update-url="false" class="item_@Model.Item.SystemName.ToLower()">
<input type="hidden" name="ParagraphId" value="@Model.ID" />
<input type="hidden" name="SortOrder" value="DESC">
<input type="hidden" name="SourceType" value="@sourceType">
@if (!string.IsNullOrEmpty(groupIds))
{
<input type="hidden" name="GroupId" value="@groupIds">
}
@if (sourceType != "frequently" && !string.IsNullOrEmpty(productIds) && !hasVariants)
{
<input type="hidden" name="MainProductId" value="@productIds">
}
@if (sourceType != "frequently" && hasVariants)
{
<input type="hidden" name="ProductVariantId" value="@productVariantIds">
}
@if (Model.Item.GetInt32("ProductsCount") != 0)
{
<input type="hidden" name="PageSize" value="@Model.Item.GetInt32("ProductsCount")">
}
@if (sourceType == "variants")
{
<input type="hidden" name="isVariant" value="true">
}
@if (sourceType == "most-sold")
{
<input type="hidden" name="SortBy" value="OrderCount">
}
@if (sourceType == "trending")
{
<input type="hidden" name="SortBy" value="OrderCountGrowth">
}
@if (sourceType == "frequently" && !string.IsNullOrEmpty(productIds))
{
<input type="hidden" name="BoughtWithProductIds" value="[@productIds]">
}
@if (sourceType == "latest")
{
<input type="hidden" name="SortBy" value="Created">
}
</form>
<script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script>
<script>
window.addEventListener("load", () => {
swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css');
});
</script>
<div class="w-100 h-100@(theme)">
<div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div>
<div id="ComponentSliderProducts_@Model.ID" class="h-100" style="@lazyHeight"></div>
</div>
<script type="module">
const productSliderContainer = document.querySelector("#ComponentSliderProducts_@Model.ID");
const productSliderForm = document.querySelector("#ComponentSliderProductsForm_@Model.ID");
swift.PageUpdater.Update(productSliderForm);
productSliderForm.addEventListener("updated.swift.pageupdater", function(e){
if (e.detail.html === "") {
productSliderContainer.closest("[data-col-size]").classList.add("d-none");
}
});
</script>
}
else if (Pageview.IsVisualEditorMode == true)
{
<div class="alert alert-dark" role="alert">
<span>@Translate("Product component slider: The slider will be rendered here, if there is anything to show")</span>
</div>
}
Innovate and inspire in the cycling world. We are dedicated to crafting high-quality, functional bicycles that cater to riders globally.
Error executing template "Designs/Swift/Paragraph/Swift_ProductComponentSlider.cshtml"
System.Exception: The Client Secret is expired. Visit the Azure portal to create new keys for your '6945a908-9a4b-44fa-9ced-6fa84bd4a866' app. GetTokenForClientCredentialsFlow failed: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: d7c34fdb-8299-44c2-a3bf-921e70ea4b00 Correlation ID: 27b830a4-f9bc-4c3c-bb3c-daf8b59a169b Timestamp: 2025-11-15 04:38:47Z. Tenant:7dd45d63-24fc-4edd-8ad8-5fd66b6f9733 Client:6945a908-9a4b-44fa-9ced-6fa84bd4a866.
---> MSAL.NetCore.4.61.3.0.MsalServiceException:
ErrorCode: invalid_client
Microsoft.Identity.Client.MsalServiceException: A configuration issue is preventing authentication - check the error message from the server for details. You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: d7c34fdb-8299-44c2-a3bf-921e70ea4b00 Correlation ID: 27b830a4-f9bc-4c3c-bb3c-daf8b59a169b Timestamp: 2025-11-15 04:38:47Z
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ThrowServerException(HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.CreateResponse[T](HttpResponse response, RequestContext requestContext)
at Microsoft.Identity.Client.OAuth2.OAuth2Client.ExecuteRequestAsync[T](Uri endPoint, HttpMethod method, RequestContext requestContext, Boolean expectErrorsOn200OK, Boolean addCommonHeaders, Func`2 onBeforePostRequestData)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendHttpAndClearTelemetryAsync(String tokenEndpoint, ILoggerAdapter logger)
at Microsoft.Identity.Client.OAuth2.TokenClient.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, String scopeOverride, String tokenEndpointOverride, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.SendTokenRequestAsync(IDictionary`2 additionalBodyParameters, CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.GetAccessTokenAsync(CancellationToken cancellationToken, ILoggerAdapter logger)
at Microsoft.Identity.Client.Internal.Requests.ClientCredentialRequest.ExecuteAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.<>c__DisplayClass11_1.<<RunAsync>b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.Identity.Client.Utils.StopwatchService.MeasureCodeBlockAsync(Func`1 codeBlock)
at Microsoft.Identity.Client.Internal.Requests.RequestBase.RunAsync(CancellationToken cancellationToken)
at Microsoft.Identity.Client.ApiConfig.Executors.ConfidentialClientExecutor.ExecuteAsync(AcquireTokenCommonParameters commonParameters, AcquireTokenForClientParameters clientParameters, CancellationToken cancellationToken)
StatusCode: 401
ResponseBody: {"error":"invalid_client","error_description":"AADSTS7000222: The provided client secret keys for app '6945a908-9a4b-44fa-9ced-6fa84bd4a866' are expired. Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, or consider using certificate credentials for added security: https://aka.ms/certCreds. Trace ID: d7c34fdb-8299-44c2-a3bf-921e70ea4b00 Correlation ID: 27b830a4-f9bc-4c3c-bb3c-daf8b59a169b Timestamp: 2025-11-15 04:38:47Z","error_codes":[7000222],"timestamp":"2025-11-15 04:38:47Z","trace_id":"d7c34fdb-8299-44c2-a3bf-921e70ea4b00","correlation_id":"27b830a4-f9bc-4c3c-bb3c-daf8b59a169b","error_uri":"https://login.microsoftonline.com/error?code=7000222"}
Headers: Cache-Control: no-store, no-cache
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
client-request-id: 27b830a4-f9bc-4c3c-bb3c-daf8b59a169b
x-ms-request-id: d7c34fdb-8299-44c2-a3bf-921e70ea4b00
x-ms-ests-server: 2.1.22549.2 - WEULR1 ProdSlices
x-ms-clitelem: 1,7000222,0,,
x-ms-srs: 1.P
Content-Security-Policy-Report-Only: object-src 'none'; base-uri 'self'; script-src 'self' 'nonce-4_RscL7Osm-9wZBqYuggBQ' 'unsafe-inline' 'unsafe-eval' https://*.msauth.net https://*.msftauth.net https://*.msftauthimages.net https://*.msauthimages.net https://*.msidentity.com https://*.microsoftonline-p.com https://*.microsoftazuread-sso.com https://*.azureedge.net https://*.outlook.com https://*.office.com https://*.office365.com https://*.microsoft.com https://*.bing.com 'report-sample'; report-uri https://csp.microsoft.com/report/ESTS-UX-All
X-XSS-Protection: 0
Set-Cookie: fpc=AiTWj0wQZK9Nv7sPf-NlaaR1fVnmAgAAANb6qeAOAAAA; expires=Mon, 15-Dec-2025 04:38:47 GMT; path=/; secure; HttpOnly; SameSite=None, x-ms-gateway-slice=estsfd; path=/; secure; httponly
Date: Sat, 15 Nov 2025 04:38:46 GMT
--- End of inner exception stack trace ---
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.HandleException(Exception ex, Endpoint endpoint) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 668
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.GetResponse(Endpoint endpoint, String requestBody, TimeSpan requestTimeout) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 535
at Dynamicweb.DataIntegration.EndpointManagement.EndpointService.Execute(Endpoint endpoint) in C:\Work\Repos\Dynamicweb10\src\Features\DataIntegration\Dynamicweb.DataIntegration\EndpointManagement\EndpointService.cs:line 436
at DynamicwebLiveIntegration3.EndpointManager.ExecuteEndpointRequest(String urlSuffix, Object requestBody)
at DynamicwebLiveIntegration3.Caching.StockCache.FetchMissing(IEnumerable`1 keys)
at Dynamicweb.Caching.ServiceCache`2.GetCache(IEnumerable`1 keys) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 267
at Dynamicweb.Caching.ServiceCache`2.GetCache(TKey key) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Caching\ServiceCache.cs:line 254
at DynamicwebLiveIntegration3.LiveIntegrationService.GetStock(ProductStockCacheKey productStockCacheKey, Boolean silent)
at DynamicwebLiveIntegration3.Providers.ProductStockProvider.FindStockLevel(Product product, String unitId, StockLocation stockLocation)
at Dynamicweb.Ecommerce.Stocks.StockLevelManager.FindStockLevel(Product product, String unitId, StockLocation stockLocation) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Stocks\StockLevelManager.cs:line 25
at Dynamicweb.Ecommerce.Products.ProductExtentions.GetUnitStock(Product product, StockLocation stockLocation, String unitId) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Products\ProductExtentions.cs:line 187
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.<>c__DisplayClass3_1.<BulkCreateView>b__21() in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 127
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at System.Lazy`1.get_Value()
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.<>c__DisplayClass3_2.<BulkCreateView>b__22() in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 128
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelPropertyFiller`1.Fill[S](T model, String propertyName, Func`1 source) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelPropertyFiller.cs:line 49
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.BulkCreateView(ProductViewModelSettings settings, Boolean isRecursive, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 128
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.<>c__DisplayClass23_0.<CreateView>b__0() in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 602
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelPropertyFiller`1.Fill[S](T model, String propertyName, Func`1 source) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelPropertyFiller.cs:line 49
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductListViewModelSettings settings, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 602
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductListViewModelSettings settings, Group group, IList`1 products) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewEngine.cs:line 586
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelFactory.CreateView(ProductListViewModelSettings settings, IList`1 products, Group group) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\ProductCatalog\ViewModelFactory.cs:line 197
at Dynamicweb.Ecommerce.Content.Items.Editors.ProductCatalogEditor.GetViewModelValue(Object value) in C:\Work\Repos\Dynamicweb10\src\Features\Ecommerce\Dynamicweb.Ecommerce\Content\Items\Editors\ProductCatalogEditor.cs:line 55
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Dynamicweb.Frontend.ItemFieldViewModel.GetValue[T]() in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemFieldViewModel.cs:line 276
at Dynamicweb.Frontend.ItemViewModel.GetValue[T](String systemName) in C:\Work\Repos\Dynamicweb10\src\Features\Content\Dynamicweb\Frontend\ItemViewModel.cs:line 769
at CompiledRazorTemplates.Dynamic.RazorEngine_2626ad77b7fa47aeb25d0cb8c269638f.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) in /_/src/Application/Providers/Dynamicweb.Rendering.Providers.NetCore/Razor/RazorTemplateRenderingProvider.cs:line 100
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\TemplateRenderingService.cs:line 22
at Dynamicweb.Rendering.Template.RenderRazorTemplate() in C:\Work\Repos\Dynamicweb10\src\Core\Dynamicweb.Core\Rendering\Template.cs:line 694
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel>
@using Dynamicweb.Core
@using Dynamicweb.Ecommerce.ProductCatalog
@{
ProductViewModel product = null;
if (Dynamicweb.Context.Current.Items.Contains("ProductDetails"))
{
product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"];
}
else if (Pageview.Page.Item["DummyProduct"] != null && Pageview.IsVisualEditorMode)
{
var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page);
ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel();
if (productList?.Products is object)
{
product = productList.Products[0];
}
}
string layout = Model.Item.GetRawValueString("Layout") == "slider" ? "ProductSliderComponent" : "ProductGridComponent";
string lazyHeight = Model.Item.GetBoolean("SetMinHeightForLazyLoading") ? "min-height: 360px" : "";
string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : "";
//Link generation
string pageId = Model.Item.GetLink("ProductSliderServicePage") != null ? Model.Item.GetLink("ProductSliderServicePage").PageId.ToString() : "";
string servicePageByNavigationTag = GetPageIdByNavigationTag("ProductSliderService") != 0 ? GetPageIdByNavigationTag("ProductSliderService").ToString() : "";
pageId = pageId == "" ? servicePageByNavigationTag : pageId;
string url = "/Default.aspx?ID=" + pageId;
if (Pageview.IsVisualEditorMode)
{
url += "&VisualEdit=True";
}
bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsLazyLoadingForProductInfoEnabled"]);
if (isLazyLoadingForProductInfoEnabled)
{
url += "&getproductinfo=true";
}
url += $"&ProductListPartial={layout}"; //Use this to render either a slider or a grid
//Source type
string sourceType = Model.Item.GetRawValueString("RelationType", "trending");
IList<string> relateFromProductIds = new List<string> { };
IList<string> relateFromProductVariantIds = new List<string> { };
IList<string> relateFromGroupIds = new List<string> { };
bool hasVariants = false;
ProductListViewModel relateToViewModel = Model.Item.GetValue<ProductListViewModel>("RelateTo");
//--- PRODUCTS ---
if (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected")
{
if (relateToViewModel?.Products != null)
{
hasVariants = relateToViewModel.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relateToViewModel.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.Id} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.Id}");
}
}
relateFromProductIds.Add($"{fromProduct.Id}");
}
}
}
//--- GROUPS ---
if (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest" || sourceType == "custom")
{
var groupsToRelateTo = Model.Item.GetList("RelateTo")?.GetRawValue().OfType<string>().ToList();
if (groupsToRelateTo != null) {
foreach (var fromGroup in groupsToRelateTo)
{
var groupId = fromGroup.Length > 2 ? fromGroup.Remove(0, 2) : fromGroup;
if (!fromGroup.Contains("p_"))
{
relateFromGroupIds.Add(groupId);
}
}
}
if (relateToViewModel?.Products != null)
{
foreach (var fromProduct in relateToViewModel.Products)
{
var groupId = fromProduct.PrimaryOrDefaultGroup.Id;
relateFromGroupIds.Add(groupId);
}
}
}
string relationGroupId = Model.Item.GetRawValueString("RelationGroup", string.Empty);
//--- RELATED GROUP ---
if (sourceType == "related")
{
if (relateToViewModel?.Products != null)
{
product = relateToViewModel.Products.FirstOrDefault();
}
if (product?.RelatedGroups != null)
{
foreach (var relationGroup in product.RelatedGroups)
{
if (relationGroup.Id == relationGroupId) {
hasVariants = relationGroup.Products.Any(p => !string.IsNullOrEmpty(p.VariantId));
foreach (var fromProduct in relationGroup.Products)
{
if (hasVariants)
{
if (!string.IsNullOrEmpty(fromProduct.VariantId))
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId} {fromProduct.VariantId}");
}
else
{
relateFromProductVariantIds.Add($"{fromProduct.ProductId}");
}
}
relateFromProductIds.Add($"{fromProduct.ProductId}");
}
}
}
}
}
//Create group id collection and products id collection strings
string productIds = relateFromProductIds.Count > 0 ? string.Join(",", relateFromProductIds) : "";
string productVariantIds = relateFromProductVariantIds.Count > 0 ? string.Join(",", relateFromProductVariantIds) : "";
string groupIds = relateFromGroupIds.Count > 0 ? string.Join(",", relateFromGroupIds) : "";
if (product is object)
{
if (string.IsNullOrEmpty(productIds) && (sourceType == "variants" || sourceType == "frequently" || sourceType == "selected" || sourceType == "custom"))
{
productIds = product.Id;
}
if (string.IsNullOrEmpty(groupIds) && (sourceType == "most-sold" || sourceType == "trending" || sourceType == "latest"))
{
groupIds = product.PrimaryOrDefaultGroup.Id;
}
}
}
@*Container element for the request*@
@if (!string.IsNullOrEmpty(productIds) || !string.IsNullOrEmpty(groupIds) || (string.IsNullOrEmpty(productIds) && string.IsNullOrEmpty(groupIds) && sourceType != "related"))
{
<form method="post" action="@url" id="ComponentSliderProductsForm_@Model.ID" data-response-target-element="ComponentSliderProducts_@Model.ID" data-preloader="inline" data-update-url="false" class="item_@Model.Item.SystemName.ToLower()">
<input type="hidden" name="ParagraphId" value="@Model.ID" />
<input type="hidden" name="SortOrder" value="DESC">
<input type="hidden" name="SourceType" value="@sourceType">
@if (!string.IsNullOrEmpty(groupIds))
{
<input type="hidden" name="GroupId" value="@groupIds">
}
@if (sourceType != "frequently" && !string.IsNullOrEmpty(productIds) && !hasVariants)
{
<input type="hidden" name="MainProductId" value="@productIds">
}
@if (sourceType != "frequently" && hasVariants)
{
<input type="hidden" name="ProductVariantId" value="@productVariantIds">
}
@if (Model.Item.GetInt32("ProductsCount") != 0)
{
<input type="hidden" name="PageSize" value="@Model.Item.GetInt32("ProductsCount")">
}
@if (sourceType == "variants")
{
<input type="hidden" name="isVariant" value="true">
}
@if (sourceType == "most-sold")
{
<input type="hidden" name="SortBy" value="OrderCount">
}
@if (sourceType == "trending")
{
<input type="hidden" name="SortBy" value="OrderCountGrowth">
}
@if (sourceType == "frequently" && !string.IsNullOrEmpty(productIds))
{
<input type="hidden" name="BoughtWithProductIds" value="[@productIds]">
}
@if (sourceType == "latest")
{
<input type="hidden" name="SortBy" value="Created">
}
</form>
<script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script>
<script>
window.addEventListener("load", () => {
swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css');
});
</script>
<div class="w-100 h-100@(theme)">
<div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div>
<div id="ComponentSliderProducts_@Model.ID" class="h-100" style="@lazyHeight"></div>
</div>
<script type="module">
const productSliderContainer = document.querySelector("#ComponentSliderProducts_@Model.ID");
const productSliderForm = document.querySelector("#ComponentSliderProductsForm_@Model.ID");
swift.PageUpdater.Update(productSliderForm);
productSliderForm.addEventListener("updated.swift.pageupdater", function(e){
if (e.detail.html === "") {
productSliderContainer.closest("[data-col-size]").classList.add("d-none");
}
});
</script>
}
else if (Pageview.IsVisualEditorMode == true)
{
<div class="alert alert-dark" role="alert">
<span>@Translate("Product component slider: The slider will be rendered here, if there is anything to show")</span>
</div>
}
Our shop provides a variety of products and bicyle parts, to realize a healty and fit body