72 changed files with 6868 additions and 7 deletions
@ -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 |
|||
@ -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> |
|||
@ -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 |
|||
{ |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace EShopOnAbp.IdentityService |
|||
{ |
|||
public class IdentityServiceRemoteServiceConsts |
|||
{ |
|||
public const string RemoteServiceName = "IdentityService"; |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -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); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -0,0 +1,7 @@ |
|||
namespace EShopOnAbp.IdentityService |
|||
{ |
|||
public static class IdentityServiceDomainErrorCodes |
|||
{ |
|||
/* You can add your business exception error codes here, as constants */ |
|||
} |
|||
} |
|||
@ -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); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -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
|
|||
*/ |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
{ |
|||
"culture": "ar", |
|||
"texts": { |
|||
"Menu:Home": "الرئيسية", |
|||
"Welcome": "مرحبا", |
|||
"LongWelcomeMessage": "مرحبا بكم في التطبيق. هذا مشروع بدء تشغيل يعتمد على إطار عمل ABP. لمزيد من المعلومات ، يرجى زيارة abp.io." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
{ |
|||
"culture": "ru", |
|||
"texts": { |
|||
"Menu:Home": "Главная", |
|||
"Welcome": "Добро пожаловать", |
|||
"LongWelcomeMessage": "Добро пожаловать в приложение. Этот запущенный проект основан на фреймворке ABP. Для получения дополнительной информации посетите сайт abp.io." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -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." |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
{ |
|||
"culture": "zh-Hans", |
|||
"texts": { |
|||
"Menu:Home": "首页", |
|||
"Welcome": "欢迎", |
|||
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io." |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
{ |
|||
"culture": "zh-Hant", |
|||
"texts": { |
|||
"Menu:Home": "首頁", |
|||
"Welcome": "歡迎", |
|||
"LongWelcomeMessage": "歡迎來到此應用程式. 這是一個基於ABP框架的起始專案. 有關更多訊息, 請瀏覽 abp.io." |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
using Volo.Abp.Localization; |
|||
|
|||
namespace EShopOnAbp.IdentityService.Localization |
|||
{ |
|||
[LocalizationResourceName("IdentityService")] |
|||
public class IdentityServiceResource |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -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> |
|||
@ -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*"; |
|||
} |
|||
} |
|||
@ -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 |
|||
{ |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -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(); |
|||
} |
|||
} |
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
} |
|||
@ -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
|
|||
*/ |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -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"); }); |
|||
}); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -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> |
|||
@ -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 |
|||
); |
|||
} |
|||
} |
|||
} |
|||
@ -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"); |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
@ -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) |
|||
{ |
|||
|
|||
} |
|||
} |
|||
} |
|||
@ -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 |
|||
); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -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() |
|||
); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -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" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,2 @@ |
|||
{ |
|||
} |
|||
@ -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" |
|||
} |
|||
} |
|||
} |
|||
@ -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}} |
|||
@ -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> |
|||
@ -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 |
|||
{ |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -0,0 +1,7 @@ |
|||
namespace EShopOnAbp.IdentityService |
|||
{ |
|||
public abstract class IdentityServiceApplicationTestBase : IdentityServiceTestBase<IdentityServiceApplicationTestModule> |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace EShopOnAbp.IdentityService |
|||
{ |
|||
[DependsOn( |
|||
typeof(IdentityServiceApplicationModule), |
|||
typeof(IdentityServiceDomainTestModule) |
|||
)] |
|||
public class IdentityServiceApplicationTestModule : AbpModule |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -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> |
|||
@ -0,0 +1,7 @@ |
|||
namespace EShopOnAbp.IdentityService |
|||
{ |
|||
public abstract class IdentityServiceDomainTestBase : IdentityServiceTestBase<IdentityServiceDomainTestModule> |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using EShopOnAbp.IdentityService.EntityFrameworkCore; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace EShopOnAbp.IdentityService |
|||
{ |
|||
[DependsOn( |
|||
typeof(IdentityServiceEntityFrameworkCoreTestModule) |
|||
)] |
|||
public class IdentityServiceDomainTestModule : AbpModule |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -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> |
|||
@ -0,0 +1,9 @@ |
|||
using Volo.Abp; |
|||
|
|||
namespace EShopOnAbp.IdentityService.EntityFrameworkCore |
|||
{ |
|||
public abstract class IdentityServiceEntityFrameworkCoreTestBase : IdentityServiceTestBase<IdentityServiceEntityFrameworkCoreTestModule> |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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(); |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue