diff --git a/Dockerfile.build b/Dockerfile.build index 97d9d9d4b..da28673fc 100644 --- a/Dockerfile.build +++ b/Dockerfile.build @@ -43,9 +43,10 @@ RUN cp -a /tmp/node_modules /src/Squidex/ \ # Test Backend RUN dotnet restore \ && dotnet test tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj \ - && dotnet test tests/Squidex.Domain.Apps.Core.Tests/Squidex.Core.Tests.csproj \ - && dotnet test tests/Squidex.Domain.Apps.Read.Tests/Squidex.Read.Tests.csproj \ - && dotnet test tests/Squidex.Domain.Apps.Write.Tests/Squidex.Write.Tests.csproj + && dotnet test tests/Squidex.Domain.Apps.Core.Tests/Squidex.Domain.Apps.Core.Tests.csproj \ + && dotnet test tests/Squidex.Domain.Apps.Read.Tests/Squidex.Domain.Apps.Read.Tests.csproj \ + && dotnet test tests/Squidex.Domain.Apps.Write.Tests/Squidex.Domain.Apps.Write.Tests.csproj \ + && dotnet test tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj # Publish RUN dotnet publish src/Squidex/Squidex.csproj --output /out/ --configuration Release \ No newline at end of file diff --git a/Squidex.sln b/Squidex.sln index ec578a43d..d365dc2c8 100644 --- a/Squidex.sln +++ b/Squidex.sln @@ -1,12 +1,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26430.14 +VisualStudioVersion = 15.0.26430.15 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex", "src\Squidex\Squidex.csproj", "{61F6BBCE-A080-4400-B194-70E2F5D2096E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "squidex_infrastructure", "squidex_infrastructure", "{8CF53B92-5EB1-461D-98F8-70DA9B603FBF}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "infrastructure", "infrastructure", "{8CF53B92-5EB1-461D-98F8-70DA9B603FBF}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "squidex_domain", "squidex_domain", "{4C6B06C2-6D77-4E0E-AE32-D7050236433A}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "domain", "domain", "{4C6B06C2-6D77-4E0E-AE32-D7050236433A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Core", "src\Squidex.Domain.Apps.Core\Squidex.Domain.Apps.Core.csproj", "{47F3C27E-698B-4EDF-A7E8-D7F4232AFBB0}" EndProject @@ -44,6 +44,18 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Migrate_01", "tools\Migrate_01\Migrate_01.csproj", "{B51126A8-0D75-4A79-867D-10724EC6AC84}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Shared", "src\Squidex.Shared\Squidex.Shared.csproj", "{5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apps", "apps", "{C9809D59-6665-471E-AD87-5AC624C65892}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "users", "users", "{C0D540F0-9158-4528-BFD8-BEAE6EAE45EA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Users", "src\Squidex.Domain.Users\Squidex.Domain.Users.csproj", "{F7771E22-47BD-45C4-A133-FD7F1DE27CA0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Users.MongoDb", "src\Squidex.Domain.Users.MongoDb\Squidex.Domain.Users.MongoDb.csproj", "{27CF800D-890F-4882-BF05-44EC3233537D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Squidex.Domain.Users.Tests", "tests\Squidex.Domain.Users.Tests\Squidex.Domain.Users.Tests.csproj", "{42184546-E3CB-4D4F-9495-43979B9C63B9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -206,26 +218,80 @@ Global {B51126A8-0D75-4A79-867D-10724EC6AC84}.Release|x64.Build.0 = Release|Any CPU {B51126A8-0D75-4A79-867D-10724EC6AC84}.Release|x86.ActiveCfg = Release|Any CPU {B51126A8-0D75-4A79-867D-10724EC6AC84}.Release|x86.Build.0 = Release|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x64.ActiveCfg = Debug|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x64.Build.0 = Debug|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x86.ActiveCfg = Debug|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Debug|x86.Build.0 = Debug|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|Any CPU.Build.0 = Release|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x64.ActiveCfg = Release|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x64.Build.0 = Release|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x86.ActiveCfg = Release|Any CPU + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F}.Release|x86.Build.0 = Release|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x64.ActiveCfg = Debug|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x64.Build.0 = Debug|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x86.ActiveCfg = Debug|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Debug|x86.Build.0 = Debug|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|Any CPU.Build.0 = Release|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x64.ActiveCfg = Release|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x64.Build.0 = Release|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x86.ActiveCfg = Release|Any CPU + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0}.Release|x86.Build.0 = Release|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Debug|x64.ActiveCfg = Debug|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Debug|x64.Build.0 = Debug|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Debug|x86.ActiveCfg = Debug|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Debug|x86.Build.0 = Debug|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Release|Any CPU.Build.0 = Release|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Release|x64.ActiveCfg = Release|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Release|x64.Build.0 = Release|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Release|x86.ActiveCfg = Release|Any CPU + {27CF800D-890F-4882-BF05-44EC3233537D}.Release|x86.Build.0 = Release|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x64.ActiveCfg = Debug|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x64.Build.0 = Debug|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x86.ActiveCfg = Debug|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Debug|x86.Build.0 = Debug|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|Any CPU.Build.0 = Release|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x64.ActiveCfg = Release|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x64.Build.0 = Release|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x86.ActiveCfg = Release|Any CPU + {42184546-E3CB-4D4F-9495-43979B9C63B9}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {47F3C27E-698B-4EDF-A7E8-D7F4232AFBB0} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} + {47F3C27E-698B-4EDF-A7E8-D7F4232AFBB0} = {C9809D59-6665-471E-AD87-5AC624C65892} {BD1C30A8-8FFA-4A92-A9BD-B67B1CDDD84C} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF} - {25F66C64-058A-4D44-BC0C-F12A054F9A91} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} - {A85201C6-6AF8-4B63-8365-08F741050438} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} - {A92B4734-2587-4F6F-97A3-741BE48709A5} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} - {28F8E9E2-FE24-41F7-A888-9FC244A9E2DD} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} - {9A3DEA7E-1681-4D48-AC5C-1F0DE421A203} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} + {25F66C64-058A-4D44-BC0C-F12A054F9A91} = {C9809D59-6665-471E-AD87-5AC624C65892} + {A85201C6-6AF8-4B63-8365-08F741050438} = {C9809D59-6665-471E-AD87-5AC624C65892} + {A92B4734-2587-4F6F-97A3-741BE48709A5} = {C9809D59-6665-471E-AD87-5AC624C65892} + {28F8E9E2-FE24-41F7-A888-9FC244A9E2DD} = {C9809D59-6665-471E-AD87-5AC624C65892} + {9A3DEA7E-1681-4D48-AC5C-1F0DE421A203} = {C9809D59-6665-471E-AD87-5AC624C65892} {7FD0A92B-7862-4BB1-932B-B52A9CACB56B} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF} - {FD0AFD44-7A93-4F9E-B5ED-72582392E435} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} + {FD0AFD44-7A93-4F9E-B5ED-72582392E435} = {C9809D59-6665-471E-AD87-5AC624C65892} {6A811927-3C37-430A-90F4-503E37123956} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF} - {8B074219-F69A-4E41-83C6-12EE1E647779} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} + {8B074219-F69A-4E41-83C6-12EE1E647779} = {C9809D59-6665-471E-AD87-5AC624C65892} {D7166C56-178A-4457-B56A-C615C7450DEE} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF} {C1E5BBB6-6B6A-4DE5-B19D-0538304DE343} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF} {945871B1-77B8-43FB-B53C-27CF385AB756} = {8CF53B92-5EB1-461D-98F8-70DA9B603FBF} {D48A03DF-BCD3-4667-8747-2F251347E2B6} = {B56EBCEC-9C50-46A7-848C-65502DE69C5C} {B51126A8-0D75-4A79-867D-10724EC6AC84} = {94207AA6-4923-4183-A558-E0F8196B8CA3} + {5E75AB7D-6F01-4313-AFF1-7F7128FFD71F} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} + {C9809D59-6665-471E-AD87-5AC624C65892} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} + {C0D540F0-9158-4528-BFD8-BEAE6EAE45EA} = {4C6B06C2-6D77-4E0E-AE32-D7050236433A} + {F7771E22-47BD-45C4-A133-FD7F1DE27CA0} = {C0D540F0-9158-4528-BFD8-BEAE6EAE45EA} + {27CF800D-890F-4882-BF05-44EC3233537D} = {C0D540F0-9158-4528-BFD8-BEAE6EAE45EA} + {42184546-E3CB-4D4F-9495-43979B9C63B9} = {C0D540F0-9158-4528-BFD8-BEAE6EAE45EA} EndGlobalSection EndGlobal diff --git a/src/Squidex.Domain.Apps.Core/Identity/SquidexClaimTypes.cs b/src/Squidex.Domain.Apps.Core/Identity/SquidexClaimTypes.cs deleted file mode 100644 index b0b071e50..000000000 --- a/src/Squidex.Domain.Apps.Core/Identity/SquidexClaimTypes.cs +++ /dev/null @@ -1,19 +0,0 @@ -// ========================================================================== -// SquidexClaimTypes.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -namespace Squidex.Domain.Apps.Core.Identity -{ - public static class SquidexClaimTypes - { - public static readonly string SquidexDisplayName = "urn:squidex:name"; - - public static readonly string SquidexPictureUrl = "urn:squidex:picture"; - - public static readonly string Prefix = "urn:squidex:"; - } -} diff --git a/src/Squidex.Domain.Apps.Core/Identity/SquidexRoles.cs b/src/Squidex.Domain.Apps.Core/Identity/SquidexRoles.cs deleted file mode 100644 index 3031c17e4..000000000 --- a/src/Squidex.Domain.Apps.Core/Identity/SquidexRoles.cs +++ /dev/null @@ -1,21 +0,0 @@ -// ========================================================================== -// SquidexRoles.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -namespace Squidex.Domain.Apps.Core.Identity -{ - public static class SquidexRoles - { - public static readonly string Administrator = "ADMINISTRATOR"; - - public static readonly string AppOwner = "APP-OWNER"; - - public static readonly string AppEditor = "APP-EDITOR"; - - public static readonly string AppDeveloper = "APP-DEVELOPER"; - } -} diff --git a/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj b/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj index d8a4583d2..14f1c6e41 100644 --- a/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj +++ b/src/Squidex.Domain.Apps.Core/Squidex.Domain.Apps.Core.csproj @@ -11,10 +11,9 @@ - - - + + diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Squidex.Domain.Apps.Read.MongoDb.csproj b/src/Squidex.Domain.Apps.Read.MongoDb/Squidex.Domain.Apps.Read.MongoDb.csproj index 668717ccb..af944fed3 100644 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Squidex.Domain.Apps.Read.MongoDb.csproj +++ b/src/Squidex.Domain.Apps.Read.MongoDb/Squidex.Domain.Apps.Read.MongoDb.csproj @@ -15,9 +15,6 @@ - - - diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Users/MongoRoleStore.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Users/MongoRoleStore.cs deleted file mode 100644 index ea28ce60f..000000000 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Users/MongoRoleStore.cs +++ /dev/null @@ -1,93 +0,0 @@ -// ========================================================================== -// MongoRoleStore.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Identity.MongoDB; -using MongoDB.Driver; -using Squidex.Domain.Apps.Read.Users; - -namespace Squidex.Domain.Apps.Read.MongoDb.Users -{ - public sealed class MongoRoleStore : - IRoleStore, - IRoleFactory - { - private readonly RoleStore innerStore; - - public MongoRoleStore(IMongoDatabase database) - { - var rolesCollection = database.GetCollection("Identity_Roles"); - - IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(rolesCollection); - - innerStore = new RoleStore(rolesCollection); - } - - public void Dispose() - { - innerStore.Dispose(); - } - - public IRole Create(string name) - { - return new WrappedIdentityRole { Name = name }; - } - - public async Task FindByIdAsync(string roleId, CancellationToken cancellationToken) - { - return await innerStore.FindByIdAsync(roleId, cancellationToken); - } - - public async Task FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken) - { - return await innerStore.FindByNameAsync(normalizedRoleName, cancellationToken); - } - - public Task CreateAsync(IRole role, CancellationToken cancellationToken) - { - return innerStore.CreateAsync((WrappedIdentityRole)role, cancellationToken); - } - - public Task UpdateAsync(IRole role, CancellationToken cancellationToken) - { - return innerStore.UpdateAsync((WrappedIdentityRole)role, cancellationToken); - } - - public Task DeleteAsync(IRole role, CancellationToken cancellationToken) - { - return innerStore.DeleteAsync((WrappedIdentityRole)role, cancellationToken); - } - - public Task GetRoleIdAsync(IRole role, CancellationToken cancellationToken) - { - return innerStore.GetRoleIdAsync((WrappedIdentityRole)role, cancellationToken); - } - - public Task GetRoleNameAsync(IRole role, CancellationToken cancellationToken) - { - return innerStore.GetRoleNameAsync((WrappedIdentityRole)role, cancellationToken); - } - - public Task SetRoleNameAsync(IRole role, string roleName, CancellationToken cancellationToken) - { - return innerStore.SetRoleNameAsync((WrappedIdentityRole)role, roleName, cancellationToken); - } - - public Task GetNormalizedRoleNameAsync(IRole role, CancellationToken cancellationToken) - { - return innerStore.GetNormalizedRoleNameAsync((WrappedIdentityRole)role, cancellationToken); - } - - public Task SetNormalizedRoleNameAsync(IRole role, string normalizedName, CancellationToken cancellationToken) - { - return innerStore.SetNormalizedRoleNameAsync((WrappedIdentityRole)role, normalizedName, cancellationToken); - } - } -} diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Users/MongoUserStore.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Users/MongoUserStore.cs deleted file mode 100644 index f54f6ccc1..000000000 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Users/MongoUserStore.cs +++ /dev/null @@ -1,329 +0,0 @@ -// ========================================================================== -// MongoUserStore.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Identity.MongoDB; -using MongoDB.Driver; -using Squidex.Domain.Apps.Read.Users; - -namespace Squidex.Domain.Apps.Read.MongoDb.Users -{ - public sealed class MongoUserStore : - IUserPasswordStore, - IUserRoleStore, - IUserLoginStore, - IUserSecurityStampStore, - IUserEmailStore, - IUserClaimStore, - IUserPhoneNumberStore, - IUserTwoFactorStore, - IUserLockoutStore, - IUserAuthenticationTokenStore, - IUserFactory, - IUserResolver, - IQueryableUserStore - { - private readonly UserStore innerStore; - - public MongoUserStore(IMongoDatabase database) - { - var usersCollection = database.GetCollection("Identity_Users"); - - IndexChecks.EnsureUniqueIndexOnNormalizedEmail(usersCollection); - IndexChecks.EnsureUniqueIndexOnNormalizedUserName(usersCollection); - - innerStore = new UserStore(usersCollection); - } - - public void Dispose() - { - innerStore.Dispose(); - } - - public IQueryable Users - { - get { return innerStore.Users; } - } - - public IUser Create(string email) - { - return new WrappedIdentityUser { Email = email, UserName = email }; - } - - public async Task FindByIdAsync(string userId) - { - return await innerStore.FindByIdAsync(userId, CancellationToken.None); - } - - public async Task FindByIdAsync(string userId, CancellationToken cancellationToken) - { - return await innerStore.FindByIdAsync(userId, cancellationToken); - } - - public async Task FindByEmailAsync(string normalizedEmail, CancellationToken cancellationToken) - { - return await innerStore.FindByEmailAsync(normalizedEmail, cancellationToken); - } - - public async Task FindByNameAsync(string normalizedUserName, CancellationToken cancellationToken) - { - return await innerStore.FindByNameAsync(normalizedUserName, cancellationToken); - } - - public async Task FindByLoginAsync(string loginProvider, string providerKey, CancellationToken cancellationToken) - { - return await innerStore.FindByLoginAsync(loginProvider, providerKey, cancellationToken); - } - - public async Task> GetUsersForClaimAsync(Claim claim, CancellationToken cancellationToken) - { - return (await innerStore.GetUsersForClaimAsync(claim, cancellationToken)).OfType().ToList(); - } - - public async Task> GetUsersInRoleAsync(string roleName, CancellationToken cancellationToken) - { - return (await innerStore.GetUsersInRoleAsync(roleName, cancellationToken)).OfType().ToList(); - } - - public Task CreateAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.CreateAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task UpdateAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.UpdateAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task DeleteAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.DeleteAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task GetUserIdAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetUserIdAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task GetUserNameAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetUserNameAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetUserNameAsync(IUser user, string userName, CancellationToken cancellationToken) - { - return innerStore.SetUserNameAsync((WrappedIdentityUser)user, userName, cancellationToken); - } - - public Task GetNormalizedUserNameAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetNormalizedUserNameAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetNormalizedUserNameAsync(IUser user, string normalizedName, CancellationToken cancellationToken) - { - return innerStore.SetNormalizedUserNameAsync((WrappedIdentityUser)user, normalizedName, cancellationToken); - } - - public Task GetPasswordHashAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetPasswordHashAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetPasswordHashAsync(IUser user, string passwordHash, CancellationToken cancellationToken) - { - return innerStore.SetPasswordHashAsync((WrappedIdentityUser)user, passwordHash, cancellationToken); - } - - public Task AddToRoleAsync(IUser user, string roleName, CancellationToken cancellationToken) - { - return innerStore.AddToRoleAsync((WrappedIdentityUser)user, roleName, cancellationToken); - } - - public Task RemoveFromRoleAsync(IUser user, string roleName, CancellationToken cancellationToken) - { - return innerStore.RemoveFromRoleAsync((WrappedIdentityUser)user, roleName, cancellationToken); - } - - public Task> GetRolesAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetRolesAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task IsInRoleAsync(IUser user, string roleName, CancellationToken cancellationToken) - { - return innerStore.IsInRoleAsync((WrappedIdentityUser)user, roleName, cancellationToken); - } - - public Task AddLoginAsync(IUser user, UserLoginInfo login, CancellationToken cancellationToken) - { - return innerStore.AddLoginAsync((WrappedIdentityUser)user, login, cancellationToken); - } - - public Task RemoveLoginAsync(IUser user, string loginProvider, string providerKey, CancellationToken cancellationToken) - { - return innerStore.RemoveLoginAsync((WrappedIdentityUser)user, loginProvider, providerKey, cancellationToken); - } - - public Task> GetLoginsAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetLoginsAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task GetSecurityStampAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetSecurityStampAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetSecurityStampAsync(IUser user, string stamp, CancellationToken cancellationToken) - { - return innerStore.SetSecurityStampAsync((WrappedIdentityUser)user, stamp, cancellationToken); - } - - public Task GetEmailAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetEmailAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetEmailAsync(IUser user, string email, CancellationToken cancellationToken) - { - return innerStore.SetEmailAsync((WrappedIdentityUser)user, email, cancellationToken); - } - - public Task GetEmailConfirmedAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetEmailConfirmedAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetEmailConfirmedAsync(IUser user, bool confirmed, CancellationToken cancellationToken) - { - return innerStore.SetEmailConfirmedAsync((WrappedIdentityUser)user, confirmed, cancellationToken); - } - - public Task GetNormalizedEmailAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetNormalizedEmailAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetNormalizedEmailAsync(IUser user, string normalizedEmail, CancellationToken cancellationToken) - { - return innerStore.SetNormalizedEmailAsync((WrappedIdentityUser)user, normalizedEmail, cancellationToken); - } - - public Task> GetClaimsAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetClaimsAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task AddClaimsAsync(IUser user, IEnumerable claims, CancellationToken cancellationToken) - { - return innerStore.AddClaimsAsync((WrappedIdentityUser)user, claims, cancellationToken); - } - - public Task ReplaceClaimAsync(IUser user, Claim claim, Claim newClaim, CancellationToken cancellationToken) - { - return innerStore.ReplaceClaimAsync((WrappedIdentityUser)user, claim, newClaim, cancellationToken); - } - - public Task RemoveClaimsAsync(IUser user, IEnumerable claims, CancellationToken cancellationToken) - { - return innerStore.RemoveClaimsAsync((WrappedIdentityUser)user, claims, cancellationToken); - } - - public Task GetPhoneNumberAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetPhoneNumberAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetPhoneNumberAsync(IUser user, string phoneNumber, CancellationToken cancellationToken) - { - return innerStore.SetPhoneNumberAsync((WrappedIdentityUser)user, phoneNumber, cancellationToken); - } - - public Task GetPhoneNumberConfirmedAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetPhoneNumberConfirmedAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetPhoneNumberConfirmedAsync(IUser user, bool confirmed, CancellationToken cancellationToken) - { - return innerStore.SetPhoneNumberConfirmedAsync((WrappedIdentityUser)user, confirmed, cancellationToken); - } - - public Task GetTwoFactorEnabledAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetTwoFactorEnabledAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetTwoFactorEnabledAsync(IUser user, bool enabled, CancellationToken cancellationToken) - { - return innerStore.SetTwoFactorEnabledAsync((WrappedIdentityUser)user, enabled, cancellationToken); - } - - public Task GetLockoutEndDateAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetLockoutEndDateAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetLockoutEndDateAsync(IUser user, DateTimeOffset? lockoutEnd, CancellationToken cancellationToken) - { - return innerStore.SetLockoutEndDateAsync((WrappedIdentityUser)user, lockoutEnd, cancellationToken); - } - - public Task GetAccessFailedCountAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetAccessFailedCountAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task IncrementAccessFailedCountAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.IncrementAccessFailedCountAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task ResetAccessFailedCountAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.ResetAccessFailedCountAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task GetLockoutEnabledAsync(IUser user, CancellationToken cancellationToken) - { - return innerStore.GetLockoutEnabledAsync((WrappedIdentityUser)user, cancellationToken); - } - - public Task SetLockoutEnabledAsync(IUser user, bool enabled, CancellationToken cancellationToken) - { - return innerStore.SetLockoutEnabledAsync((WrappedIdentityUser)user, enabled, cancellationToken); - } - - public Task SetTokenAsync(IUser user, string loginProvider, string name, string value, CancellationToken cancellationToken) - { - return innerStore.SetTokenAsync((WrappedIdentityUser)user, loginProvider, name, value, cancellationToken); - } - - public Task RemoveTokenAsync(IUser user, string loginProvider, string name, CancellationToken cancellationToken) - { - return innerStore.RemoveTokenAsync((WrappedIdentityUser)user, loginProvider, name, cancellationToken); - } - - public Task GetTokenAsync(IUser user, string loginProvider, string name, CancellationToken cancellationToken) - { - return innerStore.GetTokenAsync((WrappedIdentityUser)user, loginProvider, name, cancellationToken); - } - - public Task HasPasswordAsync(IUser user, CancellationToken cancellationToken) - { - return Task.FromResult(!string.IsNullOrWhiteSpace(((WrappedIdentityUser)user).PasswordHash)); - } - } -} diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Users/WrappedIdentityRole.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Users/WrappedIdentityRole.cs deleted file mode 100644 index 079e3e05d..000000000 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Users/WrappedIdentityRole.cs +++ /dev/null @@ -1,17 +0,0 @@ -// ========================================================================== -// WrappedIdentityRole.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using Microsoft.AspNetCore.Identity.MongoDB; -using Squidex.Domain.Apps.Read.Users; - -namespace Squidex.Domain.Apps.Read.MongoDb.Users -{ - public sealed class WrappedIdentityRole : IdentityRole, IRole - { - } -} diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Users/WrappedIdentityUser.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Users/WrappedIdentityUser.cs deleted file mode 100644 index 89da563b8..000000000 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Users/WrappedIdentityUser.cs +++ /dev/null @@ -1,46 +0,0 @@ -// ========================================================================== -// WrappedIdentityUser.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using Microsoft.AspNetCore.Identity.MongoDB; -using Squidex.Domain.Apps.Read.Users; - -namespace Squidex.Domain.Apps.Read.MongoDb.Users -{ - public sealed class WrappedIdentityUser : IdentityUser, IUser - { - public bool IsLocked - { - get { return LockoutEndDateUtc != null && LockoutEndDateUtc.Value > DateTime.UtcNow; } - } - - IReadOnlyList IUser.Claims - { - get { return Claims.Select(x => new Claim(x.Type, x.Value)).ToList(); } - } - - IReadOnlyList IUser.Logins - { - get { return Logins.Select(x => new ExternalLogin(x.LoginProvider, x.ProviderKey, x.ProviderDisplayName)).ToList(); } - } - - public void UpdateEmail(string email) - { - Email = UserName = email; - } - - public void SetClaim(string type, string value) - { - Claims.RemoveAll(x => string.Equals(x.Type, type, StringComparison.OrdinalIgnoreCase)); - Claims.Add(new IdentityUserClaim { Type = type, Value = value }); - } - } -} diff --git a/src/Squidex.Domain.Apps.Read/Squidex.Domain.Apps.Read.csproj b/src/Squidex.Domain.Apps.Read/Squidex.Domain.Apps.Read.csproj index 5be3075ef..3fb44e66a 100644 --- a/src/Squidex.Domain.Apps.Read/Squidex.Domain.Apps.Read.csproj +++ b/src/Squidex.Domain.Apps.Read/Squidex.Domain.Apps.Read.csproj @@ -13,10 +13,8 @@ - - diff --git a/src/Squidex.Domain.Apps.Read/Users/AssetUserPictureStore.cs b/src/Squidex.Domain.Apps.Read/Users/AssetUserPictureStore.cs deleted file mode 100644 index da23947e3..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/AssetUserPictureStore.cs +++ /dev/null @@ -1,43 +0,0 @@ -// ========================================================================== -// AssetUserPictureStore.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System.IO; -using System.Threading.Tasks; -using Squidex.Infrastructure; -using Squidex.Infrastructure.Assets; - -namespace Squidex.Domain.Apps.Read.Users -{ - public sealed class AssetUserPictureStore : IUserPictureStore - { - private readonly IAssetStore assetStore; - - public AssetUserPictureStore(IAssetStore assetStore) - { - Guard.NotNull(assetStore, nameof(assetStore)); - - this.assetStore = assetStore; - } - - public Task UploadAsync(string userId, Stream stream) - { - return assetStore.UploadAsync(userId, 0, "picture", stream); - } - - public async Task DownloadAsync(string userId) - { - var memoryStream = new MemoryStream(); - - await assetStore.DownloadAsync(userId, 0, "picture", memoryStream); - - memoryStream.Position = 0; - - return memoryStream; - } - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/ExternalLogin.cs b/src/Squidex.Domain.Apps.Read/Users/ExternalLogin.cs deleted file mode 100644 index a618757ff..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/ExternalLogin.cs +++ /dev/null @@ -1,32 +0,0 @@ -// ========================================================================== -// ExternalLogin.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -namespace Squidex.Domain.Apps.Read.Users -{ - public sealed class ExternalLogin - { - public string LoginProvider { get; } - - public string ProviderKey { get; } - - public string ProviderDisplayName { get; } - - public ExternalLogin(string loginProvider, string providerKey, string providerDisplayName) - { - LoginProvider = loginProvider; - - ProviderKey = providerKey; - ProviderDisplayName = providerDisplayName; - - if (string.IsNullOrWhiteSpace(ProviderDisplayName)) - { - ProviderDisplayName = loginProvider; - } - } - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/IRole.cs b/src/Squidex.Domain.Apps.Read/Users/IRole.cs deleted file mode 100644 index 558e520e1..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/IRole.cs +++ /dev/null @@ -1,15 +0,0 @@ -// ========================================================================== -// IRole.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -namespace Squidex.Domain.Apps.Read.Users -{ - public interface IRole - { - string Name { get; } - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/IRoleFactory.cs b/src/Squidex.Domain.Apps.Read/Users/IRoleFactory.cs deleted file mode 100644 index 930dea5ac..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/IRoleFactory.cs +++ /dev/null @@ -1,15 +0,0 @@ -// ========================================================================== -// IRoleFactory.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -namespace Squidex.Domain.Apps.Read.Users -{ - public interface IRoleFactory - { - IRole Create(string name); - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/IUser.cs b/src/Squidex.Domain.Apps.Read/Users/IUser.cs deleted file mode 100644 index 604b4bb72..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/IUser.cs +++ /dev/null @@ -1,34 +0,0 @@ -// ========================================================================== -// IUser.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System.Collections.Generic; -using System.Security.Claims; - -namespace Squidex.Domain.Apps.Read.Users -{ - public interface IUser - { - bool IsLocked { get; } - - string Id { get; } - - string Email { get; } - - string NormalizedEmail { get; } - - IReadOnlyList Claims { get; } - - IReadOnlyList Logins { get; } - - void UpdateEmail(string email); - - void AddClaim(Claim claim); - - void SetClaim(string type, string value); - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/IUserFactory.cs b/src/Squidex.Domain.Apps.Read/Users/IUserFactory.cs deleted file mode 100644 index 573b8715b..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/IUserFactory.cs +++ /dev/null @@ -1,15 +0,0 @@ -// ========================================================================== -// IUserFactory.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -namespace Squidex.Domain.Apps.Read.Users -{ - public interface IUserFactory - { - IUser Create(string email); - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/IUserPictureStore.cs b/src/Squidex.Domain.Apps.Read/Users/IUserPictureStore.cs deleted file mode 100644 index 39489c897..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/IUserPictureStore.cs +++ /dev/null @@ -1,20 +0,0 @@ -// ========================================================================== -// IUserPictureStore.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System.IO; -using System.Threading.Tasks; - -namespace Squidex.Domain.Apps.Read.Users -{ - public interface IUserPictureStore - { - Task UploadAsync(string userId, Stream stream); - - Task DownloadAsync(string userId); - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/IUserResolver.cs b/src/Squidex.Domain.Apps.Read/Users/IUserResolver.cs deleted file mode 100644 index 3e15cc3fd..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/IUserResolver.cs +++ /dev/null @@ -1,17 +0,0 @@ -// ========================================================================== -// IUserResolver.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System.Threading.Tasks; - -namespace Squidex.Domain.Apps.Read.Users -{ - public interface IUserResolver - { - Task FindByIdAsync(string id); - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/UserExtensions.cs b/src/Squidex.Domain.Apps.Read/Users/UserExtensions.cs deleted file mode 100644 index 70173b611..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/UserExtensions.cs +++ /dev/null @@ -1,74 +0,0 @@ -// ========================================================================== -// UserExtensions.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Linq; -using Squidex.Domain.Apps.Core.Identity; -using Squidex.Infrastructure; - -// ReSharper disable InvertIf - -namespace Squidex.Domain.Apps.Read.Users -{ - public static class UserExtensions - { - public static void UpdateDisplayName(this IUser user, string displayName) - { - user.SetClaim(SquidexClaimTypes.SquidexDisplayName, displayName); - } - - public static void SetPictureUrl(this IUser user, string pictureUrl) - { - user.SetClaim(SquidexClaimTypes.SquidexPictureUrl, pictureUrl); - } - - public static void SetPictureUrlToStore(this IUser user) - { - user.SetClaim(SquidexClaimTypes.SquidexPictureUrl, "store"); - } - - public static void SetPictureUrlFromGravatar(this IUser user, string email) - { - user.SetClaim(SquidexClaimTypes.SquidexPictureUrl, GravatarHelper.CreatePictureUrl(email)); - } - - public static bool IsPictureUrlStored(this IUser user) - { - return string.Equals(user.Claims.FirstOrDefault(x => x.Type == SquidexClaimTypes.SquidexPictureUrl)?.Value, "store", StringComparison.OrdinalIgnoreCase); - } - - public static string PictureUrl(this IUser user) - { - return user.Claims.FirstOrDefault(x => x.Type == SquidexClaimTypes.SquidexPictureUrl)?.Value; - } - - public static string DisplayName(this IUser user) - { - return user.Claims.FirstOrDefault(x => x.Type == SquidexClaimTypes.SquidexDisplayName)?.Value; - } - - public static string PictureNormalizedUrl(this IUser user) - { - var url = user.Claims.FirstOrDefault(x => x.Type == SquidexClaimTypes.SquidexPictureUrl)?.Value; - - if (!string.IsNullOrWhiteSpace(url) && Uri.IsWellFormedUriString(url, UriKind.Absolute) && url.Contains("gravatar")) - { - if (url.Contains("?")) - { - url += "&d=404"; - } - else - { - url += "?d=404"; - } - } - - return url; - } - } -} diff --git a/src/Squidex.Domain.Apps.Read/Users/UserManagerExtensions.cs b/src/Squidex.Domain.Apps.Read/Users/UserManagerExtensions.cs deleted file mode 100644 index b47600a71..000000000 --- a/src/Squidex.Domain.Apps.Read/Users/UserManagerExtensions.cs +++ /dev/null @@ -1,131 +0,0 @@ -// ========================================================================== -// UserManagerExtensions.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Squidex.Infrastructure; - -// ReSharper disable ImplicitlyCapturedClosure -// ReSharper disable InvertIf -// ReSharper disable ReturnTypeCanBeEnumerable.Local - -namespace Squidex.Domain.Apps.Read.Users -{ - public static class UserManagerExtensions - { - public static Task> QueryByEmailAsync(this UserManager userManager, string email = null, int take = 10, int skip = 0) - { - var users = QueryUsers(userManager, email).Skip(skip).Take(take).ToList(); - - return Task.FromResult>(users); - } - - public static Task CountByEmailAsync(this UserManager userManager, string email = null) - { - var count = QueryUsers(userManager, email).LongCount(); - - return Task.FromResult(count); - } - - private static IQueryable QueryUsers(UserManager userManager, string email = null) - { - var result = userManager.Users; - - if (!string.IsNullOrWhiteSpace(email)) - { - var upperEmail = email.ToUpperInvariant(); - - result = result.Where(x => x.NormalizedEmail.Contains(upperEmail)); - } - - return result; - } - - public static async Task CreateAsync(this UserManager userManager, IUserFactory factory, string email, string displayName, string password) - { - var user = factory.Create(email); - - user.UpdateDisplayName(displayName); - user.SetPictureUrlFromGravatar(email); - - await DoChecked(() => userManager.CreateAsync(user), "Cannot create user."); - - if (!string.IsNullOrWhiteSpace(password)) - { - await DoChecked(() => userManager.AddPasswordAsync(user, password), "Cannot create user."); - } - - return user; - } - - public static async Task UpdateAsync(this UserManager userManager, string id, string email, string displayName, string password) - { - var user = await userManager.FindByIdAsync(id); - - if (user == null) - { - throw new DomainObjectNotFoundException(id, typeof(IUser)); - } - - if (!string.IsNullOrWhiteSpace(email)) - { - user.UpdateEmail(email); - } - - if (!string.IsNullOrWhiteSpace(displayName)) - { - user.UpdateDisplayName(displayName); - } - - await DoChecked(() => userManager.UpdateAsync(user), "Cannot update user."); - - if (!string.IsNullOrWhiteSpace(password)) - { - await DoChecked(() => userManager.RemovePasswordAsync(user), "Cannot update user."); - await DoChecked(() => userManager.AddPasswordAsync(user, password), "Cannot update user."); - } - } - - public static async Task LockAsync(this UserManager userManager, string id) - { - var user = await userManager.FindByIdAsync(id); - - if (user == null) - { - throw new DomainObjectNotFoundException(id, typeof(IUser)); - } - - await DoChecked(() => userManager.SetLockoutEndDateAsync(user, DateTimeOffset.UtcNow.AddYears(100)), "Cannot lock user."); - } - - public static async Task UnlockAsync(this UserManager userManager, string id) - { - var user = await userManager.FindByIdAsync(id); - - if (user == null) - { - throw new DomainObjectNotFoundException(id, typeof(IUser)); - } - - await DoChecked(() => userManager.SetLockoutEndDateAsync(user, null), "Cannot unlock user."); - } - - private static async Task DoChecked(Func> action, string message) - { - var result = await action(); - - if (!result.Succeeded) - { - throw new ValidationException(message, result.Errors.Select(x => new ValidationError(x.Description)).ToArray()); - } - } - } -} diff --git a/src/Squidex.Domain.Apps.Write/Apps/AppCommandHandler.cs b/src/Squidex.Domain.Apps.Write/Apps/AppCommandHandler.cs index 3a46e810d..b533a84c3 100644 --- a/src/Squidex.Domain.Apps.Write/Apps/AppCommandHandler.cs +++ b/src/Squidex.Domain.Apps.Write/Apps/AppCommandHandler.cs @@ -9,12 +9,12 @@ using System.Threading.Tasks; using Squidex.Domain.Apps.Read.Apps.Repositories; using Squidex.Domain.Apps.Read.Apps.Services; -using Squidex.Domain.Apps.Read.Users; using Squidex.Domain.Apps.Write.Apps.Commands; using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Commands; using Squidex.Infrastructure.Dispatching; using Squidex.Infrastructure.Tasks; +using Squidex.Shared.Users; // ReSharper disable InvertIf diff --git a/src/Squidex.Domain.Apps.Write/Squidex.Domain.Apps.Write.csproj b/src/Squidex.Domain.Apps.Write/Squidex.Domain.Apps.Write.csproj index b459c159e..5358b47de 100644 --- a/src/Squidex.Domain.Apps.Write/Squidex.Domain.Apps.Write.csproj +++ b/src/Squidex.Domain.Apps.Write/Squidex.Domain.Apps.Write.csproj @@ -12,6 +12,7 @@ + diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Infrastructure/MongoPersistedGrantStore.cs b/src/Squidex.Domain.Users.MongoDb/Infrastructure/MongoPersistedGrantStore.cs similarity index 97% rename from src/Squidex.Domain.Apps.Read.MongoDb/Infrastructure/MongoPersistedGrantStore.cs rename to src/Squidex.Domain.Users.MongoDb/Infrastructure/MongoPersistedGrantStore.cs index dd64cb8c7..e56ff2895 100644 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Infrastructure/MongoPersistedGrantStore.cs +++ b/src/Squidex.Domain.Users.MongoDb/Infrastructure/MongoPersistedGrantStore.cs @@ -14,7 +14,7 @@ using MongoDB.Bson.Serialization; using MongoDB.Driver; using Squidex.Infrastructure.MongoDb; -namespace Squidex.Domain.Apps.Read.MongoDb.Infrastructure +namespace Squidex.Domain.Users.MongoDb.Infrastructure { public class MongoPersistedGrantStore : MongoRepositoryBase, IPersistedGrantStore { diff --git a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj index b6da5d210..60c3f160f 100644 --- a/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj +++ b/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj @@ -8,10 +8,12 @@ + + diff --git a/src/Squidex/Config/Domain/ReadModule.cs b/src/Squidex/Config/Domain/ReadModule.cs index 6c7c3e1da..9fdd146f0 100644 --- a/src/Squidex/Config/Domain/ReadModule.cs +++ b/src/Squidex/Config/Domain/ReadModule.cs @@ -20,7 +20,7 @@ using Squidex.Domain.Apps.Read.History; using Squidex.Domain.Apps.Read.Schemas; using Squidex.Domain.Apps.Read.Schemas.Services; using Squidex.Domain.Apps.Read.Schemas.Services.Implementations; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; using Squidex.Infrastructure.CQRS.Events; // ReSharper disable UnusedAutoPropertyAccessor.Local diff --git a/src/Squidex/Config/Domain/StoreMongoDbModule.cs b/src/Squidex/Config/Domain/StoreMongoDbModule.cs index 2f07d74a2..903d9dd27 100644 --- a/src/Squidex/Config/Domain/StoreMongoDbModule.cs +++ b/src/Squidex/Config/Domain/StoreMongoDbModule.cs @@ -21,17 +21,18 @@ using Squidex.Domain.Apps.Read.MongoDb.Apps; using Squidex.Domain.Apps.Read.MongoDb.Assets; using Squidex.Domain.Apps.Read.MongoDb.Contents; using Squidex.Domain.Apps.Read.MongoDb.History; -using Squidex.Domain.Apps.Read.MongoDb.Infrastructure; using Squidex.Domain.Apps.Read.MongoDb.Schemas; -using Squidex.Domain.Apps.Read.MongoDb.Users; using Squidex.Domain.Apps.Read.Schemas.Repositories; using Squidex.Domain.Apps.Read.Schemas.Services.Implementations; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; +using Squidex.Domain.Users.MongoDb; +using Squidex.Domain.Users.MongoDb.Infrastructure; using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.MongoDb; using Squidex.Infrastructure.MongoDb.UsageTracker; using Squidex.Infrastructure.UsageTracking; +using Squidex.Shared.Users; namespace Squidex.Config.Domain { diff --git a/src/Squidex/Config/Identity/GithubHandler.cs b/src/Squidex/Config/Identity/GithubHandler.cs index aae62ba8d..5a9f24b9e 100644 --- a/src/Squidex/Config/Identity/GithubHandler.cs +++ b/src/Squidex/Config/Identity/GithubHandler.cs @@ -9,7 +9,7 @@ using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication.OAuth; -using Squidex.Domain.Apps.Core.Identity; +using Squidex.Shared.Identity; namespace Squidex.Config.Identity { diff --git a/src/Squidex/Config/Identity/GoogleHandler.cs b/src/Squidex/Config/Identity/GoogleHandler.cs index 957aadd9a..3f8295683 100644 --- a/src/Squidex/Config/Identity/GoogleHandler.cs +++ b/src/Squidex/Config/Identity/GoogleHandler.cs @@ -10,8 +10,8 @@ using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication.OAuth; -using Squidex.Domain.Apps.Core.Identity; using Squidex.Infrastructure.Tasks; +using Squidex.Shared.Identity; // ReSharper disable InvertIf diff --git a/src/Squidex/Config/Identity/IdentityServices.cs b/src/Squidex/Config/Identity/IdentityServices.cs index 493f3039c..75457bf4c 100644 --- a/src/Squidex/Config/Identity/IdentityServices.cs +++ b/src/Squidex/Config/Identity/IdentityServices.cs @@ -17,9 +17,10 @@ using IdentityServer4.Stores; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Squidex.Domain.Apps.Core.Identity; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; using Squidex.Infrastructure; +using Squidex.Shared.Identity; +using Squidex.Shared.Users; using StackExchange.Redis; namespace Squidex.Config.Identity diff --git a/src/Squidex/Config/Identity/IdentityUsage.cs b/src/Squidex/Config/Identity/IdentityUsage.cs index 27aef487a..2b0a7fb6a 100644 --- a/src/Squidex/Config/Identity/IdentityUsage.cs +++ b/src/Squidex/Config/Identity/IdentityUsage.cs @@ -12,8 +12,9 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Squidex.Domain.Apps.Core.Identity; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; +using Squidex.Shared.Identity; +using Squidex.Shared.Users; // ReSharper disable InvertIf diff --git a/src/Squidex/Config/Identity/MicrosoftHandler.cs b/src/Squidex/Config/Identity/MicrosoftHandler.cs index 65c7a442c..0bcd010b0 100644 --- a/src/Squidex/Config/Identity/MicrosoftHandler.cs +++ b/src/Squidex/Config/Identity/MicrosoftHandler.cs @@ -9,7 +9,7 @@ using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication.OAuth; -using Squidex.Domain.Apps.Core.Identity; +using Squidex.Shared.Identity; // ReSharper disable InvertIf diff --git a/src/Squidex/Controllers/Api/Users/UserManagementController.cs b/src/Squidex/Controllers/Api/Users/UserManagementController.cs index c288e0a5e..4774350c0 100644 --- a/src/Squidex/Controllers/Api/Users/UserManagementController.cs +++ b/src/Squidex/Controllers/Api/Users/UserManagementController.cs @@ -13,11 +13,12 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using NSwag.Annotations; using Squidex.Controllers.Api.Users.Models; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; using Squidex.Infrastructure; using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Security; using Squidex.Pipeline; +using Squidex.Shared.Users; namespace Squidex.Controllers.Api.Users { @@ -48,7 +49,7 @@ namespace Squidex.Controllers.Api.Users var response = new UsersDto { Total = taskForCount.Result, - Items = taskForItems.Result.Select(x => SimpleMapper.Map(x, new UserDto { DisplayName = x.DisplayName(), PictureUrl = x.PictureUrl() })).ToArray() + Items = taskForItems.Result.Select(Map).ToArray() }; return Ok(response); @@ -66,7 +67,7 @@ namespace Squidex.Controllers.Api.Users return NotFound(); } - var response = SimpleMapper.Map(entity, new UserDto { DisplayName = entity.DisplayName(), PictureUrl = entity.PictureUrl() }); + var response = Map(entity); return Ok(response); } @@ -123,6 +124,11 @@ namespace Squidex.Controllers.Api.Users return NoContent(); } + private static UserDto Map(IUser user) + { + return SimpleMapper.Map(user, new UserDto { DisplayName = user.DisplayName(), PictureUrl = user.PictureUrl() }); + } + private bool IsSelf(string id) { var subject = User.OpenIdSubject(); diff --git a/src/Squidex/Controllers/Api/Users/UsersController.cs b/src/Squidex/Controllers/Api/Users/UsersController.cs index 88d13468a..fbc5ddba2 100644 --- a/src/Squidex/Controllers/Api/Users/UsersController.cs +++ b/src/Squidex/Controllers/Api/Users/UsersController.cs @@ -16,9 +16,10 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using NSwag.Annotations; using Squidex.Controllers.Api.Users.Models; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; using Squidex.Infrastructure.Reflection; using Squidex.Pipeline; +using Squidex.Shared.Users; // ReSharper disable InvertIf @@ -144,7 +145,9 @@ namespace Squidex.Controllers.Api.Users if (response.IsSuccessStatusCode) { - return new FileStreamResult(await response.Content.ReadAsStreamAsync(), response.Content.Headers.ContentType.ToString()); + var contentType = response.Content.Headers.ContentType.ToString(); + + return new FileStreamResult(await response.Content.ReadAsStreamAsync(), contentType); } } } diff --git a/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs b/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs index 5fef9a063..08925396b 100644 --- a/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs +++ b/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs @@ -16,11 +16,11 @@ using NSwag; using NSwag.AspNetCore; using NSwag.SwaggerGeneration; using Squidex.Config; -using Squidex.Domain.Apps.Core.Identity; using Squidex.Domain.Apps.Read.Apps; using Squidex.Domain.Apps.Read.Schemas; using Squidex.Infrastructure; using Squidex.Pipeline.Swagger; +using Squidex.Shared.Identity; // ReSharper disable InvertIf // ReSharper disable SuggestBaseTypeForParameter diff --git a/src/Squidex/Controllers/UI/Account/AccountController.cs b/src/Squidex/Controllers/UI/Account/AccountController.cs index 76979e157..a50d04f6a 100644 --- a/src/Squidex/Controllers/UI/Account/AccountController.cs +++ b/src/Squidex/Controllers/UI/Account/AccountController.cs @@ -20,11 +20,12 @@ using Microsoft.Extensions.Options; using NSwag.Annotations; using Squidex.Config; using Squidex.Config.Identity; -using Squidex.Domain.Apps.Core.Identity; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; using Squidex.Infrastructure; using Squidex.Infrastructure.Log; using Squidex.Infrastructure.Tasks; +using Squidex.Shared.Identity; +using Squidex.Shared.Users; // ReSharper disable InvertIf // ReSharper disable RedundantIfElseBlock diff --git a/src/Squidex/Controllers/UI/Extensions.cs b/src/Squidex/Controllers/UI/Extensions.cs index 3dc45a94b..5e5fc484a 100644 --- a/src/Squidex/Controllers/UI/Extensions.cs +++ b/src/Squidex/Controllers/UI/Extensions.cs @@ -9,7 +9,8 @@ using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; +using Squidex.Shared.Users; namespace Squidex.Controllers.UI { diff --git a/src/Squidex/Controllers/UI/Profile/ProfileController.cs b/src/Squidex/Controllers/UI/Profile/ProfileController.cs index 00af9e4b4..e654513dc 100644 --- a/src/Squidex/Controllers/UI/Profile/ProfileController.cs +++ b/src/Squidex/Controllers/UI/Profile/ProfileController.cs @@ -18,9 +18,10 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using NSwag.Annotations; using Squidex.Config.Identity; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Domain.Users; using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Reflection; +using Squidex.Shared.Users; namespace Squidex.Controllers.UI.Profile { diff --git a/src/Squidex/Controllers/UI/Profile/ProfileVM.cs b/src/Squidex/Controllers/UI/Profile/ProfileVM.cs index 499dbae1f..730589a46 100644 --- a/src/Squidex/Controllers/UI/Profile/ProfileVM.cs +++ b/src/Squidex/Controllers/UI/Profile/ProfileVM.cs @@ -7,7 +7,7 @@ // ========================================================================== using System.Collections.Generic; -using Squidex.Domain.Apps.Read.Users; +using Squidex.Shared.Users; namespace Squidex.Controllers.UI.Profile { diff --git a/src/Squidex/Pipeline/AppApiFilter.cs b/src/Squidex/Pipeline/AppApiFilter.cs index 355e82131..0f095aafb 100644 --- a/src/Squidex/Pipeline/AppApiFilter.cs +++ b/src/Squidex/Pipeline/AppApiFilter.cs @@ -13,11 +13,11 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Squidex.Domain.Apps.Core.Apps; -using Squidex.Domain.Apps.Core.Identity; using Squidex.Domain.Apps.Read.Apps; using Squidex.Domain.Apps.Read.Apps.Services; using Squidex.Infrastructure.Security; using Squidex.Infrastructure.UsageTracking; +using Squidex.Shared.Identity; // ReSharper disable SwitchStatementMissingSomeCases diff --git a/src/Squidex/Pipeline/MustBeAdministratorAttribute.cs b/src/Squidex/Pipeline/MustBeAdministratorAttribute.cs index 7df29aff8..fa9a0ba76 100644 --- a/src/Squidex/Pipeline/MustBeAdministratorAttribute.cs +++ b/src/Squidex/Pipeline/MustBeAdministratorAttribute.cs @@ -7,7 +7,7 @@ // ========================================================================== using Microsoft.AspNetCore.Authorization; -using Squidex.Domain.Apps.Core.Identity; +using Squidex.Shared.Identity; namespace Squidex.Pipeline { diff --git a/src/Squidex/Pipeline/MustBeAppDeveloperAttribute.cs b/src/Squidex/Pipeline/MustBeAppDeveloperAttribute.cs index 3779a694e..28ce12b41 100644 --- a/src/Squidex/Pipeline/MustBeAppDeveloperAttribute.cs +++ b/src/Squidex/Pipeline/MustBeAppDeveloperAttribute.cs @@ -7,7 +7,7 @@ // ========================================================================== using Microsoft.AspNetCore.Authorization; -using Squidex.Domain.Apps.Core.Identity; +using Squidex.Shared.Identity; namespace Squidex.Pipeline { diff --git a/src/Squidex/Pipeline/MustBeAppEditorAttribute.cs b/src/Squidex/Pipeline/MustBeAppEditorAttribute.cs index 55f373cef..965cf123d 100644 --- a/src/Squidex/Pipeline/MustBeAppEditorAttribute.cs +++ b/src/Squidex/Pipeline/MustBeAppEditorAttribute.cs @@ -7,7 +7,7 @@ // ========================================================================== using Microsoft.AspNetCore.Authorization; -using Squidex.Domain.Apps.Core.Identity; +using Squidex.Shared.Identity; namespace Squidex.Pipeline { diff --git a/src/Squidex/Pipeline/MustBeAppOwnerAttribute.cs b/src/Squidex/Pipeline/MustBeAppOwnerAttribute.cs index 3d53bf226..20ad0e605 100644 --- a/src/Squidex/Pipeline/MustBeAppOwnerAttribute.cs +++ b/src/Squidex/Pipeline/MustBeAppOwnerAttribute.cs @@ -7,7 +7,7 @@ // ========================================================================== using Microsoft.AspNetCore.Authorization; -using Squidex.Domain.Apps.Core.Identity; +using Squidex.Shared.Identity; namespace Squidex.Pipeline { diff --git a/src/Squidex/Pipeline/Swagger/SwaggerHelper.cs b/src/Squidex/Pipeline/Swagger/SwaggerHelper.cs index b0bb1c94f..8a1420652 100644 --- a/src/Squidex/Pipeline/Swagger/SwaggerHelper.cs +++ b/src/Squidex/Pipeline/Swagger/SwaggerHelper.cs @@ -16,7 +16,7 @@ using NSwag; using NSwag.SwaggerGeneration; using Squidex.Config; using Squidex.Controllers.Api; -using Squidex.Domain.Apps.Core.Identity; +using Squidex.Shared.Identity; namespace Squidex.Pipeline.Swagger { diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index a84906c70..db06536e1 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -28,6 +28,8 @@ + + @@ -36,6 +38,7 @@ + diff --git a/tests/Benchmarks/IBenchmark.cs b/tests/Benchmarks/IBenchmark.cs index a67b4171f..19eff0e07 100644 --- a/tests/Benchmarks/IBenchmark.cs +++ b/tests/Benchmarks/IBenchmark.cs @@ -5,6 +5,7 @@ // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== + namespace Benchmarks { public interface IBenchmark diff --git a/tests/RunCoverage.ps1 b/tests/RunCoverage.ps1 index ffbabc35f..f2918b847 100644 --- a/tests/RunCoverage.ps1 +++ b/tests/RunCoverage.ps1 @@ -26,7 +26,7 @@ New-Item -ItemType directory -Path $reportsFolder &"$userProfile\.nuget\packages\OpenCover\4.6.519\tools\OpenCover.Console.exe" ` -register:user ` -target:"C:\Program Files\dotnet\dotnet.exe" ` --targetargs:"test $workingFolder\Squidex.Domain.Apps.Core.Tests\Squidex.Core.Tests.csproj" ` +-targetargs:"test $workingFolder\Squidex.Domain.Apps.Core.Tests\Squidex.Domain.Apps.Core.Tests.csproj" ` -filter:"+[Squidex*]*" ` -skipautoprops ` -output:"$workingFolder\$reportsFolder\Core.xml" ` @@ -35,7 +35,16 @@ New-Item -ItemType directory -Path $reportsFolder &"$userProfile\.nuget\packages\OpenCover\4.6.519\tools\OpenCover.Console.exe" ` -register:user ` -target:"C:\Program Files\dotnet\dotnet.exe" ` --targetargs:"test $workingFolder\Squidex.Domain.Apps.Write.Tests\Squidex.Write.Tests.csproj" ` +-targetargs:"test $workingFolder\Squidex.Domain.Apps.Read.Tests\Squidex.Domain.Apps.Read.Tests.csproj" ` +-filter:"+[Squidex*]*" ` +-skipautoprops ` +-output:"$workingFolder\$reportsFolder\Read.xml" ` +-oldStyle + +&"$userProfile\.nuget\packages\OpenCover\4.6.519\tools\OpenCover.Console.exe" ` +-register:user ` +-target:"C:\Program Files\dotnet\dotnet.exe" ` +-targetargs:"test $workingFolder\Squidex.Domain.Apps.Write.Tests\Squidex.Domain.Apps.Write.Tests.csproj" ` -filter:"+[Squidex*]*" ` -skipautoprops ` -output:"$workingFolder\$reportsFolder\Write.xml" ` @@ -44,10 +53,10 @@ New-Item -ItemType directory -Path $reportsFolder &"$userProfile\.nuget\packages\OpenCover\4.6.519\tools\OpenCover.Console.exe" ` -register:user ` -target:"C:\Program Files\dotnet\dotnet.exe" ` --targetargs:"test $workingFolder\Squidex.Domain.Apps.Read.Tests\Squidex.Read.Tests.csproj" ` +-targetargs:"test $workingFolder\Squidex.Domain.Users.Tests\Squidex.Domain.Users.Tests.csproj" ` -filter:"+[Squidex*]*" ` -skipautoprops ` --output:"$workingFolder\$reportsFolder\Read.xml" ` +-output:"$workingFolder\$reportsFolder\Users.xml" ` -oldStyle &"$userProfile\.nuget\packages\ReportGenerator\2.5.9\tools\ReportGenerator.exe" ` diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Apps/AppCommandHandlerTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Apps/AppCommandHandlerTests.cs index 49eb623c5..b3b4b429a 100644 --- a/tests/Squidex.Domain.Apps.Write.Tests/Apps/AppCommandHandlerTests.cs +++ b/tests/Squidex.Domain.Apps.Write.Tests/Apps/AppCommandHandlerTests.cs @@ -13,11 +13,11 @@ using Squidex.Domain.Apps.Read.Apps; using Squidex.Domain.Apps.Read.Apps.Repositories; using Squidex.Domain.Apps.Read.Apps.Services; using Squidex.Domain.Apps.Read.Apps.Services.Implementations; -using Squidex.Domain.Apps.Read.Users; using Squidex.Domain.Apps.Write.Apps.Commands; using Squidex.Domain.Apps.Write.TestHelpers; using Squidex.Infrastructure; using Squidex.Infrastructure.CQRS.Commands; +using Squidex.Shared.Users; using Xunit; // ReSharper disable ImplicitlyCapturedClosure diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Squidex.Domain.Apps.Write.Tests.csproj b/tests/Squidex.Domain.Apps.Write.Tests/Squidex.Domain.Apps.Write.Tests.csproj index 68dfedbcf..fea02de46 100644 --- a/tests/Squidex.Domain.Apps.Write.Tests/Squidex.Domain.Apps.Write.Tests.csproj +++ b/tests/Squidex.Domain.Apps.Write.Tests/Squidex.Domain.Apps.Write.Tests.csproj @@ -13,7 +13,6 @@ - diff --git a/tests/Squidex.Domain.Apps.Read.Tests/Users/AssetUserPictureStoreTests.cs b/tests/Squidex.Domain.Users.Tests/AssetUserPictureStoreTests.cs similarity index 97% rename from tests/Squidex.Domain.Apps.Read.Tests/Users/AssetUserPictureStoreTests.cs rename to tests/Squidex.Domain.Users.Tests/AssetUserPictureStoreTests.cs index 2d3203e87..693f474c4 100644 --- a/tests/Squidex.Domain.Apps.Read.Tests/Users/AssetUserPictureStoreTests.cs +++ b/tests/Squidex.Domain.Users.Tests/AssetUserPictureStoreTests.cs @@ -14,7 +14,7 @@ using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Tasks; using Xunit; -namespace Squidex.Domain.Apps.Read.Users +namespace Squidex.Domain.Users { public class AssetUserPictureStoreTests { diff --git a/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj b/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj new file mode 100644 index 000000000..40788d319 --- /dev/null +++ b/tests/Squidex.Domain.Users.Tests/Squidex.Domain.Users.Tests.csproj @@ -0,0 +1,28 @@ + + + Exe + netcoreapp1.1 + $(PackageTargetFallback);dnxcore50 + Squidex.Domain.Users + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file