chore 调整项目结构

This commit is contained in:
2025-09-08 15:47:11 +08:00
parent 0ecba9619f
commit 060ffe4c6a
148 changed files with 1186 additions and 1841 deletions

0
KonSoft.BackgroundJobs Normal file
View File

0
KonSoft.BackgroundWorker Normal file
View File

View File

@ -19,16 +19,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.InternalGateway", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.PublicGateway", "gateways\KonSoft.PublicGateway\KonSoft.PublicGateway.csproj", "{AEBC7053-743F-4F80-BD10-8ED6A8A7B3EE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.HttpApi.Host", "microservices\KonSoft.Admin.HttpApi.Host\KonSoft.Admin.HttpApi.Host.csproj", "{97BC949A-9142-B129-10FE-0D9381A49C05}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.HttpApi.Host", "microservices\KonSoft.Dispatch.HttpApi.Host\KonSoft.Dispatch.HttpApi.Host.csproj", "{D422C785-D6D0-8F6B-A6C3-2B0E5497B923}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.HttpApi.Host", "microservices\KonSoft.Payment.HttpApi.Host\KonSoft.Payment.HttpApi.Host.csproj", "{9A034977-0FBC-A3C8-8432-9FDD073F215A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.HttpApi.Host", "microservices\KonSoft.Report.HttpApi.Host\KonSoft.Report.HttpApi.Host.csproj", "{1C89424B-DA16-8840-4AB0-C446CFBD634C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.HttpApi.Host", "microservices\KonSoft.TenantManagement.HttpApi.Host\KonSoft.TenantManagement.HttpApi.Host.csproj", "{3641CA05-99C5-2245-C663-6CE00730E87C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{A53664DF-71AE-4C8E-A2DC-A60605FDF57C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dispatch", "dispatch", "{75A22B51-A986-48BD-A633-383DA18DE644}"
@ -61,6 +51,140 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{1C06151A-4
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Shared", "shared\KonSoft.Shared\KonSoft.Shared.csproj", "{345B5CDA-DC77-4956-BF96-80707EC1B5B2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.Application", "modules\admin\src\KonSoft.Admin.Application\KonSoft.Admin.Application.csproj", "{9D9D979A-AFC7-F9D0-2D23-8809E83F9EF9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.Application.Contracts", "modules\admin\src\KonSoft.Admin.Application.Contracts\KonSoft.Admin.Application.Contracts.csproj", "{9F68B0E2-0B1D-E0E8-1BE7-079F693A4643}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.Domain", "modules\admin\src\KonSoft.Admin.Domain\KonSoft.Admin.Domain.csproj", "{D1A86C77-533D-5B68-04F1-7F7BFBF56AC7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.Domain.Shared", "modules\admin\src\KonSoft.Admin.Domain.Shared\KonSoft.Admin.Domain.Shared.csproj", "{75F92EFD-9FCD-3BF4-ED33-066E84A1A906}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.EntityFrameworkCore", "modules\admin\src\KonSoft.Admin.EntityFrameworkCore\KonSoft.Admin.EntityFrameworkCore.csproj", "{A306661D-B99C-4623-61D9-9968D0260F53}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.HttpApi", "modules\admin\src\KonSoft.Admin.HttpApi\KonSoft.Admin.HttpApi.csproj", "{B449B5F0-DAB0-27DD-BC8A-75A1D63FB924}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.HttpApi.Client", "modules\admin\src\KonSoft.Admin.HttpApi.Client\KonSoft.Admin.HttpApi.Client.csproj", "{846FE47C-4E7F-D4CE-46DE-460FBBDAD6EB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.Application.Tests", "modules\admin\test\KonSoft.Admin.Application.Tests\KonSoft.Admin.Application.Tests.csproj", "{2B1AB90F-3EE1-DA95-26E9-41657FA2BE1C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.Domain.Tests", "modules\admin\test\KonSoft.Admin.Domain.Tests\KonSoft.Admin.Domain.Tests.csproj", "{3BEDE290-7D99-7F2C-C76D-108C016CE6D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.EntityFrameworkCore.Tests", "modules\admin\test\KonSoft.Admin.EntityFrameworkCore.Tests\KonSoft.Admin.EntityFrameworkCore.Tests.csproj", "{D87DBC28-58B7-9D6A-D2E5-BE4C748CF920}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.HttpApi.Client.ConsoleTestApp", "modules\admin\test\KonSoft.Admin.HttpApi.Client.ConsoleTestApp\KonSoft.Admin.HttpApi.Client.ConsoleTestApp.csproj", "{B2C32755-D986-3F1C-913A-3A6F1E56EF97}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.TestBase", "modules\admin\test\KonSoft.Admin.TestBase\KonSoft.Admin.TestBase.csproj", "{C5FC9F08-9A41-8581-A672-B6F8753C9991}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.Application", "modules\dispatch\src\KonSoft.Dispatch.Application\KonSoft.Dispatch.Application.csproj", "{B2020B57-1CAE-8C23-A413-92F54BF40313}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.Application.Contracts", "modules\dispatch\src\KonSoft.Dispatch.Application.Contracts\KonSoft.Dispatch.Application.Contracts.csproj", "{80D04466-EACE-9998-DACB-A68BE9B93847}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.Domain", "modules\dispatch\src\KonSoft.Dispatch.Domain\KonSoft.Dispatch.Domain.csproj", "{9F684B76-D619-765D-4F43-EDEE32F5DEF7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.Domain.Shared", "modules\dispatch\src\KonSoft.Dispatch.Domain.Shared\KonSoft.Dispatch.Domain.Shared.csproj", "{BAF030F5-3E23-4A8E-7ED6-504EB5BBD4FE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.EntityFrameworkCore", "modules\dispatch\src\KonSoft.Dispatch.EntityFrameworkCore\KonSoft.Dispatch.EntityFrameworkCore.csproj", "{B9B6B43D-6D13-C11B-1AE5-ADCBFEE68E67}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.HttpApi", "modules\dispatch\src\KonSoft.Dispatch.HttpApi\KonSoft.Dispatch.HttpApi.csproj", "{BEEB83BF-B5B0-EB53-EF78-415D4565187F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.HttpApi.Client", "modules\dispatch\src\KonSoft.Dispatch.HttpApi.Client\KonSoft.Dispatch.HttpApi.Client.csproj", "{9E9AAE6F-1C3C-B542-64E7-E11CE55E187A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.Application.Tests", "modules\dispatch\test\KonSoft.Dispatch.Application.Tests\KonSoft.Dispatch.Application.Tests.csproj", "{FA473ED4-54D4-C0DD-E589-31835F3AC9AA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.Domain.Tests", "modules\dispatch\test\KonSoft.Dispatch.Domain.Tests\KonSoft.Dispatch.Domain.Tests.csproj", "{99D81094-6B32-1C9D-5F84-E7FCEF67DFB5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.EntityFrameworkCore.Tests", "modules\dispatch\test\KonSoft.Dispatch.EntityFrameworkCore.Tests\KonSoft.Dispatch.EntityFrameworkCore.Tests.csproj", "{D3091C1B-443C-23F1-B007-A1262E92A3BB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.HttpApi.Client.ConsoleTestApp", "modules\dispatch\test\KonSoft.Dispatch.HttpApi.Client.ConsoleTestApp\KonSoft.Dispatch.HttpApi.Client.ConsoleTestApp.csproj", "{AA2EB1B6-B6BF-A9DF-7C1C-F30B2DCA1E2A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.TestBase", "modules\dispatch\test\KonSoft.Dispatch.TestBase\KonSoft.Dispatch.TestBase.csproj", "{92CC92BF-8025-40F4-5121-DC2570ADAA04}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.Application", "modules\payment\src\KonSoft.Payment.Application\KonSoft.Payment.Application.csproj", "{E9EE0B66-228F-B8EC-417C-445CAF351F76}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.Application.Contracts", "modules\payment\src\KonSoft.Payment.Application.Contracts\KonSoft.Payment.Application.Contracts.csproj", "{EC6F5CC9-D45A-2CBC-5C84-63F6766E9359}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.Domain", "modules\payment\src\KonSoft.Payment.Domain\KonSoft.Payment.Domain.csproj", "{E2C7EA39-82A9-DFC8-F1B5-87298AAA02AE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.Domain.Shared", "modules\payment\src\KonSoft.Payment.Domain.Shared\KonSoft.Payment.Domain.Shared.csproj", "{2FA0AC97-1BF7-5B4B-4B3A-81AA3B3882F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.EntityFrameworkCore", "modules\payment\src\KonSoft.Payment.EntityFrameworkCore\KonSoft.Payment.EntityFrameworkCore.csproj", "{817CE319-21A4-6FB1-3002-E786F8D0DAC5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.HttpApi", "modules\payment\src\KonSoft.Payment.HttpApi\KonSoft.Payment.HttpApi.csproj", "{D9F0918C-5DB6-B97D-FF09-18345B23DF44}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.HttpApi.Client", "modules\payment\src\KonSoft.Payment.HttpApi.Client\KonSoft.Payment.HttpApi.Client.csproj", "{087E7661-DB2D-07F9-586E-A49EE0399A07}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.Application.Tests", "modules\payment\test\KonSoft.Payment.Application.Tests\KonSoft.Payment.Application.Tests.csproj", "{C49DCA14-AA0E-CE33-9028-AFE76A31B00F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.Domain.Tests", "modules\payment\test\KonSoft.Payment.Domain.Tests\KonSoft.Payment.Domain.Tests.csproj", "{E84CB613-ADF5-3F80-3CC2-0CB7424865B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.EntityFrameworkCore.Tests", "modules\payment\test\KonSoft.Payment.EntityFrameworkCore.Tests\KonSoft.Payment.EntityFrameworkCore.Tests.csproj", "{959EA8DB-5C6D-58C9-A71B-FBA5D93F3B39}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.HttpApi.Client.ConsoleTestApp", "modules\payment\test\KonSoft.Payment.HttpApi.Client.ConsoleTestApp\KonSoft.Payment.HttpApi.Client.ConsoleTestApp.csproj", "{9DD56F78-BA2E-E3F0-373F-C5F6509D1E9D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.TestBase", "modules\payment\test\KonSoft.Payment.TestBase\KonSoft.Payment.TestBase.csproj", "{7E5945D8-0B0B-4426-BB05-8F7EE37036E1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.Application", "modules\report\src\KonSoft.Report.Application\KonSoft.Report.Application.csproj", "{C14C9349-5A9B-079B-1DAA-F68D09745F4B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.Application.Contracts", "modules\report\src\KonSoft.Report.Application.Contracts\KonSoft.Report.Application.Contracts.csproj", "{DE7BD236-A0C3-DB34-DF42-B4258E3DD72F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.Domain", "modules\report\src\KonSoft.Report.Domain\KonSoft.Report.Domain.csproj", "{0BCC52A7-8D67-64D7-FCD7-436D6B13B053}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.Domain.Shared", "modules\report\src\KonSoft.Report.Domain.Shared\KonSoft.Report.Domain.Shared.csproj", "{60D113CF-9C20-11BC-AB4B-A4CAB288EDD7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.EntityFrameworkCore", "modules\report\src\KonSoft.Report.EntityFrameworkCore\KonSoft.Report.EntityFrameworkCore.csproj", "{403AF0D9-5199-E02A-4CBA-F877E0559DE4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.HttpApi", "modules\report\src\KonSoft.Report.HttpApi\KonSoft.Report.HttpApi.csproj", "{73B2CDFD-63F6-0023-B10C-E844D978279A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.HttpApi.Client", "modules\report\src\KonSoft.Report.HttpApi.Client\KonSoft.Report.HttpApi.Client.csproj", "{93E93A6B-2808-BCC8-979D-B6E0C6A08558}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.Application.Tests", "modules\report\test\KonSoft.Report.Application.Tests\KonSoft.Report.Application.Tests.csproj", "{D801B2E8-DACB-2B61-D54A-06F16D1A976B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.Domain.Tests", "modules\report\test\KonSoft.Report.Domain.Tests\KonSoft.Report.Domain.Tests.csproj", "{4930C29C-A870-AB21-34E8-496898DCF474}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.EntityFrameworkCore.Tests", "modules\report\test\KonSoft.Report.EntityFrameworkCore.Tests\KonSoft.Report.EntityFrameworkCore.Tests.csproj", "{4E4B7F2C-EADC-EAEB-C087-309A6FD2E99D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.HttpApi.Client.ConsoleTestApp", "modules\report\test\KonSoft.Report.HttpApi.Client.ConsoleTestApp\KonSoft.Report.HttpApi.Client.ConsoleTestApp.csproj", "{B92604FE-8BEB-D7C8-E849-EE87E6BDB65E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.TestBase", "modules\report\test\KonSoft.Report.TestBase\KonSoft.Report.TestBase.csproj", "{768F149B-659D-3769-3570-86C753EE8896}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.Application", "modules\tenant-management\src\KonSoft.TenantManagement.Application\KonSoft.TenantManagement.Application.csproj", "{22F62964-1C2C-339D-7572-E91E34B3530F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.Application.Contracts", "modules\tenant-management\src\KonSoft.TenantManagement.Application.Contracts\KonSoft.TenantManagement.Application.Contracts.csproj", "{2E097B16-F382-0F60-8806-79960016032A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.Domain", "modules\tenant-management\src\KonSoft.TenantManagement.Domain\KonSoft.TenantManagement.Domain.csproj", "{DBBB7A40-EC3E-2018-F2B7-C0041D1DD215}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.Domain.Shared", "modules\tenant-management\src\KonSoft.TenantManagement.Domain.Shared\KonSoft.TenantManagement.Domain.Shared.csproj", "{2D47B675-1235-052F-4409-DC335A633FCD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.EntityFrameworkCore", "modules\tenant-management\src\KonSoft.TenantManagement.EntityFrameworkCore\KonSoft.TenantManagement.EntityFrameworkCore.csproj", "{BA608D2C-406D-B666-5383-D806C46EDD05}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.HttpApi", "modules\tenant-management\src\KonSoft.TenantManagement.HttpApi\KonSoft.TenantManagement.HttpApi.csproj", "{70F10069-D717-0C25-33A4-9AC90FF5E8A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.HttpApi.Client", "modules\tenant-management\src\KonSoft.TenantManagement.HttpApi.Client\KonSoft.TenantManagement.HttpApi.Client.csproj", "{6958C0D9-6C81-EF5F-D68C-B9E8AD8E7130}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.Application.Tests", "modules\tenant-management\test\KonSoft.TenantManagement.Application.Tests\KonSoft.TenantManagement.Application.Tests.csproj", "{B1D8B704-8077-00FC-B44B-B5B1071DD934}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.Domain.Tests", "modules\tenant-management\test\KonSoft.TenantManagement.Domain.Tests\KonSoft.TenantManagement.Domain.Tests.csproj", "{B89FEABF-4CDA-9A62-E9E1-896DC9AD7AA3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.EntityFrameworkCore.Tests", "modules\tenant-management\test\KonSoft.TenantManagement.EntityFrameworkCore.Tests\KonSoft.TenantManagement.EntityFrameworkCore.Tests.csproj", "{A8F64512-A7F7-6670-D7C7-4AA41C4B2E0F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.HttpApi.Client.ConsoleTestApp", "modules\tenant-management\test\KonSoft.TenantManagement.HttpApi.Client.ConsoleTestApp\KonSoft.TenantManagement.HttpApi.Client.ConsoleTestApp.csproj", "{AAF0C46B-F69F-56D6-319F-B0AF8B3A7C1D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.TestBase", "modules\tenant-management\test\KonSoft.TenantManagement.TestBase\KonSoft.TenantManagement.TestBase.csproj", "{1E3AA937-6394-0C20-C59B-127D2B01DE4F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.BackgroundWorker", "applications\KonSoft.BackgroundWorker\KonSoft.BackgroundWorker.csproj", "{410A79A5-24B5-473E-BE7B-5C787B7431A2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.BackgroundJobs", "applications\KonSoft.BackgroundJobs\KonSoft.BackgroundJobs.csproj", "{95718E42-884D-4396-AF1E-EDFFDD8C86D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Admin.HttpApi.Host", "microservices\KonSoft.Admin.HttpApi.Host\KonSoft.Admin.HttpApi.Host.csproj", "{97BC949A-9142-B129-10FE-0D9381A49C05}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Dispatch.HttpApi.Host", "microservices\KonSoft.Dispatch.HttpApi.Host\KonSoft.Dispatch.HttpApi.Host.csproj", "{D422C785-D6D0-8F6B-A6C3-2B0E5497B923}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Payment.HttpApi.Host", "microservices\KonSoft.Payment.HttpApi.Host\KonSoft.Payment.HttpApi.Host.csproj", "{9A034977-0FBC-A3C8-8432-9FDD073F215A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.Report.HttpApi.Host", "microservices\KonSoft.Report.HttpApi.Host\KonSoft.Report.HttpApi.Host.csproj", "{1C89424B-DA16-8840-4AB0-C446CFBD634C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KonSoft.TenantManagement.HttpApi.Host", "microservices\KonSoft.TenantManagement.HttpApi.Host\KonSoft.TenantManagement.HttpApi.Host.csproj", "{3641CA05-99C5-2245-C663-6CE00730E87C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -79,6 +203,258 @@ Global
{AEBC7053-743F-4F80-BD10-8ED6A8A7B3EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AEBC7053-743F-4F80-BD10-8ED6A8A7B3EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AEBC7053-743F-4F80-BD10-8ED6A8A7B3EE}.Release|Any CPU.Build.0 = Release|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Release|Any CPU.Build.0 = Release|Any CPU
{9D9D979A-AFC7-F9D0-2D23-8809E83F9EF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D9D979A-AFC7-F9D0-2D23-8809E83F9EF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D9D979A-AFC7-F9D0-2D23-8809E83F9EF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D9D979A-AFC7-F9D0-2D23-8809E83F9EF9}.Release|Any CPU.Build.0 = Release|Any CPU
{9F68B0E2-0B1D-E0E8-1BE7-079F693A4643}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F68B0E2-0B1D-E0E8-1BE7-079F693A4643}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F68B0E2-0B1D-E0E8-1BE7-079F693A4643}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F68B0E2-0B1D-E0E8-1BE7-079F693A4643}.Release|Any CPU.Build.0 = Release|Any CPU
{D1A86C77-533D-5B68-04F1-7F7BFBF56AC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1A86C77-533D-5B68-04F1-7F7BFBF56AC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1A86C77-533D-5B68-04F1-7F7BFBF56AC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1A86C77-533D-5B68-04F1-7F7BFBF56AC7}.Release|Any CPU.Build.0 = Release|Any CPU
{75F92EFD-9FCD-3BF4-ED33-066E84A1A906}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{75F92EFD-9FCD-3BF4-ED33-066E84A1A906}.Debug|Any CPU.Build.0 = Debug|Any CPU
{75F92EFD-9FCD-3BF4-ED33-066E84A1A906}.Release|Any CPU.ActiveCfg = Release|Any CPU
{75F92EFD-9FCD-3BF4-ED33-066E84A1A906}.Release|Any CPU.Build.0 = Release|Any CPU
{A306661D-B99C-4623-61D9-9968D0260F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A306661D-B99C-4623-61D9-9968D0260F53}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A306661D-B99C-4623-61D9-9968D0260F53}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A306661D-B99C-4623-61D9-9968D0260F53}.Release|Any CPU.Build.0 = Release|Any CPU
{B449B5F0-DAB0-27DD-BC8A-75A1D63FB924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B449B5F0-DAB0-27DD-BC8A-75A1D63FB924}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B449B5F0-DAB0-27DD-BC8A-75A1D63FB924}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B449B5F0-DAB0-27DD-BC8A-75A1D63FB924}.Release|Any CPU.Build.0 = Release|Any CPU
{846FE47C-4E7F-D4CE-46DE-460FBBDAD6EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{846FE47C-4E7F-D4CE-46DE-460FBBDAD6EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{846FE47C-4E7F-D4CE-46DE-460FBBDAD6EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{846FE47C-4E7F-D4CE-46DE-460FBBDAD6EB}.Release|Any CPU.Build.0 = Release|Any CPU
{2B1AB90F-3EE1-DA95-26E9-41657FA2BE1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B1AB90F-3EE1-DA95-26E9-41657FA2BE1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B1AB90F-3EE1-DA95-26E9-41657FA2BE1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B1AB90F-3EE1-DA95-26E9-41657FA2BE1C}.Release|Any CPU.Build.0 = Release|Any CPU
{3BEDE290-7D99-7F2C-C76D-108C016CE6D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3BEDE290-7D99-7F2C-C76D-108C016CE6D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3BEDE290-7D99-7F2C-C76D-108C016CE6D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BEDE290-7D99-7F2C-C76D-108C016CE6D1}.Release|Any CPU.Build.0 = Release|Any CPU
{D87DBC28-58B7-9D6A-D2E5-BE4C748CF920}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D87DBC28-58B7-9D6A-D2E5-BE4C748CF920}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D87DBC28-58B7-9D6A-D2E5-BE4C748CF920}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D87DBC28-58B7-9D6A-D2E5-BE4C748CF920}.Release|Any CPU.Build.0 = Release|Any CPU
{B2C32755-D986-3F1C-913A-3A6F1E56EF97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B2C32755-D986-3F1C-913A-3A6F1E56EF97}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B2C32755-D986-3F1C-913A-3A6F1E56EF97}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B2C32755-D986-3F1C-913A-3A6F1E56EF97}.Release|Any CPU.Build.0 = Release|Any CPU
{C5FC9F08-9A41-8581-A672-B6F8753C9991}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C5FC9F08-9A41-8581-A672-B6F8753C9991}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C5FC9F08-9A41-8581-A672-B6F8753C9991}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C5FC9F08-9A41-8581-A672-B6F8753C9991}.Release|Any CPU.Build.0 = Release|Any CPU
{B2020B57-1CAE-8C23-A413-92F54BF40313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B2020B57-1CAE-8C23-A413-92F54BF40313}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B2020B57-1CAE-8C23-A413-92F54BF40313}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B2020B57-1CAE-8C23-A413-92F54BF40313}.Release|Any CPU.Build.0 = Release|Any CPU
{80D04466-EACE-9998-DACB-A68BE9B93847}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{80D04466-EACE-9998-DACB-A68BE9B93847}.Debug|Any CPU.Build.0 = Debug|Any CPU
{80D04466-EACE-9998-DACB-A68BE9B93847}.Release|Any CPU.ActiveCfg = Release|Any CPU
{80D04466-EACE-9998-DACB-A68BE9B93847}.Release|Any CPU.Build.0 = Release|Any CPU
{9F684B76-D619-765D-4F43-EDEE32F5DEF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F684B76-D619-765D-4F43-EDEE32F5DEF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F684B76-D619-765D-4F43-EDEE32F5DEF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F684B76-D619-765D-4F43-EDEE32F5DEF7}.Release|Any CPU.Build.0 = Release|Any CPU
{BAF030F5-3E23-4A8E-7ED6-504EB5BBD4FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAF030F5-3E23-4A8E-7ED6-504EB5BBD4FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAF030F5-3E23-4A8E-7ED6-504EB5BBD4FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAF030F5-3E23-4A8E-7ED6-504EB5BBD4FE}.Release|Any CPU.Build.0 = Release|Any CPU
{B9B6B43D-6D13-C11B-1AE5-ADCBFEE68E67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B9B6B43D-6D13-C11B-1AE5-ADCBFEE68E67}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B9B6B43D-6D13-C11B-1AE5-ADCBFEE68E67}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B9B6B43D-6D13-C11B-1AE5-ADCBFEE68E67}.Release|Any CPU.Build.0 = Release|Any CPU
{BEEB83BF-B5B0-EB53-EF78-415D4565187F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BEEB83BF-B5B0-EB53-EF78-415D4565187F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BEEB83BF-B5B0-EB53-EF78-415D4565187F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BEEB83BF-B5B0-EB53-EF78-415D4565187F}.Release|Any CPU.Build.0 = Release|Any CPU
{9E9AAE6F-1C3C-B542-64E7-E11CE55E187A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9E9AAE6F-1C3C-B542-64E7-E11CE55E187A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9E9AAE6F-1C3C-B542-64E7-E11CE55E187A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9E9AAE6F-1C3C-B542-64E7-E11CE55E187A}.Release|Any CPU.Build.0 = Release|Any CPU
{FA473ED4-54D4-C0DD-E589-31835F3AC9AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA473ED4-54D4-C0DD-E589-31835F3AC9AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA473ED4-54D4-C0DD-E589-31835F3AC9AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA473ED4-54D4-C0DD-E589-31835F3AC9AA}.Release|Any CPU.Build.0 = Release|Any CPU
{99D81094-6B32-1C9D-5F84-E7FCEF67DFB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99D81094-6B32-1C9D-5F84-E7FCEF67DFB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99D81094-6B32-1C9D-5F84-E7FCEF67DFB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{99D81094-6B32-1C9D-5F84-E7FCEF67DFB5}.Release|Any CPU.Build.0 = Release|Any CPU
{D3091C1B-443C-23F1-B007-A1262E92A3BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3091C1B-443C-23F1-B007-A1262E92A3BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3091C1B-443C-23F1-B007-A1262E92A3BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3091C1B-443C-23F1-B007-A1262E92A3BB}.Release|Any CPU.Build.0 = Release|Any CPU
{AA2EB1B6-B6BF-A9DF-7C1C-F30B2DCA1E2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA2EB1B6-B6BF-A9DF-7C1C-F30B2DCA1E2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA2EB1B6-B6BF-A9DF-7C1C-F30B2DCA1E2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA2EB1B6-B6BF-A9DF-7C1C-F30B2DCA1E2A}.Release|Any CPU.Build.0 = Release|Any CPU
{92CC92BF-8025-40F4-5121-DC2570ADAA04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{92CC92BF-8025-40F4-5121-DC2570ADAA04}.Debug|Any CPU.Build.0 = Debug|Any CPU
{92CC92BF-8025-40F4-5121-DC2570ADAA04}.Release|Any CPU.ActiveCfg = Release|Any CPU
{92CC92BF-8025-40F4-5121-DC2570ADAA04}.Release|Any CPU.Build.0 = Release|Any CPU
{E9EE0B66-228F-B8EC-417C-445CAF351F76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9EE0B66-228F-B8EC-417C-445CAF351F76}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9EE0B66-228F-B8EC-417C-445CAF351F76}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9EE0B66-228F-B8EC-417C-445CAF351F76}.Release|Any CPU.Build.0 = Release|Any CPU
{EC6F5CC9-D45A-2CBC-5C84-63F6766E9359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EC6F5CC9-D45A-2CBC-5C84-63F6766E9359}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC6F5CC9-D45A-2CBC-5C84-63F6766E9359}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC6F5CC9-D45A-2CBC-5C84-63F6766E9359}.Release|Any CPU.Build.0 = Release|Any CPU
{E2C7EA39-82A9-DFC8-F1B5-87298AAA02AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E2C7EA39-82A9-DFC8-F1B5-87298AAA02AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E2C7EA39-82A9-DFC8-F1B5-87298AAA02AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E2C7EA39-82A9-DFC8-F1B5-87298AAA02AE}.Release|Any CPU.Build.0 = Release|Any CPU
{2FA0AC97-1BF7-5B4B-4B3A-81AA3B3882F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2FA0AC97-1BF7-5B4B-4B3A-81AA3B3882F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2FA0AC97-1BF7-5B4B-4B3A-81AA3B3882F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2FA0AC97-1BF7-5B4B-4B3A-81AA3B3882F3}.Release|Any CPU.Build.0 = Release|Any CPU
{817CE319-21A4-6FB1-3002-E786F8D0DAC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{817CE319-21A4-6FB1-3002-E786F8D0DAC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{817CE319-21A4-6FB1-3002-E786F8D0DAC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{817CE319-21A4-6FB1-3002-E786F8D0DAC5}.Release|Any CPU.Build.0 = Release|Any CPU
{D9F0918C-5DB6-B97D-FF09-18345B23DF44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D9F0918C-5DB6-B97D-FF09-18345B23DF44}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D9F0918C-5DB6-B97D-FF09-18345B23DF44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D9F0918C-5DB6-B97D-FF09-18345B23DF44}.Release|Any CPU.Build.0 = Release|Any CPU
{087E7661-DB2D-07F9-586E-A49EE0399A07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{087E7661-DB2D-07F9-586E-A49EE0399A07}.Debug|Any CPU.Build.0 = Debug|Any CPU
{087E7661-DB2D-07F9-586E-A49EE0399A07}.Release|Any CPU.ActiveCfg = Release|Any CPU
{087E7661-DB2D-07F9-586E-A49EE0399A07}.Release|Any CPU.Build.0 = Release|Any CPU
{C49DCA14-AA0E-CE33-9028-AFE76A31B00F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C49DCA14-AA0E-CE33-9028-AFE76A31B00F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C49DCA14-AA0E-CE33-9028-AFE76A31B00F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C49DCA14-AA0E-CE33-9028-AFE76A31B00F}.Release|Any CPU.Build.0 = Release|Any CPU
{E84CB613-ADF5-3F80-3CC2-0CB7424865B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E84CB613-ADF5-3F80-3CC2-0CB7424865B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E84CB613-ADF5-3F80-3CC2-0CB7424865B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E84CB613-ADF5-3F80-3CC2-0CB7424865B0}.Release|Any CPU.Build.0 = Release|Any CPU
{959EA8DB-5C6D-58C9-A71B-FBA5D93F3B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{959EA8DB-5C6D-58C9-A71B-FBA5D93F3B39}.Debug|Any CPU.Build.0 = Debug|Any CPU
{959EA8DB-5C6D-58C9-A71B-FBA5D93F3B39}.Release|Any CPU.ActiveCfg = Release|Any CPU
{959EA8DB-5C6D-58C9-A71B-FBA5D93F3B39}.Release|Any CPU.Build.0 = Release|Any CPU
{9DD56F78-BA2E-E3F0-373F-C5F6509D1E9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9DD56F78-BA2E-E3F0-373F-C5F6509D1E9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9DD56F78-BA2E-E3F0-373F-C5F6509D1E9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9DD56F78-BA2E-E3F0-373F-C5F6509D1E9D}.Release|Any CPU.Build.0 = Release|Any CPU
{7E5945D8-0B0B-4426-BB05-8F7EE37036E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E5945D8-0B0B-4426-BB05-8F7EE37036E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E5945D8-0B0B-4426-BB05-8F7EE37036E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E5945D8-0B0B-4426-BB05-8F7EE37036E1}.Release|Any CPU.Build.0 = Release|Any CPU
{C14C9349-5A9B-079B-1DAA-F68D09745F4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C14C9349-5A9B-079B-1DAA-F68D09745F4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C14C9349-5A9B-079B-1DAA-F68D09745F4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C14C9349-5A9B-079B-1DAA-F68D09745F4B}.Release|Any CPU.Build.0 = Release|Any CPU
{DE7BD236-A0C3-DB34-DF42-B4258E3DD72F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE7BD236-A0C3-DB34-DF42-B4258E3DD72F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE7BD236-A0C3-DB34-DF42-B4258E3DD72F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE7BD236-A0C3-DB34-DF42-B4258E3DD72F}.Release|Any CPU.Build.0 = Release|Any CPU
{0BCC52A7-8D67-64D7-FCD7-436D6B13B053}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0BCC52A7-8D67-64D7-FCD7-436D6B13B053}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0BCC52A7-8D67-64D7-FCD7-436D6B13B053}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0BCC52A7-8D67-64D7-FCD7-436D6B13B053}.Release|Any CPU.Build.0 = Release|Any CPU
{60D113CF-9C20-11BC-AB4B-A4CAB288EDD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60D113CF-9C20-11BC-AB4B-A4CAB288EDD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60D113CF-9C20-11BC-AB4B-A4CAB288EDD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60D113CF-9C20-11BC-AB4B-A4CAB288EDD7}.Release|Any CPU.Build.0 = Release|Any CPU
{403AF0D9-5199-E02A-4CBA-F877E0559DE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{403AF0D9-5199-E02A-4CBA-F877E0559DE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{403AF0D9-5199-E02A-4CBA-F877E0559DE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{403AF0D9-5199-E02A-4CBA-F877E0559DE4}.Release|Any CPU.Build.0 = Release|Any CPU
{73B2CDFD-63F6-0023-B10C-E844D978279A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{73B2CDFD-63F6-0023-B10C-E844D978279A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73B2CDFD-63F6-0023-B10C-E844D978279A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73B2CDFD-63F6-0023-B10C-E844D978279A}.Release|Any CPU.Build.0 = Release|Any CPU
{93E93A6B-2808-BCC8-979D-B6E0C6A08558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93E93A6B-2808-BCC8-979D-B6E0C6A08558}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93E93A6B-2808-BCC8-979D-B6E0C6A08558}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93E93A6B-2808-BCC8-979D-B6E0C6A08558}.Release|Any CPU.Build.0 = Release|Any CPU
{D801B2E8-DACB-2B61-D54A-06F16D1A976B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D801B2E8-DACB-2B61-D54A-06F16D1A976B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D801B2E8-DACB-2B61-D54A-06F16D1A976B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D801B2E8-DACB-2B61-D54A-06F16D1A976B}.Release|Any CPU.Build.0 = Release|Any CPU
{4930C29C-A870-AB21-34E8-496898DCF474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4930C29C-A870-AB21-34E8-496898DCF474}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4930C29C-A870-AB21-34E8-496898DCF474}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4930C29C-A870-AB21-34E8-496898DCF474}.Release|Any CPU.Build.0 = Release|Any CPU
{4E4B7F2C-EADC-EAEB-C087-309A6FD2E99D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E4B7F2C-EADC-EAEB-C087-309A6FD2E99D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E4B7F2C-EADC-EAEB-C087-309A6FD2E99D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E4B7F2C-EADC-EAEB-C087-309A6FD2E99D}.Release|Any CPU.Build.0 = Release|Any CPU
{B92604FE-8BEB-D7C8-E849-EE87E6BDB65E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B92604FE-8BEB-D7C8-E849-EE87E6BDB65E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B92604FE-8BEB-D7C8-E849-EE87E6BDB65E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B92604FE-8BEB-D7C8-E849-EE87E6BDB65E}.Release|Any CPU.Build.0 = Release|Any CPU
{768F149B-659D-3769-3570-86C753EE8896}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{768F149B-659D-3769-3570-86C753EE8896}.Debug|Any CPU.Build.0 = Debug|Any CPU
{768F149B-659D-3769-3570-86C753EE8896}.Release|Any CPU.ActiveCfg = Release|Any CPU
{768F149B-659D-3769-3570-86C753EE8896}.Release|Any CPU.Build.0 = Release|Any CPU
{22F62964-1C2C-339D-7572-E91E34B3530F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{22F62964-1C2C-339D-7572-E91E34B3530F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{22F62964-1C2C-339D-7572-E91E34B3530F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{22F62964-1C2C-339D-7572-E91E34B3530F}.Release|Any CPU.Build.0 = Release|Any CPU
{2E097B16-F382-0F60-8806-79960016032A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E097B16-F382-0F60-8806-79960016032A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E097B16-F382-0F60-8806-79960016032A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E097B16-F382-0F60-8806-79960016032A}.Release|Any CPU.Build.0 = Release|Any CPU
{DBBB7A40-EC3E-2018-F2B7-C0041D1DD215}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBBB7A40-EC3E-2018-F2B7-C0041D1DD215}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBBB7A40-EC3E-2018-F2B7-C0041D1DD215}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DBBB7A40-EC3E-2018-F2B7-C0041D1DD215}.Release|Any CPU.Build.0 = Release|Any CPU
{2D47B675-1235-052F-4409-DC335A633FCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D47B675-1235-052F-4409-DC335A633FCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D47B675-1235-052F-4409-DC335A633FCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D47B675-1235-052F-4409-DC335A633FCD}.Release|Any CPU.Build.0 = Release|Any CPU
{BA608D2C-406D-B666-5383-D806C46EDD05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA608D2C-406D-B666-5383-D806C46EDD05}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA608D2C-406D-B666-5383-D806C46EDD05}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA608D2C-406D-B666-5383-D806C46EDD05}.Release|Any CPU.Build.0 = Release|Any CPU
{70F10069-D717-0C25-33A4-9AC90FF5E8A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{70F10069-D717-0C25-33A4-9AC90FF5E8A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70F10069-D717-0C25-33A4-9AC90FF5E8A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{70F10069-D717-0C25-33A4-9AC90FF5E8A3}.Release|Any CPU.Build.0 = Release|Any CPU
{6958C0D9-6C81-EF5F-D68C-B9E8AD8E7130}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6958C0D9-6C81-EF5F-D68C-B9E8AD8E7130}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6958C0D9-6C81-EF5F-D68C-B9E8AD8E7130}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6958C0D9-6C81-EF5F-D68C-B9E8AD8E7130}.Release|Any CPU.Build.0 = Release|Any CPU
{B1D8B704-8077-00FC-B44B-B5B1071DD934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1D8B704-8077-00FC-B44B-B5B1071DD934}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1D8B704-8077-00FC-B44B-B5B1071DD934}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1D8B704-8077-00FC-B44B-B5B1071DD934}.Release|Any CPU.Build.0 = Release|Any CPU
{B89FEABF-4CDA-9A62-E9E1-896DC9AD7AA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B89FEABF-4CDA-9A62-E9E1-896DC9AD7AA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B89FEABF-4CDA-9A62-E9E1-896DC9AD7AA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B89FEABF-4CDA-9A62-E9E1-896DC9AD7AA3}.Release|Any CPU.Build.0 = Release|Any CPU
{A8F64512-A7F7-6670-D7C7-4AA41C4B2E0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A8F64512-A7F7-6670-D7C7-4AA41C4B2E0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A8F64512-A7F7-6670-D7C7-4AA41C4B2E0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A8F64512-A7F7-6670-D7C7-4AA41C4B2E0F}.Release|Any CPU.Build.0 = Release|Any CPU
{AAF0C46B-F69F-56D6-319F-B0AF8B3A7C1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AAF0C46B-F69F-56D6-319F-B0AF8B3A7C1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AAF0C46B-F69F-56D6-319F-B0AF8B3A7C1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AAF0C46B-F69F-56D6-319F-B0AF8B3A7C1D}.Release|Any CPU.Build.0 = Release|Any CPU
{1E3AA937-6394-0C20-C59B-127D2B01DE4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E3AA937-6394-0C20-C59B-127D2B01DE4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E3AA937-6394-0C20-C59B-127D2B01DE4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E3AA937-6394-0C20-C59B-127D2B01DE4F}.Release|Any CPU.Build.0 = Release|Any CPU
{410A79A5-24B5-473E-BE7B-5C787B7431A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{410A79A5-24B5-473E-BE7B-5C787B7431A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{410A79A5-24B5-473E-BE7B-5C787B7431A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{410A79A5-24B5-473E-BE7B-5C787B7431A2}.Release|Any CPU.Build.0 = Release|Any CPU
{95718E42-884D-4396-AF1E-EDFFDD8C86D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{95718E42-884D-4396-AF1E-EDFFDD8C86D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95718E42-884D-4396-AF1E-EDFFDD8C86D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{95718E42-884D-4396-AF1E-EDFFDD8C86D4}.Release|Any CPU.Build.0 = Release|Any CPU
{97BC949A-9142-B129-10FE-0D9381A49C05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{97BC949A-9142-B129-10FE-0D9381A49C05}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97BC949A-9142-B129-10FE-0D9381A49C05}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -99,10 +475,6 @@ Global
{3641CA05-99C5-2245-C663-6CE00730E87C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3641CA05-99C5-2245-C663-6CE00730E87C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3641CA05-99C5-2245-C663-6CE00730E87C}.Release|Any CPU.Build.0 = Release|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{345B5CDA-DC77-4956-BF96-80707EC1B5B2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -111,11 +483,6 @@ Global
{D02078B5-294E-DA0D-DD69-46FDEFBD76F9} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{14E3D6EA-528D-4983-9EC8-77FEE4BC2FED} = {C5AC3FEE-4315-4D82-A142-5068D5A6DD73}
{AEBC7053-743F-4F80-BD10-8ED6A8A7B3EE} = {C5AC3FEE-4315-4D82-A142-5068D5A6DD73}
{97BC949A-9142-B129-10FE-0D9381A49C05} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{D422C785-D6D0-8F6B-A6C3-2B0E5497B923} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{9A034977-0FBC-A3C8-8432-9FDD073F215A} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{1C89424B-DA16-8840-4AB0-C446CFBD634C} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{3641CA05-99C5-2245-C663-6CE00730E87C} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{A53664DF-71AE-4C8E-A2DC-A60605FDF57C} = {327E64CE-CB3C-480A-AB52-816B8A5329B6}
{75A22B51-A986-48BD-A633-383DA18DE644} = {327E64CE-CB3C-480A-AB52-816B8A5329B6}
{244E1153-5BE5-4DC2-BA9D-2988BA25F208} = {327E64CE-CB3C-480A-AB52-816B8A5329B6}
@ -132,6 +499,73 @@ Global
{E67FA5C3-132C-4F47-B6A6-8FA4376C70BB} = {CF59695F-7948-4743-A467-42E4B4C9EECA}
{1C06151A-45F0-4D48-8303-3D4CBE9517F7} = {CF59695F-7948-4743-A467-42E4B4C9EECA}
{345B5CDA-DC77-4956-BF96-80707EC1B5B2} = {7EFFD2C6-2041-4967-A715-0F817D70C433}
{9D9D979A-AFC7-F9D0-2D23-8809E83F9EF9} = {EBCB740D-07E7-4CED-A422-90EB824B9021}
{9F68B0E2-0B1D-E0E8-1BE7-079F693A4643} = {EBCB740D-07E7-4CED-A422-90EB824B9021}
{D1A86C77-533D-5B68-04F1-7F7BFBF56AC7} = {EBCB740D-07E7-4CED-A422-90EB824B9021}
{75F92EFD-9FCD-3BF4-ED33-066E84A1A906} = {EBCB740D-07E7-4CED-A422-90EB824B9021}
{A306661D-B99C-4623-61D9-9968D0260F53} = {EBCB740D-07E7-4CED-A422-90EB824B9021}
{B449B5F0-DAB0-27DD-BC8A-75A1D63FB924} = {EBCB740D-07E7-4CED-A422-90EB824B9021}
{846FE47C-4E7F-D4CE-46DE-460FBBDAD6EB} = {EBCB740D-07E7-4CED-A422-90EB824B9021}
{2B1AB90F-3EE1-DA95-26E9-41657FA2BE1C} = {68C52E9A-2894-4F56-B121-EBDEB8AEE5FE}
{3BEDE290-7D99-7F2C-C76D-108C016CE6D1} = {68C52E9A-2894-4F56-B121-EBDEB8AEE5FE}
{D87DBC28-58B7-9D6A-D2E5-BE4C748CF920} = {68C52E9A-2894-4F56-B121-EBDEB8AEE5FE}
{B2C32755-D986-3F1C-913A-3A6F1E56EF97} = {68C52E9A-2894-4F56-B121-EBDEB8AEE5FE}
{C5FC9F08-9A41-8581-A672-B6F8753C9991} = {68C52E9A-2894-4F56-B121-EBDEB8AEE5FE}
{B2020B57-1CAE-8C23-A413-92F54BF40313} = {9EDB9917-F429-447B-915D-7D51D38DB33E}
{80D04466-EACE-9998-DACB-A68BE9B93847} = {9EDB9917-F429-447B-915D-7D51D38DB33E}
{9F684B76-D619-765D-4F43-EDEE32F5DEF7} = {9EDB9917-F429-447B-915D-7D51D38DB33E}
{BAF030F5-3E23-4A8E-7ED6-504EB5BBD4FE} = {9EDB9917-F429-447B-915D-7D51D38DB33E}
{B9B6B43D-6D13-C11B-1AE5-ADCBFEE68E67} = {9EDB9917-F429-447B-915D-7D51D38DB33E}
{BEEB83BF-B5B0-EB53-EF78-415D4565187F} = {9EDB9917-F429-447B-915D-7D51D38DB33E}
{9E9AAE6F-1C3C-B542-64E7-E11CE55E187A} = {9EDB9917-F429-447B-915D-7D51D38DB33E}
{FA473ED4-54D4-C0DD-E589-31835F3AC9AA} = {73DCA9DB-1A3D-449F-8957-924B2CF8B7B1}
{99D81094-6B32-1C9D-5F84-E7FCEF67DFB5} = {73DCA9DB-1A3D-449F-8957-924B2CF8B7B1}
{D3091C1B-443C-23F1-B007-A1262E92A3BB} = {73DCA9DB-1A3D-449F-8957-924B2CF8B7B1}
{AA2EB1B6-B6BF-A9DF-7C1C-F30B2DCA1E2A} = {73DCA9DB-1A3D-449F-8957-924B2CF8B7B1}
{92CC92BF-8025-40F4-5121-DC2570ADAA04} = {73DCA9DB-1A3D-449F-8957-924B2CF8B7B1}
{E9EE0B66-228F-B8EC-417C-445CAF351F76} = {B93EB51F-E75E-4735-8BC8-382015B4DBD5}
{EC6F5CC9-D45A-2CBC-5C84-63F6766E9359} = {B93EB51F-E75E-4735-8BC8-382015B4DBD5}
{E2C7EA39-82A9-DFC8-F1B5-87298AAA02AE} = {B93EB51F-E75E-4735-8BC8-382015B4DBD5}
{2FA0AC97-1BF7-5B4B-4B3A-81AA3B3882F3} = {B93EB51F-E75E-4735-8BC8-382015B4DBD5}
{817CE319-21A4-6FB1-3002-E786F8D0DAC5} = {B93EB51F-E75E-4735-8BC8-382015B4DBD5}
{D9F0918C-5DB6-B97D-FF09-18345B23DF44} = {B93EB51F-E75E-4735-8BC8-382015B4DBD5}
{087E7661-DB2D-07F9-586E-A49EE0399A07} = {B93EB51F-E75E-4735-8BC8-382015B4DBD5}
{C49DCA14-AA0E-CE33-9028-AFE76A31B00F} = {026D8210-9B71-4296-9DD8-D4E178802E4D}
{E84CB613-ADF5-3F80-3CC2-0CB7424865B0} = {026D8210-9B71-4296-9DD8-D4E178802E4D}
{959EA8DB-5C6D-58C9-A71B-FBA5D93F3B39} = {026D8210-9B71-4296-9DD8-D4E178802E4D}
{9DD56F78-BA2E-E3F0-373F-C5F6509D1E9D} = {026D8210-9B71-4296-9DD8-D4E178802E4D}
{7E5945D8-0B0B-4426-BB05-8F7EE37036E1} = {026D8210-9B71-4296-9DD8-D4E178802E4D}
{C14C9349-5A9B-079B-1DAA-F68D09745F4B} = {7FEC24C5-6DA6-4844-B409-0361AB1C192C}
{DE7BD236-A0C3-DB34-DF42-B4258E3DD72F} = {7FEC24C5-6DA6-4844-B409-0361AB1C192C}
{0BCC52A7-8D67-64D7-FCD7-436D6B13B053} = {7FEC24C5-6DA6-4844-B409-0361AB1C192C}
{60D113CF-9C20-11BC-AB4B-A4CAB288EDD7} = {7FEC24C5-6DA6-4844-B409-0361AB1C192C}
{403AF0D9-5199-E02A-4CBA-F877E0559DE4} = {7FEC24C5-6DA6-4844-B409-0361AB1C192C}
{73B2CDFD-63F6-0023-B10C-E844D978279A} = {7FEC24C5-6DA6-4844-B409-0361AB1C192C}
{93E93A6B-2808-BCC8-979D-B6E0C6A08558} = {7FEC24C5-6DA6-4844-B409-0361AB1C192C}
{D801B2E8-DACB-2B61-D54A-06F16D1A976B} = {6C762F40-30BB-4CDA-951B-01D45F7C2B53}
{4930C29C-A870-AB21-34E8-496898DCF474} = {6C762F40-30BB-4CDA-951B-01D45F7C2B53}
{4E4B7F2C-EADC-EAEB-C087-309A6FD2E99D} = {6C762F40-30BB-4CDA-951B-01D45F7C2B53}
{B92604FE-8BEB-D7C8-E849-EE87E6BDB65E} = {6C762F40-30BB-4CDA-951B-01D45F7C2B53}
{768F149B-659D-3769-3570-86C753EE8896} = {6C762F40-30BB-4CDA-951B-01D45F7C2B53}
{22F62964-1C2C-339D-7572-E91E34B3530F} = {E67FA5C3-132C-4F47-B6A6-8FA4376C70BB}
{2E097B16-F382-0F60-8806-79960016032A} = {E67FA5C3-132C-4F47-B6A6-8FA4376C70BB}
{DBBB7A40-EC3E-2018-F2B7-C0041D1DD215} = {E67FA5C3-132C-4F47-B6A6-8FA4376C70BB}
{2D47B675-1235-052F-4409-DC335A633FCD} = {E67FA5C3-132C-4F47-B6A6-8FA4376C70BB}
{BA608D2C-406D-B666-5383-D806C46EDD05} = {E67FA5C3-132C-4F47-B6A6-8FA4376C70BB}
{70F10069-D717-0C25-33A4-9AC90FF5E8A3} = {E67FA5C3-132C-4F47-B6A6-8FA4376C70BB}
{6958C0D9-6C81-EF5F-D68C-B9E8AD8E7130} = {E67FA5C3-132C-4F47-B6A6-8FA4376C70BB}
{B1D8B704-8077-00FC-B44B-B5B1071DD934} = {1C06151A-45F0-4D48-8303-3D4CBE9517F7}
{B89FEABF-4CDA-9A62-E9E1-896DC9AD7AA3} = {1C06151A-45F0-4D48-8303-3D4CBE9517F7}
{A8F64512-A7F7-6670-D7C7-4AA41C4B2E0F} = {1C06151A-45F0-4D48-8303-3D4CBE9517F7}
{AAF0C46B-F69F-56D6-319F-B0AF8B3A7C1D} = {1C06151A-45F0-4D48-8303-3D4CBE9517F7}
{1E3AA937-6394-0C20-C59B-127D2B01DE4F} = {1C06151A-45F0-4D48-8303-3D4CBE9517F7}
{410A79A5-24B5-473E-BE7B-5C787B7431A2} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{95718E42-884D-4396-AF1E-EDFFDD8C86D4} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{97BC949A-9142-B129-10FE-0D9381A49C05} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{D422C785-D6D0-8F6B-A6C3-2B0E5497B923} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{9A034977-0FBC-A3C8-8432-9FDD073F215A} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{1C89424B-DA16-8840-4AB0-C446CFBD634C} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
{3641CA05-99C5-2245-C663-6CE00730E87C} = {4CBFE8AF-968B-453D-B763-3D0437C0883D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}

View File

@ -1,6 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
@ -47,7 +45,6 @@
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="8.3.4" />
</ItemGroup>
<ItemGroup>
@ -58,7 +55,6 @@
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Application" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.HttpApi" Version="8.3.4" />
<ProjectReference Include="..\KonSoft.EntityFrameworkCore\KonSoft.EntityFrameworkCore.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,33 @@
using Microsoft.AspNetCore.Mvc;
namespace KonSoft.BackgroundJobs.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
@KonSoft.BackgroundJobs_HostAddress = http://localhost:5243
GET {{KonSoft.BackgroundJobs_HostAddress}}/weatherforecast/
Accept: application/json
###

View File

@ -0,0 +1,25 @@
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

View File

@ -0,0 +1,41 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:4773",
"sslPort": 44380
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5243",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7094;http://localhost:5243",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -0,0 +1,13 @@
namespace KonSoft.BackgroundJobs
{
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
}

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -0,0 +1,33 @@
using Microsoft.AspNetCore.Mvc;
namespace KonSoft.BackgroundWorker.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
@KonSoft.BackgroundWorker_HostAddress = http://localhost:5074
GET {{KonSoft.BackgroundWorker_HostAddress}}/weatherforecast/
Accept: application/json
###

View File

@ -0,0 +1,25 @@
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

View File

@ -0,0 +1,41 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:22937",
"sslPort": 44300
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5074",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7183;http://localhost:5074",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -0,0 +1,13 @@
namespace KonSoft.BackgroundWorker
{
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
}

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -1,19 +0,0 @@
using Microsoft.Extensions.Localization;
using KonSoft.Admin.Localization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Ui.Branding;
namespace KonSoft.Admin;
[Dependency(ReplaceServices = true)]
public class AdminBrandingProvider : DefaultBrandingProvider
{
private IStringLocalizer<AdminResource> _localizer;
public AdminBrandingProvider(IStringLocalizer<AdminResource> localizer)
{
_localizer = localizer;
}
public override string AppName => _localizer["AppName"];
}

View File

@ -2,32 +2,34 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Medallion.Threading;
using Medallion.Threading.Redis;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Extensions.DependencyInjection;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using KonSoft.Admin.EntityFrameworkCore;
using KonSoft.Admin.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
using StackExchange.Redis;
using Microsoft.OpenApi.Models;
using OpenIddict.Validation.AspNetCore;
using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Account.Web;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Authentication.JwtBearer;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Autofac;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.DistributedLocking;
using Volo.Abp.Identity;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Swashbuckle;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem;
namespace KonSoft.Admin;
@ -35,76 +37,35 @@ namespace KonSoft.Admin;
[DependsOn(
typeof(AdminHttpApiModule),
typeof(AbpAutofacModule),
typeof(AbpAspNetCoreMultiTenancyModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpDistributedLockingModule),
typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(AdminApplicationModule),
typeof(AdminEntityFrameworkCoreModule),
typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
typeof(AbpAccountWebOpenIddictModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpSwashbuckleModule)
)]
public class AdminHttpApiHostModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
{
options.AddAudiences("Admin");
options.UseLocalServer();
options.UseAspNetCore();
});
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var hostingEnvironment = context.Services.GetHostingEnvironment();
ConfigureAuthentication(context);
ConfigureBundles();
ConfigureUrls(configuration);
ConfigureConventionalControllers();
ConfigureAuthentication(context, configuration);
ConfigureCache(configuration);
ConfigureVirtualFileSystem(context);
ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureDistributedLocking(context, configuration);
ConfigureCors(context, configuration);
ConfigureSwaggerServices(context, configuration);
}
private void ConfigureAuthentication(ServiceConfigurationContext context)
private void ConfigureCache(IConfiguration configuration)
{
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private void ConfigureBundles()
{
Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(
LeptonXLiteThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
});
}
private void ConfigureUrls(IConfiguration configuration)
{
Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"]?.Split(',') ?? Array.Empty<string>());
options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"];
options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password";
});
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "Admin:"; });
}
private void ConfigureVirtualFileSystem(ServiceConfigurationContext context)
@ -139,6 +100,22 @@ public class AdminHttpApiHostModule : AbpModule
});
}
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddAbpJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata");
options.Audience = "Admin";
});
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAbpSwaggerGenWithOAuth(
@ -155,6 +132,30 @@ public class AdminHttpApiHostModule : AbpModule
});
}
private void ConfigureDataProtection(
ServiceConfigurationContext context,
IConfiguration configuration,
IWebHostEnvironment hostingEnvironment)
{
var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("Admin");
if (!hostingEnvironment.IsDevelopment())
{
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "Admin-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());
});
}
private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddCors(options =>
@ -186,35 +187,29 @@ public class AdminHttpApiHostModule : AbpModule
}
app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{
app.UseErrorPage();
}
app.UseCorrelationId();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAbpOpenIddictValidation();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseUnitOfWork();
app.UseDynamicClaims();
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(c =>
app.UseAbpSwaggerUI(options =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Admin API");
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Admin API");
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
c.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
c.OAuthScopes("Admin");
var configuration = context.GetConfiguration();
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
options.OAuthScopes("Admin");
});
app.UseAuditing();

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
@ -13,21 +11,16 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.4" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.4" />
<PackageReference Include="DistributedLock.Redis" Version="1.0.2" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Autofac" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="8.3.4" />
<PackageReference Include="Volo.Abp.DistributedLocking" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Swashbuckle" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="8.3.4" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Admin.Application\KonSoft.Admin.Application.csproj" />
<ProjectReference Include="..\KonSoft.Admin.EntityFrameworkCore\KonSoft.Admin.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\KonSoft.Admin.HttpApi\KonSoft.Admin.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -3,8 +3,8 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44350",
"sslPort": 44350
"applicationUrl": "https://localhost:44354",
"sslPort": 44354
}
},
"profiles": {
@ -18,7 +18,7 @@
"KonSoft.Admin.HttpApi.Host": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:44350",
"applicationUrl": "https://localhost:44354",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}

View File

@ -1,11 +0,0 @@
module.exports = {
aliases: {
},
clean: [
],
mappings: {
}
};

View File

@ -1,18 +1,19 @@
{
"App": {
"SelfUrl": "https://localhost:44350",
"CorsOrigins": "https://*.Admin.com",
"RedirectAllowedUrls": ""
"CorsOrigins": "https://*.Admin.com,https://localhost:44357"
},
"ConnectionStrings": {
"Default": "Host=localhost;Port=5432;Database=Admin;User ID=root;Password=myPassword;"
},
"Redis": {
"Configuration": "127.0.0.1"
},
"AuthServer": {
"Authority": "https://localhost:44350",
"RequireHttpsMetadata": false,
"Authority": "https://localhost:44397",
"RequireHttpsMetadata": true,
"SwaggerClientId": "Admin_Swagger"
},
"StringEncryption": {
"DefaultPassPhrase": "YXM86JJ7EFsh21K9"
"DefaultPassPhrase": "g3NdNOyDR9oYj0gK"
}
}

View File

@ -1,8 +0,0 @@
{
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.4"
}
}

View File

@ -1,6 +0,0 @@
/* Your Global Styles */
:root .lpx-brand-logo {
--lpx-logo: url('/images/logo/leptonx/logo-light.png');
--lpx-logo-icon: url('/images/logo/leptonx/logo-light-thumbnail.png');
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,322 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.leptonxlite@~3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.leptonxlite/-/aspnetcore.mvc.ui.theme.leptonxlite-3.3.4.tgz#fb6879075aec2f06e0302e941dcefbe519b18e1d"
integrity sha512-5rrwwZ9n2/yePo+GnHuUsP0TelCwRwCQjYyQFdF/Nd4B3UNQVO/AXQc0Ep3+vHhUxSL386j6ObZYu14VdjPg2g==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.4.tgz#169ae0893302ced9256f94174d9bb870e49f446c"
integrity sha512-bZy8iAIN0QfNJXCRg+RR1NxqTzNDSXRPBx+ksFtDxY6FzMJvwwSOmHF0wqsMLj1xpwXjijWaVWQ2RM/7scDWmw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~8.3.4"
"@abp/bootstrap" "~8.3.4"
"@abp/bootstrap-datepicker" "~8.3.4"
"@abp/bootstrap-daterangepicker" "~8.3.4"
"@abp/datatables.net-bs5" "~8.3.4"
"@abp/font-awesome" "~8.3.4"
"@abp/jquery-form" "~8.3.4"
"@abp/jquery-validation-unobtrusive" "~8.3.4"
"@abp/lodash" "~8.3.4"
"@abp/luxon" "~8.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~8.3.4"
"@abp/moment" "~8.3.4"
"@abp/select2" "~8.3.4"
"@abp/sweetalert2" "~8.3.4"
"@abp/timeago" "~8.3.4"
"@abp/toastr" "~8.3.4"
"@abp/aspnetcore.mvc.ui@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.4.tgz#041d83f34541081d9e0f37c36c302cbe871a4897"
integrity sha512-sjGE/EoNM98mXNYPze2C7GPP+TNpv4TLIt416ojaqtxru60oddr4VWrOGuhaqUCO2jJes3OwFZi5PY3hVOBbYw==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.4.tgz#072f4a3cea93e3a1bb1de13b355201648929f84c"
integrity sha512-txilFovf9zT1w+fTkyI3eZdiISjaxc/+wRRFKwrkVH+0xEgaiR41svKm6sjWBORxgTddlGas87SZJvYY3IKBjA==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.4.tgz#b0f65611ca4fafdf2b551f9f139868eae6e22e9a"
integrity sha512-bYkYjk1zTdWcM4DGwnDoU+4pDvs1S8hkNWhrnpP0o8oRoJiesO8Aeda+82rtydtWnxHg+HkDC0iYFFqaNuHvbg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.4.tgz#744bb4d30d4c269ce8e6a7d16c6777dd3cd9fe1e"
integrity sha512-GXCLFFmPNaR3DjQYSaqACL5sH/M9FPia2OKAAMOd796+NmcoFpT+S7l4C6ihqeQc4bjFm0voB8QklueGWx6r8A==
dependencies:
"@abp/core" "~8.3.4"
bootstrap "^5.3.3"
"@abp/core@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.4.tgz#12635bc2ac325a426334150502a32fefa4ec3767"
integrity sha512-wImAdZABahaQe6mmZAZlPfYZ3PEhL7eEq+18c1WFO0xeD98oxqi8H1X7+3ABjyFscIh9LIxJVaD3RJ9OHCc5bw==
dependencies:
"@abp/utils" "~8.3.4"
"@abp/datatables.net-bs5@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.4.tgz#efc28fa57144c7b495a4aeea38df962807ca20df"
integrity sha512-u85aXjqYIJJfOsMq6oNqfxNgxQqV6vOEnJ32vrH294ceW8RzUxHA+G/ZkGRLLRGWVuxuARD/UXzEotH5sd1Ssw==
dependencies:
"@abp/datatables.net" "~8.3.4"
datatables.net-bs5 "^2.0.8"
"@abp/datatables.net@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.4.tgz#23a3155a2d84247a29a6b80ff98d1d5f6422a245"
integrity sha512-cwE9TFoRoszmI3zNVaYJtqjSPtwkL9dhCfE02zsmJo8GBdFAlbzAmQenfQiWb3BZhvUvKKN20e+og9S8qoCbXA==
dependencies:
"@abp/jquery" "~8.3.4"
datatables.net "^2.0.8"
"@abp/font-awesome@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.4.tgz#f79f7b439f9ffadfc03be3a415a977eab21fa5a1"
integrity sha512-5+D5XKnrZROtg9PJ2zex52gbphXGK/7ZIUsszEg8rOIc/niXggaZLmuDcYJwOEzIkwpGO9OvYy7lc0tHv/Pr4g==
dependencies:
"@abp/core" "~8.3.4"
"@fortawesome/fontawesome-free" "^6.5.2"
"@abp/jquery-form@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.4.tgz#c1705bd5213ab5c2b895dd5bd9f3e54f3d94cf54"
integrity sha512-vFjWbTbHQyIsk5SS7Cc+5YrJ15ORjJU+YWVPchI0qoug26for06a7lDGpazWMadxx3iPL7cKLqneOqaVtHkgJA==
dependencies:
"@abp/jquery" "~8.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.4.tgz#e89eafed89787bcb5221c0ba89832b79a7396d19"
integrity sha512-+kJA5vfvxkrj/iW4Q84BrMTrAGOhC2Hb5czAKr6c60Prmayk5hcakZdXc3wDBHREBLVAq1Muk4AtEJZmaKIeaA==
dependencies:
"@abp/jquery-validation" "~8.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.4.tgz#a445592d80edc6b6b1334ece2007b3084c329cc6"
integrity sha512-XvL0H3IRuSHwpPKUyJmW6PH8KwPDt9NllMqPGreRANF8l5IU10hOLEeP2BnGFfGMqFwqUMh+eJRar5yZcegkmg==
dependencies:
"@abp/jquery" "~8.3.4"
jquery-validation "^1.20.1"
"@abp/jquery@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.4.tgz#2dc3f5f124ac65b5f45d29749ebb5d6cf17db23b"
integrity sha512-Zx2rErtgc0gxjX5PURjp6sjDQfzxBChUE9YWN37Xh+Ysm3tTGcXlF0Emwl94MZ640NfmYRpG4AWdik6kbaU5Wg==
dependencies:
"@abp/core" "~8.3.4"
jquery "~3.7.1"
"@abp/lodash@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.4.tgz#b0ef4e82a788ae7389a31793c3bad6702efdbe33"
integrity sha512-yGd/oLds0jpTgTpmkFYOEomS4K15DGcffMP3N1t0qKLgTaBYTQzeugHVgQ0baufC+OvLjumDNuu3eHjBJewwKg==
dependencies:
"@abp/core" "~8.3.4"
lodash "^4.17.21"
"@abp/luxon@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.4.tgz#f152b2d7b62bd27f3d27aa3a1794b868bf06a1a4"
integrity sha512-l1nvfqdhHBgHBPK+bLClAEprRK3K5zx5Jar93o5++6r3zXUhYi5OUHUxl+LuGn8MXLvHJVGL41irHl6sYjFSww==
dependencies:
"@abp/core" "~8.3.4"
luxon "^3.4.4"
"@abp/malihu-custom-scrollbar-plugin@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.4.tgz#0868214884e3e0b94dade0e8e78c01741d71106a"
integrity sha512-uKRk8+HCvXtpmvof5W09908AkivlweErTE62b0JhkrJVIlYt/0LC1MmB/qHHBfPj6OK05HYGBi3inr7fNAPXEQ==
dependencies:
"@abp/core" "~8.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.4.tgz#a5809520dc50b50402ade4ac630c6ec985fd4518"
integrity sha512-61J8drO3OqkaaAn66xBg6jCws1iV6zutjYQvpEXLdGBA9Kvw2J87GSomxJ4mcIo/5+jzrVro6JYaCfKWY8b1dw==
dependencies:
moment "^2.30.1"
"@abp/select2@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.4.tgz#1731b465760e0515d0d4280f38189c9366fecda5"
integrity sha512-sPtYstFVvMTT8fdXRIfHeODIgSN2ufWm6zCMGH7C0cST3FF59M4m/MtdKGBlA/itzHPxeDv7A6dy4Aw4l7Gk4Q==
dependencies:
"@abp/core" "~8.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.4.tgz#c0768ca4fe0a9926b8f33d8bf5251d3e4202cd2f"
integrity sha512-6HqxISh+FodwUsCrR3nX49RQDhzHtDlz8ul42TecUMsGa96qX2lvwnoWkXAHLG3mdLRy62Z0dhJ1JKMfrPeJeg==
dependencies:
"@abp/core" "~8.3.4"
sweetalert2 "^11.3.6"
"@abp/timeago@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.4.tgz#26ca0bec90d861f9f4af714061b370950551c839"
integrity sha512-cDARYysPn5Rr/9rqVn7S4sBWbeEpaIXr8NKwGZqNOzMF2g283SkLKrkQJBWIC6Pn2lVeIB7AV1+GtVn81V/nnw==
dependencies:
"@abp/jquery" "~8.3.4"
timeago "^1.6.7"
"@abp/toastr@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.4.tgz#cb433bc4ed2e302f2704ad0456c99d6f12fd0529"
integrity sha512-29C9GgwlumrHgt1iZ4lArDnlXfSvmCHDehxkbDutrkC1m257UxQaOID11us2UeCs3JobueQcLlQKD/LqnDB4xA==
dependencies:
"@abp/jquery" "~8.3.4"
toastr "^2.1.4"
"@abp/utils@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.4.tgz#4b06575a110e85e2a360294f678b782818e1ab10"
integrity sha512-7Lq3wdk/07vKgQnR56DTmdSuYRABMe0XTGPJRS5F91DVbggeJyDUaqifVvOeurF/3CZJOS7fJpoIHQXeUveFtQ==
dependencies:
just-compare "^2.3.0"
"@fortawesome/fontawesome-free@^6.5.2":
version "6.7.2"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz#8249de9b7e22fcb3ceb5e66090c30a1d5492b81a"
integrity sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==
ansi-colors@^4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
bootstrap-datepicker@^1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/bootstrap-datepicker/-/bootstrap-datepicker-1.10.0.tgz#61612bbe8bf0a69a5bce32bbcdda93ebb6ccf24a"
integrity sha512-lWxtSYddAQOpbAO8UhYhHLcK6425eWoSjb5JDvZU3ePHEPF6A3eUr51WKaFy4PccU19JRxUG6wEU3KdhtKfvpg==
dependencies:
jquery ">=3.4.0 <4.0.0"
bootstrap-daterangepicker@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bootstrap-daterangepicker/-/bootstrap-daterangepicker-3.1.0.tgz#632e6fb2de4b6360c5c0a9d5f6adb9aace051fe8"
integrity sha512-oaQZx6ZBDo/dZNyXGVi2rx5GmFXThyQLAxdtIqjtLlYVaQUfQALl5JZMJJZzyDIX7blfy4ppZPAJ10g8Ma4d/g==
dependencies:
jquery ">=1.10"
moment "^2.9.0"
bootstrap@^5.3.3:
version "5.3.8"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.8.tgz#6401a10057a22752d21f4e19055508980656aeed"
integrity sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==
datatables.net-bs5@^2.0.8:
version "2.3.3"
resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.3.3.tgz#8bf3aec484a69e373f6007038eaac0cc0ef4ee15"
integrity sha512-IPtC57k3KyZaLzIYTHies23Cm2zqaKfD6lkxy/aOAUUAtsg35l53VqNY9y84AEySYG3YLghMHVBvl2ckUhvm0A==
dependencies:
datatables.net "2.3.3"
jquery ">=1.7"
datatables.net@2.3.3, datatables.net@^2.0.8:
version "2.3.3"
resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-2.3.3.tgz#fe4f96bdbc4cf47c8d11162a7af525ca6a3683d2"
integrity sha512-SWL3za6nheY6gdoiLgCc++tYmxbwrmv2bjrEiII9rXBWXXSbOZct6pjR3FueMVRM5jmt7pQcXiGovfuFDnutQg==
dependencies:
jquery ">=1.7"
jquery-form@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/jquery-form/-/jquery-form-4.3.0.tgz#7d3961c314a1f2d15298f4af1d3943f54f4149c6"
integrity sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==
dependencies:
jquery ">=1.7.2"
jquery-mousewheel@>=3.0.6:
version "3.2.2"
resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.2.2.tgz#48c833f6260ee0c46d438a999e7d0060ec9eed0b"
integrity sha512-JP71xTAg08ZY3hcs9ZbYUZ5i+dkSsz4yRl/zpWkAmtzc+kMs5EfPkpkINSidiLYMaR0MTo3DfFGF9WIezMsFQQ==
dependencies:
jquery ">=1.2.6"
jquery-validation-unobtrusive@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#dfcf25a558496a2c883db6021d10f5398d15f99d"
integrity sha512-1ervYFFv6LX/rp7ktuLnMakHNG0piNRDyROI8Ir3hL1vPIwylAehB1AY3BPrYJnzW3WmwWryZq+Bz4sazZK9iQ==
dependencies:
jquery "^3.6.0"
jquery-validation ">=1.19"
jquery-validation@>=1.19, jquery-validation@^1.20.1:
version "1.21.0"
resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.21.0.tgz#78fc05ab76020912a246af3661b3f54a438bca93"
integrity sha512-xNot0rlUIgu7duMcQ5qb6MGkGL/Z1PQaRJQoZAURW9+a/2PGOUxY36o/WyNeP2T9R6jvWB8Z9lUVvvQWI/Zs5w==
jquery@>=1.10, jquery@>=1.12.0, jquery@>=1.2.6, "jquery@>=1.5.0 <4.0", jquery@>=1.7, jquery@>=1.7.2, "jquery@>=3.4.0 <4.0.0", jquery@^3.6.0, jquery@~3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
just-compare@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-2.3.0.tgz#a2adcc1d1940536263275f5a1ef1298bcacfeda7"
integrity sha512-6shoR7HDT+fzfL3gBahx1jZG3hWLrhPAf+l7nCwahDdT9XDtosB9kIF0ZrzUp5QY8dJWfQVr5rnsPqsbvflDzg==
lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
luxon@^3.4.4:
version "3.7.2"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba"
integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==
malihu-custom-scrollbar-plugin@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.5.tgz#310cecc5e59415a1c29e9dfb5d2b6e01d66a29ef"
integrity sha512-lwW3LgI+CNDMPnP4ED2la6oYxWMkCXlnhex+s2wuOLhFDFGnGmQuTQVdRK9bvDLpxs10sGlfErVufJy9ztfgJQ==
dependencies:
jquery-mousewheel ">=3.0.6"
moment@^2.30.1, moment@^2.9.0:
version "2.30.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
select2@^4.0.13:
version "4.0.13"
resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.13.tgz#0dbe377df3f96167c4c1626033e924372d8ef44d"
integrity sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==
sweetalert2@^11.3.6:
version "11.23.0"
resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.23.0.tgz#ba8a051b1e94215c762af08692171b7b4611c4c1"
integrity sha512-cKzzbC3C1sIs7o9XAMw4E8F9kBtGXsBDUsd2JZ8JM/dqa+nzWwSGM+9LLYILZWzWHzX9W+HJNHyBlbHPVS/krw==
timeago@^1.6.7:
version "1.6.7"
resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.6.7.tgz#afd467c29a911e697fc22a81888c7c3022783cb5"
integrity sha512-FikcjN98+ij0siKH4VO4dZ358PR3oDDq4Vdl1+sN9gWz1/+JXGr3uZbUShYH/hL7bMhcTpPbplJU5Tej4b4jbQ==
dependencies:
jquery ">=1.5.0 <4.0"
toastr@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/toastr/-/toastr-2.1.4.tgz#8b43be64fb9d0c414871446f2db8e8ca4e95f181"
integrity sha512-LIy77F5n+sz4tefMmFOntcJ6HL0Fv3k1TDnNmFZ0bU/GcvIIfy6eG2v7zQmMiYgaalAiUv75ttFrPn5s0gyqlA==
dependencies:
jquery ">=1.12.0"

View File

@ -1,19 +0,0 @@
using Microsoft.Extensions.Localization;
using KonSoft.Dispatch.Localization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Ui.Branding;
namespace KonSoft.Dispatch;
[Dependency(ReplaceServices = true)]
public class DispatchBrandingProvider : DefaultBrandingProvider
{
private IStringLocalizer<DispatchResource> _localizer;
public DispatchBrandingProvider(IStringLocalizer<DispatchResource> localizer)
{
_localizer = localizer;
}
public override string AppName => _localizer["AppName"];
}

View File

@ -2,32 +2,34 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Medallion.Threading;
using Medallion.Threading.Redis;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Extensions.DependencyInjection;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using KonSoft.Dispatch.EntityFrameworkCore;
using KonSoft.Dispatch.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
using StackExchange.Redis;
using Microsoft.OpenApi.Models;
using OpenIddict.Validation.AspNetCore;
using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Account.Web;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Authentication.JwtBearer;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Autofac;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.DistributedLocking;
using Volo.Abp.Identity;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Swashbuckle;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem;
namespace KonSoft.Dispatch;
@ -35,76 +37,35 @@ namespace KonSoft.Dispatch;
[DependsOn(
typeof(DispatchHttpApiModule),
typeof(AbpAutofacModule),
typeof(AbpAspNetCoreMultiTenancyModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpDistributedLockingModule),
typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(DispatchApplicationModule),
typeof(DispatchEntityFrameworkCoreModule),
typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
typeof(AbpAccountWebOpenIddictModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpSwashbuckleModule)
)]
public class DispatchHttpApiHostModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
{
options.AddAudiences("Dispatch");
options.UseLocalServer();
options.UseAspNetCore();
});
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var hostingEnvironment = context.Services.GetHostingEnvironment();
ConfigureAuthentication(context);
ConfigureBundles();
ConfigureUrls(configuration);
ConfigureConventionalControllers();
ConfigureAuthentication(context, configuration);
ConfigureCache(configuration);
ConfigureVirtualFileSystem(context);
ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureDistributedLocking(context, configuration);
ConfigureCors(context, configuration);
ConfigureSwaggerServices(context, configuration);
}
private void ConfigureAuthentication(ServiceConfigurationContext context)
private void ConfigureCache(IConfiguration configuration)
{
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private void ConfigureBundles()
{
Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(
LeptonXLiteThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
});
}
private void ConfigureUrls(IConfiguration configuration)
{
Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"]?.Split(',') ?? Array.Empty<string>());
options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"];
options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password";
});
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "Dispatch:"; });
}
private void ConfigureVirtualFileSystem(ServiceConfigurationContext context)
@ -139,6 +100,22 @@ public class DispatchHttpApiHostModule : AbpModule
});
}
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddAbpJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata");
options.Audience = "Dispatch";
});
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAbpSwaggerGenWithOAuth(
@ -155,6 +132,30 @@ public class DispatchHttpApiHostModule : AbpModule
});
}
private void ConfigureDataProtection(
ServiceConfigurationContext context,
IConfiguration configuration,
IWebHostEnvironment hostingEnvironment)
{
var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("Dispatch");
if (!hostingEnvironment.IsDevelopment())
{
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "Dispatch-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());
});
}
private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddCors(options =>
@ -186,35 +187,29 @@ public class DispatchHttpApiHostModule : AbpModule
}
app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{
app.UseErrorPage();
}
app.UseCorrelationId();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAbpOpenIddictValidation();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseUnitOfWork();
app.UseDynamicClaims();
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(c =>
app.UseAbpSwaggerUI(options =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Dispatch API");
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Dispatch API");
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
c.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
c.OAuthScopes("Dispatch");
var configuration = context.GetConfiguration();
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
options.OAuthScopes("Dispatch");
});
app.UseAuditing();

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
@ -13,21 +11,16 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.4" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.4" />
<PackageReference Include="DistributedLock.Redis" Version="1.0.2" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Autofac" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="8.3.4" />
<PackageReference Include="Volo.Abp.DistributedLocking" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Swashbuckle" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="8.3.4" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Dispatch.Application\KonSoft.Dispatch.Application.csproj" />
<ProjectReference Include="..\KonSoft.Dispatch.EntityFrameworkCore\KonSoft.Dispatch.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\KonSoft.Dispatch.HttpApi\KonSoft.Dispatch.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -3,8 +3,8 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44321",
"sslPort": 44321
"applicationUrl": "https://localhost:44331",
"sslPort": 44331
}
},
"profiles": {
@ -18,7 +18,7 @@
"KonSoft.Dispatch.HttpApi.Host": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:44321",
"applicationUrl": "https://localhost:44331",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}

View File

@ -1,11 +0,0 @@
module.exports = {
aliases: {
},
clean: [
],
mappings: {
}
};

View File

@ -1,18 +1,19 @@
{
"App": {
"SelfUrl": "https://localhost:44321",
"CorsOrigins": "https://*.Dispatch.com",
"RedirectAllowedUrls": ""
"CorsOrigins": "https://*.Dispatch.com,https://localhost:44327"
},
"ConnectionStrings": {
"Default": "Host=localhost;Port=5432;Database=Dispatch;User ID=root;Password=myPassword;"
},
"Redis": {
"Configuration": "127.0.0.1"
},
"AuthServer": {
"Authority": "https://localhost:44321",
"RequireHttpsMetadata": false,
"Authority": "https://localhost:44361",
"RequireHttpsMetadata": true,
"SwaggerClientId": "Dispatch_Swagger"
},
"StringEncryption": {
"DefaultPassPhrase": "AcY4JMdp6hCRgMYj"
"DefaultPassPhrase": "vYUQJbcqDROWyx2n"
}
}

View File

@ -1,8 +0,0 @@
{
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.4"
}
}

View File

@ -1,6 +0,0 @@
/* Your Global Styles */
:root .lpx-brand-logo {
--lpx-logo: url('/images/logo/leptonx/logo-light.png');
--lpx-logo-icon: url('/images/logo/leptonx/logo-light-thumbnail.png');
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,322 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.leptonxlite@~3.3.4":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.leptonxlite/-/aspnetcore.mvc.ui.theme.leptonxlite-3.3.4.tgz#fb6879075aec2f06e0302e941dcefbe519b18e1d"
integrity sha512-5rrwwZ9n2/yePo+GnHuUsP0TelCwRwCQjYyQFdF/Nd4B3UNQVO/AXQc0Ep3+vHhUxSL386j6ObZYu14VdjPg2g==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.4.tgz#169ae0893302ced9256f94174d9bb870e49f446c"
integrity sha512-bZy8iAIN0QfNJXCRg+RR1NxqTzNDSXRPBx+ksFtDxY6FzMJvwwSOmHF0wqsMLj1xpwXjijWaVWQ2RM/7scDWmw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~8.3.4"
"@abp/bootstrap" "~8.3.4"
"@abp/bootstrap-datepicker" "~8.3.4"
"@abp/bootstrap-daterangepicker" "~8.3.4"
"@abp/datatables.net-bs5" "~8.3.4"
"@abp/font-awesome" "~8.3.4"
"@abp/jquery-form" "~8.3.4"
"@abp/jquery-validation-unobtrusive" "~8.3.4"
"@abp/lodash" "~8.3.4"
"@abp/luxon" "~8.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~8.3.4"
"@abp/moment" "~8.3.4"
"@abp/select2" "~8.3.4"
"@abp/sweetalert2" "~8.3.4"
"@abp/timeago" "~8.3.4"
"@abp/toastr" "~8.3.4"
"@abp/aspnetcore.mvc.ui@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.4.tgz#041d83f34541081d9e0f37c36c302cbe871a4897"
integrity sha512-sjGE/EoNM98mXNYPze2C7GPP+TNpv4TLIt416ojaqtxru60oddr4VWrOGuhaqUCO2jJes3OwFZi5PY3hVOBbYw==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.4.tgz#072f4a3cea93e3a1bb1de13b355201648929f84c"
integrity sha512-txilFovf9zT1w+fTkyI3eZdiISjaxc/+wRRFKwrkVH+0xEgaiR41svKm6sjWBORxgTddlGas87SZJvYY3IKBjA==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.4.tgz#b0f65611ca4fafdf2b551f9f139868eae6e22e9a"
integrity sha512-bYkYjk1zTdWcM4DGwnDoU+4pDvs1S8hkNWhrnpP0o8oRoJiesO8Aeda+82rtydtWnxHg+HkDC0iYFFqaNuHvbg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.4.tgz#744bb4d30d4c269ce8e6a7d16c6777dd3cd9fe1e"
integrity sha512-GXCLFFmPNaR3DjQYSaqACL5sH/M9FPia2OKAAMOd796+NmcoFpT+S7l4C6ihqeQc4bjFm0voB8QklueGWx6r8A==
dependencies:
"@abp/core" "~8.3.4"
bootstrap "^5.3.3"
"@abp/core@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.4.tgz#12635bc2ac325a426334150502a32fefa4ec3767"
integrity sha512-wImAdZABahaQe6mmZAZlPfYZ3PEhL7eEq+18c1WFO0xeD98oxqi8H1X7+3ABjyFscIh9LIxJVaD3RJ9OHCc5bw==
dependencies:
"@abp/utils" "~8.3.4"
"@abp/datatables.net-bs5@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.4.tgz#efc28fa57144c7b495a4aeea38df962807ca20df"
integrity sha512-u85aXjqYIJJfOsMq6oNqfxNgxQqV6vOEnJ32vrH294ceW8RzUxHA+G/ZkGRLLRGWVuxuARD/UXzEotH5sd1Ssw==
dependencies:
"@abp/datatables.net" "~8.3.4"
datatables.net-bs5 "^2.0.8"
"@abp/datatables.net@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.4.tgz#23a3155a2d84247a29a6b80ff98d1d5f6422a245"
integrity sha512-cwE9TFoRoszmI3zNVaYJtqjSPtwkL9dhCfE02zsmJo8GBdFAlbzAmQenfQiWb3BZhvUvKKN20e+og9S8qoCbXA==
dependencies:
"@abp/jquery" "~8.3.4"
datatables.net "^2.0.8"
"@abp/font-awesome@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.4.tgz#f79f7b439f9ffadfc03be3a415a977eab21fa5a1"
integrity sha512-5+D5XKnrZROtg9PJ2zex52gbphXGK/7ZIUsszEg8rOIc/niXggaZLmuDcYJwOEzIkwpGO9OvYy7lc0tHv/Pr4g==
dependencies:
"@abp/core" "~8.3.4"
"@fortawesome/fontawesome-free" "^6.5.2"
"@abp/jquery-form@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.4.tgz#c1705bd5213ab5c2b895dd5bd9f3e54f3d94cf54"
integrity sha512-vFjWbTbHQyIsk5SS7Cc+5YrJ15ORjJU+YWVPchI0qoug26for06a7lDGpazWMadxx3iPL7cKLqneOqaVtHkgJA==
dependencies:
"@abp/jquery" "~8.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.4.tgz#e89eafed89787bcb5221c0ba89832b79a7396d19"
integrity sha512-+kJA5vfvxkrj/iW4Q84BrMTrAGOhC2Hb5czAKr6c60Prmayk5hcakZdXc3wDBHREBLVAq1Muk4AtEJZmaKIeaA==
dependencies:
"@abp/jquery-validation" "~8.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.4.tgz#a445592d80edc6b6b1334ece2007b3084c329cc6"
integrity sha512-XvL0H3IRuSHwpPKUyJmW6PH8KwPDt9NllMqPGreRANF8l5IU10hOLEeP2BnGFfGMqFwqUMh+eJRar5yZcegkmg==
dependencies:
"@abp/jquery" "~8.3.4"
jquery-validation "^1.20.1"
"@abp/jquery@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.4.tgz#2dc3f5f124ac65b5f45d29749ebb5d6cf17db23b"
integrity sha512-Zx2rErtgc0gxjX5PURjp6sjDQfzxBChUE9YWN37Xh+Ysm3tTGcXlF0Emwl94MZ640NfmYRpG4AWdik6kbaU5Wg==
dependencies:
"@abp/core" "~8.3.4"
jquery "~3.7.1"
"@abp/lodash@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.4.tgz#b0ef4e82a788ae7389a31793c3bad6702efdbe33"
integrity sha512-yGd/oLds0jpTgTpmkFYOEomS4K15DGcffMP3N1t0qKLgTaBYTQzeugHVgQ0baufC+OvLjumDNuu3eHjBJewwKg==
dependencies:
"@abp/core" "~8.3.4"
lodash "^4.17.21"
"@abp/luxon@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.4.tgz#f152b2d7b62bd27f3d27aa3a1794b868bf06a1a4"
integrity sha512-l1nvfqdhHBgHBPK+bLClAEprRK3K5zx5Jar93o5++6r3zXUhYi5OUHUxl+LuGn8MXLvHJVGL41irHl6sYjFSww==
dependencies:
"@abp/core" "~8.3.4"
luxon "^3.4.4"
"@abp/malihu-custom-scrollbar-plugin@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.4.tgz#0868214884e3e0b94dade0e8e78c01741d71106a"
integrity sha512-uKRk8+HCvXtpmvof5W09908AkivlweErTE62b0JhkrJVIlYt/0LC1MmB/qHHBfPj6OK05HYGBi3inr7fNAPXEQ==
dependencies:
"@abp/core" "~8.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.4.tgz#a5809520dc50b50402ade4ac630c6ec985fd4518"
integrity sha512-61J8drO3OqkaaAn66xBg6jCws1iV6zutjYQvpEXLdGBA9Kvw2J87GSomxJ4mcIo/5+jzrVro6JYaCfKWY8b1dw==
dependencies:
moment "^2.30.1"
"@abp/select2@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.4.tgz#1731b465760e0515d0d4280f38189c9366fecda5"
integrity sha512-sPtYstFVvMTT8fdXRIfHeODIgSN2ufWm6zCMGH7C0cST3FF59M4m/MtdKGBlA/itzHPxeDv7A6dy4Aw4l7Gk4Q==
dependencies:
"@abp/core" "~8.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.4.tgz#c0768ca4fe0a9926b8f33d8bf5251d3e4202cd2f"
integrity sha512-6HqxISh+FodwUsCrR3nX49RQDhzHtDlz8ul42TecUMsGa96qX2lvwnoWkXAHLG3mdLRy62Z0dhJ1JKMfrPeJeg==
dependencies:
"@abp/core" "~8.3.4"
sweetalert2 "^11.3.6"
"@abp/timeago@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.4.tgz#26ca0bec90d861f9f4af714061b370950551c839"
integrity sha512-cDARYysPn5Rr/9rqVn7S4sBWbeEpaIXr8NKwGZqNOzMF2g283SkLKrkQJBWIC6Pn2lVeIB7AV1+GtVn81V/nnw==
dependencies:
"@abp/jquery" "~8.3.4"
timeago "^1.6.7"
"@abp/toastr@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.4.tgz#cb433bc4ed2e302f2704ad0456c99d6f12fd0529"
integrity sha512-29C9GgwlumrHgt1iZ4lArDnlXfSvmCHDehxkbDutrkC1m257UxQaOID11us2UeCs3JobueQcLlQKD/LqnDB4xA==
dependencies:
"@abp/jquery" "~8.3.4"
toastr "^2.1.4"
"@abp/utils@~8.3.4":
version "8.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.4.tgz#4b06575a110e85e2a360294f678b782818e1ab10"
integrity sha512-7Lq3wdk/07vKgQnR56DTmdSuYRABMe0XTGPJRS5F91DVbggeJyDUaqifVvOeurF/3CZJOS7fJpoIHQXeUveFtQ==
dependencies:
just-compare "^2.3.0"
"@fortawesome/fontawesome-free@^6.5.2":
version "6.7.2"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz#8249de9b7e22fcb3ceb5e66090c30a1d5492b81a"
integrity sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==
ansi-colors@^4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
bootstrap-datepicker@^1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/bootstrap-datepicker/-/bootstrap-datepicker-1.10.0.tgz#61612bbe8bf0a69a5bce32bbcdda93ebb6ccf24a"
integrity sha512-lWxtSYddAQOpbAO8UhYhHLcK6425eWoSjb5JDvZU3ePHEPF6A3eUr51WKaFy4PccU19JRxUG6wEU3KdhtKfvpg==
dependencies:
jquery ">=3.4.0 <4.0.0"
bootstrap-daterangepicker@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bootstrap-daterangepicker/-/bootstrap-daterangepicker-3.1.0.tgz#632e6fb2de4b6360c5c0a9d5f6adb9aace051fe8"
integrity sha512-oaQZx6ZBDo/dZNyXGVi2rx5GmFXThyQLAxdtIqjtLlYVaQUfQALl5JZMJJZzyDIX7blfy4ppZPAJ10g8Ma4d/g==
dependencies:
jquery ">=1.10"
moment "^2.9.0"
bootstrap@^5.3.3:
version "5.3.8"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.8.tgz#6401a10057a22752d21f4e19055508980656aeed"
integrity sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==
datatables.net-bs5@^2.0.8:
version "2.3.3"
resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.3.3.tgz#8bf3aec484a69e373f6007038eaac0cc0ef4ee15"
integrity sha512-IPtC57k3KyZaLzIYTHies23Cm2zqaKfD6lkxy/aOAUUAtsg35l53VqNY9y84AEySYG3YLghMHVBvl2ckUhvm0A==
dependencies:
datatables.net "2.3.3"
jquery ">=1.7"
datatables.net@2.3.3, datatables.net@^2.0.8:
version "2.3.3"
resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-2.3.3.tgz#fe4f96bdbc4cf47c8d11162a7af525ca6a3683d2"
integrity sha512-SWL3za6nheY6gdoiLgCc++tYmxbwrmv2bjrEiII9rXBWXXSbOZct6pjR3FueMVRM5jmt7pQcXiGovfuFDnutQg==
dependencies:
jquery ">=1.7"
jquery-form@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/jquery-form/-/jquery-form-4.3.0.tgz#7d3961c314a1f2d15298f4af1d3943f54f4149c6"
integrity sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==
dependencies:
jquery ">=1.7.2"
jquery-mousewheel@>=3.0.6:
version "3.2.2"
resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.2.2.tgz#48c833f6260ee0c46d438a999e7d0060ec9eed0b"
integrity sha512-JP71xTAg08ZY3hcs9ZbYUZ5i+dkSsz4yRl/zpWkAmtzc+kMs5EfPkpkINSidiLYMaR0MTo3DfFGF9WIezMsFQQ==
dependencies:
jquery ">=1.2.6"
jquery-validation-unobtrusive@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#dfcf25a558496a2c883db6021d10f5398d15f99d"
integrity sha512-1ervYFFv6LX/rp7ktuLnMakHNG0piNRDyROI8Ir3hL1vPIwylAehB1AY3BPrYJnzW3WmwWryZq+Bz4sazZK9iQ==
dependencies:
jquery "^3.6.0"
jquery-validation ">=1.19"
jquery-validation@>=1.19, jquery-validation@^1.20.1:
version "1.21.0"
resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.21.0.tgz#78fc05ab76020912a246af3661b3f54a438bca93"
integrity sha512-xNot0rlUIgu7duMcQ5qb6MGkGL/Z1PQaRJQoZAURW9+a/2PGOUxY36o/WyNeP2T9R6jvWB8Z9lUVvvQWI/Zs5w==
jquery@>=1.10, jquery@>=1.12.0, jquery@>=1.2.6, "jquery@>=1.5.0 <4.0", jquery@>=1.7, jquery@>=1.7.2, "jquery@>=3.4.0 <4.0.0", jquery@^3.6.0, jquery@~3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
just-compare@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-2.3.0.tgz#a2adcc1d1940536263275f5a1ef1298bcacfeda7"
integrity sha512-6shoR7HDT+fzfL3gBahx1jZG3hWLrhPAf+l7nCwahDdT9XDtosB9kIF0ZrzUp5QY8dJWfQVr5rnsPqsbvflDzg==
lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
luxon@^3.4.4:
version "3.7.2"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba"
integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==
malihu-custom-scrollbar-plugin@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.5.tgz#310cecc5e59415a1c29e9dfb5d2b6e01d66a29ef"
integrity sha512-lwW3LgI+CNDMPnP4ED2la6oYxWMkCXlnhex+s2wuOLhFDFGnGmQuTQVdRK9bvDLpxs10sGlfErVufJy9ztfgJQ==
dependencies:
jquery-mousewheel ">=3.0.6"
moment@^2.30.1, moment@^2.9.0:
version "2.30.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
select2@^4.0.13:
version "4.0.13"
resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.13.tgz#0dbe377df3f96167c4c1626033e924372d8ef44d"
integrity sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==
sweetalert2@^11.3.6:
version "11.23.0"
resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.23.0.tgz#ba8a051b1e94215c762af08692171b7b4611c4c1"
integrity sha512-cKzzbC3C1sIs7o9XAMw4E8F9kBtGXsBDUsd2JZ8JM/dqa+nzWwSGM+9LLYILZWzWHzX9W+HJNHyBlbHPVS/krw==
timeago@^1.6.7:
version "1.6.7"
resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.6.7.tgz#afd467c29a911e697fc22a81888c7c3022783cb5"
integrity sha512-FikcjN98+ij0siKH4VO4dZ358PR3oDDq4Vdl1+sN9gWz1/+JXGr3uZbUShYH/hL7bMhcTpPbplJU5Tej4b4jbQ==
dependencies:
jquery ">=1.5.0 <4.0"
toastr@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/toastr/-/toastr-2.1.4.tgz#8b43be64fb9d0c414871446f2db8e8ca4e95f181"
integrity sha512-LIy77F5n+sz4tefMmFOntcJ6HL0Fv3k1TDnNmFZ0bU/GcvIIfy6eG2v7zQmMiYgaalAiUv75ttFrPn5s0gyqlA==
dependencies:
jquery ">=1.12.0"

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
@ -13,21 +11,16 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.4" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.4" />
<PackageReference Include="DistributedLock.Redis" Version="1.0.2" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Autofac" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="8.3.4" />
<PackageReference Include="Volo.Abp.DistributedLocking" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Swashbuckle" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="8.3.4" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Payment.Application\KonSoft.Payment.Application.csproj" />
<ProjectReference Include="..\KonSoft.Payment.EntityFrameworkCore\KonSoft.Payment.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\KonSoft.Payment.HttpApi\KonSoft.Payment.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -1,19 +0,0 @@
using Microsoft.Extensions.Localization;
using KonSoft.Payment.Localization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Ui.Branding;
namespace KonSoft.Payment;
[Dependency(ReplaceServices = true)]
public class PaymentBrandingProvider : DefaultBrandingProvider
{
private IStringLocalizer<PaymentResource> _localizer;
public PaymentBrandingProvider(IStringLocalizer<PaymentResource> localizer)
{
_localizer = localizer;
}
public override string AppName => _localizer["AppName"];
}

View File

@ -2,32 +2,34 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Medallion.Threading;
using Medallion.Threading.Redis;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Extensions.DependencyInjection;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using KonSoft.Payment.EntityFrameworkCore;
using KonSoft.Payment.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
using StackExchange.Redis;
using Microsoft.OpenApi.Models;
using OpenIddict.Validation.AspNetCore;
using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Account.Web;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Authentication.JwtBearer;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Autofac;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.DistributedLocking;
using Volo.Abp.Identity;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Swashbuckle;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem;
namespace KonSoft.Payment;
@ -35,76 +37,35 @@ namespace KonSoft.Payment;
[DependsOn(
typeof(PaymentHttpApiModule),
typeof(AbpAutofacModule),
typeof(AbpAspNetCoreMultiTenancyModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpDistributedLockingModule),
typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(PaymentApplicationModule),
typeof(PaymentEntityFrameworkCoreModule),
typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
typeof(AbpAccountWebOpenIddictModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpSwashbuckleModule)
)]
public class PaymentHttpApiHostModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
{
options.AddAudiences("Payment");
options.UseLocalServer();
options.UseAspNetCore();
});
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var hostingEnvironment = context.Services.GetHostingEnvironment();
ConfigureAuthentication(context);
ConfigureBundles();
ConfigureUrls(configuration);
ConfigureConventionalControllers();
ConfigureAuthentication(context, configuration);
ConfigureCache(configuration);
ConfigureVirtualFileSystem(context);
ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureDistributedLocking(context, configuration);
ConfigureCors(context, configuration);
ConfigureSwaggerServices(context, configuration);
}
private void ConfigureAuthentication(ServiceConfigurationContext context)
private void ConfigureCache(IConfiguration configuration)
{
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private void ConfigureBundles()
{
Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(
LeptonXLiteThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
});
}
private void ConfigureUrls(IConfiguration configuration)
{
Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"]?.Split(',') ?? Array.Empty<string>());
options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"];
options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password";
});
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "Payment:"; });
}
private void ConfigureVirtualFileSystem(ServiceConfigurationContext context)
@ -139,6 +100,22 @@ public class PaymentHttpApiHostModule : AbpModule
});
}
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddAbpJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata");
options.Audience = "Payment";
});
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAbpSwaggerGenWithOAuth(
@ -155,6 +132,30 @@ public class PaymentHttpApiHostModule : AbpModule
});
}
private void ConfigureDataProtection(
ServiceConfigurationContext context,
IConfiguration configuration,
IWebHostEnvironment hostingEnvironment)
{
var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("Payment");
if (!hostingEnvironment.IsDevelopment())
{
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "Payment-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());
});
}
private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddCors(options =>
@ -186,35 +187,29 @@ public class PaymentHttpApiHostModule : AbpModule
}
app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{
app.UseErrorPage();
}
app.UseCorrelationId();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAbpOpenIddictValidation();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseUnitOfWork();
app.UseDynamicClaims();
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(c =>
app.UseAbpSwaggerUI(options =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Payment API");
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Payment API");
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
c.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
c.OAuthScopes("Payment");
var configuration = context.GetConfiguration();
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
options.OAuthScopes("Payment");
});
app.UseAuditing();

View File

@ -3,8 +3,8 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44355",
"sslPort": 44355
"applicationUrl": "https://localhost:44326",
"sslPort": 44326
}
},
"profiles": {
@ -18,7 +18,7 @@
"KonSoft.Payment.HttpApi.Host": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:44355",
"applicationUrl": "https://localhost:44326",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}

View File

@ -1,11 +0,0 @@
module.exports = {
aliases: {
},
clean: [
],
mappings: {
}
};

View File

@ -1,18 +1,19 @@
{
"App": {
"SelfUrl": "https://localhost:44355",
"CorsOrigins": "https://*.Payment.com",
"RedirectAllowedUrls": ""
"CorsOrigins": "https://*.Payment.com,https://localhost:44361"
},
"ConnectionStrings": {
"Default": "Host=localhost;Port=5432;Database=Payment;User ID=root;Password=myPassword;"
},
"Redis": {
"Configuration": "127.0.0.1"
},
"AuthServer": {
"Authority": "https://localhost:44355",
"RequireHttpsMetadata": false,
"Authority": "https://localhost:44317",
"RequireHttpsMetadata": true,
"SwaggerClientId": "Payment_Swagger"
},
"StringEncryption": {
"DefaultPassPhrase": "ex1X6Pe2UOTsR6Tv"
"DefaultPassPhrase": "X8BiQDb1AVYqDATC"
}
}

View File

@ -1,8 +0,0 @@
{
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.4"
}
}

View File

@ -1,6 +0,0 @@
/* Your Global Styles */
:root .lpx-brand-logo {
--lpx-logo: url('/images/logo/leptonx/logo-light.png');
--lpx-logo-icon: url('/images/logo/leptonx/logo-light-thumbnail.png');
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
@ -13,21 +11,16 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.4" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.4" />
<PackageReference Include="DistributedLock.Redis" Version="1.0.2" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Autofac" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="8.3.4" />
<PackageReference Include="Volo.Abp.DistributedLocking" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Swashbuckle" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="8.3.4" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Report.Application\KonSoft.Report.Application.csproj" />
<ProjectReference Include="..\KonSoft.Report.EntityFrameworkCore\KonSoft.Report.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\KonSoft.Report.HttpApi\KonSoft.Report.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -3,8 +3,8 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44340",
"sslPort": 44340
"applicationUrl": "https://localhost:44320",
"sslPort": 44320
}
},
"profiles": {
@ -18,7 +18,7 @@
"KonSoft.Report.HttpApi.Host": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:44340",
"applicationUrl": "https://localhost:44320",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}

View File

@ -1,19 +0,0 @@
using Microsoft.Extensions.Localization;
using KonSoft.Report.Localization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Ui.Branding;
namespace KonSoft.Report;
[Dependency(ReplaceServices = true)]
public class ReportBrandingProvider : DefaultBrandingProvider
{
private IStringLocalizer<ReportResource> _localizer;
public ReportBrandingProvider(IStringLocalizer<ReportResource> localizer)
{
_localizer = localizer;
}
public override string AppName => _localizer["AppName"];
}

View File

@ -2,32 +2,34 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Medallion.Threading;
using Medallion.Threading.Redis;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Extensions.DependencyInjection;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using KonSoft.Report.EntityFrameworkCore;
using KonSoft.Report.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
using StackExchange.Redis;
using Microsoft.OpenApi.Models;
using OpenIddict.Validation.AspNetCore;
using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Account.Web;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Authentication.JwtBearer;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Autofac;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.DistributedLocking;
using Volo.Abp.Identity;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Swashbuckle;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem;
namespace KonSoft.Report;
@ -35,76 +37,35 @@ namespace KonSoft.Report;
[DependsOn(
typeof(ReportHttpApiModule),
typeof(AbpAutofacModule),
typeof(AbpAspNetCoreMultiTenancyModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpDistributedLockingModule),
typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(ReportApplicationModule),
typeof(ReportEntityFrameworkCoreModule),
typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
typeof(AbpAccountWebOpenIddictModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpSwashbuckleModule)
)]
public class ReportHttpApiHostModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
{
options.AddAudiences("Report");
options.UseLocalServer();
options.UseAspNetCore();
});
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var hostingEnvironment = context.Services.GetHostingEnvironment();
ConfigureAuthentication(context);
ConfigureBundles();
ConfigureUrls(configuration);
ConfigureConventionalControllers();
ConfigureAuthentication(context, configuration);
ConfigureCache(configuration);
ConfigureVirtualFileSystem(context);
ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureDistributedLocking(context, configuration);
ConfigureCors(context, configuration);
ConfigureSwaggerServices(context, configuration);
}
private void ConfigureAuthentication(ServiceConfigurationContext context)
private void ConfigureCache(IConfiguration configuration)
{
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private void ConfigureBundles()
{
Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(
LeptonXLiteThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
});
}
private void ConfigureUrls(IConfiguration configuration)
{
Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"]?.Split(',') ?? Array.Empty<string>());
options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"];
options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password";
});
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "Report:"; });
}
private void ConfigureVirtualFileSystem(ServiceConfigurationContext context)
@ -139,6 +100,22 @@ public class ReportHttpApiHostModule : AbpModule
});
}
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddAbpJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata");
options.Audience = "Report";
});
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAbpSwaggerGenWithOAuth(
@ -155,6 +132,30 @@ public class ReportHttpApiHostModule : AbpModule
});
}
private void ConfigureDataProtection(
ServiceConfigurationContext context,
IConfiguration configuration,
IWebHostEnvironment hostingEnvironment)
{
var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("Report");
if (!hostingEnvironment.IsDevelopment())
{
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "Report-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());
});
}
private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddCors(options =>
@ -186,35 +187,29 @@ public class ReportHttpApiHostModule : AbpModule
}
app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{
app.UseErrorPage();
}
app.UseCorrelationId();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAbpOpenIddictValidation();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseUnitOfWork();
app.UseDynamicClaims();
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(c =>
app.UseAbpSwaggerUI(options =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Report API");
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Report API");
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
c.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
c.OAuthScopes("Report");
var configuration = context.GetConfiguration();
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
options.OAuthScopes("Report");
});
app.UseAuditing();

View File

@ -1,11 +0,0 @@
module.exports = {
aliases: {
},
clean: [
],
mappings: {
}
};

View File

@ -1,18 +1,19 @@
{
"App": {
"SelfUrl": "https://localhost:44340",
"CorsOrigins": "https://*.Report.com",
"RedirectAllowedUrls": ""
"CorsOrigins": "https://*.Report.com,https://localhost:44387"
},
"ConnectionStrings": {
"Default": "Host=localhost;Port=5432;Database=Report;User ID=root;Password=myPassword;"
},
"Redis": {
"Configuration": "127.0.0.1"
},
"AuthServer": {
"Authority": "https://localhost:44340",
"RequireHttpsMetadata": false,
"Authority": "https://localhost:44379",
"RequireHttpsMetadata": true,
"SwaggerClientId": "Report_Swagger"
},
"StringEncryption": {
"DefaultPassPhrase": "aRnRGh9BVWKdfQXb"
"DefaultPassPhrase": "CnofoVnefiZOTqgF"
}
}

View File

@ -1,8 +0,0 @@
{
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.4"
}
}

View File

@ -1,6 +0,0 @@
/* Your Global Styles */
:root .lpx-brand-logo {
--lpx-logo: url('/images/logo/leptonx/logo-light.png');
--lpx-logo-icon: url('/images/logo/leptonx/logo-light-thumbnail.png');
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
@ -13,21 +11,16 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.4" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.4" />
<PackageReference Include="DistributedLock.Redis" Version="1.0.2" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Autofac" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="8.3.4" />
<PackageReference Include="Volo.Abp.DistributedLocking" Version="8.3.4" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Swashbuckle" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="8.3.4" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.TenantManagement.Application\KonSoft.TenantManagement.Application.csproj" />
<ProjectReference Include="..\KonSoft.TenantManagement.EntityFrameworkCore\KonSoft.TenantManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\KonSoft.TenantManagement.HttpApi\KonSoft.TenantManagement.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -3,8 +3,8 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44316",
"sslPort": 44316
"applicationUrl": "https://localhost:44348",
"sslPort": 44348
}
},
"profiles": {
@ -18,7 +18,7 @@
"KonSoft.TenantManagement.HttpApi.Host": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:44316",
"applicationUrl": "https://localhost:44348",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}

View File

@ -1,19 +0,0 @@
using Microsoft.Extensions.Localization;
using KonSoft.TenantManagement.Localization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Ui.Branding;
namespace KonSoft.TenantManagement;
[Dependency(ReplaceServices = true)]
public class TenantManagementBrandingProvider : DefaultBrandingProvider
{
private IStringLocalizer<TenantManagementResource> _localizer;
public TenantManagementBrandingProvider(IStringLocalizer<TenantManagementResource> localizer)
{
_localizer = localizer;
}
public override string AppName => _localizer["AppName"];
}

View File

@ -2,32 +2,34 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Medallion.Threading;
using Medallion.Threading.Redis;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Extensions.DependencyInjection;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using KonSoft.TenantManagement.EntityFrameworkCore;
using KonSoft.TenantManagement.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
using StackExchange.Redis;
using Microsoft.OpenApi.Models;
using OpenIddict.Validation.AspNetCore;
using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Account.Web;
using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Authentication.JwtBearer;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Autofac;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.DistributedLocking;
using Volo.Abp.Identity;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Swashbuckle;
using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem;
namespace KonSoft.TenantManagement;
@ -35,76 +37,35 @@ namespace KonSoft.TenantManagement;
[DependsOn(
typeof(TenantManagementHttpApiModule),
typeof(AbpAutofacModule),
typeof(AbpAspNetCoreMultiTenancyModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpDistributedLockingModule),
typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(TenantManagementApplicationModule),
typeof(TenantManagementEntityFrameworkCoreModule),
typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
typeof(AbpAccountWebOpenIddictModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpSwashbuckleModule)
)]
public class TenantManagementHttpApiHostModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
{
options.AddAudiences("TenantManagement");
options.UseLocalServer();
options.UseAspNetCore();
});
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var hostingEnvironment = context.Services.GetHostingEnvironment();
ConfigureAuthentication(context);
ConfigureBundles();
ConfigureUrls(configuration);
ConfigureConventionalControllers();
ConfigureAuthentication(context, configuration);
ConfigureCache(configuration);
ConfigureVirtualFileSystem(context);
ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureDistributedLocking(context, configuration);
ConfigureCors(context, configuration);
ConfigureSwaggerServices(context, configuration);
}
private void ConfigureAuthentication(ServiceConfigurationContext context)
private void ConfigureCache(IConfiguration configuration)
{
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private void ConfigureBundles()
{
Configure<AbpBundlingOptions>(options =>
{
options.StyleBundles.Configure(
LeptonXLiteThemeBundles.Styles.Global,
bundle =>
{
bundle.AddFiles("/global-styles.css");
}
);
});
}
private void ConfigureUrls(IConfiguration configuration)
{
Configure<AppUrlOptions>(options =>
{
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"]?.Split(',') ?? Array.Empty<string>());
options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"];
options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password";
});
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "TenantManagement:"; });
}
private void ConfigureVirtualFileSystem(ServiceConfigurationContext context)
@ -139,6 +100,22 @@ public class TenantManagementHttpApiHostModule : AbpModule
});
}
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddAbpJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata");
options.Audience = "TenantManagement";
});
context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
{
options.IsDynamicClaimsEnabled = true;
});
}
private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAbpSwaggerGenWithOAuth(
@ -155,6 +132,30 @@ public class TenantManagementHttpApiHostModule : AbpModule
});
}
private void ConfigureDataProtection(
ServiceConfigurationContext context,
IConfiguration configuration,
IWebHostEnvironment hostingEnvironment)
{
var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("TenantManagement");
if (!hostingEnvironment.IsDevelopment())
{
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "TenantManagement-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());
});
}
private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddCors(options =>
@ -186,35 +187,29 @@ public class TenantManagementHttpApiHostModule : AbpModule
}
app.UseAbpRequestLocalization();
if (!env.IsDevelopment())
{
app.UseErrorPage();
}
app.UseCorrelationId();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAbpOpenIddictValidation();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
app.UseUnitOfWork();
app.UseDynamicClaims();
app.UseAuthorization();
app.UseSwagger();
app.UseAbpSwaggerUI(c =>
app.UseAbpSwaggerUI(options =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "TenantManagement API");
options.SwaggerEndpoint("/swagger/v1/swagger.json", "TenantManagement API");
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
c.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
c.OAuthScopes("TenantManagement");
var configuration = context.GetConfiguration();
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
options.OAuthScopes("TenantManagement");
});
app.UseAuditing();

View File

@ -1,11 +0,0 @@
module.exports = {
aliases: {
},
clean: [
],
mappings: {
}
};

View File

@ -1,18 +1,19 @@
{
"App": {
"SelfUrl": "https://localhost:44316",
"CorsOrigins": "https://*.TenantManagement.com",
"RedirectAllowedUrls": ""
"CorsOrigins": "https://*.TenantManagement.com,https://localhost:44332"
},
"ConnectionStrings": {
"Default": "Host=localhost;Port=5432;Database=TenantManagement;User ID=root;Password=myPassword;"
},
"Redis": {
"Configuration": "127.0.0.1"
},
"AuthServer": {
"Authority": "https://localhost:44316",
"RequireHttpsMetadata": false,
"RequireHttpsMetadata": true,
"SwaggerClientId": "TenantManagement_Swagger"
},
"StringEncryption": {
"DefaultPassPhrase": "FUFDAYrpYDaw4Tsl"
"DefaultPassPhrase": "NR0sazB47i10Gw6H"
}
}

View File

@ -1,8 +0,0 @@
{
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.4"
}
}

View File

@ -1,6 +0,0 @@
/* Your Global Styles */
:root .lpx-brand-logo {
--lpx-logo: url('/images/logo/leptonx/logo-light.png');
--lpx-logo-icon: url('/images/logo/leptonx/logo-light-thumbnail.png');
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,6 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
@ -8,10 +6,6 @@
<RootNamespace>KonSoft.Admin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Admin.Domain.Shared\KonSoft.Admin.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.ObjectExtending" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Application.Contracts" Version="8.3.4" />

View File

@ -1,6 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
@ -8,11 +6,6 @@
<RootNamespace>KonSoft.Admin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Admin.Domain\KonSoft.Admin.Domain.csproj" />
<ProjectReference Include="..\KonSoft.Admin.Application.Contracts\KonSoft.Admin.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Account.Application" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Identity.Application" Version="8.3.4" />

View File

@ -1,6 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>

View File

@ -1,6 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
@ -8,10 +6,6 @@
<RootNamespace>KonSoft.Admin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Admin.Domain.Shared\KonSoft.Admin.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Emailing" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Identity.Domain" Version="8.3.4" />

View File

@ -1,6 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
@ -9,7 +7,6 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Admin.Domain\KonSoft.Admin.Domain.csproj" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.PostgreSql" Version="8.3.4" />
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="8.3.4" />
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="8.3.4" />

View File

@ -1,17 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>KonSoft.Admin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Admin.Application.Contracts\KonSoft.Admin.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Account.HttpApi.Client" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Identity.HttpApi.Client" Version="8.3.4" />

View File

@ -1,17 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>KonSoft.Admin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Admin.Application.Contracts\KonSoft.Admin.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Account.HttpApi" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Identity.HttpApi" Version="8.3.4" />

View File

@ -1,18 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>KonSoft.Admin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\KonSoft.Admin.Application\KonSoft.Admin.Application.csproj" />
<ProjectReference Include="..\KonSoft.Admin.Domain.Tests\KonSoft.Admin.Domain.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
</ItemGroup>

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
@ -12,9 +10,4 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\KonSoft.Admin.Domain\KonSoft.Admin.Domain.csproj" />
<ProjectReference Include="..\KonSoft.Admin.TestBase\KonSoft.Admin.TestBase.csproj" />
</ItemGroup>
</Project>

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
@ -9,8 +7,6 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\KonSoft.Admin.EntityFrameworkCore\KonSoft.Admin.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\KonSoft.Admin.Application.Tests\KonSoft.Admin.Application.Tests.csproj" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.Sqlite" Version="8.3.4" />
</ItemGroup>

View File

@ -22,7 +22,6 @@
<ItemGroup>
<PackageReference Include="Volo.Abp.Http.Client.IdentityModel" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Autofac" Version="8.3.4" />
<ProjectReference Include="..\..\src\KonSoft.Admin.HttpApi.Client\KonSoft.Admin.HttpApi.Client.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>

View File

@ -1,17 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>KonSoft.Dispatch</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Dispatch.Domain.Shared\KonSoft.Dispatch.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.ObjectExtending" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Account.Application.Contracts" Version="8.3.4" />

View File

@ -1,18 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>KonSoft.Dispatch</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\KonSoft.Dispatch.Domain\KonSoft.Dispatch.Domain.csproj" />
<ProjectReference Include="..\KonSoft.Dispatch.Application.Contracts\KonSoft.Dispatch.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Account.Application" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Identity.Application" Version="8.3.4" />

View File

@ -1,51 +0,0 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using KonSoft.Dispatch.Data;
using Serilog;
using Volo.Abp;
using Volo.Abp.Data;
namespace KonSoft.Dispatch.DbMigrator;
public class DbMigratorHostedService : IHostedService
{
private readonly IHostApplicationLifetime _hostApplicationLifetime;
private readonly IConfiguration _configuration;
public DbMigratorHostedService(IHostApplicationLifetime hostApplicationLifetime, IConfiguration configuration)
{
_hostApplicationLifetime = hostApplicationLifetime;
_configuration = configuration;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
using (var application = await AbpApplicationFactory.CreateAsync<DispatchDbMigratorModule>(options =>
{
options.Services.ReplaceConfiguration(_configuration);
options.UseAutofac();
options.Services.AddLogging(c => c.AddSerilog());
options.AddDataMigrationEnvironment();
}))
{
await application.InitializeAsync();
await application
.ServiceProvider
.GetRequiredService<DispatchDbMigrationService>()
.MigrateAsync();
await application.ShutdownAsync();
_hostApplicationLifetime.StopApplication();
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}

View File

@ -1,21 +0,0 @@
using KonSoft.Dispatch.EntityFrameworkCore;
using Volo.Abp.Autofac;
using Volo.Abp.Caching;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Abp.Modularity;
namespace KonSoft.Dispatch.DbMigrator;
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpCachingStackExchangeRedisModule),
typeof(DispatchEntityFrameworkCoreModule),
typeof(DispatchApplicationContractsModule)
)]
public class DispatchDbMigratorModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "Dispatch:"; });
}
}

View File

@ -1,46 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Remove="appsettings.json" />
<Content Include="appsettings.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Remove="appsettings.secrets.json" />
<Content Include="appsettings.secrets.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Autofac" Version="8.3.4" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="8.3.4" />
<ProjectReference Include="..\KonSoft.Dispatch.Application.Contracts\KonSoft.Dispatch.Application.Contracts.csproj" />
<ProjectReference Include="..\KonSoft.Dispatch.EntityFrameworkCore\KonSoft.Dispatch.EntityFrameworkCore.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Logs\**" />
<Content Remove="Logs\**" />
<EmbeddedResource Remove="Logs\**" />
<None Remove="Logs\**" />
</ItemGroup>
</Project>

View File

@ -1,41 +0,0 @@
using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Events;
namespace KonSoft.Dispatch.DbMigrator;
class Program
{
static async Task Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning)
#if DEBUG
.MinimumLevel.Override("KonSoft.Dispatch", LogEventLevel.Debug)
#else
.MinimumLevel.Override("KonSoft.Dispatch", LogEventLevel.Information)
#endif
.Enrich.FromLogContext()
.WriteTo.Async(c => c.File("Logs/logs.txt"))
.WriteTo.Async(c => c.Console())
.CreateLogger();
await CreateHostBuilder(args).RunConsoleAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.AddAppSettingsSecretsJson()
.ConfigureLogging((context, logging) => logging.ClearProviders())
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<DbMigratorHostedService>();
});
}

Some files were not shown because too many files have changed in this diff Show More