From 7d189a6fb89da16616057df92792197b2c402130 Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 3 Oct 2014 00:28:49 +1000 Subject: [PATCH] Backports the @ symbol escaping fixes --- .../Persistence/Querying/BaseExpressionHelper.cs | 7 ------- .../Repositories/MemberGroupRepository.cs | 7 +++++-- .../Persistence/Repositories/MemberRepository.cs | 4 ++-- .../Persistence/Repositories/UserRepository.cs | 4 ++-- src/Umbraco.Tests/Services/MemberServiceTests.cs | 12 ++++++++++-- src/Umbraco.Tests/Services/UserServiceTests.cs | 3 ++- 6 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs b/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs index 36bcaa8c3a..d0945c8d04 100644 --- a/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs +++ b/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs @@ -626,13 +626,6 @@ namespace Umbraco.Core.Persistence.Querying // ? "'" + escapeCallback(value) + "'" // : value.ToString(); //} - - public virtual string EscapeParam(object paramValue) - { - return paramValue == null - ? string.Empty - : SqlSyntaxContext.SqlSyntaxProvider.EscapeString(paramValue.ToString()); - } public virtual bool ShouldQuoteValue(Type fieldType) { diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs index ef1790033c..c053e630fa 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs @@ -202,13 +202,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) { @@ -279,6 +279,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 b4ad2af710..c917a928d4 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -520,10 +520,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/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index 07714b36a7..fcf7d7ddcd 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -262,10 +262,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 8091923ca0..37cf5204bb 100644 --- a/src/Umbraco.Tests/Services/MemberServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs @@ -93,15 +93,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] @@ -324,9 +329,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 5c41895037..a5e0211164 100644 --- a/src/Umbraco.Tests/Services/UserServiceTests.cs +++ b/src/Umbraco.Tests/Services/UserServiceTests.cs @@ -127,9 +127,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]