I am currently working on customizing the layout of Lepton-x in Angular, and I require some assistance to achieve the desired layout. Below are the specifications for the layout modification:
Top Header:
Logo: Positioned on the left-hand side. Search Bar: Located in the center of the header. Language Setting: Positioned on the right-hand side of the header. Profile Picture: Also located on the right-hand side, next to the language setting. Left Side Menu:
Expandable Menu: The left side menu should be expandable/collapsible. Contains Main Menu Items: The menu should contain primary menu items. Sub Menu: Sub-menus should be displayed when a main menu item is clicked.
If possible, I would greatly appreciate any guidance, resources, or code snippets that could assist me in implementing this layout within the Lepton-x framework in Angular. I followed a video on youtube how to customize the theme but I didn't work with me. also I downloaded the source code of the theme, but I didn't find where or who to change the layout.
hi
This error is about the
Data Protection
.https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/introduction?view=aspnetcore-7.0 https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/using-data-protection?view=aspnetcore-8.0&source=recommendations
Your application can't
Unprotect
your cookies. Does yourredis
work?private void ConfigureDataProtection( ServiceConfigurationContext context, IConfiguration configuration, IWebHostEnvironment hostingEnvironment) { var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("Hudoor"); if (!hostingEnvironment.IsDevelopment()) { var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!); dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "Hudoor-Protection-Keys"); } }
yes i check Redis is work fine
hi
Please try to clear the cookies or try to sign in on the incognito mode.
i try still same error.
[15:47:50 INF] Hosting environment: Production [15:47:50 INF] Content root path: D:\project\HudoorV10\Hudoor\src\Hudoor.Web [15:47:50 INF] Request starting HTTP/1.1 GET https://localhost:5000/health-status - - [15:47:50 INF] Request starting HTTP/2 GET https://localhost:5000/ - - [15:47:51 INF] Identity.Application was not authenticated. Failure message: Unprotect ticket failed [15:47:51 INF] Executing endpoint 'Health checks' [15:47:51 INF] Request finished HTTP/2 GET https://localhost:5000/ - - - 302 0 - 927.4907ms [15:47:51 INF] Request starting HTTP/2 GET https://localhost:5000/Error?httpStatusCode=404 - - [15:47:51 INF] Identity.Application was not authenticated. Failure message: Unprotect ticket failed
hi
It also works on a production/release environment.
i can user page login but still error when run my pages
http://localhost:5000/health-status {"status":"Healthy","totalDuration":"00:00:00.0038398","entries":{"Hudoor DbContext Check":{"data":{},"description":"Could connect to database and get record.","duration":"00:00:00.0036132","status":"Healthy","tags":["database"]}}}
[14:48:15 INF] Saving external localizations...
[14:48:15 INF] Initialized all ABP modules.
[14:48:15 INF] Initializing UI Database
[14:48:16 INF] Saving healthchecks configuration to database
[14:48:16 INF] Now listening on: http://localhost:5000
[14:48:16 INF] Start processing HTTP request GET http://localhost:5000/health-status
[14:48:16 INF] Sending HTTP request GET http://localhost:5000/health-status
[14:48:16 INF] Application started. Press Ctrl+C to shut down.
[14:48:16 INF] Hosting environment: Production
[14:48:16 INF] Content root path: D:\project\HudoorV10\Hudoor\src\Hudoor.Web\bin\Release\net7.0\publish
[14:48:16 INF] Request starting HTTP/1.1 GET http://localhost:5000/health-status - -
[14:48:16 INF] Completed to save external localizations.
[14:48:16 INF] Executing endpoint 'Health checks'
[14:48:18 INF] Executed endpoint 'Health checks'
[14:48:18 INF] Received HTTP response headers after 1690.6305ms - 200
[14:48:18 INF] End processing HTTP request after 1699.3597ms - 200
[14:48:18 INF] Request finished HTTP/1.1 GET http://localhost:5000/health-status - - - 200 - application/json 1612.5396ms
[14:48:28 INF] Start processing HTTP request GET http://localhost:5000/health-status
[14:48:28 INF] Sending HTTP request GET http://localhost:5000/health-status
[14:48:28 INF] Request starting HTTP/1.1 GET http://localhost:5000/health-status - -
[14:48:28 INF] Executing endpoint 'Health checks'
[14:48:28 INF] Executed endpoint 'Health checks'
[14:48:28 INF] Request finished HTTP/1.1 GET http://localhost:5000/health-status - - - 200 - application/json 18.3664ms
[14:48:28 INF] Received HTTP response headers after 22.027ms - 200
[14:48:28 INF] End processing HTTP request after 22.1556ms - 200
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/ - -
[14:48:36 INF] Identity.Application was not authenticated. Failure message: Unprotect ticket failed
[14:48:36 INF] Request finished HTTP/1.1 GET http://localhost:5000/ - - - 302 0 - 24.9955ms
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/Error?httpStatusCode=404 - -
[14:48:36 INF] Identity.Application was not authenticated. Failure message: Unprotect ticket failed
[14:48:36 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers.ErrorController.Index (Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared)'
[14:48:36 INF] Route matched with {action = "Index", controller = "Error", area = "", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] Index(Int32) on controller Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers.ErrorController (Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared).
[14:48:36 INF] Executing ViewResult, running view ~/Views/Error/404.cshtml.
[14:48:36 INF] Bundling __bundles/Views.Error.DefaultErrorComponent.default.F15FCDEA56EC024E1CDCD86CA6B586D8.css (1 files)
[14:48:36 INF] > Minified /Views/Error/DefaultErrorComponent/default.css (230 bytes -> 168 bytes)
[14:48:36 INF] Bundled __bundles/Views.Error.DefaultErrorComponent.default.F15FCDEA56EC024E1CDCD86CA6B586D8.css (168 bytes)
[14:48:36 WRN] The cookie 'XSRF-TOKEN' has set 'SameSite=None' and must also set 'Secure'.
[14:48:36 INF] Bundling __bundles/LeptonX.Global.3253AE0A9501A0665DAC7014DA5B2ED8.css (18 files)
[14:48:36 INF] > Minified /libs/abp/core/abp.css (1331 bytes -> 868 bytes)
[14:48:36 INF] > Minified /libs/@fortawesome/fontawesome-free/css/all.css (73577 bytes -> 53572 bytes)
[14:48:36 INF] > Minified /libs/@fortawesome/fontawesome-free/css/v4-shims.css (41312 bytes -> 33344 bytes)
[14:48:36 INF] > Minified /libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css (54850 bytes -> 43189 bytes)
[14:48:36 INF] > Minified /libs/datatables.net-bs5/css/dataTables.bootstrap5.css (13698 bytes -> 12056 bytes)
[14:48:36 INF] > Minified /libs/bootstrap-daterangepicker/daterangepicker.css (8069 bytes -> 6378 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css (266 bytes -> 214 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-styles.css (338 bytes -> 293 bytes)
[14:48:36 INF] > Minified /Themes/LeptonX/Global/side-menu/libs/bootstrap-icons/font/bootstrap-icons.css (74827 bytes -> 57860 bytes)
[14:48:36 INF] > Minified /Themes/LeptonX/Global/side-menu/css/js-bundle.css (34905 bytes -> 30715 bytes)
[14:48:36 INF] > Minified /Themes/LeptonX/Global/side-menu/css/layout-bundle.css (33358 bytes -> 28511 bytes)
[14:48:36 INF] > Minified /Themes/LeptonX/Global/side-menu/css/abp-bundle.css (3870 bytes -> 3025 bytes)
[14:48:36 INF] > Minified /Themes/LeptonX/Global/side-menu/css/font-bundle.css (117 bytes -> 116 bytes)
[14:48:36 INF] > Minified /global-styles.css (599 bytes -> 516 bytes)
[14:48:36 INF] Bundled __bundles/LeptonX.Global.3253AE0A9501A0665DAC7014DA5B2ED8.css (324329 bytes)
[14:48:36 INF] Bundling __bundles/LeptonX.Global.36C8711578048293653E8ACF51D760DC.js (37 files)
[14:48:36 INF] > Minified /libs/abp/core/abp.js (25156 bytes -> 10282 bytes)
[14:48:36 INF] > Minified /libs/jquery/jquery.js (285314 bytes -> 87931 bytes)
[14:48:36 INF] > Minified /libs/abp/jquery/abp.jquery.js (13489 bytes -> 5683 bytes)
[14:48:36 INF] > Minified /libs/jquery-validation/jquery.validate.js (52141 bytes -> 25104 bytes)
[14:48:36 INF] > Minified /libs/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (19798 bytes -> 5604 bytes)
[14:48:36 INF] > Minified /libs/datatables.net/js/jquery.dataTables.js (457594 bytes -> 88790 bytes)
[14:48:36 INF] > Minified /libs/datatables.net-bs5/js/dataTables.bootstrap5.js (5282 bytes -> 2381 bytes)
[14:48:36 INF] > Minified /libs/abp/luxon/abp.luxon.js (1361 bytes -> 606 bytes)
[14:48:36 INF] > Minified /libs/timeago/jquery.timeago.js (7404 bytes -> 4107 bytes)
[14:48:36 INF] > Minified /libs/bootstrap-daterangepicker/daterangepicker.js (67842 bytes -> 32678 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js (10589 bytes -> 3026 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js (5965 bytes -> 2219 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js (3605 bytes -> 1588 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js (4790 bytes -> 1752 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js (32618 bytes -> 12605 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js (7267 bytes -> 2054 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js (21615 bytes -> 6759 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js (3213 bytes -> 1505 bytes)
[14:48:36 INF] > Minified /libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js (951 bytes -> 342 bytes)
[14:48:36 INF] > Minified /client-proxies/account-proxy.js (14145 bytes -> 9227 bytes)
[14:48:36 INF] > Minified /Pages/Account/AuthorityDelegation/account-authority-delegation-global.js (6334 bytes -> 2493 bytes)
[14:48:36 INF] > Minified /Pages/Account/LinkUsers/account-link-user-global.js (4798 bytes -> 2247 bytes)
[14:48:36 INF] > Minified /Pages/AuditLogs/audit-log-global.js (1123 bytes -> 542 bytes)
[14:48:36 INF] > Minified /Pages/Abp/MultiTenancy/tenant-switch.js (414 bytes -> 243 bytes)
[14:48:36 INF] > Minified /Themes/LeptonX/Global/scripts/style-initializer.js (1637 bytes -> 750 bytes)
[14:48:36 INF] Bundled __bundles/LeptonX.Global.36C8711578048293653E8ACF51D760DC.js (922155 bytes)
[14:48:36 INF] Executed ViewResult - view ~/Views/Error/404.cshtml executed in 647.5697ms.
[14:48:36 INF] Executed action Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers.ErrorController.Index (Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared) in 704.2811ms
[14:48:36 INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers.ErrorController.Index (Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared)'
[14:48:36 INF] Request finished HTTP/1.1 GET http://localhost:5000/Error?httpStatusCode=404 - - - 404 - text/html;+charset=utf-8 733.8558ms
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/__bundles/LeptonX.Global.3253AE0A9501A0665DAC7014DA5B2ED8.css?_v=638357357165476466 - -
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/__bundles/Views.Error.DefaultErrorComponent.default.F15FCDEA56EC024E1CDCD86CA6B586D8.css?_v=638357357163609629 - -
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/__bundles/LeptonX.Global.36C8711578048293653E8ACF51D760DC.js?_v=638357357169109472 - -
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/Abp/ApplicationConfigurationScript - -
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/Abp/ApplicationLocalizationScript?cultureName=en-GB - -
[14:48:36 INF] Request starting HTTP/1.1 GET http://localhost:5000/Abp/ServiceProxyScript - -
[14:48:36 INF] Sending file. Request path: '/__bundles/Views.Error.DefaultErrorComponent.default.F15FCDEA56EC024E1CDCD86CA6B586D8.css'. Physical path: 'N/A'
[14:48:36 INF] Request finished HTTP/1.1 GET http://localhost:5000/__bundles/Views.Error.DefaultErrorComponent.default.F15FCDEA56EC024E1CDCD86CA6B586D8.css?_v=638357357163609629 - - - 200 168 text/css 5.3486ms
[14:48:36 INF] Identity.Application was not authenticated. Failure message: Unprotect ticket failed
[14:48:36 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController.Get (Volo.Abp.AspNetCore.Mvc)'
[14:48:36 INF] Identity.Application was not authenticated. Failure message: Unprotect ticket failed
[14:48:36 INF] Route matched with {area = "Abp", action = "Get", controller = "AbpApplicationConfigurationScript", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.ActionResult] Get() on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController (Volo.Abp.AspNetCore.Mvc).
[14:48:36 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.Localization.AbpApplicationLocalizationScriptController.GetAsync (Volo.Abp.AspNetCore.Mvc)'
[14:48:36 INF] Identity.Application was not authenticated. Failure message: Unprotect ticket failed
[14:48:36 INF] Sending file. Request path: '/__bundles/LeptonX.Global.3253AE0A9501A0665DAC7014DA5B2ED8.css'. Physical path: 'N/A'
[14:48:36 INF] Request finished HTTP/1.1 GET http://localhost:5000/__bundles/LeptonX.Global.3253AE0A9501A0665DAC7014DA5B2ED8.css?_v=638357357165476466 - - - 200 330902 text/css 19.8898ms
[14:48:36 INF] Sending file. Request path: '/__bundles/LeptonX.Global.36C8711578048293653E8ACF51D760DC.js'. Physical path: 'N/A'
[14:48:36 INF] Request finished HTTP/1.1 GET http://localhost:5000/__bundles/LeptonX.Global.36C8711578048293653E8ACF51D760DC.js?_v=638357357169109472 - - - 200 923586 application/javascript 16.9175ms
[14:48:36 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ProxyScripting.AbpServiceProxyScriptController.GetAll (Volo.Abp.AspNetCore.Mvc)'
[14:48:36 INF] Route matched with {area = "Abp", action = "Get", controller = "AbpApplicationLocalizationScript", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.ActionResult] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationRequestDto) on controller Volo.Abp.AspNetCore.Mvc.Localization.AbpApplicationLocalizationScriptController (Volo.Abp.AspNetCore.Mvc).
[14:48:36 INF] Route matched with {area = "Abp", action = "GetAll", controller = "AbpServiceProxyScript", page = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.ActionResult GetAll(Volo.Abp.AspNetCore.Mvc.ProxyScripting.ServiceProxyGenerationModel) on controller Volo.Abp.AspNetCore.Mvc.ProxyScripting.AbpServiceProxyScriptController (Volo.Abp.AspNetCore.Mvc).
[14:48:37 INF] Executing ContentResult with HTTP Response ContentType of application/javascript
[14:48:37 INF] Executed action Volo.Abp.AspNetCore.Mvc.ProxyScripting.AbpServiceProxyScriptController.GetAll (Volo.Abp.AspNetCore.Mvc) in 278.6628ms
[14:48:37 INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ProxyScripting.AbpServiceProxyScriptController.GetAll (Volo.Abp.AspNetCore.Mvc)'
[14:48:37 INF] Request finished HTTP/1.1 GET http://localhost:5000/Abp/ServiceProxyScript - - - 200 12317 application/javascript 298.6395ms
[14:48:37 INF] Executing ContentResult with HTTP Response ContentType of application/javascript
[14:48:37 INF] Executed action Volo.Abp.AspNetCore.Mvc.Localization.AbpApplicationLocalizationScriptController.GetAsync (Volo.Abp.AspNetCore.Mvc) in 360.3745ms
[14:48:37 INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.Localization.AbpApplicationLocalizationScriptController.GetAsync (Volo.Abp.AspNetCore.Mvc)'
[14:48:37 INF] Request finished HTTP/1.1 GET http://localhost:5000/Abp/ApplicationLocalizationScript?cultureName=en-GB - - - 200 75794 application/javascript 379.5509ms
[14:48:37 WRN] The cookie 'XSRF-TOKEN' has set 'SameSite=None' and must also set 'Secure'.
[14:48:37 INF] Executing ContentResult with HTTP Response ContentType of application/javascript
[14:48:37 INF] Executed action Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController.Get (Volo.Abp.AspNetCore.Mvc) in 471.6674ms
[14:48:37 INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController.Get (Volo.Abp.AspNetCore.Mvc)'
[14:48:37 INF] Request finished HTTP/1.1 GET http://localhost:5000/Abp/ApplicationConfigurationScript - - - 200 5892 application/javascript 485.9009ms
[14:48:38 INF] Start processing HTTP request GET http://localhost:5000/health-status
[14:48:38 INF] Sending HTTP request GET http://localhost:5000/health-status
[14:48:38 INF] Request starting HTTP/1.1 GET http://localhost:5000/health-status - -
[14:48:38 INF] Executing endpoint 'Health checks'
[14:48:38 INF] Executed endpoint 'Health checks'
[14:48:38 INF] Request finished HTTP/1.1 GET http://localhost:5000/health-status - - - 200 - application/json 7.1586ms
[14:48:38 INF] Received HTTP response headers after 8.4862ms - 200
[14:48:38 INF] End processing HTTP request after 8.6273ms - 200
[14:48:48 INF] Start processing HTTP request GET http://localhost:5000/health-status
[14:48:48 INF] Sending HTTP request GET http://localhost:5000/health-status
[14:48:48 INF] Request starting HTTP/1.1 GET http://localhost:5000/health-status - -
[14:48:48 INF] Executing endpoint 'Health checks'
[14:48:48 INF] Executed endpoint 'Health checks'
[14:48:48 INF] Request finished HTTP/1.1 GET http://localhost:5000/health-status - - - 200 - application/json 7.7654ms
[14:48:48 INF] Received HTTP response headers after 9.3975ms - 200
[14:48:48 INF] End processing HTTP request after 9.568ms - 200
liming.ma@volosoft.com
Project Sent
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<RootNamespace>Hudoor.Web</RootNamespace>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
<PreserveCompilationReferences>true</PreserveCompilationReferences>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Logs\**" />
<Content Remove="Logs\**" />
<EmbeddedResource Remove="Logs\**" />
<None Remove="Logs\**" />
</ItemGroup>
<ItemGroup>
<Content Include="Pages\**\*.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Pages\**\*.css">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="AspNetCore.HealthChecks.UI" Version="7.0.0-rc2.6" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="7.0.0-rc2.6" />
<PackageReference Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="7.0.0-rc2.6" />
<PackageReference Include="Serilog.AspNetCore" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="7.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="7.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Twitter" Version="7.0.10" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="7.0.10" />
<PackageReference Include="DistributedLock.Redis" Version="1.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Hudoor.Application\Hudoor.Application.csproj" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="7.4.0" />
<PackageReference Include="Volo.Abp.DistributedLocking" Version="7.4.0" />
<ProjectReference Include="..\Hudoor.HttpApi\Hudoor.HttpApi.csproj" />
<ProjectReference Include="..\Hudoor.EntityFrameworkCore\Hudoor.EntityFrameworkCore.csproj" />
<PackageReference Include="Volo.Abp.Autofac" Version="7.4.0" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.4.0" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="7.4.0" />
<PackageReference Include="Volo.Abp.Swashbuckle" Version="7.4.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.Web" Version="7.4.0" />
<PackageReference Include="Volo.Abp.Account.Pro.Public.Web.OpenIddict" Version="7.4.0" />
<PackageReference Include="Volo.Abp.Account.Pro.Admin.Web" Version="7.4.0" />
<PackageReference Include="Volo.Abp.AuditLogging.Web" Version="7.4.0" />
<PackageReference Include="Volo.Abp.Identity.Pro.Web" Version="7.4.0" />
<PackageReference Include="Volo.Abp.OpenIddict.Pro.Web" Version="7.4.0" />
<PackageReference Include="Volo.Abp.LanguageManagement.Web" Version="7.4.0" />
<PackageReference Include="Volo.Saas.Host.Web" Version="7.4.0" />
<PackageReference Include="Volo.Abp.TextTemplateManagement.Web" Version="7.4.0" />
<PackageReference Include="Volo.Abp.Gdpr.Web" Version="7.4.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX" Version="2.4.*-*" />
</ItemGroup>
<ItemGroup>
<None Update="authserver.pfx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
web module
using System;
using System.IO;
using Medallion.Threading;
using Medallion.Threading.Redis;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Hudoor.EntityFrameworkCore;
using Hudoor.Localization;
using Hudoor.MultiTenancy;
using Hudoor.Web.Public.Menus;
using StackExchange.Redis;
using Volo.Abp;
using Volo.Abp.AspNetCore.Authentication.OpenIdConnect;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.Mvc.UI;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Autofac;
using Volo.Abp.AutoMapper;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.DistributedLocking;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Http.Client.IdentityModel.Web;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.UI;
using Volo.Abp.UI.Navigation;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.LeptonX.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX.Bundling;
namespace Hudoor.Web.Public;
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpDistributedLockingModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(HudoorHttpApiModule),
typeof(HudoorApplicationModule),
typeof(HudoorEntityFrameworkCoreModule),
typeof(AbpAspNetCoreMvcUiLeptonXThemeModule),
typeof(AbpAspNetCoreAuthenticationOpenIdConnectModule),
typeof(AbpHttpClientIdentityModelWebModule)
)]
public class HudoorWebPublicModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
{
options.AddAssemblyResource(
typeof(HudoorResource),
typeof(HudoorDomainSharedModule).Assembly,
typeof(HudoorApplicationContractsModule).Assembly,
typeof(HudoorWebPublicModule).Assembly
);
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();
var configuration = context.Services.GetConfiguration();
if (!Convert.ToBoolean(configuration["App:DisablePII"]))
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
}
ConfigureBundles();
ConfigureUrls(configuration);
ConfigureCache(configuration);
ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureDistributedLocking(context, configuration);
ConfigureMultiTenancy();
ConfigureAuthentication(context, configuration);
ConfigureAutoMapper();
ConfigureVirtualFileSystem(hostingEnvironment);
ConfigureNavigationServices(configuration);
ConfigureTheme();
ConfigureBackgroundJobs();
}
private void ConfigureBundles()
{
Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(
LeptonXThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
});
}
private void ConfigureBackgroundJobs()
{
Configure<AbpBackgroundJobOptions>(options =>
{
options.IsJobExecutionEnabled = false;
});
Configure<AbpBackgroundWorkerOptions>(options =>
{
options.IsEnabled = false;
});
}
private void ConfigureTheme()
{
Configure<LeptonXThemeOptions>(options =>
{
options.DefaultStyle = LeptonXStyleNames.System;
});
Configure<LeptonXThemeMvcOptions>(options =>
{
options.ApplicationLayout = LeptonXMvcLayouts.TopMenu;
});
}
private void ConfigureUrls(IConfiguration configuration)
{
Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
});
}
private void ConfigureCache(IConfiguration configuration)
{
Configure<AbpDistributedCacheOptions>(options =>
{
options.KeyPrefix = "Hudoor:";
});
}
private void ConfigureMultiTenancy()
{
Configure<AbpMultiTenancyOptions>(options => { options.IsEnabled = MultiTenancyConsts.IsEnabled; });
}
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(365);
options.CheckTokenExpiration();
})
.AddAbpOpenIdConnect("oidc", options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); ;
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.ClientId = configuration["AuthServer:ClientId"];
options.ClientSecret = configuration["AuthServer:ClientSecret"];
options.UsePkce = true;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("roles");
options.Scope.Add("email");
options.Scope.Add("phone");
options.Scope.Add("Hudoor");
});
/*
* This configuration is used when the AuthServer is running on the internal network such as docker or k8s.
* Configuring the redirectin URLs for internal network and the web
*/
if (Convert.ToBoolean(configuration["AuthServer:IsContainerized"]))
{
context.Services.Configure<OpenIdConnectOptions>("oidc", options =>
{
options.TokenValidationParameters.ValidIssuers = new[]
{
configuration["AuthServer:MetaAddress"]!.EnsureEndsWith('/'),
configuration["AuthServer:Authority"]!.EnsureEndsWith('/')
};
options.MetadataAddress = configuration["AuthServer:MetaAddress"]!.EnsureEndsWith('/') +
".well-known/openid-configuration";
var previousOnRedirectToIdentityProvider = options.Events.OnRedirectToIdentityProvider;
options.Events.OnRedirectToIdentityProvider = async ctx =>
{
// Intercept the redirection so the browser navigates to the right URL in your host
ctx.ProtocolMessage.IssuerAddress = configuration["AuthServer:Authority"]!.EnsureEndsWith('/') + "connect/authorize";
if (previousOnRedirectToIdentityProvider != null)
{
await previousOnRedirectToIdentityProvider(ctx);
}
};
var previousOnRedirectToIdentityProviderForSignOut = options.Events.OnRedirectToIdentityProviderForSignOut;
options.Events.OnRedirectToIdentityProviderForSignOut = async ctx =>
{
// Intercept the redirection for signout so the browser navigates to the right URL in your host
ctx.ProtocolMessage.IssuerAddress = configuration["AuthServer:Authority"]!.EnsureEndsWith('/') + "connect/logout";
if (previousOnRedirectToIdentityProviderForSignOut != null)
{
await previousOnRedirectToIdentityProviderForSignOut(ctx);
}
};
});
}
}
private void ConfigureAutoMapper()
{
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<HudoorWebPublicModule>();
});
}
private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<HudoorWebPublicModule>();
if (hostingEnvironment.IsDevelopment())
{
options.FileSets.ReplaceEmbeddedByPhysical<HudoorDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hudoor.Domain.Shared", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HudoorApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hudoor.Application.Contracts", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HudoorHttpApiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Hudoor.HttpApi", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HudoorWebPublicModule>(hostingEnvironment.ContentRootPath);
}
});
}
private void ConfigureNavigationServices(IConfiguration configuration)
{
Configure<AbpNavigationOptions>(options =>
{
options.MenuContributors.Add(new HudoorPublicMenuContributor(configuration));
});
Configure<AbpToolbarOptions>(options =>
{
options.Contributors.Add(new HudoorToolbarContributor());
});
}
private void ConfigureDataProtection(
ServiceConfigurationContext context,
IConfiguration configuration,
IWebHostEnvironment hostingEnvironment)
{
var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("Hudoor");
if (!hostingEnvironment.IsDevelopment())
{
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "Hudoor-Protection-Keys");
}
}
private void ConfigureDistributedLocking(
ServiceConfigurationContext context,
IConfiguration configuration)
{
context.Services.AddSingleton<IDistributedLockProvider>(sp =>
{
var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
return new RedisDistributedSynchronizationProvider(connection.GetDatabase());
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{
app.UseErrorPage();
}
app.UseAbpSecurityHeaders();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseAuthorization();
app.UseAuditing();
app.UseAbpSerilogEnrichers();
app.UseUnitOfWork();
app.UseConfiguredEndpoints();
}
}
Project work in Debug Mode and view all Pages after Publish relase all apge return 404 only pages buit in abp framwork disbaly