From 8d2d27443993a577e53db3d1ef738af4eb5a1ef8 Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Sun, 17 May 2020 00:31:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=BA=AB=E4=BB=BD=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E6=9C=8D=E5=8A=A1=E5=99=A8Api=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.gitignore | 7 + ...n.Contracts.csproj.CoreCompileInputs.cache | 1 - ...tion.Contracts.csproj.FileListAbsolute.txt | 1 - ...on.Contracts.csprojAssemblyReference.cache | Bin 6430 -> 6430 bytes ...Application.Contracts.csproj.nuget.g.props | 2 +- .../LINGYUN.ApiGateway.Application/.gitignore | 7 + ...NGYUN.ApiGateway.Application.Contracts.dll | Bin 38912 -> 38912 bytes .../LINGYUN.ApiGateway.Domain.Shared.dll | Bin 15360 -> 15360 bytes ....Application.csprojAssemblyReference.cache | Bin 11657 -> 168011 bytes .../.gitignore | 7 + ...main.Shared.csproj.CoreCompileInputs.cache | 1 - ....Domain.Shared.csproj.FileListAbsolute.txt | 1 - ...omain.Shared.csprojAssemblyReference.cache | Bin 424 -> 85770 bytes ...Gateway.Domain.Shared.csproj.nuget.g.props | 2 +- .../LINGYUN.ApiGateway.Domain/.gitignore | 7 + .../LINGYUN.ApiGateway.Domain.Shared.dll | Bin 15360 -> 15360 bytes ...teway.Domain.csprojAssemblyReference.cache | Bin 424 -> 424 bytes .../.gitignore | 7 + .../LINGYUN.ApiGateway.Domain.Shared.dll | Bin 15360 -> 15360 bytes ...rameworkCore.csprojAssemblyReference.cache | Bin 4115 -> 5700 bytes .../.gitignore | 7 + .../LINGYUN.ApiGateway.HttpApi.Client.dll | Bin 5632 -> 5632 bytes ...pApi.Client.csproj.CoreCompileInputs.cache | 1 - ...HttpApi.Client.csproj.FileListAbsolute.txt | 1 - ...tpApi.Client.csprojAssemblyReference.cache | Bin 16846 -> 18491 bytes .../LINGYUN.ApiGateway.HttpApi.Client.dll | Bin 5632 -> 5632 bytes ...ateway.HttpApi.Client.csproj.nuget.g.props | 2 +- .../LINGYUN.ApiGateway.HttpApi/.gitignore | 7 + ...NGYUN.ApiGateway.Application.Contracts.dll | Bin 38912 -> 38912 bytes .../LINGYUN.ApiGateway.Domain.Shared.dll | Bin 15360 -> 15360 bytes ...eway.HttpApi.csprojAssemblyReference.cache | Bin 11901 -> 241158 bytes .../.gitignore | 7 + ...dentityServer.Application.Contracts.csproj | 23 ++ ...dentityServerApplicationContractsModule.cs | 29 ++ .../IdentityServer/AbpIdentityServerConsts.cs | 10 + .../AbpIdentityServerErrorConsts.cs | 25 ++ ...ntityServerPermissionDefinitionProvider.cs | 33 ++ .../AbpIdentityServerPermissions.cs | 25 ++ .../Clients/Dto/ClientClaimCreateDto.cs | 20 ++ .../Clients/Dto/ClientClaimDto.cs | 9 + .../Dto/ClientClaimGetByKeyInputDto.cs | 16 + .../Clients/Dto/ClientClaimUpdateDto.cs | 20 ++ .../Clients/Dto/ClientCorsOriginDto.cs | 9 + .../Clients/Dto/ClientCreateDto.cs | 26 ++ .../IdentityServer/Clients/Dto/ClientDto.cs | 113 +++++++ .../Clients/Dto/ClientGetByIdInputDto.cs | 11 + .../Clients/Dto/ClientGetByPagedInputDto.cs | 8 + .../Clients/Dto/ClientGrantTypeDto.cs | 9 + .../Clients/Dto/ClientIdPRestrictionDto.cs | 9 + .../Dto/ClientPostLogoutRedirectUriDto.cs | 9 + .../Clients/Dto/ClientPropertyCreateDto.cs | 20 ++ .../Clients/Dto/ClientPropertyDto.cs | 11 + .../Clients/Dto/ClientPropertyGetByKeyDto.cs | 16 + .../Clients/Dto/ClientPropertyUpdateDto.cs | 20 ++ .../Clients/Dto/ClientRedirectUriDto.cs | 9 + .../Clients/Dto/ClientScopeDto.cs | 9 + .../Clients/Dto/ClientSecretCreateDto.cs | 25 ++ .../Clients/Dto/ClientSecretDto.cs | 7 + .../Clients/Dto/ClientSecretGetByTypeDto.cs | 16 + .../Clients/Dto/ClientSecretUpdateDto.cs | 25 ++ .../Clients/Dto/ClientUpdateDto.cs | 125 +++++++ .../Clients/IClientAppService.cs | 37 +++ .../Localization/Resources/en.json | 17 + .../Localization/Resources/zh-Hans.json | 17 + .../Abp/IdentityServer/SecretBaseDto.cs | 16 + .../.gitignore | 7 + .../LINGYUN.IdentityServer.Application.csproj | 16 + .../AbpIdentityServerAppServiceBase.cs | 13 + .../AbpIdentityServerApplicationModule.cs | 25 ++ .../AbpIdentityServerAutoMapperProfile.cs | 23 ++ .../Clients/ClientAppService.cs | 310 +++++++++++++++++ .../LINGYUN.IdentityServer.HttpApi/.gitignore | 7 + .../LINGYUN.IdentityServer.HttpApi.csproj | 16 + .../AbpIdentityServerHttpApiModule.cs | 21 ++ .../Clients/ClientController.cs | 116 +++++++ .../.gitignore | 7 + ...on.Contracts.csprojAssemblyReference.cache | Bin 424 -> 424 bytes .../.gitignore | 7 + ...N.Abp.PermissionManagement.Application.dll | Bin 16896 -> 16896 bytes ...N.Abp.PermissionManagement.Application.pdb | Bin 2932 -> 2932 bytes ....Application.csprojAssemblyReference.cache | Bin 424 -> 93804 bytes ...N.Abp.PermissionManagement.Application.dll | Bin 16896 -> 16896 bytes ...N.Abp.PermissionManagement.Application.pdb | Bin 2932 -> 2932 bytes ...anagement.Application.csproj.nuget.g.props | 2 +- .../.gitignore | 7 + .../.gitignore | 7 + ...on.Contracts.csprojAssemblyReference.cache | Bin 9830 -> 8895 bytes .../.gitignore | 7 + ....Application.csprojAssemblyReference.cache | Bin 17957 -> 20860 bytes .../.gitignore | 7 + ...ment.HttpApi.csprojAssemblyReference.cache | Bin 28082 -> 26062 bytes .../AuthIdentityServerModule.cs | 10 +- .../AuthServer.Host/AuthServer.Host.csproj | 2 + vueJs/src/api/clients.ts | 133 ++++++++ vueJs/src/api/types.ts | 27 ++ vueJs/src/components/InputTagEx/index.vue | 203 +++++++++++ vueJs/src/lang/zh.ts | 32 +- vueJs/src/router/index.ts | 27 ++ vueJs/src/utils/request.ts | 12 +- .../components/RouteCreateOrEditForm.vue | 5 +- vueJs/src/views/admin/apigateway/route.vue | 61 +++- .../components/ClientAllowScopesInput.vue | 204 ++++++++++++ .../client/components/ClientEditForm.vue | 234 +++++++++++++ .../admin/identityServer/client/index.vue | 314 ++++++++++++++++++ .../identityServer/components/ScopeInput.vue | 191 +++++++++++ vueJs/src/views/login/index.vue | 8 +- 106 files changed, 2864 insertions(+), 39 deletions(-) create mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/.gitignore delete mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.CoreCompileInputs.cache create mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/.gitignore create mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/.gitignore delete mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.CoreCompileInputs.cache create mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain/.gitignore create mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.EntityFrameworkCore/.gitignore create mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/.gitignore delete mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.CoreCompileInputs.cache create mode 100644 aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/.gitignore create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/.gitignore create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN.IdentityServer.Application.Contracts.csproj create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationContractsModule.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerConsts.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerErrorConsts.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissionDefinitionProvider.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissions.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimCreateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimGetByKeyInputDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimUpdateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCorsOriginDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCreateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByIdInputDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByPagedInputDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGrantTypeDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientIdPRestrictionDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPostLogoutRedirectUriDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyCreateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyGetByKeyDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyUpdateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientRedirectUriDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientScopeDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretCreateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretGetByTypeDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretUpdateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientUpdateDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/IClientAppService.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/en.json create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/zh-Hans.json create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/SecretBaseDto.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/.gitignore create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN.IdentityServer.Application.csproj create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAppServiceBase.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationModule.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAutoMapperProfile.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/Clients/ClientAppService.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/.gitignore create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN.IdentityServer.HttpApi.csproj create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/AbpIdentityServerHttpApiModule.cs create mode 100644 aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/Clients/ClientController.cs create mode 100644 aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application.Contracts/.gitignore create mode 100644 aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/.gitignore create mode 100644 aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Domain/.gitignore create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/.gitignore create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/.gitignore create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/.gitignore create mode 100644 vueJs/src/api/clients.ts create mode 100644 vueJs/src/components/InputTagEx/index.vue create mode 100644 vueJs/src/views/admin/identityServer/client/components/ClientAllowScopesInput.vue create mode 100644 vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue create mode 100644 vueJs/src/views/admin/identityServer/client/index.vue create mode 100644 vueJs/src/views/admin/identityServer/components/ScopeInput.vue diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/.gitignore b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.CoreCompileInputs.cache b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.CoreCompileInputs.cache deleted file mode 100644 index 7128c9a0f..000000000 --- a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -05d2e1f53650cb86c4348471113d51741fb76ff0 diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.FileListAbsolute.txt b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.FileListAbsolute.txt index 48e16ef46..7f42fc0ec 100644 --- a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.FileListAbsolute.txt +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csproj.FileListAbsolute.txt @@ -20,4 +20,3 @@ D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN. D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Application.Contracts\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Application.Contracts.csproj.CopyComplete D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Application.Contracts\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Application.Contracts.dll D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Application.Contracts\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Application.Contracts.pdb -D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Application.Contracts\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Application.Contracts.csproj.CoreCompileInputs.cache diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csprojAssemblyReference.cache b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.csprojAssemblyReference.cache index 93572b14d278d2dcaa76f969464dea5c8082d935..28c0be356375433c7be057c65cb1711c458254fd 100644 GIT binary patch delta 15 WcmbPdG|y;*KO>W=%H}}Ev*G|L>;&Zi delta 15 WcmbPdG|y;*KO@s+xy^x$XT$(UserProfile)\.nuget\packages\ C:\Users\iVarKey\.nuget\packages\;D:\Microsoft\Xamarin\NuGet\;C:\Program Files (x86)\dotnet\sdk\NuGetFallbackFolder PackageReference - 5.4.0 + 5.5.0 $(MSBuildAllProjects);$(MSBuildThisFileFullPath) diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/.gitignore b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Application.Contracts.dll index 584d1aaeda300afa25b39c53f6f1e9862d464b8b..9c02a855f93c1cfea1103e9bb7f3f868486212f5 100644 GIT binary patch delta 44 zcmV+{0Mq|~umXUv0+5IV80D|Xo CAryK5 delta 44 zcmV+{0Mq|~umXUv0+5IVNm$~Gk&IFSK(XKPdk`bWV92jnnnICN?{s53nr^e;d>|Xc CRupys diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Application/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.dll index 4c59c3ba87b45726c8c6648910e92edfd6d492d3..2bac2737cb339965f85fb77dc00f4be71db87296 100644 GIT binary patch delta 42 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 S5#yffNNZ3Xi9v)(-+urCtMyv| diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/.gitignore b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.CoreCompileInputs.cache b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.CoreCompileInputs.cache deleted file mode 100644 index e826eb8cc..000000000 --- a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -061f3f9088fee775a74c51e73c470d50ddb271db diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.FileListAbsolute.txt b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.FileListAbsolute.txt index 7c526ad2f..e2af42620 100644 --- a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.FileListAbsolute.txt +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csproj.FileListAbsolute.txt @@ -14,4 +14,3 @@ D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN. D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Domain.Shared\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Domain.Shared.AssemblyInfo.cs D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Domain.Shared\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Domain.Shared.dll D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Domain.Shared\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Domain.Shared.pdb -D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.Domain.Shared\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.Domain.Shared.csproj.CoreCompileInputs.cache diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csprojAssemblyReference.cache b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain.Shared/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.csprojAssemblyReference.cache index e239fc37997f8e3b8f86d84018aac2b4f6389bbc..ff398c03420371dffa79616d7bd31f7db5ee0ede 100644 GIT binary patch literal 85770 zcmdU22YeJ&{?7slJWx?VMFj;F8xRPQCMse;K>>jvAVt_D3#@E5VRr*YPeDuSx)_1(f{{5Z{F;CGZW!9d}i3a<7eK?cV>Ry@9Sme6+{XO z3jV~8|K)FsW-!N$j8~>=(ls+O#fQ|z6II3IqUqV`;xG$A`!1VB33`HW_B!jU`4Oe8GUB-n^96y)u&gq zG+M}qb@6{jd3`z)t1iz(GclsXjCdkug_?Jir{F~*5v$C=g>><-XnIyAT9Js+YtbC0 z1iMm+2prCm{ zVPTtA+uME|nW~B>qY3Alug3HrRNez_w7>&ygY%*ge+WLV1rIfH9a*-S7N41fxMk6F ztRNEEnitN&zoM2f$Cd3rWpt`$W-40U`B12lo>EnlNyai$(p9skjH){Xs{;EYIc9xyIzlCflFWKC5pfs}?|I?kkKxzif% z{4F?dM#VD46JizRHI=gwqm~D4;KBUhJeXLWD8|3?SSlV(AUmWiC$@kS=LHxm<*~}T zR6J8(T$ZY@%`hX>&Z;jSoS0dIqqC}|GF!r_lLK^WNIZ%xo6f{5)5XZ0m9ez+V=MSE zH@FxYRacG3fe*~DZSm~7;GR7po~){wCm+3au#X;Fm(0YgV;1Xe@aTmB#=Mgptv^sX zrBrdXZLlJgp$4o;NDNzERfoKcgi&bqQATsbkgvU1$4R4i(>YsR76lJ)3LaA8hxE>H~C5<3T*3anyc zbQJx91e#QIpd%azuo*S{NUI^2LJh4Na-HBokX44>SU{FUC#lkI(Cq?Gf^18vic>Y| zWQK4Rqr1YX(*w+=TIR6&nMP{q3}*sNEv`b8>9q?ys1Gim4vA)>OtIB=uVXhn{?TPuF54w>$)p^2rwbCxOU~sJ%jbYQh!Wc zELG1D7AyYuf(HTiKlO5RTun_vw(|Cd6Xyh&A)E%k(aJLhD)xa(0j5us-gD!XF*!x@!3bUD>~W~pWHRXnSHfvrS@j1C?e1{lvH%l_Dl&#A(b}%5wPPq< zY#((7c!8`dmK#4+G%2~i49Y67U`tJ9S=DU6I; z58V$B4X~`rRwjvP+#b8^0~dm9Z=*+aRI)mnjLwWzjf_>-r0Ow<6^m9|dh~@e0j5T# z27QFPA0EFTz;YW}496%MrkkqDF&hL)EEW30jQ|_EoLRG;J0Mu~^|n6Cg8lLMKt|EC zlYbaRF754Z=?;V+LH2p9si(2AnRSV1YUpvb_E>?e9S?vnLFP_#*vwT$9SCQF9N|>W z8gslr)m#U`n;>#YQk&6aG985H&I_QTu%|_{;}d-N!Fc$^0hUnN8bhD{n%Jk;fHDm2 z#%IJUQFzIuIvB16*nm+zk3;a-04E=;p0S#9DZ{e^DY5Ldp!a&%;Zc4J3D^&2!HJ`z znOVgXhtyPJ7SL`(4TT>;_5xj_tCQljT%%ysWrxC*KpXbes<;OFM!=aMn?I&ALsFPf<$#5ii$?|=KTdTA zO_G)I+NkU#kAfQkW?>euV=-eFOUZO=NpU262rvsH|8mxw9c}-o)o{~BSzMK+Z^B3iW99kV2t*wn!SqrzVoH8xgR57GJ8LdVp zRT+kb*L1iLR=I(hAFSq0sqSht;AqJXkbNAF4l=Pi-BM!_h^u38ESw6klbS8ea1AP7kqdI4-c}E z*OQ@4kRz?t5OQ699lSX+z^;PcZDF}(zmV#Tz|Ms~L3Ul-)yinBytLBDJU9|cVUZn! z-I}k{GQW!BXzFQ>r#XSOpok>)0vn`v&LSw(Xz&22Qd)7(MxcbYqC?xI;ub2rUBH22cnN3(|J zewqhp*3vvk^AOF$G>_0cO7j@a<1|muJW2Bu&C@i`(ENkuS(@i){z>yZ%?mUy()^3& zC7PFMUZHuF<~5ps)4Wczj^+)TH)-CYd7I`Pns;g5qj{g^1DX$MKBD=U<`bGvX+DD~ zWTNSoU3;Rx+%5}5>s9k^R_lSUptl6Rd38-y3;dhiEShXl6{}4brDq_QrVCRUbRnC~ zNaFqOX3Zi6qE&bIoy%w8ZStz(!Rd6Yx*}1}X(y+@*9^Cg(7eBJV(P;`UTYP>-{Nza z)~$=a;D6@s$CtKym6i-Bh%lkk`5!KdXTe`e@KjpC;5O@ee8(AC zH~2vY+_}gNUSxw0{DgIUlL{OqcOv*0!oyoDRg z0-50A!RxZ%EhTs>H<$%C!P7n;m<6|$;H}-@bNs;DNbt69Fe?HN!FCed-VHv_2H!rn zP1cR=BzSu__2-Pm1%_i%$*;SwC# zx-1LsD#3fY!K|1)ZtNw&d%MAx+2CC#Zqbur?&StwVS|mFQX;{<-QX*2u%UCQ1n=htU*+d>9|`X31~0e4 zkL`K&Jf~{wC&B&Q;07CP6kh`*cz-weY8z}6<^v`805|v=zdIi&!3Vj)Y-Nk>_fQEw)D2##?yM*N z!z6f^8_WhI?|gZ?J+gNmF2RSp!E9&}+^wrt6dWPJBivv%NC{rD^^Mu+9x1`2++a3b z2_F2}=~?NHl;F{BFdMi88#!f+1dnxt*$^h!sDR2Pc$^!2s}0_+rxqzkN$_|#_%<7y zjNg&jpnygN-~mM}kvs@LE4`T7olf@PjtkNJw=OJl73=$Oan;X`Tch=LSD)gN+)tUV@Kz zgCDWMH+|JH8{H>J@Za3vM{V%>JGaS#Pn6)3++cP*nKpV&D9nQAOYj0Wm>pDt4WCbz z;8WaSc4R%^g%W(K8_W(b!A9agO@dE%gP*d&M&e&2!DqO^>_B_&e5M4SaVPlNE47B}`4W7A8_W*A$LGZoe4!i6fdGPy zJa~}=U+e}yZ-dvqpyk0!BzTD%%z*{V4ZUi+RDv&agE;^}u#rTUO7Jo_m;)6A7oNQ` zTeV#-!B@D!9MJF(yi$U%a)UYWL9o%&TrR;4ZZHQ(2sT;;S4;3UZZHQ@2tMVeY1y=~ zLV~Y#gE`vAs%yZ*_y;w82KIyG?>`cZ1)u!Ha)xo^|663I4kq{I(4?3iCT9_%1j2 z9UFY%5eH@Oyjp_qc7xxw!A6t#9tpnJ4SvrLe4hlbaf9Et!A6O6zXU(v27h3KjkK{= zf**8)Iq=4`@zxuyvjiWK;D_B{4$u*7l%kJF@S|=p2l5Cu)ObvSA9sT};79O9UuwnI z6B7KS8~mvaHqypZ68y9q%mGA?8_!7aKV0A~p2dMt_8g1(*-Q@VZQNHg`}K?VsqE9Y zWI*YDv0nWL6mo3ve;Q)k78exGilzsTYJo*Sv1YZio7c|HG{>lA;fzFdX1Zl%ZCx}~ zIg6OG;ms=JE%C=Jd{|Ea!fC^3rWL-%7^}c^Zp+!R`r2qbRTxdNJpm5Nnc3u_7@En7B+4+YJeN18#9f){a%YB%ydkJb`ZsMk0~BBF+u69~4z<8u_I1 zSY~?3a=MEty(O=&3fWyO^XBLo_s>lORx(f9A4kQXV0Ex`}Z_HeA-if z__QZJeA?6J!>2uy+G~RLhfjN2A3p7AefU&AkHbAvu^Bx*`f;MGbpp9uVQohLrLh1iRSJV|Mrd zmaBLdF!3JE`@9~PTmLLwchPn2r0e<-Ko^9dYvV+u$RES6stuAh70;;xf==QSJS@W5 zAu0H$2ySOT+kQ*Hewkl1q z(fxveQ_-~o_RJ7e_hBG~7I0{4<1}?`o6vk{O^GU(v9U-1`P(riVv zA?SCypx^3(ZUgK|!8g8?*HXl7;lx-MA6>Z|dry!+w4)ZB`IpMIM^N=f>~C3%?Ql$N zPqPEThH#(h!hNa>w-c}@1}~iU0q)jCJHv-Dwr=)`Tx4@?)j-)gQVFhskg|0`P|0Sm zF%`SunAnx3Gr@*z@9MI>qsz8Cup!8%7RFjF{XO7=lFdG$%hrT^+LcOhHHegLPXs&K z@#B=+)*tpK#Km4fh`nj{;iZO%ujwMbs*Bhi*t0_@1${ZlEZhSwP5UdVy28D3uVsoU z)1QvQJrPt16R#QZ+vuVfj)@YQ-UJ(({!`cVIbG8}z=n`8ZKtJ(ec^*jnD&WHBwIf! z5rGymVfIH*RUmAW@#__001k@%X$BH)==Qj-+he+J2LT&G1){u`!VQ8Gssd4GOyzR! z{Txg!nmfu3Mo?wx>qh@3=FZDyvuE5dy(L=Db~TADe$$WZq@UEOna zbu+-87J|Ai@1?ADaOP-RRu@3m6R9@WQR}&srmdsrJOo>3<53)ku&AdwoccxP1Da^Qpi#j#LW}R7Iurl{K|hgg6;z#3?ij zd5Iy~-*nMV&_z2P*f5Gp!*{9QBDgZa*3UR?Dw%VlJA<;cbCf(2K{ax3zVj~5!YOe! z%{jcrkTR`HnbM^^AJ{NP?oH>VmKVSmRqdGPbumkdOE)S9yXN7chgeKuwsXY15JA-u z&_@T+Z_8MFy@-o|5Es*2!b=TJkJUAe>zZB$Y#1E@Uk*~*rEp1g1bkt-!c8b6mrUtia>-hw*=Z2tX zBP^u0Pr|9_U(?lf##_1@)sXNhW1pf_T^yaCMzD?jU~3%q85|J*pm~-^L)86rQA>4E zp9l8%;QInrv(@ShyZ{GAX*_hbnvg1Aqz1b?YW)kr9qgy5I#Ep~ikEOwyiD^7uQHVD zrYpCvuH3(YJw1fv=yqSG!`I=>q(%tpk~X2{Sx0fYI+DJDpsIP;wab3sNW6(t;w_rD zd5t0HZn~gdbV1((HjJ9bbY9B&K73IS}h-)%+aTFw``imuh|iUsOGAo_DF4YuWfEh1tgu^D6{9*qK4^c~~36 ziT~iN_?qS$US{aIwXSDdUC;jl8^-b|kN;BA@8Qnm#wczgRezv7-5gbaM6j#OW`CZ`+0#$_iIbuL>*qxT#+3Vy-?c?i>k)7kMYRAnj0(){z7)6+-lz)9jW8wM zs1d@_l8PCn{rmKdR+aYMFIL(INl+9~oSu%PeBnUN0O+|ayF;O91&9zdt$D4Hj(^mJ z{XrLYOJKv80q`dw<=qNCsTlx&oGCKiJ;`mIbz2Hm;)uL8f<7|<>_dxfa87JX(~cJz z>VBoG`=ze#_P~Zb1E98!Y+bYioKdM(n*kue)HC-rsvW3JsUzr)2$t9dk!lLMzxin& z*LIQ=JK-|1GfhX{&(QiqUF#2Yt#<{sA%qfnO;=uRM8_L?bga{(V{c$X8T@L5h7^Avc%_yhm~VDu z37b;qo*DL~TKycYyCJxZ9q-w_LPd8R7CmT+i8s{!m#*%My1FI6hVe#G)^Vw4Z}>6J zLrPb$3H{-nIrXBn^|Oxbc#oHa@_ z1kYDfwm4`?wNVYS3ZJ>Lp;X{NN2)^+RKu^@*0bU;92diAhVueLvb%N3R_l_D05*)_ zSIu*&-AFhx-plA!9Wfrpm5(%1WUTp|_p)TxV zUD#S+!)R4DMnft*2VSWu)y9yUNa_^DI?Rzeji9QASgfemR5Lg(>S*Tj0z=(1b#>3s z)vX6MjA}^pTnc(T98t4?+DTo*CbTP0pd`Z`4gZGVj&_}g*mLchEl$K~aT3jZUS~+T zK$mj9F6Ak}o)JQC)Js4rx)Af&5#Fw#-$JOou%)~0dA`8X~vpjpfd z4AGLhXw|xC7XuqcR@OY13GWg(qFR*NNi)Ue-lAMWO^$R#ycEHmvL7qK8-vC!?BX(< z7fWfD@j^q)m@a0OF6NcM2Kq{F;|!#zSHYpFje|^abFS8xQ=&1BwhaiX)e?>DEHADG zMqER)f)^Y5PSN$9tm})c1nX zUc^%4xaRsx4ujkYl(>s#H7_@`K3vy&xUTiRz=rW6R--(m*!RILH3HfwR9CwROD)$> zt_hCX_aoRQnf;oPcmM~)TABxmgs}X{F98kKg*{jo_7Px%Y!7H2O9>x^1EaK~S+&q@ z-?*=!RaW+^C@GyWqq3@ZRaI4=63`ZpQG=r$wH`-sYrDnfOxK7fa8x`=^AzEf%aN?V zE?GZavVQon^KG!)-cSG=pP_*=k+Fun|jrJ8T! z`D%O_2X(17GWS>bESY?V3QTjPdKW?U`Z{~Sqp@STcn=4~`!pXAZRpiW*Q=wh*T=wy z@cO#)T8j1woEU2-L3PGdF6SZ7PpL)JQSLJY{l3b>t#c{j=QuCEp!t#)8X~sWMQo>w z_%*PBb^&ay^z{!m11ab?aLDhgJT^$zwh0;dTS`>vX!{+4N?XpiOtkhoo2WKt7XQV0 z@jcBCywK3LjjnBLUE8044MSTW22$If;gHhS2c&D;gtq7}lqlwC`zwNKi4R6`_zr>E zu60tp_E3C0Qv3#p_?>1wuQlXtrpp`Anv^d{Rq%{BgO6>@#iG3=fLT zbVP2Bpqg>=ZT*TCK!`$`B3^1}{L63J`m~=BaMq^@V8fVk^5q~UZVi{zjFT_SR5<6! zls1$p?kKzkf@<-fwSIQ!aVj0B#g;fJwxVgvs|<0!)y4fr7k67=!&v<1c3A))tIX~6q{6v>?XJAhW zp~b4ZE~V@UPt@3;epZ)pW1CbydA}1ysdi-C1;Ks&s#UBQl3Ovd?u?Cyr!%o6Ui#k^ zc+r`r3vXno`;M;e+q$}Y0J}5@)ZeN%6RdkeZW~@!DuYl;N}(LNk=t84|D2CB9FWco?u@ zloehAQr+S3N0k*`j45o+?{OVYf#x~F9)X~0s4Wp^%c3+A*7T&0)nj4`@+Jw2Aa*9*$NIDKd)l_4VucA^Mg%e^t%>-Uy$a#Y< z=Sp49Nx+8DRMTCTQci{^s;Q=*)n#nL%7G~q@m+N9)rHfe!Y#3SIOF&9m1%FhQ_hL4YurUgBq9g1K1dC*YK+MG7VirxDAVb9^ zx{8!b98kt05*)zv>CojO&7xz_13#_+NEU9 zP0tId%OXe0ix3oc4jF!=xR}99XqFIX=oi=Zo2Bcw6xic}uZqz5v1+4bc>D;5gDzAP zipa~!|4c`xD-cv)2VlGyi&MmvI4iEASSHLjJK)% zNl1Nfflq3x#UE#iob&L=DhhS3Bl4{XcCoXE@BBmY;b{!@-3FMro#qZ+ZwNg~7kZ>F z^j*M)v1?W1M5NfO;g{OAs&T9-c+O?&-4yJ6NAPg^z_ zYOGE;_5LF`CmyAFj29WA9-xalP#5({V8eJj$mPA1^eH%Vw4F^|08`MM%Y~;Y%|(u$ z&mgGYgC5VV7su7rVs85%I4qu}d5(BP%2Hj*-nx`802{`8&{@Z&iZ8+swX`jJ&J=K? z#zXxU2L6kJT;d4$5`wC^ujdnM_Nu(5E>#&5F9Rc9p?Q@T8*1*WtGSP^=Ig+Q(cEu@ zg_L$3oKnsGMu0i!?6(B#4N7&Xqw|{x?(DShibuw(Yf|+itu0_Vt&$dR0U+L{d52dT zB6rb6?yQUaKCownFhPiBtA~PA_yc%!%wG`QMDl(}k(N60euSVZSBKPNC*OEwv0Y_~ zk8w_XLh~svGL-G0E4zcP>=(d>QLehYm!f_NXVloU3t;M*`;ynMsLkb$p#MS8uT_iB zHCNW9Qn6%4d<}^BhUQydYv|fm*L5ph*YAN1yH%SdA?5u6KB-bcZ`EdTn@Z&$snnH@ z%KwL;DixeX%*97yYw3hlG>D%75I@uW!Yd7pi*$_(b&Y=qHjGlikAhTqJv>sSf*;D% zH|N&D9~5c1Bk!LGs*!)yfY!e7QBVk7BQ(umOmWx$s;$oY9RX)`Rw1xqjQo2ENNJ1U zk7~wxF}ko#7)fYJfv$FhZH1s(P>iZzbi5Wdn7~2Nnx+lWMq2$rm-BmF&aHqAVL`F- zT58x9PN)UN>Wr>j6DFg!rWPw4<+efauRqd$Xicg*n#sgcX|XN9q8&|p-o;S#OI^_~ zbVYXncJuj2dzOxrx&yrX>yNZ&uh>LUup`C0&WVDZ5LELrh-`grY<7i<*cm9%k){(b zH?;pi*ZzH7`_90IF)!074=H*VxTWT08ikr_=R6Cx8|7N*sJ%Oas)M15C)a1&zi zt~7h{Vnge7y4J7jTJHmF7#)m8SV*P!g;T02(Fjo2xd}ybH%fJ*qjPrzRSQ@>cvv)9 z#lA%koD;<~J$aF#?~A&=FX;OA1~!Zqu*-X?Ybl&jBMUBou4fZIU$q~lx!KXP4}xl^ zOnX9I^u;mJkETDthK^6^IzFlEI1tzncFI(%0IcbS1K@+&Dbqe-%C>RY-RD)K1F6I+ zN4A3yRP~!$uTpG$D_2`OI0#^IFwJ1z#nAIXUC*_;oOe(69tDMs8(WS+uHIkF$^cgaGJw;l_B|RUGlqh$wvYk#!4)=`%>aj z@J989-H1&j>5&xY4oA|_2&ykYyVf-for}KkA<=ZKYH+$fSt-TSYrH9b?qd-Xsob58`bQ(!F*~G`ZKM@Xh-NBhVRii^ zAjD*vDZJDWeT6RiHM;22fDPk48??Z@9HiFM;gWjK#usKvoO6*8rA(_Gg)0zL{W-3J z7?#P@ib@<5RWvc84N;frqAt}%ods+N{W;~elrat`RDVvL(UogLv+G!DagU?iYy?$( zr`jdVBpB08*!OJ=kpNg!($q8I3j&H*-z`ffvXq|_;Rr|P>6 zU7<%o6S~xCig%wA1sMcYeaF{6IA@Wz*B^^IoD_3u=J6^+@-uYF7wM884{R9qo!fmW z@d@xo)pu^hCX)1T6z6_N(i0I>i<69ENSuT-Vm{3RUSjAuU)S>_UC)KUhOs!w@Lh^| zDqK;^>5S8+k~t4So<>>LI!d07pz8jbpQ9;@CSu8|D290!0VB?!Ig=L~n$FcVtYfXyRQI5PCs&vUJb;+&*HiXZ?IBv^?w;W!S+iE(eO!0Eg(hXGOF-N?s5me)cdT}gko{`aH zbS9dl*8n9}&|J&Q4KXL{VouVM9 z-BdQwR_U+>JsyMPc*E0rIqqiQ#4R+dcmqT4vAW)4biHo}c5w*v=la?M7Za)Y9dJy& zZ21>pQ}dj=1AnJvPdS?3iJ*5{Qg*dR*VH7$T>yyHGtkfZT|^*8lX_Kf;|cfS}edA3Iavg6pG=o<%3HKI3bMx zwfxtw6CS^H-M1@>Pra$_t?Re^{Im7Pes%t$-y@a7wtE4(n}Y$eIA~+ zf?v&UA2ex=|HPC0&mnd3M3tB}Ha0iTvJQxX zR`?Ohv_Y=?6~2PdT@kyW)E6<>i;#WtVGX*Ve1zNH13};fU%A&RS#8Rdn zG1#h`+XWwo)rAzK)w7faKk)=o34d*0!;uF3vH7Qzf5THFr9@uG5vCT#Ie%^Be+nXR z;~?Xmzbw^vab#;8QAxwOuI+m`W8M0m7!9+g63Gb~x!_fxo z)_ZK``R#K>RpqzH7cQzwp2#=8RKLp`s{i#+{oX~@NiaYAQvEe=sQ%`m`nyJzG3vx> z1b=xGaC02Zj|AKTo|?r#A&#iL3f5Vwt$nF(fusJ#z?SOPPBE~Rc5B?(`9<3K-g-M6 zZ2)NVFHE;rRGngAhsLOO^rgB>-ca4uL$$L;)krX1eW~u1H&plbP~AtP%G8UX^@|ka zFK;o>3r8CO*!&Z42|P86f!;WxiUD#&(E3IC;V&=M0XXVk4D63HW@}&|j_9|x?_3Z$ z*!R|l;AjIdo4<->imFo#3~^Cq{@^b%+?VPRc|&!Chw4ZdRRpbHWGw#jCYW(J+5o`j zAFD^fQ!{Uj#}So)jS_FNFV(4eL-iOB)oB`4MyJ!ptMa8fBX6kA^iZ9pQ8i+<+Lvlg z-cYUeP@SVuWvn{I(p+Dv$K?&xdJom(T~tYzzsP)Fswd|S)l)oF7rLlAv3iCt)w6Ka zzsf#a-P&onpQGKHx8-08f04z$x4sBR8*qB_FWfIyRGljO5{;@wkp{oWGGD4!9QG@YHN`K8ho%%}I_<3H+2V)o1dC>OVYGpVg=u zvHGGf)tB;y>dPLguV_>mtE9_cWSuY7H}i(-TOO)!yQn%ni4T0Kev~&ib?!9%=!2F#eqn5vGp=}KQ2Xt^Ts`QPZAxx!^K$7E zUr+Bcv&W?!z9_lj*0ozUwCvgS^%K|BJkxgl(dWJLMxT#H3^-?KS5 znID%dthw~*pAH-S@ugF$KIpJ~=sQ2m-nZMfhpl=n*6qi~S`|*cu`TNotFkG1sQ>s? zeMj|)L~ul}Y$Q<>OGP;0rP>NdH;QWL^W#EMb(;IFT~yWVXQZt!)ot>I>b4%L?Oary z61ame)t&N&>dqdj9bHtNyxPT=>h5_%bq^2Kt}d!htnTYewR_%B?ct$XtWh-@hNZq# z`{WJPz8i}1M)^`5oi|j+c&LtbQFThZ3BFX1#!>$SGfCarNidULw{{ZDbl+Q7;Anm%m`X*} zNibC|st8)YNF0B88$PpfG(V^&;Hf#FP>myc8xKKAHHE*tR5Li5A5`n$sY!J%jwq@| zy>Wss)f4lE>Pa4|^EIlBPNx_+)tBn&IO<;vEK;|2ih(m+x3*FXOypeOTc3}k4VDL+ z`y##z6ji4fSnQ(e)Ei5Dsa}>hRF`_FE^|>u(E3G|<1cS9a5auL0I~-t3`zi$;~viJd@%5j)pve1pdiy?yS^(we0JUZ zX)Ru8d)l0%Zn*HgoA&u~{WdS$ziQyht^QcKcExUqW6$l^dc@1ke`-H$cJhJUjy~=B z{)g?7{Bh267hW4Zpy1wLW3P35{=H{E{=Tx;GYz{AUU<~^PfH59uwh?^Q5W@bx9N@Ft=g%Qsutu8$~tryvoht z%~<75@hVnH(Pq2wJ}gH^%l-<>uG^&1>$6ZQa^wUUPeF-&;4skhJ&K zEpXKT)`d7@-ns}!^jq6b7ew0l-g-+MZ2)HTPm5bAs!q$jtwz;Ii|u`>ZjYn>D(;|e z?L<%q?bb>`{x{Oe_tv}OXai1f{wj7>R2>z&xTrdX*Pgyq_s$!t`*^7C+ZffJzEn%{ zhH7sQ)lwH#6gbu|(%+Zr{&_=npoi)KE~-uf9_&lCEN`d|@lYM=qRLW_zsTXfR7d0u z)sY^mqcp0d=};~ArFvA}P#y1~Izgk#*mM%`6kn>xxf`g$B~0A};=q;OwDv&6f>Mb&A} zuJWaNTi#IR&VnXYZZoKtcup~Jw=dOu^M)!n_cN(-r$3#lQw%)hOZAbwp~@}yOsd>} zPp9f6;HQ15a<{pS%B!KzTyRS~i>fno!Ts@cs!ns3`^0%mJZ=TIQB*@84ds4yW~_4a zI$x^Xs?AH48?xmGRqh&RQsowMzErtwnwKhfNXrkZ+{VqM%01n5s!p-Q4b8k%xoKH` zQ02~QCRJ{;=1Y~kig~GW@38!!$_>s;s@&~Nr|Oiz+~LbhwV*Ixs7BzaNwpb{D5^%A zlY4G?sfxUz+S)^v`+_N|1^79Y4L8a1Qr$LhsJ8P^<%V6pRJj?Im+Hfe*-sBZ1_ zB)A`yerqbpUt~AmTknCR4LH5|_awT)Q!{UHJ19lf$Q#`J$g5%x9L*1^+>FVj%AJ`M zRm4_y2$lO1d8zir(fpvw{gOL46#!0F9D0Ur!cO{(12NT=$Q zc-*tcOO?Cx$(UserProfile)\.nuget\packages\ C:\Users\iVarKey\.nuget\packages\;D:\Microsoft\Xamarin\NuGet\;C:\Program Files (x86)\dotnet\sdk\NuGetFallbackFolder PackageReference - 5.4.0 + 5.5.0 $(MSBuildAllProjects);$(MSBuildThisFileFullPath) diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain/.gitignore b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.Domain/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.dll index 4c59c3ba87b45726c8c6648910e92edfd6d492d3..2bac2737cb339965f85fb77dc00f4be71db87296 100644 GIT binary patch delta 42 ycmZpuXsDRb!Q$!f(mAmwh%sT~{k0+jcFGO5$no7yWu`s6^yZ~!4X1O@;A delta 14 VcmZ3%yn=ayKO@s6)yaX3;Q%CH1dIRx diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.EntityFrameworkCore/.gitignore b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.EntityFrameworkCore/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.EntityFrameworkCore/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.EntityFrameworkCore/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.EntityFrameworkCore/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.Domain.Shared.dll index 4c59c3ba87b45726c8c6648910e92edfd6d492d3..2bac2737cb339965f85fb77dc00f4be71db87296 100644 GIT binary patch delta 42 ycmZpuXsDRb!Q$!f(mAmwh%sT~{k0+jcFGO5$no7ynLQN);UA+Q9YA1N+PH1+1C3s^c zc+(%jHJf4J*wA#@W)o`Gv{*DU%&c zl3oxmUy`nNJ|@2i41?)5tS+kuS&3OiT|K0g&kiwrr0e8K-YP}KXoP?9G|a^gh4Oh! zE`k$ZBj67H!M~%KHbIj%BedXD)n}mL{mh^Fj*ulD@DGtK{IvhJ)CR*7xR590T$paf z@H&7HHhk@XoiN+XpNmSGc0iYIL+Hfmsv|Y|w7k6h8QgmjIv=621dbuTo&2kOQ;I@! zyh_CvXl{(gV2FePD#=u6H5@JKmRUB>*y@08IGfL!1xDjAM-vEL07#2QoXqba(XY&J z-I==~rp&*|Nj|F#kRJX)8S&HIFet5u<6j7geh<=kJVZoFk?=3lwb~Rk8(n&=Pb)MH zW3(3l&Dpq<`n5atD|hNW5H|y8LNAGYp7Q2&%PmsC~RIuqBm&KHZ1V58%{~UuO@` z+*gDzw&tGtT{2MSBts8Uq+L OSkBPK1mgU81bzZwYDyRY delta 750 zcmZuuO-vI}5Z>AD*1or`yKA99p|C}(1xs735RKIXhXMg3#FIA?Plh8#VwzYl;8lg5j^!QGQb>Nh1#w#Jvt_h#Pwd^7X*3moj+Bhwq?Wtu1J z^CoQ*??oDE%Pv0_Op?!@qlb-n{hrg;l@g;zjGIC)bnf#d5Jyu1wxENOC0E zsH~>=kCoGHW4*Ti@Dbj8grQoIwdVKCX?8Al0P z1|4Losti?43S0wp4|NnKIt&v{A$9{p&GNK&+n$ECBIS6&)%@P8Mzq_{@#J<={vZZ1 zKYn?7W32gU#Y*!#|E}o<;x1(Wb(3sX{wxBKW=x12H;;rokMwL5WGn5OhxKIZXrj4H ZvZBsMOK|77WnsB0({(jLGV1?WoWE#Xn0NpH diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/.gitignore b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/bin/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.dll index 3f085c531c07298ffc5616d115d3a38b003350dd..93b65b540e21582e6f4747a416a30ef57dec748c 100644 GIT binary patch delta 42 zcmV+_0M-A1EPyPKhy-8j0L_t%QUO4*-^mCN{8RCCez*BUvaP*T0j}@fv$zRJ45dvJ Ah5!Hn delta 42 zcmV+_0M-A1EPyPKhy;vQTJ4dHQUPGG-^mCNd}ZL4^!JoNkQIK^9$2@pv$zRJ44sk_ AkN^Mx diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.CoreCompileInputs.cache b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.CoreCompileInputs.cache deleted file mode 100644 index df447b236..000000000 --- a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -5b7167ef84bb508f25e00864dde6d86ec3356ce7 diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.FileListAbsolute.txt b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.FileListAbsolute.txt index bc00940ae..1abc512ca 100644 --- a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.FileListAbsolute.txt +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csproj.FileListAbsolute.txt @@ -20,7 +20,6 @@ D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN. D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\bin\Debug\netstandard2.0\LINGYUN.ApiGateway.Application.Contracts.pdb D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\bin\Debug\netstandard2.0\LINGYUN.ApiGateway.Domain.Shared.pdb D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.HttpApi.Client.csprojAssemblyReference.cache -D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.HttpApi.Client.csproj.CoreCompileInputs.cache D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.HttpApi.Client.AssemblyInfoInputs.cache D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.HttpApi.Client.AssemblyInfo.cs D:\Projects\MicroService\CRM\Vue\vue-abp\aspnet-core\modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\obj\Debug\netstandard2.0\LINGYUN.ApiGateway.HttpApi.Client.csproj.CopyComplete diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csprojAssemblyReference.cache b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.csprojAssemblyReference.cache index 601c5d472d2a5ce3a0812a83be8491893da097b6..8257f3552c472d7038c14a65725f88c05c918c3f 100644 GIT binary patch literal 18491 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 delta 3353 zcmZuyYiv|S6yDkGz2)95+}3u177AM^r9fF*Kqw6@6lf{0J}3fhDSd3Wq;%OW?IN#0 zAwZ0P2u>mpF(e`a(IQWc0TqKpet?mL$1f6p7=LIqY78M5Q_pwrZg+NPC)scAoO{mq z&CEUL?9F5BhyCnw4YU86!t2;lJ=tcnsep}qkmc~8eF=Zb>Uo*tgrbvmw`u*?(X2RW zwZ&ZhmQ=@5c&Tzr8BVq?vgPqywJH@X+6aIFNadT=QK|yNH2&?3k^F0QXa9_!-Shr_ zI*h@=MWE~INK9|c@)UYz7S1f1Yh#E;l3el$>tb$4>Ms-%-sWXCT4{jhu8@B8!b>5SSW`=K|+%gpZR)Mmo-9Ou}r*Vf z$~5^o~lr&$Fs=aa-$QC}md#nHvov2mHAEuvG%E;3T8h$FHlC;LeXeC=(^ZB0{ zxpNkft5yzJNDzCZuSA(!qD%!}?mD7WQbap1%*x`=UCT)(J4Pmaq$T8(Nlux?S`}oL z0+tcPYTXdEu8UeL`Hz|XteV$mc^!I64S%WCv+<;K^V%7siWxOTWgV!Np7QxO+4-|{ ztqv-y2rx_~^CJz2DxZofuk-xuyKD{rBYUH|mSU3KylLG0%60UpH2@j`O@Q@)X21qO z3!oLy251L(3DR;1Fp?(npT@1UD|s>3v)5BUOpUBN(~nbew(UTK|x zjRdjRby7UY3GpDC$ajmGZC{LErgzh7ok`D|v&Qnt?vgy+K$T$F8A=7^ioKv=MTSwx z_fE{`rx))lK)Mg3pZ(t1!8_?WNI}mO{P2q%4U<&8{P9^vbu)$ydvmr z^LOnOFXwGZs8h?L^iDe^ zQFe-yKAG|~C|lzxKj2U1+Br$0QIu$qB`!dsJ$~00`Ni_^u0N3|SBsSOGUX*udgCcS<6{?(u`c3@L|H9T zu9PXSQ-t9gYNhDqX3rXGrD*Jto+Yr`6hCjNsP8w>Rm_O{yV3_AOn+9#g5iirJB&mz zbP}{N4DE(B+ZftMqK?PVC1iJW0Jwua*@ij}4~9yY{ZY_S|A;en57e#fj$%#dj+&I+ z`%!ZV{ZU%7Kk6x=JIY3KH&8I<e{>yCZAxpU0g41Ngb9 A(EtDd diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/Debug/netstandard2.0/LINGYUN.ApiGateway.HttpApi.Client.dll index 3f085c531c07298ffc5616d115d3a38b003350dd..93b65b540e21582e6f4747a416a30ef57dec748c 100644 GIT binary patch delta 42 zcmV+_0M-A1EPyPKhy-8j0L_t%QUO4*-^mCN{8RCCez*BUvaP*T0j}@fv$zRJ45dvJ Ah5!Hn delta 42 zcmV+_0M-A1EPyPKhy;vQTJ4dHQUPGG-^mCNd}ZL4^!JoNkQIK^9$2@pv$zRJ44sk_ AkN^Mx diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/LINGYUN.ApiGateway.HttpApi.Client.csproj.nuget.g.props b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/LINGYUN.ApiGateway.HttpApi.Client.csproj.nuget.g.props index 67ca95c64..2528351cf 100644 --- a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/LINGYUN.ApiGateway.HttpApi.Client.csproj.nuget.g.props +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi.Client/obj/LINGYUN.ApiGateway.HttpApi.Client.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\iVarKey\.nuget\packages\;D:\Microsoft\Xamarin\NuGet\;C:\Program Files (x86)\dotnet\sdk\NuGetFallbackFolder PackageReference - 5.5.0 + 5.4.0 $(MSBuildAllProjects);$(MSBuildThisFileFullPath) diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/.gitignore b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/bin/Debug/netcoreapp3.1/LINGYUN.ApiGateway.Application.Contracts.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/bin/Debug/netcoreapp3.1/LINGYUN.ApiGateway.Application.Contracts.dll index 584d1aaeda300afa25b39c53f6f1e9862d464b8b..9c02a855f93c1cfea1103e9bb7f3f868486212f5 100644 GIT binary patch delta 44 zcmV+{0Mq|~umXUv0+5IV80D|Xo CAryK5 delta 44 zcmV+{0Mq|~umXUv0+5IVNm$~Gk&IFSK(XKPdk`bWV92jnnnICN?{s53nr^e;d>|Xc CRupys diff --git a/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/bin/Debug/netcoreapp3.1/LINGYUN.ApiGateway.Domain.Shared.dll b/aspnet-core/modules/apigateway/LINGYUN.ApiGateway.HttpApi/bin/Debug/netcoreapp3.1/LINGYUN.ApiGateway.Domain.Shared.dll index 4c59c3ba87b45726c8c6648910e92edfd6d492d3..2bac2737cb339965f85fb77dc00f4be71db87296 100644 GIT binary patch delta 42 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�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 diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/.gitignore b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN.IdentityServer.Application.Contracts.csproj b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN.IdentityServer.Application.Contracts.csproj new file mode 100644 index 000000000..936e1ad68 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN.IdentityServer.Application.Contracts.csproj @@ -0,0 +1,23 @@ + + + + netcoreapp3.1 + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationContractsModule.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationContractsModule.cs new file mode 100644 index 000000000..ad437cbce --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationContractsModule.cs @@ -0,0 +1,29 @@ +using Volo.Abp.Application; +using Volo.Abp.IdentityServer; +using Volo.Abp.IdentityServer.Localization; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; + +namespace LINGYUN.Abp.IdentityServer +{ + [DependsOn(new[] { typeof(AbpDddApplicationModule) })] + [DependsOn(new[] { typeof(AbpIdentityServerDomainSharedModule) })] + public class AbpIdentityServerApplicationContractsModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + + Configure(options => + { + options.Resources + .Get() + .AddVirtualJson("/LINGYUN/Abp/IdentityServer/Localization/Resources"); + }); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerConsts.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerConsts.cs new file mode 100644 index 000000000..c326101c0 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerConsts.cs @@ -0,0 +1,10 @@ +namespace LINGYUN.Abp.IdentityServer +{ + public class AbpIdentityServerConsts + { + /// + /// 远程服务名称 + /// + public const string RemoteServiceName = "IdentityServer"; + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerErrorConsts.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerErrorConsts.cs new file mode 100644 index 000000000..9ff1b657b --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerErrorConsts.cs @@ -0,0 +1,25 @@ +namespace LINGYUN.Abp.IdentityServer +{ + public class AbpIdentityServerErrorConsts + { + /// + /// 客户端标识已经存在 + /// + public const string ClientIdExisted = "ClientIdExisted"; + + /// + /// 客户端声明不存在 + /// + public const string ClientClaimNotFound = "ClientClaimNotFound"; + + /// + /// 客户端密钥不存在 + /// + public const string ClientSecretNotFound = "ClientSecretNotFound"; + + /// + /// 客户端属性不存在 + /// + public const string ClientPropertyNotFound = "ClientPropertyNotFound"; + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissionDefinitionProvider.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissionDefinitionProvider.cs new file mode 100644 index 000000000..826a85e77 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissionDefinitionProvider.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.IdentityServer.Localization; +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.IdentityServer +{ + public class AbpIdentityServerPermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + var identityServerGroup = context.AddGroup(AbpIdentityServerPermissions.GroupName, L("Permissions:IdentityServer")); + + var clientPermissions = identityServerGroup.AddPermission(AbpIdentityServerPermissions.Clients.Default, L("Permissions:Clients")); + clientPermissions.AddChild(AbpIdentityServerPermissions.Clients.Create, L("Permissions:Create")); + clientPermissions.AddChild(AbpIdentityServerPermissions.Clients.Update, L("Permissions:Update")); + clientPermissions.AddChild(AbpIdentityServerPermissions.Clients.Enabled, L("Permissions:Enabled")); + clientPermissions.AddChild(AbpIdentityServerPermissions.Clients.Disabled, L("Permissions:Disabled")); + clientPermissions.AddChild(AbpIdentityServerPermissions.Clients.Delete, L("Permissions:Delete")); + var clientClaimPermissiosn = clientPermissions.AddChild(AbpIdentityServerPermissions.Clients.Claims.Default, L("Permissions:Clients:Claims")); + clientClaimPermissiosn.AddChild(AbpIdentityServerPermissions.Clients.Claims.Create, L("Permissions:Create")); + clientClaimPermissiosn.AddChild(AbpIdentityServerPermissions.Clients.Claims.Update, L("Permissions:Update")); + clientClaimPermissiosn.AddChild(AbpIdentityServerPermissions.Clients.Claims.Delete, L("Permissions:Delete")); + } + + protected virtual LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissions.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissions.cs new file mode 100644 index 000000000..b928cb65d --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/AbpIdentityServerPermissions.cs @@ -0,0 +1,25 @@ +namespace LINGYUN.Abp.IdentityServer +{ + public class AbpIdentityServerPermissions + { + public const string GroupName = "IdentityServer"; + + public static class Clients + { + public const string Default = GroupName + ".Clients"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + public const string Enabled = Default + ".Enabled"; + public const string Disabled = Default + ".Disabled"; + + public static class Claims + { + public const string Default = Clients.Default + ".Claims"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + } + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimCreateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimCreateDto.cs new file mode 100644 index 000000000..f36d03139 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimCreateDto.cs @@ -0,0 +1,20 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientClaimCreateDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(ClientClaimConsts.TypeMaxLength)] + public string Type { get; set; } + + [Required] + [StringLength(ClientClaimConsts.ValueMaxLength)] + public string Value { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimDto.cs new file mode 100644 index 000000000..e25e67164 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimDto.cs @@ -0,0 +1,9 @@ +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientClaimDto + { + public string Type { get; set; } + + public string Value { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimGetByKeyInputDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimGetByKeyInputDto.cs new file mode 100644 index 000000000..e99bb942d --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimGetByKeyInputDto.cs @@ -0,0 +1,16 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientClaimGetByKeyInputDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(ClientClaimConsts.TypeMaxLength)] + public string Type { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimUpdateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimUpdateDto.cs new file mode 100644 index 000000000..23770dadc --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientClaimUpdateDto.cs @@ -0,0 +1,20 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientClaimUpdateDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(ClientClaimConsts.TypeMaxLength)] + public string Type { get; set; } + + [Required] + [StringLength(ClientClaimConsts.ValueMaxLength)] + public string Value { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCorsOriginDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCorsOriginDto.cs new file mode 100644 index 000000000..5fb829c5b --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCorsOriginDto.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientCorsOriginDto : EntityDto + { + public string Origin { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCreateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCreateDto.cs new file mode 100644 index 000000000..a67d22b1d --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientCreateDto.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientCreateDto + { + [Required] + [StringLength(ClientConsts.ClientIdMaxLength)] + public string ClientId { get; set; } + + [Required] + [StringLength(ClientConsts.ClientNameMaxLength)] + public string ClientName { get; set; } + + [StringLength(ClientConsts.DescriptionMaxLength)] + public string Description { get; set; } + + public List AllowedGrantTypes { get; set; } + public ClientCreateDto() + { + AllowedGrantTypes = new List(); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientDto.cs new file mode 100644 index 000000000..9e1fca583 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientDto.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientDto : FullAuditedEntityDto + { + public string ClientId { get; set; } + + public string ClientName { get; set; } + + public string Description { get; set; } + + public string ClientUri { get; set; } + + public string LogoUri { get; set; } + + public bool Enabled { get; set; } + + public string ProtocolType { get; set; } + + public bool RequireClientSecret { get; set; } + + public bool RequireConsent { get; set; } + + public bool AllowRememberConsent { get; set; } + + public bool AlwaysIncludeUserClaimsInIdToken { get; set; } + + public bool RequirePkce { get; set; } + + public bool AllowPlainTextPkce { get; set; } + + public bool AllowAccessTokensViaBrowser { get; set; } + + public string FrontChannelLogoutUri { get; set; } + + public bool FrontChannelLogoutSessionRequired { get; set; } + + public string BackChannelLogoutUri { get; set; } + + public bool BackChannelLogoutSessionRequired { get; set; } + + public bool AllowOfflineAccess { get; set; } + + public int IdentityTokenLifetime { get; set; } + + public int AccessTokenLifetime { get; set; } + + public int AuthorizationCodeLifetime { get; set; } + + public int? ConsentLifetime { get; set; } + + public int AbsoluteRefreshTokenLifetime { get; set; } + + public int SlidingRefreshTokenLifetime { get; set; } + + public int RefreshTokenUsage { get; set; } + + public bool UpdateAccessTokenClaimsOnRefresh { get; set; } + + public int RefreshTokenExpiration { get; set; } + + public int AccessTokenType { get; set; } + + public bool EnableLocalLogin { get; set; } + + public bool IncludeJwtId { get; set; } + + public bool AlwaysSendClientClaims { get; set; } + + public string ClientClaimsPrefix { get; set; } + + public string PairWiseSubjectSalt { get; set; } + + public int? UserSsoLifetime { get; set; } + + public string UserCodeType { get; set; } + + public int DeviceCodeLifetime { get; set; } + + public List AllowedScopes { get; set; } + + public List ClientSecrets { get; set; } + + public List AllowedGrantTypes { get; set; } + + public List AllowedCorsOrigins { get; set; } + + public List RedirectUris { get; set; } + + public List PostLogoutRedirectUris { get; set; } + + public List IdentityProviderRestrictions { get; set; } + + public List Claims { get; set; } + + public List Properties { get; set; } + public ClientDto() + { + Claims = new List(); + Properties = new List(); + AllowedScopes = new List(); + ClientSecrets = new List(); + RedirectUris = new List(); + AllowedGrantTypes = new List(); + AllowedCorsOrigins = new List(); + PostLogoutRedirectUris = new List(); + IdentityProviderRestrictions = new List(); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByIdInputDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByIdInputDto.cs new file mode 100644 index 000000000..fcdd34d61 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByIdInputDto.cs @@ -0,0 +1,11 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientGetByIdInputDto + { + [Required] + public Guid Id { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByPagedInputDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByPagedInputDto.cs new file mode 100644 index 000000000..0f5629048 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGetByPagedInputDto.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientGetByPagedInputDto : PagedAndSortedResultRequestDto + { + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGrantTypeDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGrantTypeDto.cs new file mode 100644 index 000000000..acdb40f10 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientGrantTypeDto.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientGrantTypeDto : EntityDto + { + public string GrantType { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientIdPRestrictionDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientIdPRestrictionDto.cs new file mode 100644 index 000000000..bdd84b339 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientIdPRestrictionDto.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientIdPRestrictionDto : EntityDto + { + public string Provider { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPostLogoutRedirectUriDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPostLogoutRedirectUriDto.cs new file mode 100644 index 000000000..888c5b7a6 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPostLogoutRedirectUriDto.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientPostLogoutRedirectUriDto : EntityDto + { + public string PostLogoutRedirectUri { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyCreateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyCreateDto.cs new file mode 100644 index 000000000..23432f6ae --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyCreateDto.cs @@ -0,0 +1,20 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientPropertyCreateDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(ClientPropertyConsts.KeyMaxLength)] + public string Key { get; set; } + + [Required] + [StringLength(ClientPropertyConsts.ValueMaxLength)] + public string Value { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyDto.cs new file mode 100644 index 000000000..ed72e3013 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyDto.cs @@ -0,0 +1,11 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientPropertyDto : EntityDto + { + public string Key { get; set; } + + public string Value { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyGetByKeyDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyGetByKeyDto.cs new file mode 100644 index 000000000..87d7b8184 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyGetByKeyDto.cs @@ -0,0 +1,16 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientPropertyGetByKeyDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(ClientPropertyConsts.KeyMaxLength)] + public string Key { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyUpdateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyUpdateDto.cs new file mode 100644 index 000000000..778f0996b --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientPropertyUpdateDto.cs @@ -0,0 +1,20 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientPropertyUpdateDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(ClientPropertyConsts.KeyMaxLength)] + public string Key { get; set; } + + [Required] + [StringLength(ClientPropertyConsts.ValueMaxLength)] + public string Value { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientRedirectUriDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientRedirectUriDto.cs new file mode 100644 index 000000000..2bbb822ba --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientRedirectUriDto.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientRedirectUriDto : EntityDto + { + public string RedirectUri { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientScopeDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientScopeDto.cs new file mode 100644 index 000000000..be8876bcf --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientScopeDto.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientScopeDto : EntityDto + { + public string Scope { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretCreateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretCreateDto.cs new file mode 100644 index 000000000..e915f0de3 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretCreateDto.cs @@ -0,0 +1,25 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientSecretCreateDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(SecretConsts.TypeMaxLength)] + public string Type { get; set; } + + [Required] + [StringLength(SecretConsts.ValueMaxLength)] + public string Value { get; set; } + + [StringLength(SecretConsts.DescriptionMaxLength)] + public string Description { get; set; } + + public DateTime? Expiration { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretDto.cs new file mode 100644 index 000000000..c32612b87 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretDto.cs @@ -0,0 +1,7 @@ +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientSecretDto : SecretBaseDto + { + + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretGetByTypeDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretGetByTypeDto.cs new file mode 100644 index 000000000..856f46379 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretGetByTypeDto.cs @@ -0,0 +1,16 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientSecretGetByTypeDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(SecretConsts.TypeMaxLength)] + public string Type { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretUpdateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretUpdateDto.cs new file mode 100644 index 000000000..1442776e7 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientSecretUpdateDto.cs @@ -0,0 +1,25 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientSecretUpdateDto + { + [Required] + public Guid ClientId { get; set; } + + [Required] + [StringLength(SecretConsts.TypeMaxLength)] + public string Type { get; set; } + + [Required] + [StringLength(SecretConsts.ValueMaxLength)] + public string Value { get; set; } + + [StringLength(SecretConsts.DescriptionMaxLength)] + public string Description { get; set; } + + public DateTime? Expiration { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientUpdateDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientUpdateDto.cs new file mode 100644 index 000000000..fa510c4af --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/Dto/ClientUpdateDto.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientUpdateDto + { + [Required] + public Guid Id { get; set; } + + [Required] + [StringLength(1000)] + public string ConcurrencyStamp { get; set; } + + [StringLength(ClientConsts.ClientIdMaxLength)] + public string ClientId { get; set; } + + [StringLength(ClientConsts.ClientNameMaxLength)] + public string ClientName { get; set; } + + [StringLength(ClientConsts.DescriptionMaxLength)] + public string Description { get; set; } + + [StringLength(ClientConsts.ClientUriMaxLength)] + public string ClientUri { get; set; } + + [StringLength(ClientConsts.LogoUriMaxLength)] + public string LogoUri { get; set; } + + public bool? Enabled { get; set; } + + [StringLength(ClientConsts.ProtocolTypeMaxLength)] + public string ProtocolType { get; set; } + + public bool? RequireClientSecret { get; set; } + + public bool? RequireConsent { get; set; } + + public bool? AllowRememberConsent { get; set; } + + public bool? AlwaysIncludeUserClaimsInIdToken { get; set; } + + public bool? RequirePkce { get; set; } + + public bool? AllowPlainTextPkce { get; set; } + + public bool? AllowAccessTokensViaBrowser { get; set; } + + [StringLength(ClientConsts.FrontChannelLogoutUriMaxLength)] + public string FrontChannelLogoutUri { get; set; } + + public bool? FrontChannelLogoutSessionRequired { get; set; } + + [StringLength(ClientConsts.BackChannelLogoutUriMaxLength)] + public string BackChannelLogoutUri { get; set; } + + public bool? BackChannelLogoutSessionRequired { get; set; } + + public bool? AllowOfflineAccess { get; set; } + + public int? IdentityTokenLifetime { get; set; } + + public int? AccessTokenLifetime { get; set; } + + public int? AuthorizationCodeLifetime { get; set; } + + public int? ConsentLifetime { get; set; } + + public int? AbsoluteRefreshTokenLifetime { get; set; } + + public int? SlidingRefreshTokenLifetime { get; set; } + + public int? RefreshTokenUsage { get; set; } + + public bool? UpdateAccessTokenClaimsOnRefresh { get; set; } + + public int? RefreshTokenExpiration { get; set; } + + public int? AccessTokenType { get; set; } + + public bool? EnableLocalLogin { get; set; } + + public bool? IncludeJwtId { get; set; } + + public bool? AlwaysSendClientClaims { get; set; } + + [StringLength(ClientConsts.ClientClaimsPrefixMaxLength)] + public string ClientClaimsPrefix { get; set; } + + [StringLength(ClientConsts.PairWiseSubjectSaltMaxLength)] + public string PairWiseSubjectSalt { get; set; } + + public int? UserSsoLifetime { get; set; } + + [StringLength(ClientConsts.UserCodeTypeMaxLength)] + public string UserCodeType { get; set; } + + public int? DeviceCodeLifetime { get; set; } + + public List AllowedScopes { get; set; } + + public List AllowedGrantTypes { get; set; } + + public List AllowedCorsOrigins { get; set; } + + public List RedirectUris { get; set; } + + public List PostLogoutRedirectUris { get; set; } + + public List IdentityProviderRestrictions { get; set; } + public ClientUpdateDto() + { + Enabled = true; + DeviceCodeLifetime = 300; + AllowedScopes = new List(); + RedirectUris = new List(); + AllowedGrantTypes = new List(); + AllowedCorsOrigins = new List(); + PostLogoutRedirectUris = new List(); + IdentityProviderRestrictions = new List(); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/IClientAppService.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/IClientAppService.cs new file mode 100644 index 000000000..a3a7e9c43 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Clients/IClientAppService.cs @@ -0,0 +1,37 @@ +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public interface IClientAppService : IApplicationService + { + Task GetAsync(ClientGetByIdInputDto clientGetById); + + Task> GetAsync(ClientGetByPagedInputDto clientGetByPaged); + + Task CreateAsync(ClientCreateDto clientCreate); + + Task UpdateAsync(ClientUpdateDto clientUpdate); + + Task DeleteAsync(ClientGetByIdInputDto clientGetByIdInput); + + Task AddClaimAsync(ClientClaimCreateDto clientClaimCreate); + + Task UpdateClaimAsync(ClientClaimUpdateDto clientClaimUpdate); + + Task DeleteClaimAsync(ClientClaimGetByKeyInputDto clientClaimGetByKey); + + Task AddPropertyAsync(ClientPropertyCreateDto clientPropertyCreate); + + Task UpdatePropertyAsync(ClientPropertyUpdateDto clientPropertyUpdate); + + Task DeletePropertyAsync(ClientPropertyGetByKeyDto clientPropertyGetByKey); + + Task AddSecretAsync(ClientSecretCreateDto clientSecretCreate); + + Task UpdateSecretAsync(ClientSecretUpdateDto clientSecretUpdate); + + Task DeleteSecretAsync(ClientSecretGetByTypeDto clientSecretGetByType); + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/en.json b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/en.json new file mode 100644 index 000000000..9abecd238 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/en.json @@ -0,0 +1,17 @@ +{ + "culture": "en", + "texts": { + "Permission:IdentityServer": "IdentityServer", + "Permissions:Create": "Create", + "Permissions:Update": "Update", + "Permissions:Enabled": "Enabled", + "Permissions:Disabled": "Disabled", + "Permissions:Delete": "Delete", + "Permissions:Clients": "Clients", + "Permissions:Clients:Claims": "Client claim", + "ClientIdExisted": "Client id: {0} already exists!", + "ClientClaimNotFound": "Client claim: {0} not found!", + "ClientSecretNotFound": "Client secret: {0} not found!", + "ClientPropertyNotFound": "Client property: {0} not found!" + } +} \ No newline at end of file diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/zh-Hans.json b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/zh-Hans.json new file mode 100644 index 000000000..7d3ddc02a --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/Localization/Resources/zh-Hans.json @@ -0,0 +1,17 @@ +{ + "culture": "zh-Hans", + "texts": { + "Permission:IdentityServer": "IdentityServer管理", + "Permissions:Create": "新增", + "Permissions:Update": "修改", + "Permissions:Enabled": "启用", + "Permissions:Disabled": "停用", + "Permissions:Delete": "删除", + "Permissions:Clients": "客户端管理", + "Permissions:Clients:Claims": "客户端声明", + "ClientIdExisted": "客户端标识: {0} 已经存在!", + "ClientClaimNotFound": "客户端声明: {0} 不存在!", + "ClientSecretNotFound": "客户端密钥: {0} 不存在!", + "ClientPropertyNotFound": "客户端属性: {0} 不存在!" + } +} \ No newline at end of file diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/SecretBaseDto.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/SecretBaseDto.cs new file mode 100644 index 000000000..1dc467e4a --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application.Contracts/LINGYUN/Abp/IdentityServer/SecretBaseDto.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.IdentityServer +{ + public abstract class SecretBaseDto : EntityDto + { + public string Type { get; set; } + + public string Value { get; set; } + + public string Description { get; set; } + + public DateTime? Expiration { get; set; } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/.gitignore b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN.IdentityServer.Application.csproj b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN.IdentityServer.Application.csproj new file mode 100644 index 000000000..7c1b5f303 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN.IdentityServer.Application.csproj @@ -0,0 +1,16 @@ + + + + netcoreapp3.1 + + + + + + + + + + + + diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAppServiceBase.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAppServiceBase.cs new file mode 100644 index 000000000..fecf623ad --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAppServiceBase.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Application.Services; +using Volo.Abp.IdentityServer.Localization; + +namespace LINGYUN.Abp.IdentityServer +{ + public abstract class AbpIdentityServerAppServiceBase : ApplicationService + { + protected AbpIdentityServerAppServiceBase() + { + LocalizationResource = typeof(AbpIdentityServerResource); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationModule.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationModule.cs new file mode 100644 index 000000000..80801984b --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerApplicationModule.cs @@ -0,0 +1,25 @@ +using Volo.Abp.AutoMapper; +using Volo.Abp.IdentityServer; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.IdentityServer +{ + [DependsOn( + typeof(AbpIdentityServerDomainModule), + typeof(AbpIdentityServerApplicationContractsModule), + typeof(AbpAutoMapperModule) + )] + public class AbpIdentityServerApplicationModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Configurators.Add(ctx => + { + ctx.MapperConfiguration.AddProfile(); + }); + }); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAutoMapperProfile.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAutoMapperProfile.cs new file mode 100644 index 000000000..5679a5faa --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/AbpIdentityServerAutoMapperProfile.cs @@ -0,0 +1,23 @@ +using AutoMapper; +using LINGYUN.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Clients; + +namespace LINGYUN.Abp.IdentityServer +{ + public class AbpIdentityServerAutoMapperProfile : Profile + { + public AbpIdentityServerAutoMapperProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/Clients/ClientAppService.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/Clients/ClientAppService.cs new file mode 100644 index 000000000..38b36013b --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.Application/LINGYUN/Abp/IdentityServer/Clients/ClientAppService.cs @@ -0,0 +1,310 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.Security.Encryption; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + public class ClientAppService : AbpIdentityServerAppServiceBase, IClientAppService + { + private IStringEncryptionService _encryptionService; + protected IStringEncryptionService EncryptionService => LazyGetRequiredService(ref _encryptionService); + + protected IClientRepository ClientRepository { get; } + + public ClientAppService(IClientRepository clientRepository) + { + ClientRepository = clientRepository; + } + + public virtual async Task AddClaimAsync(ClientClaimCreateDto clientClaimCreate) + { + var client = await ClientRepository.GetAsync(clientClaimCreate.ClientId); + + client.AddClaim(clientClaimCreate.Value, clientClaimCreate.Type); + var clientClaim = client.FindClaim(clientClaimCreate.Value, clientClaimCreate.Type); + + return ObjectMapper.Map(clientClaim); + } + + public virtual async Task AddPropertyAsync(ClientPropertyCreateDto clientPropertyCreate) + { + var client = await ClientRepository.GetAsync(clientPropertyCreate.ClientId); + + client.AddProperty(clientPropertyCreate.Key, clientPropertyCreate.Value); + var clientProperty = client.FindProperty(clientPropertyCreate.Key, clientPropertyCreate.Value); + + return ObjectMapper.Map(clientProperty); + } + + public virtual async Task AddSecretAsync(ClientSecretCreateDto clientSecretCreate) + { + var client = await ClientRepository.GetAsync(clientSecretCreate.ClientId); + + var clientSecretValue = EncryptionService.Encrypt(clientSecretCreate.Value); + + client.AddSecret(clientSecretValue, clientSecretCreate.Expiration, + clientSecretCreate.Type, clientSecretCreate.Description); + + var clientSecret = client.FindSecret(clientSecretValue, clientSecretCreate.Type); + + return ObjectMapper.Map(clientSecret); + } + + public virtual async Task CreateAsync(ClientCreateDto clientCreate) + { + var clientIdExists = await ClientRepository.CheckClientIdExistAsync(clientCreate.ClientId); + if(clientIdExists) + { + throw new UserFriendlyException(L[AbpIdentityServerErrorConsts.ClientIdExisted, clientCreate.ClientId]); + } + var client = new Client(GuidGenerator.Create(), clientCreate.ClientId); + client.ClientName = clientCreate.ClientName; + client.Description = clientCreate.Description; + foreach(var grantType in clientCreate.AllowedGrantTypes) + { + client.AddGrantType(grantType.GrantType); + } + + client = await ClientRepository.InsertAsync(client, true); + + return ObjectMapper.Map(client); + } + + public virtual async Task DeleteAsync(ClientGetByIdInputDto clientGetByIdInput) + { + await ClientRepository.DeleteAsync(clientGetByIdInput.Id); + } + + public virtual async Task DeleteClaimAsync(ClientClaimGetByKeyInputDto clientClaimGetByKey) + { + var client = await ClientRepository.GetAsync(clientClaimGetByKey.ClientId); + client.Claims.RemoveAll(claim => claim.Type.Equals(clientClaimGetByKey.Type)); + } + + public virtual async Task DeletePropertyAsync(ClientPropertyGetByKeyDto clientPropertyGetByKey) + { + var client = await ClientRepository.GetAsync(clientPropertyGetByKey.ClientId); + client.Properties.RemoveAll(property => property.Key.Equals(clientPropertyGetByKey.Key)); + } + + public virtual async Task DeleteSecretAsync(ClientSecretGetByTypeDto clientSecretGetByType) + { + var client = await ClientRepository.GetAsync(clientSecretGetByType.ClientId); + client.ClientSecrets.RemoveAll(secret => secret.Type.Equals(clientSecretGetByType.Type)); + } + + public virtual async Task GetAsync(ClientGetByIdInputDto clientGetById) + { + var client = await ClientRepository.GetAsync(clientGetById.Id); + + return ObjectMapper.Map(client); + } + + public virtual async Task> GetAsync(ClientGetByPagedInputDto clientGetByPaged) + { + // Abp官方IdentityServer项目不支持Filter过滤... + var clients = await ClientRepository.GetListAsync(clientGetByPaged.Sorting, + clientGetByPaged.SkipCount, clientGetByPaged.MaxResultCount, true); + + var clientCount = await ClientRepository.GetCountAsync(); + + return new PagedResultDto(clientCount, + ObjectMapper.Map, List>(clients)); + } + + public virtual async Task UpdateAsync(ClientUpdateDto clientUpdate) + { + var client = await ClientRepository.GetAsync(clientUpdate.Id); + + #region Basic Property + client.ConcurrencyStamp = clientUpdate.ConcurrencyStamp; + client.ClientId = clientUpdate.ClientId ?? client.ClientId; + client.ClientUri = clientUpdate.ClientUri ?? client.ClientUri; + client.ClientName = clientUpdate.ClientName ?? client.ClientName; + client.AbsoluteRefreshTokenLifetime = clientUpdate.AbsoluteRefreshTokenLifetime + ?? client.AbsoluteRefreshTokenLifetime; + client.AccessTokenLifetime = clientUpdate.AccessTokenLifetime + ?? client.AccessTokenLifetime; + client.AccessTokenType = clientUpdate.AccessTokenType ?? client.AccessTokenType; + client.AllowAccessTokensViaBrowser = clientUpdate.AllowAccessTokensViaBrowser + ?? client.AllowAccessTokensViaBrowser; + client.AllowOfflineAccess = clientUpdate.AllowOfflineAccess + ?? client.AllowOfflineAccess; + client.AllowPlainTextPkce = clientUpdate.AllowPlainTextPkce ?? client.AllowPlainTextPkce; + client.AllowRememberConsent = clientUpdate.AllowRememberConsent ?? client.AllowRememberConsent; + client.AlwaysIncludeUserClaimsInIdToken = clientUpdate.AlwaysIncludeUserClaimsInIdToken + ?? client.AlwaysIncludeUserClaimsInIdToken; + client.AlwaysSendClientClaims = clientUpdate.AlwaysSendClientClaims ?? client.AlwaysSendClientClaims; + client.AuthorizationCodeLifetime = clientUpdate.AuthorizationCodeLifetime + ?? client.AuthorizationCodeLifetime; + client.BackChannelLogoutSessionRequired = clientUpdate.BackChannelLogoutSessionRequired + ?? client.BackChannelLogoutSessionRequired; + + client.BackChannelLogoutUri = clientUpdate.BackChannelLogoutUri + ?? client.BackChannelLogoutUri; + client.ClientClaimsPrefix = clientUpdate.ClientClaimsPrefix ?? client.ClientClaimsPrefix; + client.ConsentLifetime = clientUpdate.ConsentLifetime ?? client.ConsentLifetime; + client.Description = clientUpdate.Description ?? client.Description; + client.DeviceCodeLifetime = clientUpdate.DeviceCodeLifetime ?? client.DeviceCodeLifetime; + client.Enabled = clientUpdate.Enabled ?? client.Enabled; + client.EnableLocalLogin = clientUpdate.EnableLocalLogin ?? client.EnableLocalLogin; + client.FrontChannelLogoutSessionRequired = clientUpdate.FrontChannelLogoutSessionRequired + ?? client.FrontChannelLogoutSessionRequired; + client.FrontChannelLogoutUri = clientUpdate.FrontChannelLogoutUri ?? client.FrontChannelLogoutUri; + + client.IdentityTokenLifetime = clientUpdate.IdentityTokenLifetime ?? client.IdentityTokenLifetime; + client.IncludeJwtId = clientUpdate.IncludeJwtId ?? client.IncludeJwtId; + client.LogoUri = clientUpdate.LogoUri ?? client.LogoUri; + client.PairWiseSubjectSalt = clientUpdate.PairWiseSubjectSalt ?? client.PairWiseSubjectSalt; + client.ProtocolType = clientUpdate.ProtocolType ?? client.ProtocolType; + client.RefreshTokenExpiration = clientUpdate.RefreshTokenExpiration ?? client.RefreshTokenExpiration; + client.RefreshTokenUsage = clientUpdate.RefreshTokenUsage ?? client.RefreshTokenUsage; + client.RequireClientSecret = clientUpdate.RequireClientSecret ?? client.RequireClientSecret; + client.RequireConsent = clientUpdate.RequireConsent ?? client.RequireConsent; + + client.RequirePkce = clientUpdate.RequirePkce ?? client.RequirePkce; + client.SlidingRefreshTokenLifetime = clientUpdate.SlidingRefreshTokenLifetime + ?? client.SlidingRefreshTokenLifetime; + client.UpdateAccessTokenClaimsOnRefresh = clientUpdate.UpdateAccessTokenClaimsOnRefresh + ?? client.UpdateAccessTokenClaimsOnRefresh; + + client.UserCodeType = clientUpdate.UserCodeType ?? client.UserCodeType; + client.UserSsoLifetime = clientUpdate.UserSsoLifetime ?? client.UserSsoLifetime; + #endregion + + #region AllowScope + + foreach(var scope in clientUpdate.AllowedScopes) + { + var clientScope = client.FindScope(scope.Scope); + if (clientScope == null) + { + client.AddScope(scope.Scope); + } + } + + #endregion + + #region RedirectUris + + foreach(var redirect in clientUpdate.RedirectUris) + { + var clientRedirect = client.FindRedirectUri(redirect.RedirectUri); + if(clientRedirect == null) + { + client.AddRedirectUri(redirect.RedirectUri); + } + } + + #endregion + + #region AllowedGrantTypes + + foreach (var grantType in clientUpdate.AllowedGrantTypes) + { + var clientGrantType = client.FindGrantType(grantType.GrantType); + if (clientGrantType == null) + { + client.AddGrantType(grantType.GrantType); + } + } + + #endregion + + #region AllowedCorsOrigins + + foreach (var corgOrigin in clientUpdate.AllowedCorsOrigins) + { + var clientCorsOrigin = client.FindCorsOrigin(corgOrigin.Origin); + if (clientCorsOrigin == null) + { + client.AddCorsOrigin(corgOrigin.Origin); + } + } + + #endregion + + #region PostLogoutRedirectUris + + foreach (var logoutRedirect in clientUpdate.PostLogoutRedirectUris) + { + var clientLogoutRedirect = client.FindPostLogoutRedirectUri(logoutRedirect.PostLogoutRedirectUri); + if (clientLogoutRedirect == null) + { + client.AddPostLogoutRedirectUri(logoutRedirect.PostLogoutRedirectUri); + } + } + + #endregion + + #region IdentityProviderRestrictions + + foreach (var provider in clientUpdate.IdentityProviderRestrictions) + { + var clientIdentityProvider = client.FindIdentityProviderRestriction(provider.Provider); + if (clientIdentityProvider == null) + { + client.AddIdentityProviderRestriction(provider.Provider); + } + } + + #endregion + + client = await ClientRepository.UpdateAsync(client, true); + + return ObjectMapper.Map(client); + } + + public virtual async Task UpdateClaimAsync(ClientClaimUpdateDto clientClaimUpdate) + { + var client = await ClientRepository.GetAsync(clientClaimUpdate.ClientId); + + var clientClaim = client.Claims.FirstOrDefault(claim => claim.Type.Equals(clientClaimUpdate.Type)); + if(clientClaim == null) + { + throw new UserFriendlyException(L[AbpIdentityServerErrorConsts.ClientClaimNotFound, clientClaimUpdate.Type]); + } + clientClaim.Value = clientClaimUpdate.Value; + + return ObjectMapper.Map(clientClaim); + } + + public virtual async Task UpdatePropertyAsync(ClientPropertyUpdateDto clientPropertyUpdate) + { + var client = await ClientRepository.GetAsync(clientPropertyUpdate.ClientId); + + var clientProperty = client.Properties + .FirstOrDefault(property => property.Key.Equals(clientPropertyUpdate.Key)); + if (clientProperty == null) + { + throw new UserFriendlyException( + L[AbpIdentityServerErrorConsts.ClientPropertyNotFound, clientPropertyUpdate.Key]); + } + clientProperty.Value = clientPropertyUpdate.Value; + + return ObjectMapper.Map(clientProperty); + } + + public virtual async Task UpdateSecretAsync(ClientSecretUpdateDto clientSecretUpdate) + { + var client = await ClientRepository.GetAsync(clientSecretUpdate.ClientId); + + var clientSecret = client.ClientSecrets + .FirstOrDefault(secret => secret.Type.Equals(clientSecretUpdate.Type)); + if (clientSecret == null) + { + throw new UserFriendlyException( + L[AbpIdentityServerErrorConsts.ClientSecretNotFound, clientSecretUpdate.Type]); + } + clientSecret.Value = EncryptionService.Encrypt(clientSecretUpdate.Value); + + return ObjectMapper.Map(clientSecret); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/.gitignore b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN.IdentityServer.HttpApi.csproj b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN.IdentityServer.HttpApi.csproj new file mode 100644 index 000000000..a41fff697 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN.IdentityServer.HttpApi.csproj @@ -0,0 +1,16 @@ + + + + netcoreapp3.1 + + + + + + + + + + + + diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/AbpIdentityServerHttpApiModule.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/AbpIdentityServerHttpApiModule.cs new file mode 100644 index 000000000..2fbb3a683 --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/AbpIdentityServerHttpApiModule.cs @@ -0,0 +1,21 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.IdentityServer +{ + [DependsOn( + typeof(AbpIdentityServerApplicationContractsModule), + typeof(AbpAspNetCoreMvcModule) + )] + public class AbpIdentityServerHttpApiModule : AbpModule + { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpIdentityServerHttpApiModule).Assembly); + }); + } + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/Clients/ClientController.cs b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/Clients/ClientController.cs new file mode 100644 index 000000000..c7590a36b --- /dev/null +++ b/aspnet-core/modules/identityServer/LINGYUN.IdentityServer.HttpApi/LINGYUN/Abp/IdentityServer/Clients/ClientController.cs @@ -0,0 +1,116 @@ +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.IdentityServer.Clients +{ + [RemoteService(Name = AbpIdentityServerConsts.RemoteServiceName)] + [Area("IdentityServer")] + [Route("api/IdentityServer/Clients")] + public class ClientController : AbpController, IClientAppService + { + protected IClientAppService ClientAppService { get; } + public ClientController(IClientAppService clientAppService) + { + ClientAppService = clientAppService; + } + + [HttpPost] + public virtual async Task CreateAsync(ClientCreateDto clientCreate) + { + return await ClientAppService.CreateAsync(clientCreate); + } + + [HttpDelete] + [Route("{Id}")] + public virtual async Task DeleteAsync(ClientGetByIdInputDto clientGetByIdInput) + { + await ClientAppService.DeleteAsync(clientGetByIdInput); + } + + [HttpGet] + [Route("{Id}")] + public virtual async Task GetAsync(ClientGetByIdInputDto clientGetById) + { + return await ClientAppService.GetAsync(clientGetById); + } + + [HttpGet] + public virtual async Task> GetAsync(ClientGetByPagedInputDto clientGetByPaged) + { + return await ClientAppService.GetAsync(clientGetByPaged); + } + + [HttpPut] + [Route("{Id}")] + public virtual async Task UpdateAsync(ClientUpdateDto clientUpdate) + { + return await ClientAppService.UpdateAsync(clientUpdate); + } + + [HttpPost] + [Route("Claims")] + public virtual async Task AddClaimAsync(ClientClaimCreateDto clientClaimCreate) + { + return await ClientAppService.AddClaimAsync(clientClaimCreate); + } + + [HttpPut] + [Route("Claims")] + public virtual async Task UpdateClaimAsync(ClientClaimUpdateDto clientClaimUpdate) + { + return await ClientAppService.UpdateClaimAsync(clientClaimUpdate); + } + + [HttpDelete] + [Route("Claims")] + public virtual async Task DeleteClaimAsync(ClientClaimGetByKeyInputDto clientClaimGetByKey) + { + await ClientAppService.DeleteClaimAsync(clientClaimGetByKey); + } + + [HttpPost] + [Route("Properties")] + public virtual async Task AddPropertyAsync(ClientPropertyCreateDto clientPropertyCreate) + { + return await ClientAppService.AddPropertyAsync(clientPropertyCreate); + } + + [HttpPut] + [Route("Properties")] + public virtual async Task UpdatePropertyAsync(ClientPropertyUpdateDto clientPropertyUpdate) + { + return await ClientAppService.UpdatePropertyAsync(clientPropertyUpdate); + } + + [HttpDelete] + [Route("Properties")] + public virtual async Task DeletePropertyAsync(ClientPropertyGetByKeyDto clientPropertyGetByKey) + { + await ClientAppService.DeletePropertyAsync(clientPropertyGetByKey); + } + + [HttpPost] + [Route("Secrets")] + public virtual async Task AddSecretAsync(ClientSecretCreateDto clientSecretCreate) + { + return await ClientAppService.AddSecretAsync(clientSecretCreate); + } + + [HttpDelete] + [Route("Secrets")] + public virtual async Task DeleteSecretAsync(ClientSecretGetByTypeDto clientSecretGetByType) + { + await ClientAppService.DeleteSecretAsync(clientSecretGetByType); + } + + [HttpPut] + [Route("Secrets")] + public virtual async Task UpdateSecretAsync(ClientSecretUpdateDto clientSecretUpdate) + { + return await ClientAppService.UpdateSecretAsync(clientSecretUpdate); + } + } +} diff --git a/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application.Contracts/.gitignore b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application.Contracts/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application.Contracts/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.Abp.PermissionManagement.Application.Contracts.csprojAssemblyReference.cache b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.Abp.PermissionManagement.Application.Contracts.csprojAssemblyReference.cache index 3665cbc0e7a62a3d71f4ad5d71d8edb3f21871a0..c259b67ed2f4e8b11b5fe733af5af0f22a808de3 100644 GIT binary patch delta 14 VcmZ3%yn=ayKO@r?zR7`%;Q%8!1Xln6 delta 14 VcmZ3%yn=ayKO>V3@8m$nZ~!1=1Kt1t diff --git a/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/.gitignore b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/bin/Debug/netstandard2.0/LINGYUN.Abp.PermissionManagement.Application.dll b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/bin/Debug/netstandard2.0/LINGYUN.Abp.PermissionManagement.Application.dll index 54b4aaa9768ef0b5983218907fbd6e4ed6105587..054bea4fed8d0f90547849286c4dc63d058d63ce 100644 GIT binary patch delta 702 zcmZo@VQgq&oY29tBk<#ji9Irm&nB)kWlWfOUy*V0WJX4HR);VKhLFjMOgfVz8Pyrz zOm1YX7d#%$00tgFl8J$p;l^e`rtOT3DU(k!pJAM}c^Zo*BV)nl1FVuP(fY!?O!EI~ zSs55um_%y1AQTUT;ssGPY(P?wS0j~yfs5gu77>csHPS$8wI=g$#W3nm&g3#@+&Fn5 zS2d%>WLfTd#vPmIa_2BIdQax!UB@_Q@=o5QFhyZ5khuyFYt_KkDuS%#(x?PmD~(lJ zqY7*f(36fbVE;0(1F2kQ28I$KR-By3C(gvhIJt^%4P(+|b$(SJMPU|@K?V?eOu+US zg6v^Iwg*ERZV#gX$QpKrV`mu@H+S$Gu-4De0Es+glw#9k;AWTw=Cw(b@vt%QFf0c1 zni+B#WLbF_b|cC0G8}>GyCuNJz{{{e2Vn{?!y+&bVhSI_8mJsdB_G2TU4%+L28PY% zqOpU&K~&<5hz8tIbRFA~;1oR^(h@VDt@O0_wN{#8ZF?Wy)kh3vt#Q zVDiYBtZShxP$k?pYof2MSEtaQ*0|@>WhW5lg{KwMs>y| zlN%Z91?$5Zz`z4YGBL0+OxP^Qw4IUBYVt|uGmHhBr?F@%6L zm4ShUsfGvyLlnS!OMs1mmmxz3VG1up7MKSyg^!^GDhE=@$IzpTP|3%@u(@6|R#L!v z_r*YmXPh2w{Fa_m?@zh7`Hfx#r(t>UmaPnoz5z@?9XEj3Ck%)!K-wXI5l9IGu{sc| z0Ha=Ia;b%~0J~Psi;sWKI?jK&X`S9Oy91L~Se({{3NDm~3WAIdxMd@LBD&;snEocO qVra?%8QeR0fu%HK{p3BCL6axgd2Hsh`o+q$z%0Dk>`26%53PfMCG@g3_d`Aa0UPSlDF4?gofH1;yS_vDa9z zpkS}h-hKG&4SVlTeU@iM|L5GfGdpwlM#IM6UH1QRKk_v*_uPBG=iHgO)9y?`sGy+W zcl`K&{?;jkIb?LSG7(S4t5YTWG(=-nB@@HR*~yafcp}of$K*&N8I9NNQQEJhw4`rI z-`+jS8)B)3L}ZV;NJAXwQ}IMQmrqByTOO~i4<{mt_Pp+d=wXqzh)fnw4#yfI$%2A51w}<2 z+i&FhF*Z>ZtqaHWIbR$wV6V2F;YM5B;08D^itvZv?bbwVa#~e9RToK3OIFREHl|_UNNRXE7OMzX&K@3* zRYelha4eY$*HwiRRVA@#MIxMNoVE*|RN1r&K1}mCqNgPy)ze%`<0I9sv?W!sSaEyY z{g_a2w>O{cn0Vd3k-A7CTIskV;7WaPo{Svp+_eMldU$Ymofw&)Dj8N+8ArmZaUAFf z2M!C)fiaO($%IH{Ln4}Lbnd?n?!Pd=6fnM_E)}hflnk4niqx@`Njh$<3pf4|tPE2k z6%*o>vyqh?57vVR3xe}tYHh3p|0W>)hhr#*5{?s{;KXSGJ`J4|$`g(CDV9L>GaE~W z#A@P5ATw*FGAQv1jtbDJq0unP%48~9nJhuESQ$x5Kh}pIbAx+AV;X8%ILUi&fO{WL z4JIY=a-0^O98TcHF|DMop$6r2J&NXV4a)7g@mRbhTv1W;W`|ujnt(| zs^YcbXdO!G{wS1DZhOn=$vk@q&K{@F9-TgWsB^ZHOuE3EhTxQ#60NI>&yzxQ#jOJ@ zFr92NG+v2kK>_i~+7J#b3NSV5EaLouno2?y-5Uk_6v|On#$ypjgpG0Q0J8$0!l-E7 z9OvHM0)7BSm1SHaS{qG8=SE~&+ytIDnKGctlTHd&X<44EcXZhl-UOI4_Kn3W_~r<+ zp6ocV85{_*GRL|E{>_UgW{<3^jwfo~A9t8QuFjE2wZ8VrG-8$x0@Fd9UovLiBTBgjPo>FvcICWfr8O6w~PM?F7NVf?# zwJ@o~>rk~A9j|h;$+qy|$l$Wc_((F|kU$-`WD2U>ZrQaRd}s{LhoRwAn7O9beUWUB z+aDWXiZFWxCe%kNWs9iFDL!_9FNxr!(6yW$ao+%ISS&5asfy)JxOb3A&~1`i4W3@` zA;4nW;cwUOdI#%)^W+a`h$I@>+vuddo#8=%T>|ENV`4lWla<^OIB`mVnbE(JYxP<6 zflIU2G*2d-Zr_rMhU#jzpm#0l=k`q2r8_g(S?P9E?jv!|bLflvowddixHm-Sr|R*H zpz%-=jn%N%(RmfZi?U2F(C4kZFxno&c=E_mPM2l6qFV~ra#PWD-kq#q?E)9hTVr($ z)z`EO*)1+c*5P#(uSeZtZj|pYx3b}F3Y5XUK&uy47pte6aaTAKU~l`7`g&FX=@Fk) zKiqxZn&zAAA5^-c#hdSjn+I77_OE-=lm74|z}n5&idh&;N>}g(1S|w!ZAM>nc`T~B zvIfGFcmV04Hdz@@puf>cguCOWCj?krc&gY=Fo{kax2`z|?gUtXrr&O{aMbPJ9t;=G zrXsEH+bv1X#OPvGE4z3nI2UoA)*kRJ$kG$d=Sgmtb=BxdZ9LJ44$nxq)^TP}I1^yT zWyUc_X!gSGgB+@Y79-K)igD_y2^dC3FTSI~-f$zp772&so%;?6R(-Qk#!`D9+&+*| zp!BQ(j60O=f*~NQ)3+Rc1lc%shHS@2Y8qnU#IX6QV@cM{hr*X2bEn#5regEP74 zTw;li{?3H12u_YB8!&6aNwmY^RFGZt{dA}>*biqYbzC?#vt+6@pgJ0U1UYQv>7hR;TF>DU=h2LTD?yg+Zqwo!Xf7WX8dT0Q&*c?M3;QBf|l~`r!1!d0(^R;X{CPq$Vc9 zbxDlbpot<2stLIN838t#tP%sA2XbTpZdFD`MKO62-B-@DnFzlEEI`#;bP{eGWUU7U z21^LHIQ3KqC&QT_iwxVDp$SYz&_lda;7g!gEa|RIPhD^-JPEMEp=w>M>l}z%ukpZv z+gDqsrd-WMk4?ML8H~WZU`!!)l$Zt= z*0|vG?>BF*tGu+iu5zY@>9~Jw03BRz(ZE|Cf?EdJ;P7;BdD6fPcyn}sZ;tdUeC*sv zA{MT%kH}%vL*d98r-bZV0jyY!kIccGdUxhS821mdl4-s|@o_=rZ0GIiWQq#765yyF z-%gF(T*FlZg%WZWE{mcMq~YV?GKek4$i;qc}NbCVUC9^g`WA_BoGs3NGhU7{`$) z90~AMI<&DaT#L_ARHk8uodp+yEWpyOQGS(Ghc7k~YS?HtTnVsQ$O3G<(?T|8D8=AI zE;<|S@@u#==@i4zvbs|Xr-FRcY^tzL-5pvL3z$`5ItdWlXp>!kKun20bu22W|v70SswrT(sV;w~6Iv77J#|@p9vNtQwg)@P!?6fIc$7Ik1z&=k6y>Sq51Wg!cprSqSv4ftSSP<< zY=BEaHva97h$-Pz&HS`Ur}3G(y#!=ELDo5Mys{Uw|{GnL_*n z_YH8;mD7*!jI!|NN8si`)=12>DCd>S4+v#{@saQ*$ohP`H$wh34wG7$J38}=dFE2F zfMy}hQ8Y)>ETTDv=2)8JXpW~jf#yV-lW0z+Ifdp_n$u_&)0|Fo2F;l?OK8rbIh*Dj znsaH+qdA}E0-6hHE~2@Z<`SAqX_{y*qq&^s3YsfvmeO2Bb2ZI1G}qEBqq&aedYa`l zD`;+@xsm23nwx2Ep}CdjHk#XM?x4Ao<}RAMY5qxb56!(a_tD%>^8n3*G!M}{O!ElM zqco4vJWlfj&670$qFG7v6wSYBo~C(*=2@EOXr8Bef#yY;muOz5d4=XxnpHHf(Y#Lc z2F;r^Z_&I>^A63sH1E;8PxArIhcqA2d`$BR&8IY<(R@zx1Rg@%|1QA=AYi${yh?EAj}A(MLqv5bhF&)KSQos! z=j1fFjRd##f|>Vu{gWE|kMYnurS;8w%S+PzUEF`#t z7tAt;VCxBXl;Cx|V3th;7c6-0ox$I{A|Lm<61<)l%rcDNnOD4?cB7L7clLr$alw`v z>r3zkUNFlsNN`s#_%s(>_FMZjctZ)^$O~TVf-Rpnmf&t)Fw5c$={Awz zO}${2*#x)Qq&n@!W)j@p3uf6)@Y`dyOoKO<;4Qphz5@texqR<5cuNWH;RW+uL2${C zRcUZf3Es*J<~xPpC7*XpgSVF8ZM7X=tTM6FI3+6j21H8Qi@8AXVT}H5_ z#*PxalNZc)9>F)xHGJ+R!M(j;z8eYd^=?(#=ba_E#0%y-lweD`J`&v53+B6);GfPf zOkcTFf_L$P`A#O-%7bMRysHGv2 z;H55j%Y)ZTyHPH|L%m?ueR$;`_cAiT#0SAs`)!K_R1%0HaE zO``^nl;HimVAi<^wo={x5k<6$c9+f5 zJ|7^#C*UNGyn1g}mQ*=o83AL0eG4(zybgz@g4A;E`w!K^D2Trg+Z zD*c8HOK^o3%sMr}3mUdd>s%?pRbDXb-i{k)wTG*ep}tY=1+$J$@P%ErNng1}f@gZc ztjiPJYg?m4ic0V-FPL?Hg3sxEZ8{;%mf)Bd%(el+Lq0h!{ZMKpxXue^8-idfJ;x=u z-V0`1gJA2OGDm_FUNGAv1Y4;tDZwc(m~9t=H|%3P?gj~->jmHMg6pC;r3ucH;Q3zg z11@;TwHu}%N}~iH<^@0Kf~`8z;S&50FZdxBY*l-Xkl-V|V79?X@baOZ(rzq};Duf= z+iC<`^}3@Z_-HTqQ5S60`4>s>F1UNGC71Y0kllO^~RFPLr9j4Pii!KZn_Y{L@#S()*+S}eh*d%vkxG{jY}oC$qQy*0l}wEe}2Ax4_+q0mwUnN zQy_TtE$gS%Cz1jSy^QtK|~B!V6{}3c&;KHY(dUNbrqbF#B2vzVc$D8h?`n z-|PjmPljNtth+^mZ}o!NcSEox-E9(lyBGYn3%>UmBM;so!FPJW@3>$qTiqqWcYDF_ zx?n4b{!@bQ@q*uT!9^!uoqlQFE5Y}9!R&(~L8~aZUxFX-g4tI^@X^a=q#yT#68w-C z{GkiBUYZX}@FQL@`@VQ(t6ul01V82lf9!$_E_wYmUF~^Xf}ik$*_XyETTPEACHP-n zF#FsHw(3YLCHN^Xn0<2uU;esL=l{0^KkWsx5079=jb|kISudD534YBB zW}hX&*1P+434X&1X5S{kd%t4z$-F7SZ+XG&110#4*E*yLzAeG;c){!|CD~R17;eM6uzcen@t3d*LmZjdy-%M$<-7N>7C-DGSB~z3 zm81LktQ_6PXG(7$XXWTV&dSl|aYXmQ;wgPH^y3g-hvKi`$Ha_d>BYl$#oFPx#G0=i z4wB+)Ts*{K4`%34@qZEA+$Slfmyj0U03yDn`HtuEH2&i=4Ryq0;B#%e5P=T(gU^MB zi+_MUB?n@fv-{E{q_982r$hgctSK@^jr%)r@MN+NF6VX-kyH=bvS`LQYHN2ZvY0eeCY#LOfhCG8G>^tVPCi^!Y8 zwj!%;*jV;)05{|qP}H{`lc!BHozW}15uem)6Pplw}me% zv)ji_G5co!65o!(6lpQHN3feKrZY>*T>W0`fTLnZnw@x>rRPhgo-dku?hNelInXo1 ze<^7R+)-&X17fS1eHq$^`n1!s_C;`eS5{SimRR$6)64mbQh>!SG-bSsrSemz$}3Hk zcLVmE9H{(fbfoD0;oYnj3Sd5iU9wNv11O%*k6<8zo4OvD-_y987l_?)TnwTa%o8ou zA2wBg$W(nVU{B0}>OKsl(0jw7>CMwLwQWTaJcJT;)Y|TYU?=yc>T6$7jz}?-W*E_y zpm&>s-en3p0@x#iubV2brHCWp#CQ)MQ@JdAJ|KbE50@@l7i#2L4@hA~56IsgAg$PY z%j^KzA4y`HmTW81L5u=ajE3RQ$x=>J?`AVQ-DGB`alkG%%O_{~ygu&MD1GGCD1Fq{ zD1BP8H43^Sur*2_tT^QDh-e81nZXW#TL-rUp3Zg7U0c$mscVSEppF=idxSdaGHL>X zD#^NgrHF}$6O(8r6KrXEt*PlXrlto1dqnU>l(E4}hvI|a!vSsyUb$6ect~EJ-xEt1pY9K@n%}kzZNqVj+={csPvw=O?%;N!dHu`dq z(#GJ@j6b4kOPqBZyOuI-s1>e5P~~xa*utH7L>zIVo@NfgmZqnfnx1NEngTWldE9kc zir4@jR33K^{6(_Or4k!!+2$drs&C8)T;EB|N2F+^IgDsaw_{D+jxlvR0@xf>-;~!< zxFg|&s=lcswsKhwTtNb{fLd&#m0O6Q%F^kv3u84*aTE~ZXqrVl)spcari_Q1G9CwP zF0!;Q2Px|Da7krpUzn|M*1eA>P^Qha!Y3lw!&{PAEoW@)Bu)ZKoJ?~HPq$P~nkpwu zl@|kRRgQu#IK4ci(x=0%%0HuQtDSWLdIsg%T&sO1g6eH=ecCIQ;D|Vj=4_r~DLl(m zIBF_<9TPcwww28OZGQoE*-}e+A%bc+j6HYw=h=iyTm*=?nC23m zYiSxbH9geS^fF*`F&ySkLW+Aid{V<<{y0=`-G_79jyoo|I>YU#p1 z0Na{pUFP0K$+p#+-;SUvbDfnn)m~fT4jd78(%i*UER~0wDi1SNz6aP`l)0AgQrCOo z$`m&_S%+;UvrfJDQI_qslJ_In!Mz8B-#6HSe+RYiMXgrMobldaVGy{YGSrk?8p zduk5!Y=(u@c0D*1{$skP&aId*+lf*Q)H-)Yu%mlpr(b)0M2HP&x)5oJ`h_X#=ccF| z0ee{RjRL39HCJ3sL05(Xt+pX9XkzzBN?nGOPy>BY^ zo~hWDz~*2iKzS{bT@N^+Mgr6kQ@K`5oa;#~_Rz|0g`j@Tc=qZQTjQYEhGtuyWhwZY zso*M8!5x6j$!o^rzLauDc%xr49)vAv*3J2yD9&D5(q0IvYLN5r^d4iPHx7xNX-asG zCFpaepwF6umI9lLYLM-`lyevOqPq6%;~p`yRx0w=;0`{yNRE_?ajMRHHe4E)K^0xR{SL(;$hDG~Ax;&eS zsK3SJI)8tEizz=p{fnj|jzyYK6KLGc-NiV>i34cH!%%Ym}4 zXf=Jsy;c?}x3aQ-MQK@eb!F8qRaI5}N^vJK8CNbE`FG0w`zzw~SHx40Cbo8qPh)z@ zu-a&Fm`fYY9{9^?c_Wi=;{{Sz)s^?kJlVR=k|wt^6Rk~ z2>J|kv-edTien;7Q^Av%IdulT*k#mqA!08w7!^l=&GA6D(|7E&ZmZ#pYFv1FWoTEJ5eiBPZXz#Sv0eGJxlAeOs$ugTGs*Fl!JPQ z8Y%d5VzLerho7l67R7!-S=UGEDd<@JfaV~m#~ZM}Vu`Bzl^9=5CIAviniS8r9>>Y% z<2cED9P@z9$#_FEG^F_R;gy>9WqHRdG0? z#Xo3{Al_2kDIKnOc8cqG?oBEvy?1JFC8nxR}y_4XDQcoW;#cRzM<|k8*Nm{*A5LDyms>rfN zcg3kdh|_2m^HfX8dQ-``spOf!=3@NZmxGjb30zX+=e{so;+9n(d}b(|MVY2(h0jJ% zjo6H>n1y{fo!vOZIfxhM(wxT=EM03%U8_x9F9bFhBQ}QTQq7Cti28!xIB08_eJOb{ zH91g=cnN|knX=2y_*T0-7R6>W;!+?)6U}8j)spiNQ_kt8oL2&yi)8A{K?=JRE~#Yd z3$rE8`kj9jWja_Zd^LjYYm=4n1img4*B~UWrCCOprRF44&55R(%YmI2VDYKkmBOvS z-S<~fwn$m$0^aY=##6E(BHEE8UY93rA~{;%*!h|D?HxCs`_&n=0>P zs(e4NxoCTNyqD5G0B6)lga=^jne`e*58@6*VThAwJ&k{V^X#py)iNzM!>B2}&Y z0@~e(#_9NY0!~(}fez^$xyIi^KZ#p~Ds`#$F9cQl8k1xv)zyaU!Znd9xw$LWMvR1O z#Y%w0Q#AkP*_QIVn97%$%0CNiF51`4(U9fbbMQ*d=W7m`me<+tC!16bjl}a5E25=- z0YO#!W^HOhymEFVl@u=`Uc5x}GEcD7-O*Hc2UFcuz~-X%ZFnvPeGQJN`BKI~Q^QuY zuwSPnHCn?r5LC-&;pvUUx4qaBs%kfXGz(^lyXZ`%J+cH#qwF1 z1f-(x!=GtxEhiIW3fqc_D<4pxs227^1l0s7mh|EyM2L@RJ|WVQa${4+Dtd=i_;M0))4>g#r)%p@am6eSNZ{jP&i?3<^%M&co)-y$0*A(qL zU~`d`4bP=`-@_5rkTwq5DK7hl^#7vLjrc%lP9q9e^ZJljgh-yV+!2~*j!Yfnxi3=?hLO~^{F|eDRnER@UBm> zl3MBw5cGch!~Oz%lbUe%7EYE-jwTzzv2xJ`V9}LkLte#_{4-PXPff|Y0h`N@f10Bs zrQZbJc|ZPX?hN}8WZf~hDaC8hk6<$d)hZ0W-PR>oXG3%cN^DNE1y8rMf7jIh9aHL(`XFilqg6#uV&nQ?N2%bFk=->$KEtSNNc2O}PisvbDS>>+?NdKPqv!mTfl# zcXrzv>2AM7V|^-KlL*((Y%H1DukXNe>VSvl(ZGqgX1X9san$G5mY zNm87E1L8!QlX!+DXM-tc%9Qg|U~{n}jOn_R@-%p&y1~t(ri?AE!TP+U7E_ePTE^26 z+{v&0hqTu5^fftJ>lrq&gv)|UdCgN7GhP0nnB zCfr{&ybx(i)v`GoKFRhnDzHRLbvc5n=Nol8)>z%AXRN_=1wi6Tnx#D3((fQszXMJE zt^qa|J>SjIkg8q_uT;->b4Xk2tg8ddDAw6p>gy0x)mZz^Lle=t5oamJ>wyu=X;$!L zOX&klrN@~{-vn$fs7WkQ)CJE~%NlzA#(itQ!jVP^R;>!uKMmI%(bB zba5Zz#Qii65Nv6>m#OKVrlt=An}beTH3Z<4vyZ?B)k*6fFlB2+P3uuyx#&V@k!MpS z|NbcZ|89fa$B-se3r6o#G#TG;#1l#JI1Y*@Xr6>&CgM*H4ejP;A}6Mwk%{ni_ESKs zR)hDVc3RH*W%h46bg?c1o<>m3;8H^#MvdVa92U>gJje4$LK7)5OM{&aBE>HPn~ND- znFM6<`V#z6Gq^G_rm(G;!Syl)x>O7M3WBN=Mio;dFmf2fkj<+&CRWkB#*-{nw>4GW z##Hr9U~|z4 zzk@WPGgYKIhT;|#!4j?~Al}6>@gB|lFw9i^$uhUQo2i_b&5TTiGWR2(bxO9cX{Y3t zHPw8^ct55;SLl-A69kLpgA||QZ}Az;=LFGV?Q~bOBaS#z*EfM3VT* zpe+uFBAQ~JVafW_&&F)e9}&>AJq572=#({GmvVN1CsSNG&7-!A*-uXHNL8-WIUHW%Zw{v@QfUEq@%pY_MtDq{jt zc6-WqrBKVY$QvT4*3V<_rTw-4MmQ=qrs>AhEPX#V_5H}ycQasfv3_2L|5DoSa7V45 zmjSU=ZQ1MI=Y6(0<+(wtx&?yj%V1Sgwv;W|FNrUMw**Y|py|o;EqUKE<$cqXcN<`H z@nvxHM5NB!!Y}n@aPwGO@T^-3+flHawBXw#sFJaneTGIV8fwH2I4X9e*@>rFI=^J< z{GzGz&cNm(8E5z}3bxHEUV>P@h}0tbGwwJq3DdBDxCd zDx>w`m?*_zu?tNZ&$D!W%G7nGsq1dQ=Ax${lYkVqKm1X`W@0?bW?SqIpg^~2VFx0p z*7=znjx|IkHq>Lj(e8*AgJ=d5ZwdOaDd4|NZZZsa*1k+(nPE{6u$V)W;8iS%PcF*Bl)w`CNGC{kE>TGt5WO zis74i6z^gE2<9WGdLi)&V6U8-5T2e}BN~AchtV9)(=F|fF|}W0YJViKx#)##mWLF5 z0o+o(kj+AEwX<#`FQi}svkR;0fcyS{v+8X26g&bSs zva`;1neJjwr{Hw{oDAqJ_LMX;U&73Mi-BEkjsmo1u_v@Mv{RMJscaX0@?|J9=jm{I zRu=lCbL<)~0(Ay%8G2HehG!zEdRo}GJ|V4}VloOC}~QCcmz2QAdGa1NH(6v{DOuA%bcnExh5zMeEUMy$F%w zVwy{cw&V<(avo~Rc^R-d*houxEj7FxPNETrJK!YNfpY6fWQob`;j+bGp@ zTIbslRQnxy2IGg#MW4Yw;bf$0NV2i6QrrQkxRd5CUc-`mxGDEAQ|^0!&BcC4e@sTI zelL8By2HAEjJL(lzR%`9D))j`|9%9!yAGg8OSiR3ri4?KGx5RA13-ueX&&OKmgsw! zq7ODje-zkUO#1faAhmuBE~!c1zA#(jtY3nUQ>K@+!cQQmUV?n_j!32I#gm8>|Dst* zv?c1Url@76s80i%gO{N4TFUqgoKP=8b;MMz6|JXdsl_W=x#tj6JzeOHm>aE(I19G( zLuTZ-e@n)`%1SG$%Leq@ zEnHQ$+pdwae$Yg$qByIxq^}{UBu#ImEV~fJ>o_Rhpm~#LS(0vLO4`$u^c`SxA*t7W zDe1fLMoH>L*pgzcsll;usWlPK6XupMLYFDj4LYuO;qL}@TqP?wU{~kfL_9?dm7ym|&Piv|z-VXf?SyC#ln^u>c)FGTzBk4E&J=T9U~|#S-z*QQ?s{-b z_3}3hwbjmg22m%<^`Ta~GlFXVKzgFC{A*l19uw;WAU2@s!ZR(Qzc7XV+!T5vU~@5l zz>k8|cw=~^YW998kGxsG`Mcphoj!$5O^~XvU>oeax)5zk1d0n`5FS5aNNIsHZ#z`b z?zx|*JhEcd*H@Grv#isK)$4xx$?92OEI$61HgjW(MxB4=7B>(2_<~h0z473i7d*dP zm!5^EcT5caY2n!m9(i|O=f#h;n>TjHPj*@F%+HFx_~4VC4=nxalmAvt8@0}o2d_JS zhv^l)mqmJS{`1Rwq^8Gr{_wv?9&$scN6y(}yY44#P#)>lqxOL%yN*8S`6Zn`gQxA` zSK*C&%~-JhOC5G^`#ECN2dM5RD{!`;c*f}Ptat+di`Maf`!qyjRbs~Y$lNGD`~{+* zJ${5Tk&r8YMPDOyYe>Jb)uKYl5@)ALOs5!u%{eDTQiqlvd~kXRVCU-Yjs_(|lF3MI zMXZs1u6l>J-aWkNzxumEEEinR&Q+j2U%A-PAkn@&T#sebQjK_m?R$A$a5pS49abk& zkoF%_8vMj2NG1Gr`UWvg_+#x)Dc{0VE2V_KLkv?3pE-XNjK9!Nh~#tUFHQ9q#55sh z?Wg)HJhiE=MvS6LVk&uu3h`Ga)wYPu52{7*)TYW}N>K&Vf{rx!g*y6DT{my2u9rcz zlZPsT&M(vze`P+^jS$-ez}laHH-@M7Q|*Qr^;E3{ytyycE%SzIj|{3k4XS*c2s*#e zcK9pvsqTQ-CIHs{r@A9NwV&!vh*3|K9Ccpp<4d(PZ>a8)LAA`Fia*m&bpS${Pjz?1 zHaW0u*76$IAb4s&)xn5SPu0q+Lwu>0Bet`lh<+b;8mcaR$6?bZZ?fws(zL!1)C-_o5DQ~EroI&*z4^;%6U+4_{m6>3cAhrpBwg0J}1yAj~aW-Pi1guNE3w)_w zls8l_&Y*gULDi~8T;WS~Y2Hx1Due3P234k9oma2-rMe<-sNRr4^+pd>1f5^#HvE;D zSMNY<698*}UcD2Z+IjUZ#F%+iKh^tusXmZ5R3FTs`jCgJe5OdqkNZ-660!cT?0>0C z>sR(l4KY2s-%M7YtHAnS3U#kDh8>&BKQ2o(E6+!10T8+Ol-($Zc zwh4f>|2@V6)_#wL5To8>%&VGeF%D!>ZI9Uepeiz`b}*=dY5HZ;$(QQ-c|&!B460oW zs@7BO=1XWyQpgPh+RToQRe5sCW zDb@Xtdt~MOi5KpA_wAbw>Q?aHpx8UKt)- zaOcmFm%Bgx&dLwJt?c_`)0RUPO}ccmueNz=$BiFb)#d%AL&|pFylB;Z&-WUzveN;I z>Qjez`TgHJzj;7td~;MMn^e22;g_i`rJD2kM+YjZx)FDfhbmt<{DltjrFv-IPz`5L zt?*FQC2);NRgW}9^M>lI463s|RCQjh_obT18>-0+swodu{Zt!$sUDs;RR57d^$3Hi zRR=!Wm+CQjL-p7Us>c~rSsdx7da^IoQxWUmLwB0GwC?71{A&tK>)-%Fo^*d`oa z`Ec}IT z@V)d+&0hNEj7#6r+@& zfO*n{>lrXB5!(dl+ON!0@YL?G`nO9pV`A^~CRJT8c`YI5( z^{ou5ZyQvZ&~<_IfiKmM5bIwceXK663#3mxm*(a93;oCU(qAFA35VDIyz#Z7s!NUk zdZ_9**#CT~{+KsZf6Acxvxh2z&M)*k{>msIJB3hOGy$;oKh;8bYL|Fz5My@H>kcA* z(2_~DL*7vBm_c zt$nF(+fu4I?+e>bQPq86+q+cN(_|v%FVx$YYDr6}=DaVgkD{tyHho>H_@DI)^+QZ% zvD6>2O#rU_CGY@vYL~zR5o4CX>gk5|^rgCY-cTKqL3JO4s`*$$`}$HHnKxAT%b>cy zLDi~WkMpHEK5wW_$e=pWpvtGJOW*^2sUD12|LXNLb!lC_p5EN0D||0qh1e!|u=W=N z5k*y(c-0=Nx*|5)muhX^P_4_L8uw7u2`1%Bb#C5JotHs%zK5zV+>h|3x*%_;F3g~M zltI-h@s9JQdIDnoi-8l>rFAiIl5uI4FzOdt?0e}m5ZeUI+FuNusi^8=V2OvSPB7>B zQoR7N{wiLmF0EC($a86};$^;K5wWl&!D=(Lsci3 zTYRZVyoa{H-r+j2#<06(2qxm~xWs)rX|%^RxRKHR3ty~Itb zITFZx4$mf4K3V=k+-g}<)d`rpEc?H*KU0_1uWata?0ac$Q>-to z6AbquZo-|{{)*4HimHBPbLV75)hhA0M{p)p?gX44RDaE&%DsyfRXnY9gSoKCk7`@Q z<_Faxcxva3V#JtK^`KEl9LRjC>moKksICW3ZK|CRV^YOKc7CC*IFLzoBgFa_0~@PL z>tdjr=hE(#3qqUwUV2N!HUYEt7Xv-usjXs9#F#4T_r`WOkg4Jhh|LeGJHk_&>Q0C; zsp`DZ2M02#mLfJksO|z!ZK`F6F{$dOIsgYUsqT*07E#UlAk83n>QL2#G=mXiQq^_5 zAvlmpwH&c6qMGwTnxXL2eyYO|<4biv9LS_P3bFY?bu>J+sg6O6FVzV+kV$nCV)KLQ zWO!;*oq`yXsxFqM;Xo$ULlB!ERA<0bo9dy6@ueEUflR90KQce4a+6D&Y7{YwDobBo z0@vX{CROg^m>*QR*`!T1ffz*5Dl^n2_?9LP{H#GTj(C(N28%I(B7Tu%~Rg4p~}<}7$> zE5nV>lrmtOR)!mVX{x$Wei35xgX+cb)TYW!$b6}CN3Kk&OA(tNRIh@kHdXEp=1Y}3 zUu9BVf!O?@dILPQsd76mldA4<<>phFRPR7+eo(y=p4wEo6_!a=S7x}=Qzq315St%V zx#yHkl^al*RCR&PEtfK>K8e`;pvs+~Y^vNAN>R1mP23|XlPY&ZY7y1jem(u;!UZ+Q zZ!vH8#c!QB;EBy&EWA5%SC7pPJ#f!+9yv3z#R(TZxL4N=Kfi6S>(?(`(eZ_{N54F@ zXU)#%cKfXKnico1+tjYlwyz#>cl^mts}DTw#n<|MFlyi_!^+!z^8TP>w(GjbiYLE6 zXHopzCw|y>+=u5*t9q~7rNiF(ZuU;SHrRLh!;xO!Kis}(`n8>2fTs@C()$NYUcTFy zej)DPq^K4czYzB>%B0F&idsZ9=grAC;Hmvoxv!E*RVQHXDU?Z-8wlkG)eqsRO_f_7 znN)QN%uRnXsd7u7{Gj?JJhiEE6Cy>`%B$RHCzC3-*YU57|DZ0dYvbI2M_t;;8U-Ql zN|SkMZbOqFDsrzJTSac1V^Y-#hI`0lQspKw`9YOC+1OOMt&K^QiH5%rH*m?M%57Sj zaCq%+V{tDTn<_V!F{!RYp7@2hmr4fJA~q@3WakYk*A2T27gATU)+-e89n(JfIxr^L;?Xf0E}z}-2eap diff --git a/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/obj/Debug/netstandard2.0/LINGYUN.Abp.PermissionManagement.Application.dll b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Application/obj/Debug/netstandard2.0/LINGYUN.Abp.PermissionManagement.Application.dll index 54b4aaa9768ef0b5983218907fbd6e4ed6105587..054bea4fed8d0f90547849286c4dc63d058d63ce 100644 GIT binary patch delta 702 zcmZo@VQgq&oY29tBk<#ji9Irm&nB)kWlWfOUy*V0WJX4HR);VKhLFjMOgfVz8Pyrz zOm1YX7d#%$00tgFl8J$p;l^e`rtOT3DU(k!pJAM}c^Zo*BV)nl1FVuP(fY!?O!EI~ zSs55um_%y1AQTUT;ssGPY(P?wS0j~yfs5gu77>csHPS$8wI=g$#W3nm&g3#@+&Fn5 zS2d%>WLfTd#vPmIa_2BIdQax!UB@_Q@=o5QFhyZ5khuyFYt_KkDuS%#(x?PmD~(lJ zqY7*f(36fbVE;0(1F2kQ28I$KR-By3C(gvhIJt^%4P(+|b$(SJMPU|@K?V?eOu+US zg6v^Iwg*ERZV#gX$QpKrV`mu@H+S$Gu-4De0Es+glw#9k;AWTw=Cw(b@vt%QFf0c1 zni+B#WLbF_b|cC0G8}>GyCuNJz{{{e2Vn{?!y+&bVhSI_8mJsdB_G2TU4%+L28PY% zqOpU&K~&<5hz8tIbRFA~;1oR^(h@VDt@O0_wN{#8ZF?Wy)kh3vt#Q zVDiYBtZShxP$k?pYof2MSEtaQ*0|@>WhW5lg{KwMs>y| zlN%Z91?$5Zz`z4YGBL0+OxP^Qw4IUBYVt|uGmHhBr?F@%6L zm4ShUsfGvyLlnS!OMs1mmmxz3VG1up7MKSyg^!^GDhE=@$IzpTP|3%@u(@6|R#L!v z_r*YmXPh2w{Fa_m?@zh7`Hfx#r(t>UmaPnoz5z@?9XEj3Ck%)!K-wXI5l9IGu{sc| z0Ha=Ia;b%~0J~Psi;sWKI?jK&X`S9Oy91L~Se({{3NDm~3WAIdxMd@LBD&;snEocO qVra?%8QeR0fu%HK{p3BCL6axgd2Hsh`o+q$z$(UserProfile)\.nuget\packages\ C:\Users\iVarKey\.nuget\packages\;D:\Microsoft\Xamarin\NuGet\;C:\Program Files (x86)\dotnet\sdk\NuGetFallbackFolder PackageReference - 5.4.0 + 5.5.0 $(MSBuildAllProjects);$(MSBuildThisFileFullPath) diff --git a/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Domain/.gitignore b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Domain/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/permissions/LINGYUN.Abp.PermissionManagement.Domain/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/.gitignore b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.Abp.SettingManagement.Application.Contracts.csprojAssemblyReference.cache b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/obj/Debug/netstandard2.0/LINGYUN.Abp.SettingManagement.Application.Contracts.csprojAssemblyReference.cache index 8438368d4453d8475a68fed04474f7662f8f2c32..4e54b3c6e8b05ff248249746507107857bcd0821 100644 GIT binary patch delta 1976 zcmZvdUrbw79LIZVZ+lN$XiHnVNar62GD7W&xUB=+#*js3-NN`|6ohV2Sji|b*&L7n zGLqrKV&tcb$;|XkeS`3%CNj52eKHtL7GF#>KA1Qke9*+YIB<3;c$%7+s^0c=SPw><60DF=^xiVI_7E= z0s6~T(1KjiVXVEY)%t>NPQ5&3i0->nPAx<+&qp;CSoON&__+LRGL>vdHPjz=h%#OX z@%&+Ic=Y}H?`hprsUwfx>z<|io@yg`c(ZGQblpt8`eJyL4(Qb)M7?^#hvH?=dLEls z^-3dm{Q6_;PuCW0>Xlselb&D=$Qq}AKds764QEMEpD(dd?%fhc_H*jwDcmX6($4AE zr*dP-GnWce`LUd==Qa5ZqyaTNF~mHJ>znQEZTixCkox^$?Q2e&Y16xpZu@JrgZzAu z<{z!4J5dk)?LQz6QL5yXNE(~>vfvQHeV8>y+0s~AHgYJNAkBEh6T>hP_m~Yc*8;EH zcpJC>PzVN&+HQ)^kB7^3mAo?s69 zYgkODVR{&j9U9?Wo`>Y|m?wt$yWCXq@2U6;l!;suW3(0NKU+Y3EsKdA=O|RXyt&~E zxxuOYctK9^vYdomWU>0(P<>WZpG#bu-@U#);U;mJR>OUfH^8W4F+Hzv6s6yz(PlZ# zp`3xtvRHkVRG+J=&m7lI?)aP(^W-bfb}wN6(=4XPn;glV@6~=4{jE`z_uVsHbGrr(yK9&eOSebYMR8oww1|Ku6-IM0(>!+%Lj-GhoQ; z=BFdjh;7H4IJImOXj!};Ts(_s;?N;lSkUtr|6y7U47$>aL5mhK*n#&bhCuJxF&P7c z#Ho!)UmNb^M>JidOdO)bdpIzY(9BQ~&?~ delta 2479 zcma)7T}&KR6yCe+&hFja?jH--NKsG(0?zW&it?|NB9WF-eiXVb?6Lza?9Ku^V1Fn} zXsuX(u%4o(ebMNPi6&K|iJI6L9@_X~nyB@~7atm9qKO(`i|5R2%ZzIbH@V-ObLX7z zn>(}j+iM-SyRY^z^XI#vmvu4c#uer=vng0JH^YQQw7N_tQy9|La%i(Qz`A7xmaNlO z53csAtNB8OAb2rd#FiGgozp7#Fk54Iw>Z6!j3>o#WJXL$iV~A25@9(!AtfYP5u?dO zI3|m!$?%*M4b_VEVs$7Ui-crJNhx7D8lH>R;?f{7Jc$f_8pFYDhW#2tpUNOc<8iNm z%1)fzPmpVZ0io2z@28{?!Rm)a;T`C*722ub$He#)By6Q>lD9c<8ZKv&J8$;Sz;#o3Qru)xkR z=0OC9L#U?9!d|gjtgEi8dBVi#sZ{paTaK1LGsQJpaqYi~U3Kt{y^rnLDB>1#V;$Z# z<7C2KM0elGlp-a>BlEHnOGtbluJOkR>Zt}N4VFf*+<;@wZtL}}t*s^qJImn*XBlgN zJI)wugh|(sw}~nrK-fcp&IP2BGOm1u0dZ4_(2j5c zmfQzG-qmT{kJ&IJ%mr|BS7)FDGggeC$sE8aAKae&$9X4){Aq$N1f$kxdaY0OTHSEU zy~YlL!xQlyqP~X^H0~Z)^b|K9CdOWZBXk=l4Q&e_>1jXI(+*(GC3Oo$-d;8cGv0}# z&r)A0f=2%wM$XI!=#I&=dNQSc?JWErsD@|q+u12t%O4#&P5qA|Xc~(c@yw>WdiWVimk8)o z7*zTmqvNiLzJO66Q_(M-P{a;-EEz>7N(xJ8CygRJxFkRCB52h_Y Apa1{> diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/.gitignore b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/obj/Debug/netstandard2.0/LINGYUN.Abp.SettingManagement.Application.csprojAssemblyReference.cache b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/obj/Debug/netstandard2.0/LINGYUN.Abp.SettingManagement.Application.csprojAssemblyReference.cache index 70a0eeb274b2ab842e402a4e7ebc272b9c56e679..ae241ebe4ca1db4267fc93da8d59c4835f718a04 100644 GIT binary patch literal 20860 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 GSNs=nUUN|Z literal 17957 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 Q1=Zgxs7@22(c=~W0~CJ8y#N3J diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/.gitignore b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/.gitignore new file mode 100644 index 000000000..79774a567 --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/.gitignore @@ -0,0 +1,7 @@ +bin +obj +Logs +appsettings.*.json +node_modules +yarn.lock +package-lock.json \ No newline at end of file diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/obj/Debug/netcoreapp3.1/LINGYUN.Abp.SettingManagement.HttpApi.csprojAssemblyReference.cache b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/obj/Debug/netcoreapp3.1/LINGYUN.Abp.SettingManagement.HttpApi.csprojAssemblyReference.cache index 28df533086522e3e2721dd0228cc3f7f8984ff57..970b1ecb37e2f193eccbada033ae08e9b5a5b1ea 100644 GIT binary patch literal 26062 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 Ks%{Pz_5T5pC8Zz$ literal 28082 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 { @@ -167,7 +172,6 @@ namespace AuthServer.Host }); app.UseAuditing(); app.UseMvcWithDefaultRouteAndArea(); - SeedData(context); } diff --git a/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj b/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj index 2f89dc015..d91c575ba 100644 --- a/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj +++ b/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj @@ -41,6 +41,8 @@ + + diff --git a/vueJs/src/api/clients.ts b/vueJs/src/api/clients.ts new file mode 100644 index 000000000..6f7d2124f --- /dev/null +++ b/vueJs/src/api/clients.ts @@ -0,0 +1,133 @@ + +import ApiService from './serviceBase' +import { FullAuditedEntityDto, PagedAndSortedResultRequestDto, PagedResultDto } from './types' + +const serviceUrl = process.env.VUE_APP_BASE_API + +export default class ClientService { + public static getClientById(id: string) { + let _url = '/api/IdentityServer/Clients/' + _url += id + return ApiService.Get(_url, serviceUrl) + } + + public static getClients(payload: ClientGetByPaged) { + let _url = '/api/IdentityServer/Clients' + _url += '?sorting=' + payload.sorting + _url += '&skipCount=' + payload.skipCount + _url += '&maxResultCount=' + payload.maxResultCount + return ApiService.Get>(_url, serviceUrl) + } +} + +export class ClientGetById { + id!: string +} + +export class ClientGetByPaged extends PagedAndSortedResultRequestDto { + filter?: string +} + +export class ClientSecret { + type!: string + value!: string + description: string | undefined + expiration: Date | undefined +} + +export class ClientRedirectUri { + redirectUri!: string +} + +export class ClientClaim { + type!: string + value!: string +} + +export class ClientCorsOrigin { + origin!: string +} + +export class ClientGrantType { + grantType!: string +} + +export class ClientIdPRestriction { + provider!: string +} + +export class ClientPostLogoutRedirectUri { + postLogoutRedirectUri!: string +} + +export class ClientProperty { + key!: string + value!: string +} + +export class ClientScope { + scope!: string +} + +export class Client extends FullAuditedEntityDto { + id!: string + clientId!: string + clientName!: string + description?: string + clientUri?: string + logoUri?: string + enabled!: boolean + protocolType!: string + requireClientSecret!: boolean + requireConsent!: boolean + allowRememberConsent!: boolean + alwaysIncludeUserClaimsInIdToken!: boolean + requirePkce!: boolean + allowPlainTextPkce!: boolean + allowAccessTokensViaBrowser!: boolean + frontChannelLogoutUri?: string + frontChannelLogoutSessionRequired!: boolean + backChannelLogoutUri?: string + backChannelLogoutSessionRequired!: boolean + allowOfflineAccess!: boolean + identityTokenLifetime?: number + accessTokenLifetime?: number + authorizationCodeLifetime?: number + consentLifetime?: number + absoluteRefreshTokenLifetime?: number + slidingRefreshTokenLifetime?: number + refreshTokenUsage?: number + updateAccessTokenClaimsOnRefresh!: boolean + refreshTokenExpiration?: number + accessTokenType?: number + enableLocalLogin!: boolean + includeJwtId!: boolean + alwaysSendClientClaims!: boolean + clientClaimsPrefix?: string + pairWiseSubjectSalt?: string + userSsoLifetime?: number + userCodeType?: string + deviceCodeLifetime?: number + allowedScopes!: ClientScope[] + clientSecrets!: ClientSecret[] + allowedGrantTypes!: ClientGrantType[] + allowedCorsOrigins!: ClientCorsOrigin[] + redirectUris!: ClientRedirectUri[] + postLogoutRedirectUris!: ClientPostLogoutRedirectUri[] + identityProviderRestrictions!: ClientIdPRestriction[] + claims!: ClientClaim[] + properties!: ClientProperty[] + + constructor() { + super() + this.allowedScopes = new Array() + this.clientSecrets = new Array() + this.allowedGrantTypes = new Array() + this.allowedCorsOrigins = new Array() + this.redirectUris = new Array() + this.postLogoutRedirectUris = new Array() + this.identityProviderRestrictions = new Array() + this.claims = new Array() + this.properties = new Array() + } +} diff --git a/vueJs/src/api/types.ts b/vueJs/src/api/types.ts index d6def7385..0a3c72eca 100644 --- a/vueJs/src/api/types.ts +++ b/vueJs/src/api/types.ts @@ -61,6 +61,7 @@ export class PagedAndSortedResultRequestDto implements IPagedResultRequest, ISor sorting: string | undefined constructor() { + this.sorting = '' this.skipCount = 1 this.maxResultCount = 30 } @@ -186,3 +187,29 @@ export interface ISoftDelete { /** 是否已删除 */ isDeleted: boolean } + +/** 作用于接口 */ +export interface IScope { + /** 作用域 */ + scope: string +} + +/** 密钥 */ +export interface ISecret { + /** 密钥类型 */ + type: string + /** 密钥值 */ + value: string + /** 密钥说明 */ + description: string | undefined + /** 过期日期 */ + expiration: Date | undefined +} + +/** 令牌 */ +export interface IClaim { + /** 类型 */ + type: string + /** 数值 */ + value: string +} diff --git a/vueJs/src/components/InputTagEx/index.vue b/vueJs/src/components/InputTagEx/index.vue new file mode 100644 index 000000000..5abaa9c46 --- /dev/null +++ b/vueJs/src/components/InputTagEx/index.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/vueJs/src/lang/zh.ts b/vueJs/src/lang/zh.ts index 5bc1cd262..9e8c26ee4 100644 --- a/vueJs/src/lang/zh.ts +++ b/vueJs/src/lang/zh.ts @@ -71,7 +71,9 @@ export default { apigateway: '网关管理', group: '路由分组', global: '全局配置', - route: '路由配置' + route: '路由配置', + identityServer: '身份认证服务器', + clients: '客户端管理' }, navbar: { logOut: '退出登录', @@ -358,5 +360,33 @@ export default { ipBlockedList: 'Ip黑名单', authenticationProviderKey: '身份认证程序', allowedScopes: '允许认证范围' + }, + identityServer: { + otherOpera: '更多操作', + enabled: '启用客户端', + disbled: '停用客户端', + deleteClient: '删除客户端', + updateClient: '编辑客户端', + updateClientByName: '编辑客户端 {name}', + createClient: '创建客户端', + clientId: '客户端标识', + clientName: '客户端名称', + description: '客户端说明', + protocolType: '协议类型', + requirePkce: '需要Pkce', + allowPlainTextPkce: '允许纯文本Pkce', + allowOfflineAccess: '允许离线访问', + allowedScopes: '允许的作用域', + redirectUris: '重定向Uri', + allowedGrantTypes: '允许的授权类型', + allowAccessTokensViaBrowser: '允许通过浏览器访问令牌', + identityTokenLifetime: '身份令牌有效期(s)', + accessTokenLifetime: '访问令牌有效期(s)', + authorizationCodeLifetime: '授权码有效期(s)', + absoluteRefreshTokenLifetime: '绝对刷新令牌有效期(s)', + slidingRefreshTokenLifetime: '滚动刷新令牌有效期(s)', + deviceCodeLifetime: '设备授权码有效期(s)', + clientClaimsPrefix: '客户端声明前缀', + basicOptions: '基本设置' } } diff --git a/vueJs/src/router/index.ts b/vueJs/src/router/index.ts index b35571fd6..b5bad93f5 100644 --- a/vueJs/src/router/index.ts +++ b/vueJs/src/router/index.ts @@ -352,6 +352,33 @@ export const asyncRoutes: RouteConfig[] = [ } } ] + }, + { + path: '/identityServer', + component: Layout, + meta: { + title: 'identityServer', + icon: 'manager', + roles: ['IdentityServer.Clients'], + alwaysShow: true + }, + children: [ + { + path: 'clients', + component: () => import('@/views/admin/identityServer/client/index.vue'), + name: 'clients', + meta: { + title: 'clients', + icon: 'clients', + roles: ['IdentityServer.Clients'] + } + } + ] + }, + { + path: '*', + component: () => import(/* webpackChunkName: "error-page-404" */ '@/views/error-page/404.vue'), + meta: { hidden: true } } ] diff --git a/vueJs/src/utils/request.ts b/vueJs/src/utils/request.ts index 0affa6e64..d1ae28449 100644 --- a/vueJs/src/utils/request.ts +++ b/vueJs/src/utils/request.ts @@ -46,14 +46,14 @@ service.interceptors.response.use( { confirmButtonText: '重新登录', cancelButtonText: '取消', - type: 'warning' + type: 'error' }).then(() => { UserModule.ResetToken() location.reload() // To prevent bugs from vue-router + return Promise.reject(error) }) } if (error.response.status === 429) { - console.log(error.response.data) Message({ message: '您的操作过快,请稍后再试!', type: 'warning', @@ -61,6 +61,14 @@ service.interceptors.response.use( }) return Promise.reject(error) } + if (error.response.status === 400 && error.response.data.error_description) { + Message({ + message: error.response.data.error_description, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } let message = error.message if (error.response.headers._abperrorformat) { message = error.response.data.error.message + error.response.data.error.details diff --git a/vueJs/src/views/admin/apigateway/components/RouteCreateOrEditForm.vue b/vueJs/src/views/admin/apigateway/components/RouteCreateOrEditForm.vue index a0a6129f4..c835f8471 100644 --- a/vueJs/src/views/admin/apigateway/components/RouteCreateOrEditForm.vue +++ b/vueJs/src/views/admin/apigateway/components/RouteCreateOrEditForm.vue @@ -31,6 +31,7 @@ @@ -550,8 +551,8 @@ export default class extends Vue { } } - private onSubmitEdit(formName: string) { - const routeEditForm = this.$refs[formName] as any + private onSubmitEdit() { + const routeEditForm = this.$refs.formRoute as any routeEditForm.validate(async(valid: boolean) => { if (valid) { if (this.routeId) { diff --git a/vueJs/src/views/admin/apigateway/route.vue b/vueJs/src/views/admin/apigateway/route.vue index 88d1d65e9..73f0c58a5 100644 --- a/vueJs/src/views/admin/apigateway/route.vue +++ b/vueJs/src/views/admin/apigateway/route.vue @@ -70,13 +70,23 @@ + + + - - - +
+
+ + + {{ tag[key] }} + + + +
+
+ + + + + diff --git a/vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue b/vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue new file mode 100644 index 000000000..4ea633d42 --- /dev/null +++ b/vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/vueJs/src/views/admin/identityServer/client/index.vue b/vueJs/src/views/admin/identityServer/client/index.vue new file mode 100644 index 000000000..17b62c1a0 --- /dev/null +++ b/vueJs/src/views/admin/identityServer/client/index.vue @@ -0,0 +1,314 @@ + + + + + diff --git a/vueJs/src/views/admin/identityServer/components/ScopeInput.vue b/vueJs/src/views/admin/identityServer/components/ScopeInput.vue new file mode 100644 index 000000000..326a3aa2d --- /dev/null +++ b/vueJs/src/views/admin/identityServer/components/ScopeInput.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/vueJs/src/views/login/index.vue b/vueJs/src/views/login/index.vue index e9b03f18f..1176392e0 100644 --- a/vueJs/src/views/login/index.vue +++ b/vueJs/src/views/login/index.vue @@ -197,13 +197,7 @@ export default class extends Vue { this.$router.push({ path: this.redirect || '/' }) - }).catch(err => { - console.log(err) - Message({ - message: err.message, - type: 'error', - duration: 5 * 1000 - }) + }).catch(() => { setTimeout(() => { this.loading = false }, 0.5 * 1000)