diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs index 0d6fc90016..041d0ee622 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs @@ -203,13 +203,13 @@ namespace Umbraco.Core.Persistence.Repositories //find the member by username var memberSql = new Sql(); var memberObjectType = new Guid(Constants.ObjectTypes.Member); - var escapedUsername = PetaPocoExtensions.EscapeAtSymbols(username); + memberSql.Select("umbracoNode.id") .From() .InnerJoin() .On(dto => dto.NodeId, dto => dto.NodeId) .Where(x => x.NodeObjectType == memberObjectType) - .Where(x => x.LoginName == escapedUsername); + .Where(x => x.LoginName == username); var memberIdUsername = Database.Fetch(memberSql).FirstOrDefault(); if (memberIdUsername.HasValue == false) { @@ -280,6 +280,9 @@ namespace Umbraco.Core.Persistence.Repositories public void AssignRolesInternal(int[] memberIds, string[] roleNames) { + //ensure they're unique + memberIds = memberIds.Distinct().ToArray(); + //create the missing roles first var existingSql = new Sql() diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index 065849af64..4158fddfa4 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -532,10 +532,10 @@ namespace Umbraco.Core.Persistence.Repositories public bool Exists(string username) { var sql = new Sql(); - var escapedUserName = PetaPocoExtensions.EscapeAtSymbols(username); + sql.Select("COUNT(*)") .From() - .Where(x => x.LoginName == escapedUserName); + .Where(x => x.LoginName == username); return Database.ExecuteScalar(sql) > 0; } diff --git a/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs index c486ad2dce..fe4fcc7d79 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs @@ -489,6 +489,10 @@ namespace Umbraco.Core.Persistence.Repositories /// private static string GetTagSet(IEnumerable tagsToInsert) { + //TODO: Fix this query, since this is going to be basically a unique query each time, this will cause some mem usage in peta poco, + // and surely there's a nicer way! + //TODO: When we fix, be sure to remove the @ symbol escape + var array = tagsToInsert .Select(tag => string.Format("select '{0}' as Tag, '{1}' as " + SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName("Group") + @"", diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index dc699009cf..9d99ef4309 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -251,10 +251,10 @@ namespace Umbraco.Core.Persistence.Repositories public bool Exists(string username) { var sql = new Sql(); - var escapedUserName = PetaPocoExtensions.EscapeAtSymbols(username); + sql.Select("COUNT(*)") .From() - .Where(x => x.UserName == escapedUserName); + .Where(x => x.UserName == username); return Database.ExecuteScalar(sql) > 0; } diff --git a/src/Umbraco.Tests/Services/MemberServiceTests.cs b/src/Umbraco.Tests/Services/MemberServiceTests.cs index e2d55a1c80..5a52bca4f9 100644 --- a/src/Umbraco.Tests/Services/MemberServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs @@ -94,15 +94,20 @@ namespace Umbraco.Tests.Services ServiceContext.MemberTypeService.Save(memberType); IMember member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "pass", "test"); ServiceContext.MemberService.Save(member); + //need to test with '@' symbol in the lookup + IMember member2 = MockedMember.CreateSimpleMember(memberType, "test2", "test2@test.com", "pass", "test2@test.com"); + ServiceContext.MemberService.Save(member2); ServiceContext.MemberService.AddRole("MyTestRole1"); ServiceContext.MemberService.AddRole("MyTestRole2"); ServiceContext.MemberService.AddRole("MyTestRole3"); - ServiceContext.MemberService.AssignRoles(new[] { member.Id }, new[] { "MyTestRole1", "MyTestRole2" }); + ServiceContext.MemberService.AssignRoles(new[] { member.Id, member2.Id }, new[] { "MyTestRole1", "MyTestRole2" }); var memberRoles = ServiceContext.MemberService.GetAllRoles("test"); - Assert.AreEqual(2, memberRoles.Count()); + + var memberRoles2 = ServiceContext.MemberService.GetAllRoles("test2@test.com"); + Assert.AreEqual(2, memberRoles2.Count()); } [Test] @@ -325,9 +330,12 @@ namespace Umbraco.Tests.Services ServiceContext.MemberTypeService.Save(memberType); IMember member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "pass", "test"); ServiceContext.MemberService.Save(member); + IMember member2 = MockedMember.CreateSimpleMember(memberType, "test", "test2@test.com", "pass", "test2@test.com"); + ServiceContext.MemberService.Save(member2); Assert.IsTrue(ServiceContext.MemberService.Exists("test")); Assert.IsFalse(ServiceContext.MemberService.Exists("notFound")); + Assert.IsTrue(ServiceContext.MemberService.Exists("test2@test.com")); } [Test] diff --git a/src/Umbraco.Tests/Services/UserServiceTests.cs b/src/Umbraco.Tests/Services/UserServiceTests.cs index f8c9429e80..2a099c9001 100644 --- a/src/Umbraco.Tests/Services/UserServiceTests.cs +++ b/src/Umbraco.Tests/Services/UserServiceTests.cs @@ -130,9 +130,10 @@ namespace Umbraco.Tests.Services var userType = MockedUserType.CreateUserType(); ServiceContext.UserService.SaveUserType(userType); var user = ServiceContext.UserService.CreateUserWithIdentity("JohnDoe", "john@umbraco.io", userType); - + var user2 = ServiceContext.UserService.CreateUserWithIdentity("john2@umbraco.io", "john2@umbraco.io", userType); Assert.IsTrue(ServiceContext.UserService.Exists("JohnDoe")); Assert.IsFalse(ServiceContext.UserService.Exists("notFound")); + Assert.IsTrue(ServiceContext.UserService.Exists("john2@umbraco.io")); } [Test] diff --git a/src/umbraco.sln b/src/umbraco.sln index 944ee95392..d814910b01 100644 --- a/src/umbraco.sln +++ b/src/umbraco.sln @@ -12,6 +12,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4 ..\build\RevertToCleanInstall.bat = ..\build\RevertToCleanInstall.bat ..\build\RevertToEmptyInstall.bat = ..\build\RevertToEmptyInstall.bat umbraco.presentation.targets = umbraco.presentation.targets + ..\build\UmbracoVersion.txt = ..\build\UmbracoVersion.txt + ..\build\webpihash.txt = ..\build\webpihash.txt EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{FD962632-184C-4005-A5F3-E705D92FC645}"