Browse Source

Added IdentityService

pull/1/head
Galip Tolga Erdem 5 years ago
parent
commit
aa92057117
  1. 7
      EShopOnAbp.sln
  2. 109
      services/identity/EShopOnAbp.IdentityService.sln
  3. 17
      services/identity/src/EShopOnAbp.IdentityService.Application.Contracts/EShopOnAbp.IdentityService.Application.Contracts.csproj
  4. 15
      services/identity/src/EShopOnAbp.IdentityService.Application.Contracts/IdentityServiceApplicationContractsModule.cs
  5. 7
      services/identity/src/EShopOnAbp.IdentityService.Application.Contracts/IdentityServiceRemoteServiceConsts.cs
  6. 18
      services/identity/src/EShopOnAbp.IdentityService.Application/EShopOnAbp.IdentityService.Application.csproj
  7. 26
      services/identity/src/EShopOnAbp.IdentityService.Application/IdentityServiceApplicationModule.cs
  8. 22
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/EShopOnAbp.IdentityService.Domain.Shared.csproj
  9. 7
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/IdentityServiceDomainErrorCodes.cs
  10. 41
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/IdentityServiceDomainSharedModule.cs
  11. 72
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/IdentityServiceModuleExtensionConfigurator.cs
  12. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/ar.json
  13. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/cs.json
  14. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/de-DE.json
  15. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/en-GB.json
  16. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/en.json
  17. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/es.json
  18. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/fr.json
  19. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/hu.json
  20. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/nl.json
  21. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/pl-PL.json
  22. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/pt-BR.json
  23. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/ru.json
  24. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/sl.json
  25. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/tr.json
  26. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/vi.json
  27. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/zh-Hans.json
  28. 8
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/zh-Hant.json
  29. 10
      services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityServiceResource.cs
  30. 17
      services/identity/src/EShopOnAbp.IdentityService.Domain/EShopOnAbp.IdentityService.Domain.csproj
  31. 15
      services/identity/src/EShopOnAbp.IdentityService.Domain/IdentityServiceDbProperties.cs
  32. 15
      services/identity/src/EShopOnAbp.IdentityService.Domain/IdentityServiceDomainModule.cs
  33. 25
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EShopOnAbp.IdentityService.EntityFrameworkCore.csproj
  34. 72
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceDbContext.cs
  35. 46
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceDbContextFactory.cs
  36. 44
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceEfCoreEntityExtensionMappings.cs
  37. 43
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceEntityFrameworkCoreModule.cs
  38. 1762
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/Migrations/20210629140020_Initial.Designer.cs
  39. 1061
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/Migrations/20210629140020_Initial.cs
  40. 1760
      services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/Migrations/IdentityServiceDbContextModelSnapshot.cs
  41. 17
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Client/EShopOnAbp.IdentityService.HttpApi.Client.csproj
  42. 23
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Client/IdentityServiceHttpApiClientModule.cs
  43. 13
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Controllers/HomeController.cs
  44. 342
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/DbMigrations/IdentityServerDataSeeder.cs
  45. 27
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/DbMigrations/IdentityServiceDatabaseMigrationChecker.cs
  46. 106
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/DbMigrations/IdentityServiceDatabaseMigrationEventHandler.cs
  47. 375
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/EShopOnAbp.IdentityService.HttpApi.Host.csproj
  48. 75
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/IdentityServiceHttpApiHostModule.cs
  49. 47
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Program.cs
  50. 27
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Properties/launchSettings.json
  51. 20
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Startup.cs
  52. 2
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/appsettings.Development.json
  53. 59
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/appsettings.json
  54. 1
      services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/tempkey.jwk
  55. 17
      services/identity/src/EShopOnAbp.IdentityService.HttpApi/EShopOnAbp.IdentityService.HttpApi.csproj
  56. 15
      services/identity/src/EShopOnAbp.IdentityService.HttpApi/IdentityServiceHttpApiModule.cs
  57. 17
      services/identity/test/EShopOnAbp.IdentityService.Application.Tests/EShopOnAbp.IdentityService.Application.Tests.csproj
  58. 7
      services/identity/test/EShopOnAbp.IdentityService.Application.Tests/IdentityServiceApplicationTestBase.cs
  59. 13
      services/identity/test/EShopOnAbp.IdentityService.Application.Tests/IdentityServiceApplicationTestModule.cs
  60. 16
      services/identity/test/EShopOnAbp.IdentityService.Domain.Tests/EShopOnAbp.IdentityService.Domain.Tests.csproj
  61. 7
      services/identity/test/EShopOnAbp.IdentityService.Domain.Tests/IdentityServiceDomainTestBase.cs
  62. 13
      services/identity/test/EShopOnAbp.IdentityService.Domain.Tests/IdentityServiceDomainTestModule.cs
  63. 18
      services/identity/test/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests.csproj
  64. 9
      services/identity/test/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests/EntityFrameworkCore/IdentityServiceEntityFrameworkCoreTestBase.cs
  65. 62
      services/identity/test/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests/EntityFrameworkCore/IdentityServiceEntityFrameworkCoreTestModule.cs
  66. 24
      services/identity/test/EShopOnAbp.IdentityService.TestBase/EShopOnAbp.IdentityService.TestBase.csproj
  67. 61
      services/identity/test/EShopOnAbp.IdentityService.TestBase/IdentityServiceTestBase.cs
  68. 42
      services/identity/test/EShopOnAbp.IdentityService.TestBase/IdentityServiceTestBaseModule.cs
  69. 16
      services/identity/test/EShopOnAbp.IdentityService.TestBase/IdentityServiceTestDataSeedContributor.cs
  70. 43
      services/identity/test/EShopOnAbp.IdentityService.TestBase/Security/FakeCurrentPrincipalAccessor.cs
  71. 2
      services/saas/src/EShopOnAbp.SaasService.HttpApi.Host/appsettings.json
  72. 12
      shared/EShopOnAbp.Shared.Hosting/EShopOnAbpSharedHostingModule.cs

7
EShopOnAbp.sln

@ -22,6 +22,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EShopOnAbp.AdministrationSe
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EShopOnAbp.SaasService.HttpApi.Host", "services\saas\src\EShopOnAbp.SaasService.HttpApi.Host\EShopOnAbp.SaasService.HttpApi.Host.csproj", "{9203C6CC-F491-4A9F-93B3-3BEA018D87B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EShopOnAbp.IdentityService.HttpApi.Host", "services\identity\src\EShopOnAbp.IdentityService.HttpApi.Host\EShopOnAbp.IdentityService.HttpApi.Host.csproj", "{FDFCA1B4-FD9D-445C-8655-3DF3F2D57CEA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -35,6 +37,7 @@ Global
{49DDB3F1-6200-445E-9A0D-0339E31D5D77} = {B8B59303-2178-459B-91A8-DF353044E090}
{0FA9667E-6A08-4EFF-8CAF-D2A3C3C1FBBD} = {F415FFFD-E52D-4EBE-98DC-067C1EFFFFE3}
{9203C6CC-F491-4A9F-93B3-3BEA018D87B4} = {F415FFFD-E52D-4EBE-98DC-067C1EFFFFE3}
{FDFCA1B4-FD9D-445C-8655-3DF3F2D57CEA} = {F415FFFD-E52D-4EBE-98DC-067C1EFFFFE3}
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{09F9A583-778D-4940-83B0-958C5D4E6D52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@ -65,5 +68,9 @@ Global
{9203C6CC-F491-4A9F-93B3-3BEA018D87B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9203C6CC-F491-4A9F-93B3-3BEA018D87B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9203C6CC-F491-4A9F-93B3-3BEA018D87B4}.Release|Any CPU.Build.0 = Release|Any CPU
{FDFCA1B4-FD9D-445C-8655-3DF3F2D57CEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDFCA1B4-FD9D-445C-8655-3DF3F2D57CEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FDFCA1B4-FD9D-445C-8655-3DF3F2D57CEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDFCA1B4-FD9D-445C-8655-3DF3F2D57CEA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

109
services/identity/EShopOnAbp.IdentityService.sln

@ -0,0 +1,109 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29020.237
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.Domain", "src\EShopOnAbp.IdentityService.Domain\EShopOnAbp.IdentityService.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.Application", "src\EShopOnAbp.IdentityService.Application\EShopOnAbp.IdentityService.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.EntityFrameworkCore", "src\EShopOnAbp.IdentityService.EntityFrameworkCore\EShopOnAbp.IdentityService.EntityFrameworkCore.csproj", "{C956DD76-69C8-4A9C-83EA-D17DF83340FD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CA9AC87F-097E-4F15-8393-4BC07735A5B0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{04DBDB01-70F4-4E06-B468-8F87850B22BE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.Application.Tests", "test\EShopOnAbp.IdentityService.Application.Tests\EShopOnAbp.IdentityService.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.Domain.Shared", "src\EShopOnAbp.IdentityService.Domain.Shared\EShopOnAbp.IdentityService.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.Application.Contracts", "src\EShopOnAbp.IdentityService.Application.Contracts\EShopOnAbp.IdentityService.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.HttpApi", "src\EShopOnAbp.IdentityService.HttpApi\EShopOnAbp.IdentityService.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.HttpApi.Client", "src\EShopOnAbp.IdentityService.HttpApi.Client\EShopOnAbp.IdentityService.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.EntityFrameworkCore.Tests", "test\EShopOnAbp.IdentityService.EntityFrameworkCore.Tests\EShopOnAbp.IdentityService.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.TestBase", "test\EShopOnAbp.IdentityService.TestBase\EShopOnAbp.IdentityService.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.Domain.Tests", "test\EShopOnAbp.IdentityService.Domain.Tests\EShopOnAbp.IdentityService.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.IdentityService.HttpApi.Host", "src\EShopOnAbp.IdentityService.HttpApi.Host\EShopOnAbp.IdentityService.HttpApi.Host.csproj", "{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.Build.0 = Release|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.Build.0 = Release|Any CPU
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.Build.0 = Release|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.Build.0 = Release|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.ActiveCfg = Release|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.Build.0 = Release|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.Build.0 = Release|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.Build.0 = Release|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.Build.0 = Release|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.Build.0 = Release|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.Build.0 = Release|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.Build.0 = Release|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{1A94A50E-06DC-43C1-80B5-B662820EC3EB} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{C956DD76-69C8-4A9C-83EA-D17DF83340FD} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{50B2631D-129C-47B3-A587-029CCD6099BC} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{42F719ED-8413-4895-B5B4-5AB56079BC66} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{520659C8-C734-4298-A3DA-B539DB9DFC0B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6AAFA1C6-603E-13FA-45E5-7910AA9F661D}
EndGlobalSection
EndGlobal

17
services/identity/src/EShopOnAbp.IdentityService.Application.Contracts/EShopOnAbp.IdentityService.Application.Contracts.csproj

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.IdentityService.Domain.Shared\EShopOnAbp.IdentityService.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="4.3.3" />
<PackageReference Include="Volo.Abp.Account.Application.Contracts" Version="4.3.3" />
</ItemGroup>
</Project>

15
services/identity/src/EShopOnAbp.IdentityService.Application.Contracts/IdentityServiceApplicationContractsModule.cs

@ -0,0 +1,15 @@
using Volo.Abp.Account;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(IdentityServiceDomainSharedModule),
typeof(AbpAccountApplicationContractsModule),
typeof(AbpIdentityApplicationContractsModule)
)]
public class IdentityServiceApplicationContractsModule : AbpModule
{
}
}

7
services/identity/src/EShopOnAbp.IdentityService.Application.Contracts/IdentityServiceRemoteServiceConsts.cs

@ -0,0 +1,7 @@
namespace EShopOnAbp.IdentityService
{
public class IdentityServiceRemoteServiceConsts
{
public const string RemoteServiceName = "IdentityService";
}
}

18
services/identity/src/EShopOnAbp.IdentityService.Application/EShopOnAbp.IdentityService.Application.csproj

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.IdentityService.Domain\EShopOnAbp.IdentityService.Domain.csproj" />
<ProjectReference Include="..\EShopOnAbp.IdentityService.Application.Contracts\EShopOnAbp.IdentityService.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Identity.Application" Version="4.3.3" />
<PackageReference Include="Volo.Abp.Account.Application" Version="4.3.3" />
</ItemGroup>
</Project>

26
services/identity/src/EShopOnAbp.IdentityService.Application/IdentityServiceApplicationModule.cs

@ -0,0 +1,26 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Account;
using Volo.Abp.AutoMapper;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(IdentityServiceDomainModule),
typeof(IdentityServiceApplicationContractsModule),
typeof(AbpAccountApplicationModule),
typeof(AbpIdentityApplicationModule)
)]
public class IdentityServiceApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAutoMapperObjectMapper<IdentityServiceApplicationModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<IdentityServiceApplicationModule>(validate: true);
});
}
}
}

22
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/EShopOnAbp.IdentityService.Domain.Shared.csproj

@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.*" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Identity.Domain.Shared" Version="4.3.3" />
<PackageReference Include="Volo.Abp.IdentityServer.Domain.Shared" Version="4.3.3" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Localization\IdentityService\*.json" />
<Content Remove="Localization\IdentityService\*.json" />
</ItemGroup>
</Project>

7
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/IdentityServiceDomainErrorCodes.cs

@ -0,0 +1,7 @@
namespace EShopOnAbp.IdentityService
{
public static class IdentityServiceDomainErrorCodes
{
/* You can add your business exception error codes here, as constants */
}
}

41
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/IdentityServiceDomainSharedModule.cs

@ -0,0 +1,41 @@
using EShopOnAbp.IdentityService.Localization;
using Volo.Abp.Identity;
using Volo.Abp.IdentityServer;
using Volo.Abp.Localization;
using Volo.Abp.Localization.ExceptionHandling;
using Volo.Abp.Modularity;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(AbpIdentityDomainSharedModule),
typeof(AbpIdentityServerDomainSharedModule)
)]
public class IdentityServiceDomainSharedModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
IdentityServiceModuleExtensionConfigurator.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<IdentityServiceDomainSharedModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<IdentityServiceResource>("en")
.AddBaseTypes(typeof(AbpValidationResource))
.AddVirtualJson("/Localization/IdentityService");
options.DefaultResourceType = typeof(IdentityServiceResource);
});
}
}
}

72
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/IdentityServiceModuleExtensionConfigurator.cs

@ -0,0 +1,72 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Identity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Threading;
namespace EShopOnAbp.IdentityService
{
public static class IdentityServiceModuleExtensionConfigurator
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public static void Configure()
{
OneTimeRunner.Run(() =>
{
ConfigureExistingProperties();
ConfigureExtraProperties();
});
}
private static void ConfigureExistingProperties()
{
/* You can change max lengths for properties of the
* entities defined in the modules used by your application.
*
* Example: Change user and role name max lengths
IdentityUserConsts.MaxNameLength = 99;
IdentityRoleConsts.MaxNameLength = 99;
* Notice: It is not suggested to change property lengths
* unless you really need it. Go with the standard values wherever possible.
*
* If you are using EF Core, you will need to run the add-migration command after your changes.
*/
}
private static void ConfigureExtraProperties()
{
/* You can configure extra properties for the
* entities defined in the modules used by your application.
*
* This class can be used to define these extra properties
* with a high level, easy to use API.
*
* Example: Add a new property to the user entity of the identity module
ObjectExtensionManager.Instance.Modules()
.ConfigureIdentity(identity =>
{
identity.ConfigureUser(user =>
{
user.AddOrUpdateProperty<string>( //property type: string
"SocialSecurityNumber", //property name
property =>
{
//validation rules
property.Attributes.Add(new RequiredAttribute());
property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4});
//...other configurations for this property
}
);
});
});
* See the documentation for more:
* https://docs.abp.io/en/abp/latest/Module-Entity-Extensions
*/
}
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/ar.json

@ -0,0 +1,8 @@
{
"culture": "ar",
"texts": {
"Menu:Home": "الرئيسية",
"Welcome": "مرحبا",
"LongWelcomeMessage": "مرحبا بكم في التطبيق. هذا مشروع بدء تشغيل يعتمد على إطار عمل ABP. لمزيد من المعلومات ، يرجى زيارة abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/cs.json

@ -0,0 +1,8 @@
{
"culture": "cs",
"texts": {
"Menu:Home": "Úvod",
"Welcome": "Vítejte",
"LongWelcomeMessage": "Vítejte v aplikaci. Toto je startovací projekt založený na ABP frameworku. Pro více informací, navštivte abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/de-DE.json

@ -0,0 +1,8 @@
{
"culture": "de-DE",
"texts": {
"Menu:Home": "Home",
"Welcome": "Willkommen",
"LongWelcomeMessage": "Willkommen bei der Anwendung. Dies ist ein Startup-Projekt, das auf dem ABP-Framework basiert. Weitere Informationen finden Sie unter abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/en-GB.json

@ -0,0 +1,8 @@
{
"culture": "en-GB",
"texts": {
"Menu:Home": "Home",
"Welcome": "Welcome",
"LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/en.json

@ -0,0 +1,8 @@
{
"culture": "en",
"texts": {
"Menu:Home": "Home",
"Welcome": "Welcome",
"LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/es.json

@ -0,0 +1,8 @@
{
"culture": "es",
"texts": {
"Menu:Home": "Inicio",
"Welcome": "Bienvenido",
"LongWelcomeMessage": "Bienvenido a la aplicación, este es un proyecto base basado en el framework ABP. Para más información, visita abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/fr.json

@ -0,0 +1,8 @@
{
"culture": "fr",
"texts": {
"Menu:Home": "Accueil",
"Welcome": "Bienvenue",
"LongWelcomeMessage": "Bienvenue dans l'application. Il s'agit d'un projet de démarrage basé sur le framework ABP. Pour plus d'informations, visitez abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/hu.json

@ -0,0 +1,8 @@
{
"culture": "hu",
"texts": {
"Menu:Home": "Kezdőlap",
"Welcome": "Üdvözlöm",
"LongWelcomeMessage": "Üdvözöljük az alkalmazásban. Ez egy ABP keretrendszeren alapuló startup projekt. További információkért látogasson el az abp.io oldalra."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/nl.json

@ -0,0 +1,8 @@
{
"culture": "nl",
"texts": {
"Menu:Home": "Home",
"Welcome": "Welkom",
"LongWelcomeMessage": "Welkom bij de applicatie. Dit is een startup-project gebaseerd op het ABP-framework. Bezoek abp.io voor meer informatie."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/pl-PL.json

@ -0,0 +1,8 @@
{
"culture": "pl-PL",
"texts": {
"Menu:Home": "Home",
"Welcome": "Witaj",
"LongWelcomeMessage": "Witaj w aplikacji. To jest inicjalny projekt bazujący na ABP framework. Po więcej informacji odwiedź stronę abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/pt-BR.json

@ -0,0 +1,8 @@
{
"culture": "pt-BR",
"texts": {
"Menu:Home": "Principal",
"Welcome": "Seja bem-vindo!",
"LongWelcomeMessage": "Bem-vindo a esta aplicação. Este é um projeto inicial baseado no ABP framework. Para mais informações, visite abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/ru.json

@ -0,0 +1,8 @@
{
"culture": "ru",
"texts": {
"Menu:Home": "Главная",
"Welcome": "Добро пожаловать",
"LongWelcomeMessage": "Добро пожаловать в приложение. Этот запущенный проект основан на фреймворке ABP. Для получения дополнительной информации посетите сайт abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/sl.json

@ -0,0 +1,8 @@
{
"culture": "sl",
"texts": {
"Menu:Home": "Domov",
"Welcome": "Dobrodošli",
"LongWelcomeMessage": "Dobrodošli v aplikaciji. To je začetni projekt na osnovi okolja ABP. Za več informacij obiščite abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/tr.json

@ -0,0 +1,8 @@
{
"culture": "tr",
"texts": {
"Menu:Home": "Ana sayfa",
"Welcome": "Hoşgeldiniz",
"LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/vi.json

@ -0,0 +1,8 @@
{
"culture": "vi",
"texts": {
"Menu:Home": "Trang chủ",
"Welcome": "Chào mừng bạn",
"LongWelcomeMessage": "Chào mừng bạn đến ứng dụng. Đây là một dự án khởi nghiệp dựa trên khung ABP. Để biết thêm thông tin, hãy truy cập abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/zh-Hans.json

@ -0,0 +1,8 @@
{
"culture": "zh-Hans",
"texts": {
"Menu:Home": "首页",
"Welcome": "欢迎",
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io."
}
}

8
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityService/zh-Hant.json

@ -0,0 +1,8 @@
{
"culture": "zh-Hant",
"texts": {
"Menu:Home": "首頁",
"Welcome": "歡迎",
"LongWelcomeMessage": "歡迎來到此應用程式. 這是一個基於ABP框架的起始專案. 有關更多訊息, 請瀏覽 abp.io."
}
}

10
services/identity/src/EShopOnAbp.IdentityService.Domain.Shared/Localization/IdentityServiceResource.cs

@ -0,0 +1,10 @@
using Volo.Abp.Localization;
namespace EShopOnAbp.IdentityService.Localization
{
[LocalizationResourceName("IdentityService")]
public class IdentityServiceResource
{
}
}

17
services/identity/src/EShopOnAbp.IdentityService.Domain/EShopOnAbp.IdentityService.Domain.csproj

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.IdentityService.Domain.Shared\EShopOnAbp.IdentityService.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Identity.Domain" Version="4.3.3" />
<PackageReference Include="Volo.Abp.IdentityServer.Domain" Version="4.3.3" />
</ItemGroup>
</Project>

15
services/identity/src/EShopOnAbp.IdentityService.Domain/IdentityServiceDbProperties.cs

@ -0,0 +1,15 @@
namespace EShopOnAbp.IdentityService
{
public static class IdentityServiceDbProperties
{
public static string DbTablePrefix { get; set; } = "";
public static string DbSchema { get; set; } = null;
public const string ConnectionStringName = "IdentityService";
public const string DefaultAdminEmailAddress = "admin@abp.io";
public const string DefaultAdminPassword = "1q2w3E*";
}
}

15
services/identity/src/EShopOnAbp.IdentityService.Domain/IdentityServiceDomainModule.cs

@ -0,0 +1,15 @@
using Volo.Abp.Identity;
using Volo.Abp.IdentityServer;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(IdentityServiceDomainSharedModule),
typeof(AbpIdentityDomainModule),
typeof(AbpIdentityServerDomainModule)
)]
public class IdentityServiceDomainModule : AbpModule
{
}
}

25
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EShopOnAbp.IdentityService.EntityFrameworkCore.csproj

@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.*">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.IdentityService.Domain\EShopOnAbp.IdentityService.Domain.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="4.3.3" />
<PackageReference Include="Volo.Abp.Identity.EntityFrameworkCore" Version="4.3.3" />
<PackageReference Include="Volo.Abp.IdentityServer.EntityFrameworkCore" Version="4.3.3" />
</ItemGroup>
</Project>

72
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceDbContext.cs

@ -0,0 +1,72 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Identity;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.IdentityServer.ApiResources;
using Volo.Abp.IdentityServer.ApiScopes;
using Volo.Abp.IdentityServer.Clients;
using Volo.Abp.IdentityServer.Devices;
using Volo.Abp.IdentityServer.EntityFrameworkCore;
using Volo.Abp.IdentityServer.Grants;
using Volo.Abp.IdentityServer.IdentityResources;
namespace EShopOnAbp.IdentityService.EntityFrameworkCore
{
/* This is your actual DbContext used on runtime.
* It includes only your entities.
* It does not include entities of the used modules, because each module has already
* its own DbContext class. If you want to share some database tables with the used modules,
* just create a structure like done for AppUser.
*
* Don't use this DbContext for database migrations since it does not contain tables of the
* used modules (as explained above). See IdentityServiceMigrationsDbContext for migrations.
*/
[ConnectionStringName(IdentityServiceDbProperties.ConnectionStringName)]
public class IdentityServiceDbContext : AbpDbContext<IdentityServiceDbContext>, IIdentityDbContext,
IIdentityServerDbContext
{
public DbSet<IdentityUser> Users { get; }
public DbSet<IdentityRole> Roles { get; }
public DbSet<IdentityClaimType> ClaimTypes { get; }
public DbSet<OrganizationUnit> OrganizationUnits { get; }
public DbSet<IdentitySecurityLog> SecurityLogs { get; }
public DbSet<IdentityLinkUser> LinkUsers { get; }
public DbSet<ApiResource> ApiResources { get; }
public DbSet<ApiResourceSecret> ApiResourceSecrets { get; }
public DbSet<ApiResourceClaim> ApiResourceClaims { get; }
public DbSet<ApiResourceScope> ApiResourceScopes { get; }
public DbSet<ApiResourceProperty> ApiResourceProperties { get; }
public DbSet<ApiScope> ApiScopes { get; }
public DbSet<ApiScopeClaim> ApiScopeClaims { get; }
public DbSet<ApiScopeProperty> ApiScopeProperties { get; }
public DbSet<IdentityResource> IdentityResources { get; }
public DbSet<IdentityResourceClaim> IdentityClaims { get; }
public DbSet<IdentityResourceProperty> IdentityResourceProperties { get; }
public DbSet<Client> Clients { get; }
public DbSet<ClientGrantType> ClientGrantTypes { get; }
public DbSet<ClientRedirectUri> ClientRedirectUris { get; }
public DbSet<ClientPostLogoutRedirectUri> ClientPostLogoutRedirectUris { get; }
public DbSet<ClientScope> ClientScopes { get; }
public DbSet<ClientSecret> ClientSecrets { get; }
public DbSet<ClientClaim> ClientClaims { get; }
public DbSet<ClientIdPRestriction> ClientIdPRestrictions { get; }
public DbSet<ClientCorsOrigin> ClientCorsOrigins { get; }
public DbSet<ClientProperty> ClientProperties { get; }
public DbSet<PersistedGrant> PersistedGrants { get; }
public DbSet<DeviceFlowCodes> DeviceFlowCodes { get; }
public IdentityServiceDbContext(DbContextOptions<IdentityServiceDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigureIdentity();
builder.ConfigureIdentityServer();
}
}
}

46
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceDbContextFactory.cs

@ -0,0 +1,46 @@
using System.IO;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
namespace EShopOnAbp.IdentityService.EntityFrameworkCore
{
/* This class is needed for EF Core console commands
* (like Add-Migration and Update-Database commands)
* */
public class IdentityServiceDbContextFactory : IDesignTimeDbContextFactory<IdentityServiceDbContext>
{
public IdentityServiceDbContext CreateDbContext(string[] args)
{
IdentityServiceEfCoreEntityExtensionMappings.Configure();
var builder = new DbContextOptionsBuilder<IdentityServiceDbContext>()
.UseSqlServer(GetConnectionStringFromConfiguration(), b =>
{
b.MigrationsHistoryTable("__IdentityService_Migrations");
});
return new IdentityServiceDbContext(builder.Options);
}
private static string GetConnectionStringFromConfiguration()
{
return BuildConfiguration()
.GetConnectionString(IdentityServiceDbProperties.ConnectionStringName);
}
private static IConfigurationRoot BuildConfiguration()
{
var builder = new ConfigurationBuilder()
.SetBasePath(
Path.Combine(
Directory.GetCurrentDirectory(),
$"..{Path.DirectorySeparatorChar}EShopOnAbp.IdentityService.HttpApi.Host"
)
)
.AddJsonFile("appsettings.json", optional: false);
return builder.Build();
}
}
}

44
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceEfCoreEntityExtensionMappings.cs

@ -0,0 +1,44 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Identity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Threading;
namespace EShopOnAbp.IdentityService.EntityFrameworkCore
{
public static class IdentityServiceEfCoreEntityExtensionMappings
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public static void Configure()
{
IdentityServiceModuleExtensionConfigurator.Configure();
OneTimeRunner.Run(() =>
{
/* You can configure extra properties for the
* entities defined in the modules used by your application.
*
* This class can be used to map these extra properties to table fields in the database.
*
* USE THIS CLASS ONLY TO CONFIGURE EF CORE RELATED MAPPING.
* USE IdentityServiceModuleExtensionConfigurator CLASS (in the Domain.Shared project)
* FOR A HIGH LEVEL API TO DEFINE EXTRA PROPERTIES TO ENTITIES OF THE USED MODULES
*
* Example: Map a property to a table field:
ObjectExtensionManager.Instance
.MapEfCoreProperty<IdentityUser, string>(
"MyProperty",
(entityBuilder, propertyBuilder) =>
{
propertyBuilder.HasMaxLength(128);
}
);
* See the documentation for more:
* https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities
*/
});
}
}
}

43
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/EntityFrameworkCore/IdentityServiceEntityFrameworkCoreModule.cs

@ -0,0 +1,43 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.IdentityServer.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService.EntityFrameworkCore
{
[DependsOn(
typeof(IdentityServiceDomainModule),
typeof(AbpEntityFrameworkCoreSqlServerModule),
typeof(AbpIdentityEntityFrameworkCoreModule),
typeof(AbpIdentityServerEntityFrameworkCoreModule)
)]
public class IdentityServiceEntityFrameworkCoreModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
IdentityServiceEfCoreEntityExtensionMappings.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAbpDbContext<IdentityServiceDbContext>(options =>
{
options.ReplaceDbContext<IIdentityDbContext>();
options.ReplaceDbContext<IIdentityServerDbContext>();
/* includeAllEntities: true allows to use IRepository<TEntity, TKey> also for non aggregate root entities */
options.AddDefaultRepositories(includeAllEntities: true);
});
Configure<AbpDbContextOptions>(options =>
{
options.Configure<IdentityServiceDbContext>(c =>
{
c.UseSqlServer(b => { b.MigrationsHistoryTable("__IdentityService_Migrations"); });
});
});
}
}
}

1762
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/Migrations/20210629140020_Initial.Designer.cs

File diff suppressed because it is too large

1061
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/Migrations/20210629140020_Initial.cs

File diff suppressed because it is too large

1760
services/identity/src/EShopOnAbp.IdentityService.EntityFrameworkCore/Migrations/IdentityServiceDbContextModelSnapshot.cs

File diff suppressed because it is too large

17
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Client/EShopOnAbp.IdentityService.HttpApi.Client.csproj

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.IdentityService.Application.Contracts\EShopOnAbp.IdentityService.Application.Contracts.csproj"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Identity.HttpApi.Client" Version="4.3.3"/>
<PackageReference Include="Volo.Abp.Account.HttpApi.Client" Version="4.3.3"/>
</ItemGroup>
</Project>

23
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Client/IdentityServiceHttpApiClientModule.cs

@ -0,0 +1,23 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Account;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(IdentityServiceApplicationContractsModule),
typeof(AbpAccountHttpApiClientModule),
typeof(AbpIdentityHttpApiClientModule)
)]
public class IdentityServiceHttpApiClientModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddHttpClientProxies(
typeof(IdentityServiceApplicationContractsModule).Assembly,
IdentityServiceRemoteServiceConsts.RemoteServiceName
);
}
}
}

13
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Controllers/HomeController.cs

@ -0,0 +1,13 @@
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
namespace EShopOnAbp.IdentityService.Controllers
{
public class HomeController : AbpController
{
public ActionResult Index()
{
return Redirect("~/swagger");
}
}
}

342
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/DbMigrations/IdentityServerDataSeeder.cs

@ -0,0 +1,342 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using IdentityServer4.Models;
using Microsoft.Extensions.Configuration;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Identity;
using Volo.Abp.IdentityServer.ApiResources;
using Volo.Abp.IdentityServer.ApiScopes;
using Volo.Abp.IdentityServer.Clients;
using Volo.Abp.IdentityServer.IdentityResources;
using Volo.Abp.MultiTenancy;
using Volo.Abp.PermissionManagement;
using Volo.Abp.Uow;
using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource;
using ApiScope = Volo.Abp.IdentityServer.ApiScopes.ApiScope;
using Client = Volo.Abp.IdentityServer.Clients.Client;
namespace EShopOnAbp.IdentityService.DbMigrations
{
public class IdentityServerDataSeeder : ITransientDependency
{
private readonly IApiResourceRepository _apiResourceRepository;
private readonly IApiScopeRepository _apiScopeRepository;
private readonly IClientRepository _clientRepository;
private readonly IIdentityResourceDataSeeder _identityResourceDataSeeder;
private readonly IGuidGenerator _guidGenerator;
private readonly IPermissionDataSeeder _permissionDataSeeder;
private readonly IConfiguration _configuration;
private readonly ICurrentTenant _currentTenant;
public IdentityServerDataSeeder(
IClientRepository clientRepository,
IApiResourceRepository apiResourceRepository,
IApiScopeRepository apiScopeRepository,
IIdentityResourceDataSeeder identityResourceDataSeeder,
IGuidGenerator guidGenerator,
IPermissionDataSeeder permissionDataSeeder,
IConfiguration configuration,
ICurrentTenant currentTenant)
{
_clientRepository = clientRepository;
_apiResourceRepository = apiResourceRepository;
_apiScopeRepository = apiScopeRepository;
_identityResourceDataSeeder = identityResourceDataSeeder;
_guidGenerator = guidGenerator;
_permissionDataSeeder = permissionDataSeeder;
_configuration = configuration;
_currentTenant = currentTenant;
}
[UnitOfWork]
public virtual async Task SeedAsync()
{
using (_currentTenant.Change(null))
{
await _identityResourceDataSeeder.CreateStandardResourcesAsync();
await CreateApiResourcesAsync();
await CreateApiScopesAsync();
await CreateSwaggerClientsAsync();
await CreateClientsAsync();
}
}
private async Task CreateApiResourcesAsync()
{
var commonApiUserClaims = new[]
{
"email",
"email_verified",
"name",
"phone_number",
"phone_number_verified",
"role"
};
await CreateApiResourceAsync("IdentityService", commonApiUserClaims);
await CreateApiResourceAsync("AdministrationService", commonApiUserClaims);
await CreateApiResourceAsync("SaasService", commonApiUserClaims);
}
private async Task CreateApiScopesAsync()
{
await CreateApiScopeAsync("IdentityService");
await CreateApiScopeAsync("AdministrationService");
await CreateApiScopeAsync("SaasService");
}
private async Task CreateSwaggerClientsAsync()
{
await CreateSwaggerClientAsync("InternalGateway",
new[] { "IdentityService", "AdministrationService", "SaasService" });
await CreateSwaggerClientAsync("WebGateway",
new[] { "IdentityService", "AdministrationService", "SaasService" });
await CreateSwaggerClientAsync("PublicWebGateway", new[] { "" });
}
private async Task CreateSwaggerClientAsync(string name, string[] scopes = null)
{
var commonScopes = new[]
{
"email",
"openid",
"profile",
"role",
"phone",
"address"
};
scopes ??= new[] { name };
// Swagger Client
var swaggerClientId = $"{name}_Swagger";
if (!swaggerClientId.IsNullOrWhiteSpace())
{
var swaggerRootUrl = _configuration[$"IdentityServerClients:{name}:RootUrl"].TrimEnd('/');
await CreateClientAsync(
name: swaggerClientId,
scopes: commonScopes.Union(scopes),
grantTypes: new[] { "authorization_code" },
secret: "1q2w3e*".Sha256(),
requireClientSecret: false,
redirectUri: $"{swaggerRootUrl}/swagger/oauth2-redirect.html",
corsOrigins: new[] { swaggerRootUrl.RemovePostFix("/") }
);
}
}
private async Task<ApiResource> CreateApiResourceAsync(string name, IEnumerable<string> claims)
{
var apiResource = await _apiResourceRepository.FindByNameAsync(name);
if (apiResource == null)
{
apiResource = await _apiResourceRepository.InsertAsync(
new ApiResource(
_guidGenerator.Create(),
name,
name + " API"
),
autoSave: true
);
}
foreach (var claim in claims)
{
if (apiResource.FindClaim(claim) == null)
{
apiResource.AddUserClaim(claim);
}
}
return await _apiResourceRepository.UpdateAsync(apiResource);
}
private async Task<ApiScope> CreateApiScopeAsync(string name)
{
var apiScope = await _apiScopeRepository.GetByNameAsync(name);
if (apiScope == null)
{
apiScope = await _apiScopeRepository.InsertAsync(
new ApiScope(
_guidGenerator.Create(),
name,
name + " API"
),
autoSave: true
);
}
return apiScope;
}
private async Task CreateClientsAsync()
{
var commonScopes = new[]
{
"email",
"openid",
"profile",
"role",
"phone",
"address"
};
//Public Web Client
var publicWebClientRootUrl = _configuration["IdentityServerClients:EShopOnAbp_PublicWeb:RootUrl"]
.EnsureEndsWith('/');
await CreateClientAsync(
name: "EShopOnAbp_PublicWeb",
scopes: commonScopes.Union(new[]
{
"AdministrationService"
}),
grantTypes: new[] { "hybrid" },
secret: "1q2w3e*".Sha256(),
redirectUri: $"{publicWebClientRootUrl}signin-oidc",
postLogoutRedirectUri: $"{publicWebClientRootUrl}signout-callback-oidc",
frontChannelLogoutUri: $"{publicWebClientRootUrl}Account/FrontChannelLogout",
corsOrigins: new[] { publicWebClientRootUrl.RemovePostFix("/") }
);
//Angular Client
var angularClientRootUrl =
_configuration["IdentityServerClients:EShopOnAbp_Angular:RootUrl"].TrimEnd('/');
await CreateClientAsync(
name: "EShopOnAbp_Angular",
scopes: commonScopes.Union(new[]
{
"IdentityService",
"AdministrationService",
"SaasService"
}),
grantTypes: new[] { "authorization_code", "LinkLogin" },
secret: "1q2w3e*".Sha256(),
requirePkce: true,
requireClientSecret: false,
redirectUri: $"{angularClientRootUrl}",
postLogoutRedirectUri: $"{angularClientRootUrl}",
corsOrigins: new[] { angularClientRootUrl }
);
//Administration Service Client
await CreateClientAsync(
name: "EShopOnAbp_AdministrationService",
scopes: commonScopes.Union(new[]
{
"IdentityService"
}),
grantTypes: new[] { "client_credentials" },
secret: "1q2w3e*".Sha256(),
permissions: new[] { IdentityPermissions.Users.Default }
);
}
private async Task<Client> CreateClientAsync(
string name,
IEnumerable<string> scopes,
IEnumerable<string> grantTypes,
string secret = null,
string redirectUri = null,
string postLogoutRedirectUri = null,
string frontChannelLogoutUri = null,
bool requireClientSecret = true,
bool requirePkce = false,
IEnumerable<string> permissions = null,
IEnumerable<string> corsOrigins = null)
{
var client = await _clientRepository.FindByClientIdAsync(name);
if (client == null)
{
client = await _clientRepository.InsertAsync(
new Client(
_guidGenerator.Create(),
name
)
{
ClientName = name,
ProtocolType = "oidc",
Description = name,
AlwaysIncludeUserClaimsInIdToken = true,
AllowOfflineAccess = true,
AbsoluteRefreshTokenLifetime = 31536000, //365 days
AccessTokenLifetime = 31536000, //365 days
AuthorizationCodeLifetime = 300,
IdentityTokenLifetime = 300,
RequireConsent = false,
FrontChannelLogoutUri = frontChannelLogoutUri,
RequireClientSecret = requireClientSecret,
RequirePkce = requirePkce
},
autoSave: true
);
}
foreach (var scope in scopes)
{
if (client.FindScope(scope) == null)
{
client.AddScope(scope);
}
}
foreach (var grantType in grantTypes)
{
if (client.FindGrantType(grantType) == null)
{
client.AddGrantType(grantType);
}
}
if (!secret.IsNullOrEmpty())
{
if (client.FindSecret(secret) == null)
{
client.AddSecret(secret);
}
}
if (redirectUri != null)
{
if (client.FindRedirectUri(redirectUri) == null)
{
client.AddRedirectUri(redirectUri);
}
}
if (postLogoutRedirectUri != null)
{
if (client.FindPostLogoutRedirectUri(postLogoutRedirectUri) == null)
{
client.AddPostLogoutRedirectUri(postLogoutRedirectUri);
}
}
if (permissions != null)
{
await _permissionDataSeeder.SeedAsync(
ClientPermissionValueProvider.ProviderName,
name,
permissions,
null
);
}
if (corsOrigins != null)
{
foreach (var origin in corsOrigins)
{
if (!origin.IsNullOrWhiteSpace() && client.FindCorsOrigin(origin) == null)
{
client.AddCorsOrigin(origin);
}
}
}
return await _clientRepository.UpdateAsync(client);
}
}
}

27
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/DbMigrations/IdentityServiceDatabaseMigrationChecker.cs

@ -0,0 +1,27 @@
using System;
using EShopOnAbp.IdentityService.EntityFrameworkCore;
using EShopOnAbp.Shared.Hosting.Microservices.DbMigrations;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
namespace EShopOnAbp.IdentityService.DbMigrations
{
public class IdentityServiceDatabaseMigrationChecker : PendingMigrationsCheckerBase<IdentityServiceDbContext>
{
public IdentityServiceDatabaseMigrationChecker(
IUnitOfWorkManager unitOfWorkManager,
IServiceProvider serviceProvider,
ICurrentTenant currentTenant,
IDistributedEventBus distributedEventBus)
: base(
unitOfWorkManager,
serviceProvider,
currentTenant,
distributedEventBus,
IdentityServiceDbProperties.ConnectionStringName)
{
}
}
}

106
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/DbMigrations/IdentityServiceDatabaseMigrationEventHandler.cs

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using EShopOnAbp.IdentityService.EntityFrameworkCore;
using EShopOnAbp.Shared.Hosting.Microservices.DbMigrations;
using Serilog;
using Volo.Abp.Data;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Identity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement;
using Volo.Abp.Uow;
namespace EShopOnAbp.IdentityService.DbMigrations
{
public class IdentityServiceDatabaseMigrationEventHandler
: DatabaseMigrationEventHandlerBase<IdentityServiceDbContext>,
IDistributedEventHandler<TenantCreatedEto>,
IDistributedEventHandler<ApplyDatabaseMigrationsEto>
{
private readonly IIdentityDataSeeder _identityDataSeeder;
private readonly IdentityServerDataSeeder _identityServerDataSeeder;
public IdentityServiceDatabaseMigrationEventHandler(
ICurrentTenant currentTenant,
IUnitOfWorkManager unitOfWorkManager,
ITenantStore tenantStore,
IIdentityDataSeeder identityDataSeeder,
IdentityServerDataSeeder identityServerDataSeeder,
ITenantRepository tenantRepository,
IDistributedEventBus distributedEventBus
) : base(
currentTenant,
unitOfWorkManager,
tenantStore,
tenantRepository,
distributedEventBus,
IdentityServiceDbProperties.ConnectionStringName)
{
_identityDataSeeder = identityDataSeeder;
_identityServerDataSeeder = identityServerDataSeeder;
}
public async Task HandleEventAsync(ApplyDatabaseMigrationsEto eventData)
{
if (eventData.DatabaseName != DatabaseName)
{
return;
}
try
{
var schemaMigrated = await MigrateDatabaseSchemaAsync(eventData.TenantId);
await SeedDataAsync(
tenantId: eventData.TenantId,
adminEmail: IdentityServiceDbProperties.DefaultAdminEmailAddress,
adminPassword: IdentityServiceDbProperties.DefaultAdminPassword
);
if (eventData.TenantId == null && schemaMigrated)
{
/* Migrate tenant databases after host migration */
await QueueTenantMigrationsAsync();
}
}
catch (Exception ex)
{
await HandleErrorOnApplyDatabaseMigrationAsync(eventData, ex);
}
}
public async Task HandleEventAsync(TenantCreatedEto eventData)
{
try
{
await MigrateDatabaseSchemaAsync(eventData.Id);
await SeedDataAsync(
tenantId: eventData.Id,
adminEmail: eventData.Properties.GetOrDefault(IdentityDataSeedContributor.AdminEmailPropertyName) ?? IdentityServiceDbProperties.DefaultAdminEmailAddress,
adminPassword: eventData.Properties.GetOrDefault(IdentityDataSeedContributor.AdminPasswordPropertyName) ?? IdentityServiceDbProperties.DefaultAdminPassword
);
}
catch (Exception ex)
{
await HandleErrorTenantCreatedAsync(eventData, ex);
}
}
private async Task SeedDataAsync(Guid? tenantId, string adminEmail, string adminPassword)
{
using (CurrentTenant.Change(tenantId))
{
if (tenantId == null)
{
Log.Information($"Seeding IdentityServer data...");
await _identityServerDataSeeder.SeedAsync();
}
Log.Information($"Seeding user data...");
await _identityDataSeeder.SeedAsync(
adminEmail,
adminPassword,
tenantId
);
}
}
}
}

375
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/EShopOnAbp.IdentityService.HttpApi.Host.csproj

@ -0,0 +1,375 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.*">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\shared\EShopOnAbp.Shared.Hosting.Microservices\EShopOnAbp.Shared.Hosting.Microservices.csproj" />
<ProjectReference Include="..\EShopOnAbp.IdentityService.Application\EShopOnAbp.IdentityService.Application.csproj" />
<ProjectReference Include="..\EShopOnAbp.IdentityService.EntityFrameworkCore\EShopOnAbp.IdentityService.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\EShopOnAbp.IdentityService.HttpApi\EShopOnAbp.IdentityService.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Logs\**" />
<Content Remove="Logs\**" />
<EmbeddedResource Remove="Logs\**" />
<None Remove="Logs\**" />
</ItemGroup>
<ItemGroup>
<_ContentIncludedByDefault Remove="wwwroot\global-styles.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\css\all.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\css\v4-shims.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-brands-400.eot" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-brands-400.svg" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-brands-400.ttf" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-brands-400.woff" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-brands-400.woff2" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-regular-400.eot" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-regular-400.svg" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-regular-400.ttf" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-regular-400.woff" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-regular-400.woff2" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-solid-900.eot" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-solid-900.svg" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-solid-900.ttf" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-solid-900.woff" />
<_ContentIncludedByDefault Remove="wwwroot\libs\@fortawesome\fontawesome-free\webfonts\fa-solid-900.woff2" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\core\abp.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\core\abp.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\jquery\abp.jquery.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\luxon\abp.luxon.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\utils\abp-utils.umd.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\utils\abp-utils.umd.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\utils\abp-utils.umd.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\abp\utils\abp-utils.umd.min.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\bootstrap-datepicker.css.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\bootstrap-datepicker.min.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\bootstrap-datepicker.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker-en-CA.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ar-tn.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ar.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.az.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.bg.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.bm.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.bn.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.br.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.bs.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ca.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.cs.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.cy.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.da.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.de.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.el.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.en-AU.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.en-CA.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.en-GB.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.en-IE.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.en-NZ.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.en-ZA.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.eo.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.es.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.et.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.eu.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.fa.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.fi.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.fo.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.fr-CH.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.fr.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.gl.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.he.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.hi.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.hr.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.hu.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.hy.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.id.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.is.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.it-CH.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.it.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ja.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ka.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.kh.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.kk.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.km.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ko.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.kr.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.lt.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.lv.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.me.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.mk.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.mn.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ms.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.nl-BE.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.nl.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.no.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.oc.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.pl.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.pt-BR.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.pt.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ro.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.rs-latin.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.rs.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ru.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.si.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.sk.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.sl.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.sq.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.sr-latin.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.sr.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.sv.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.sw.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.ta.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.tg.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.th.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.tk.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.tr.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.uk.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.uz-cyrl.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.uz-latn.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.vi.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.zh-CN.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap-datepicker\locales\bootstrap-datepicker.zh-TW.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap-rtl.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap-rtl.css.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap-rtl.min.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap-rtl.min.css.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap.css.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap.min.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\css\bootstrap.min.css.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\js\bootstrap.bundle.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\js\bootstrap.bundle.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\js\bootstrap.bundle.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\bootstrap\js\bootstrap.bundle.min.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\datatables.net-bs4\css\dataTables.bootstrap4.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\datatables.net-bs4\js\dataTables.bootstrap4.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\datatables.net\js\jquery.dataTables.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-form\jquery.form.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-form\jquery.form.min.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation-unobtrusive\jquery.validate.unobtrusive.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\jquery.validate.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ar.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_az.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_bg.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_bn_BD.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ca.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_cs.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_da.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_de.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_el.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_es.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_es_AR.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_es_PE.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_et.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_eu.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_fa.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_fi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_fr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ge.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_gl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_he.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_hr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_hu.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_hy_AM.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_id.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_is.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_it.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ja.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ka.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_kk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ko.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_lt.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_lv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_mk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_my.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_nl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_no.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_pl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_pt_BR.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_pt_PT.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ro.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ru.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_sd.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_si.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_sk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_sl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_sr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_sr_lat.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_sv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_th.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_tj.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_tr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_uk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_ur.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_vi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_zh.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\messages_zh_TW.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\methods_de.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\methods_es_CL.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\methods_fi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\methods_nl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery-validation\localization\methods_pt.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\jquery\jquery.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\lodash\lodash.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\luxon\luxon.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\luxon\luxon.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\luxon\luxon.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\luxon\luxon.min.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\malihu-custom-scrollbar-plugin\jquery.mCustomScrollbar.concat.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\malihu-custom-scrollbar-plugin\jquery.mCustomScrollbar.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\malihu-custom-scrollbar-plugin\jquery.mCustomScrollbar.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\malihu-custom-scrollbar-plugin\mCSB_buttons.png" />
<_ContentIncludedByDefault Remove="wwwroot\libs\malihu-custom-scrollbar-plugin\package.json" />
<_ContentIncludedByDefault Remove="wwwroot\libs\malihu-custom-scrollbar-plugin\readme.md" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\css\select2.min.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\af.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ar.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\az.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\bg.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\bn.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\bs.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ca.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\cs.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\da.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\de.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\dsb.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\el.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\en.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\es.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\et.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\eu.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\fa.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\fi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\fr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\gl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\he.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\hi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\hr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\hsb.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\hu.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\hy.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\id.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\is.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\it.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ja.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ka.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\km.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ko.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\lt.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\lv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\mk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ms.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\nb.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ne.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\nl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\pl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ps.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\pt-BR.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\pt.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ro.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\ru.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\sk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\sl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\sq.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\sr-Cyrl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\sr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\sv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\th.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\tk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\tr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\uk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\vi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\zh-CN.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\i18n\zh-TW.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\select2-bootstrap-modal-patch.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\select2.full.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\select2\js\select2.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\sweetalert\sweetalert.min.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\jquery.timeago.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.af.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.am.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ar.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.az-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.az.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.be.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.bg.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.bs.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ca.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.cs.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.cy.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.da.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.de-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.de.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.dv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.el.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.en-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.en.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.es-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.es.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.et.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.eu.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.fa-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.fa.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.fi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.fr-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.fr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.gl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.he.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.hr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.hu.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.hy.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.id.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.is.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.it-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.it.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ja.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.jv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ko.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ky.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.lt.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.lv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.mk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.nl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.no.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.pl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.pt-br-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.pt-br.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.pt-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.pt.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ro.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.rs.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ru.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.rw.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.si.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.sk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.sl.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.sq.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.sr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.sv.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.th.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.tr-short.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.tr.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.uk.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.ur.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.uz.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.vi.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.zh-CN.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\jquery.timeago.zh-TW.js" />
<_ContentIncludedByDefault Remove="wwwroot\libs\timeago\locales\README.md" />
<_ContentIncludedByDefault Remove="wwwroot\libs\toastr\toastr.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\toastr\toastr.js.map" />
<_ContentIncludedByDefault Remove="wwwroot\libs\toastr\toastr.min.css" />
<_ContentIncludedByDefault Remove="wwwroot\libs\toastr\toastr.min.js" />
</ItemGroup>
</Project>

75
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/IdentityServiceHttpApiHostModule.cs

@ -0,0 +1,75 @@
using EShopOnAbp.IdentityService.DbMigrations;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using EShopOnAbp.IdentityService.EntityFrameworkCore;
using EShopOnAbp.Shared.Hosting.Microservices;
using Volo.Abp;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(EShopOnAbpSharedHostingMicroservicesModule),
typeof(IdentityServiceHttpApiModule),
typeof(IdentityServiceApplicationModule),
typeof(IdentityServiceEntityFrameworkCoreModule)
)]
public class IdentityServiceHttpApiHostModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var hostingEnvironment = context.Services.GetHostingEnvironment();
JwtBearerConfigurationHelper.Configure(context, "IdentityService");
SwaggerConfigurationHelper.Configure(context, "Identity Service API");
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCorrelationId();
app.UseAbpRequestLocalization();
app.UseStaticFiles();
app.UseRouting();
// app.UseHttpMetrics();
app.UseAuthentication();
app.UseAbpClaimsMap();
app.UseMultiTenancy();
app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Identity Service API");
});
app.UseAbpSerilogEnrichers();
app.UseAuditing();
app.UseUnitOfWork();
app.UseConfiguredEndpoints(endpoints =>
{
// endpoints.MapMetrics();
});
}
public override void OnPostApplicationInitialization(ApplicationInitializationContext context)
{
using (var scope = context.ServiceProvider.CreateScope())
{
AsyncHelper.RunSync(
() => scope.ServiceProvider
.GetRequiredService<IdentityServiceDatabaseMigrationChecker>()
.CheckAsync()
);
}
}
}
}

47
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Program.cs

@ -0,0 +1,47 @@
using System;
using System.Threading.Tasks;
using EShopOnAbp.Shared.Hosting.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;
namespace EShopOnAbp.IdentityService
{
public class Program
{
public static async Task<int> Main(string[] args)
{
var assemblyName = typeof(Program).Assembly.GetName().Name;
SerilogConfigurationHelper.Configure(assemblyName);
try
{
Log.Information($"Starting {assemblyName}.");
await CreateHostBuilder(args).Build().RunAsync();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, $"{assemblyName} terminated unexpectedly!");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
internal static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(build =>
{
build.AddJsonFile("appsettings.secrets.json", optional: true);
})
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
.UseAutofac()
.UseSerilog();
}
}

27
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Properties/launchSettings.json

@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44351",
"sslPort": 44351
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"EShopOnAbp.IdentityService.HttpApi.Host": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:44351",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

20
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/Startup.cs

@ -0,0 +1,20 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace EShopOnAbp.IdentityService
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication<IdentityServiceHttpApiHostModule>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}
}

2
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/appsettings.Development.json

@ -0,0 +1,2 @@
{
}

59
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/appsettings.json

@ -0,0 +1,59 @@
{
"App": {
"SelfUrl": "https://localhost:44351"
},
"AuthServer": {
"Authority": "https://localhost:44330",
"RequireHttpsMetadata": "true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"IdentityService": "Server=localhost,1434;Database=EShopOnAbp_Identity;User Id=sa;password=myPassw0rd",
"AdministrationService": "Server=localhost,1434;Database=EShopOnAbp_Administration;User Id=sa;password=myPassw0rd",
"SaasService": "Server=localhost,1434;Database=EShopOnAbp_Saas;User Id=sa;password=myPassw0rd"
},
"StringEncryption": {
"DefaultPassPhrase": "gsKnGZ041HLL4IM8"
},
"Redis": {
"Configuration": "localhost:6379"
},
"RabbitMQ": {
"Connections": {
"Default": {
"HostName": "localhost"
}
},
"EventBus": {
"ClientName": "EShopOnAbp_IdentityService",
"ExchangeName": "EShopOnAbp"
}
},
"ElasticSearch": {
"Url": "http://localhost:9200"
},
"IdentityServerClients":{
"EShopOnAbp_Angular": {
"RootUrl": "http://localhost:4200"
},
"EShopOnAbp_PublicWeb": {
"RootUrl": "https://localhost:44335/"
},
"InternalGateway": {
"RootUrl": "https://localhost:44302"
},
"WebGateway": {
"RootUrl": "https://localhost:44325"
},
"PublicWebGateway": {
"RootUrl": "https://localhost:44353"
}
}
}

1
services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/tempkey.jwk

@ -0,0 +1 @@
{"AdditionalData":{},"Alg":"RS256","Crv":null,"D":"IzuLrZFLSUN64jZJeu9yDcNeK9--r_4-FHBxytp0JoGPPEodp_s7DQoGntnuuAZmTpLtBZwyyJVpK1G8rO1WGoJFEjfIUzoLjaK-rRpiNoM2q-lF31mVlHPwgVTmFAE5rdl17YmWHVaTv4pixNXvRSrb4oOVvuj5EsIQ2QyDIewW4GE7nlitV6nm9VsRCgvwztrmatEDrpL_KQFORuT7961jNF4PT_NLBt6pn7O9V_07E5bNi4m8CP79xjw3YiZcjaAKESXfQYAJHvfPgeD9Tyy3udzRjsMYXlz7ttP396y5cWCFJoa-SQ4r2Crd4q5g3jc3nc6vd72sDU8F3PkUSQ","DP":"bOHLOAtVJbawgWAQcCVGfJkxfekLDyni_JYjEjUgMQityaxdVhzMSA-s84vaMMbeX4HI2OsnUGr5sDM0iKqSaCGlBGC7_zRarfEYT07r7O1EVP8DGG8YmkZgLxaS3plB43wjQQzlOJb5dNicvc2KoccytnVCp4Xoj8E6wGHzulk","DQ":"M-xdkU4u1DQ3Stl7sZy4TzXEGjje-OKfQcYObfrz254l5MJOe4BNKW8VGNvWOg_CGfstkWExIMW509CeDb63CTLbXaGm60t_zgXUSTxLH7ekMcOhJ1wsBjvlUF6TP3GQmAdWpxTUIPea0jsKydweTsW5Djm6LqasnDHKED7KgYE","E":"AQAB","K":null,"KeyId":"8E326BF5420CBC8ABF92FA5BA0AAE11F","Kid":"8E326BF5420CBC8ABF92FA5BA0AAE11F","Kty":"RSA","N":"xf8vklnYR5-A-ycF9CqbnqdbnAfIgCFS_f3xDraHJ8Ueup5boNZQhkekhlste5y98mrDjpSqRillNow6GT6g8i287S8p_mI6j1nJ_uG8UiFkebLbcTbxg0KfTxnCHcBKFqKc42iGq_C-2aGonYpXb4RkN6hf8ISWaB6ixh8WZnXFBCFtIlZxoCMu5TY48sMoGJwcITr0PKp9KNctDQm2Uo5XwX231sOQojqq2QfnLo0X5U7pz3aFNjA8B6owt_a_-OiuTNovaVaEQZE0FyZK4V1rghOs1bi2ircoxuo2mSRmHNPI_GiVrZ22hsYnDsL_cLBoiTrAWmfCwjZ8UoCL3Q","Oth":null,"P":"56bYOV1Jxg6co465j58ew8uYE6JUtBUG71rZRoJDiIiu3_BeKcUuR9Yn-_N7ZrHXCCVNC5GBCye-AcTvLaJqMuUERZdKGM1BJBly_SsCZGbt1c9VdjHwUiq0JyY2OmhzqBcxV3ZLo43t0J0M6wsBwZX-c4zshsT-0S0hfRBbL78","Q":"2s7GBO8lcD9mLIXm5hB-FuHENrtpHYYxD1z5e2noJB2F15NHmg3WjA2r2dN5g0JOpVq5n1I20HEpgcCOuNXwU-p6eigbmqQAa4yuEzxib7dffxNGPQ8RbB0pSc8SZ1Jv1CWkDmlFXOalj6K3Y6tT7q8Cb3QF7qGiSTEXNd_IK2M","QI":"szEGtChCJ1i9rGqCBjc1HwCHwWVvHlafBJNx93D14R4XHHj5j7yNnRoKNmPkftOv29weGLSYo03Mq9KuuudozZAFuXYsBHyvB6H6D5OTkEPJcspYj2fMNTRek7Cut0VZZ1IpYpPbZzFhhdP65sIa3NVadw1Fo7rutn1KQ68mQbw","Use":null,"X":null,"X5t":null,"X5tS256":null,"X5u":null,"Y":null,"KeySize":2048,"HasPrivateKey":true,"CryptoProviderFactory":{"CryptoProviderCache":{},"CustomCryptoProvider":null,"CacheSignatureProviders":true}}

17
services/identity/src/EShopOnAbp.IdentityService.HttpApi/EShopOnAbp.IdentityService.HttpApi.csproj

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.IdentityService.Application.Contracts\EShopOnAbp.IdentityService.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Identity.HttpApi" Version="4.3.3" />
<PackageReference Include="Volo.Abp.Account.HttpApi" Version="4.3.3" />
</ItemGroup>
</Project>

15
services/identity/src/EShopOnAbp.IdentityService.HttpApi/IdentityServiceHttpApiModule.cs

@ -0,0 +1,15 @@
using Volo.Abp.Account;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(IdentityServiceApplicationContractsModule),
typeof(AbpAccountHttpApiModule),
typeof(AbpIdentityHttpApiModule)
)]
public class IdentityServiceHttpApiModule : AbpModule
{
}
}

17
services/identity/test/EShopOnAbp.IdentityService.Application.Tests/EShopOnAbp.IdentityService.Application.Tests.csproj

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\EShopOnAbp.IdentityService.Application\EShopOnAbp.IdentityService.Application.csproj" />
<ProjectReference Include="..\EShopOnAbp.IdentityService.Domain.Tests\EShopOnAbp.IdentityService.Domain.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.1" />
</ItemGroup>
</Project>

7
services/identity/test/EShopOnAbp.IdentityService.Application.Tests/IdentityServiceApplicationTestBase.cs

@ -0,0 +1,7 @@
namespace EShopOnAbp.IdentityService
{
public abstract class IdentityServiceApplicationTestBase : IdentityServiceTestBase<IdentityServiceApplicationTestModule>
{
}
}

13
services/identity/test/EShopOnAbp.IdentityService.Application.Tests/IdentityServiceApplicationTestModule.cs

@ -0,0 +1,13 @@
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(IdentityServiceApplicationModule),
typeof(IdentityServiceDomainTestModule)
)]
public class IdentityServiceApplicationTestModule : AbpModule
{
}
}

16
services/identity/test/EShopOnAbp.IdentityService.Domain.Tests/EShopOnAbp.IdentityService.Domain.Tests.csproj

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.IdentityService.EntityFrameworkCore.Tests\EShopOnAbp.IdentityService.EntityFrameworkCore.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.1" />
</ItemGroup>
</Project>

7
services/identity/test/EShopOnAbp.IdentityService.Domain.Tests/IdentityServiceDomainTestBase.cs

@ -0,0 +1,7 @@
namespace EShopOnAbp.IdentityService
{
public abstract class IdentityServiceDomainTestBase : IdentityServiceTestBase<IdentityServiceDomainTestModule>
{
}
}

13
services/identity/test/EShopOnAbp.IdentityService.Domain.Tests/IdentityServiceDomainTestModule.cs

@ -0,0 +1,13 @@
using EShopOnAbp.IdentityService.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(IdentityServiceEntityFrameworkCoreTestModule)
)]
public class IdentityServiceDomainTestModule : AbpModule
{
}
}

18
services/identity/test/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests.csproj

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\EShopOnAbp.IdentityService.EntityFrameworkCore\EShopOnAbp.IdentityService.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\EShopOnAbp.IdentityService.TestBase\EShopOnAbp.IdentityService.TestBase.csproj" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.Sqlite" Version="4.3.3" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.1" />
</ItemGroup>
</Project>

9
services/identity/test/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests/EntityFrameworkCore/IdentityServiceEntityFrameworkCoreTestBase.cs

@ -0,0 +1,9 @@
using Volo.Abp;
namespace EShopOnAbp.IdentityService.EntityFrameworkCore
{
public abstract class IdentityServiceEntityFrameworkCoreTestBase : IdentityServiceTestBase<IdentityServiceEntityFrameworkCoreTestModule>
{
}
}

62
services/identity/test/EShopOnAbp.IdentityService.EntityFrameworkCore.Tests/EntityFrameworkCore/IdentityServiceEntityFrameworkCoreTestModule.cs

@ -0,0 +1,62 @@
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Sqlite;
using Volo.Abp.Modularity;
namespace EShopOnAbp.IdentityService.EntityFrameworkCore
{
[DependsOn(
typeof(IdentityServiceEntityFrameworkCoreModule),
typeof(IdentityServiceTestBaseModule),
typeof(AbpEntityFrameworkCoreSqliteModule)
)]
public class IdentityServiceEntityFrameworkCoreTestModule : AbpModule
{
private SqliteConnection _sqliteConnection;
public override void ConfigureServices(ServiceConfigurationContext context)
{
ConfigureInMemorySqlite(context.Services);
}
private void ConfigureInMemorySqlite(IServiceCollection services)
{
_sqliteConnection = CreateDatabaseAndGetConnection();
services.Configure<AbpDbContextOptions>(options =>
{
options.Configure(context =>
{
context.DbContextOptions.UseSqlite(_sqliteConnection);
});
});
}
public override void OnApplicationShutdown(ApplicationShutdownContext context)
{
_sqliteConnection.Dispose();
}
private static SqliteConnection CreateDatabaseAndGetConnection()
{
var connection = new SqliteConnection("Data Source=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<IdentityServiceDbContext>()
.UseSqlite(connection)
.Options;
using (var context = new IdentityServiceDbContext(options))
{
context.GetService<IRelationalDatabaseCreator>().CreateTables();
}
return connection;
}
}
}

24
services/identity/test/EShopOnAbp.IdentityService.TestBase/EShopOnAbp.IdentityService.TestBase.csproj

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>EShopOnAbp.IdentityService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.TestBase" Version="4.3.3" />
<PackageReference Include="Volo.Abp.Autofac" Version="4.3.3" />
<PackageReference Include="Volo.Abp.Authorization" Version="4.3.3" />
<ProjectReference Include="..\..\src\EShopOnAbp.IdentityService.Domain\EShopOnAbp.IdentityService.Domain.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.1" />
<PackageReference Include="NSubstitute" Version="4.2.2" />
<PackageReference Include="Shouldly" Version="4.0.3" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
</ItemGroup>
</Project>

61
services/identity/test/EShopOnAbp.IdentityService.TestBase/IdentityServiceTestBase.cs

@ -0,0 +1,61 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Modularity;
using Volo.Abp.Uow;
using Volo.Abp.Testing;
namespace EShopOnAbp.IdentityService
{
/* All test classes are derived from this class, directly or indirectly.
*/
public abstract class IdentityServiceTestBase<TStartupModule> : AbpIntegratedTest<TStartupModule>
where TStartupModule : IAbpModule
{
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
protected virtual Task WithUnitOfWorkAsync(Func<Task> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func<Task> action)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
await action();
await uow.CompleteAsync();
}
}
}
protected virtual Task<TResult> WithUnitOfWorkAsync<TResult>(Func<Task<TResult>> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task<TResult> WithUnitOfWorkAsync<TResult>(AbpUnitOfWorkOptions options, Func<Task<TResult>> func)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
var result = await func();
await uow.CompleteAsync();
return result;
}
}
}
}
}

42
services/identity/test/EShopOnAbp.IdentityService.TestBase/IdentityServiceTestBaseModule.cs

@ -0,0 +1,42 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Authorization;
using Volo.Abp.Autofac;
using Volo.Abp.Data;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace EShopOnAbp.IdentityService
{
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpTestBaseModule),
typeof(AbpAuthorizationModule),
typeof(IdentityServiceDomainModule)
)]
public class IdentityServiceTestBaseModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAlwaysAllowAuthorization();
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
SeedTestData(context);
}
private static void SeedTestData(ApplicationInitializationContext context)
{
AsyncHelper.RunSync(async () =>
{
using (var scope = context.ServiceProvider.CreateScope())
{
await scope.ServiceProvider
.GetRequiredService<IDataSeeder>()
.SeedAsync();
}
});
}
}
}

16
services/identity/test/EShopOnAbp.IdentityService.TestBase/IdentityServiceTestDataSeedContributor.cs

@ -0,0 +1,16 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.IdentityService
{
public class IdentityServiceTestDataSeedContributor : IDataSeedContributor, ITransientDependency
{
public Task SeedAsync(DataSeedContext context)
{
/* Seed additional test data... */
return Task.CompletedTask;
}
}
}

43
services/identity/test/EShopOnAbp.IdentityService.TestBase/Security/FakeCurrentPrincipalAccessor.cs

@ -0,0 +1,43 @@
using System.Collections.Generic;
using System.Security.Claims;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace EShopOnAbp.IdentityService.Security
{
[Dependency(ReplaceServices = true)]
public class FakeCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor
{
protected override ClaimsPrincipal GetClaimsPrincipal()
{
return GetPrincipal();
}
private ClaimsPrincipal _principal;
private ClaimsPrincipal GetPrincipal()
{
if (_principal == null)
{
lock (this)
{
if (_principal == null)
{
_principal = new ClaimsPrincipal(
new ClaimsIdentity(
new List<Claim>
{
new Claim(AbpClaimTypes.UserId,"2e701e62-0953-4dd3-910b-dc6cc93ccb0d"),
new Claim(AbpClaimTypes.UserName,"admin"),
new Claim(AbpClaimTypes.Email,"admin@abp.io")
}
)
);
}
}
}
return _principal;
}
}
}

2
services/saas/src/EShopOnAbp.SaasService.HttpApi.Host/appsettings.json

@ -16,7 +16,7 @@
"AllowedHosts": "*",
"ConnectionStrings": {
"SaasService": "Server=localhost,1434;Database=EShopOnAbp_Saas;User Id=sa;password=myPassw0rd;MultipleActiveResultSets=true",
"AdministrationService": "Server=localhost,1434;Database=MyProjectName_Administration;User Id=sa;password=myPassw0rd;MultipleActiveResultSets=true"
"AdministrationService": "Server=localhost,1434;Database=EShopOnAbp_Administration;User Id=sa;password=myPassw0rd;MultipleActiveResultSets=true"
},
"StringEncryption": {
"DefaultPassPhrase": "gsKnGZ041HLL4IM8"

12
shared/EShopOnAbp.Shared.Hosting/EShopOnAbpSharedHostingModule.cs

@ -32,12 +32,12 @@ namespace EShopOnAbp.Shared.Hosting
database.MappedConnections.Add("AbpFeatureManagement");
database.MappedConnections.Add("AbpBlobStoring");
});
//
// options.Databases.Configure("IdentityService", database =>
// {
// database.MappedConnections.Add("AbpIdentity");
// database.MappedConnections.Add("AbpIdentityServer");
// });
options.Databases.Configure("IdentityService", database =>
{
database.MappedConnections.Add("AbpIdentity");
database.MappedConnections.Add("AbpIdentityServer");
});
//
// options.Databases.Configure("ProductService", database =>
// {

Loading…
Cancel
Save