U4-10795 - misc fixes

This commit is contained in:
Stephan
2018-02-09 09:33:24 +01:00
parent 61ce533a08
commit 29690df567
5 changed files with 68 additions and 55 deletions
+39 -35
View File
@@ -12,9 +12,9 @@ namespace Umbraco.Core.Auditing
{
internal class AuditEventHandler : ApplicationEventHandler
{
// yada we should inject these
private IAuditService AuditServiceInstance => ApplicationContext.Current.Services.AuditService;
private IUserService UserServiceInstance => ApplicationContext.Current.Services.UserService;
private IAuditService _auditServiceInstance;
private IUserService _userServiceInstance;
private IEntityService _entityServiceInstance;
private IUser PerformingUser
{
@@ -23,7 +23,7 @@ namespace Umbraco.Core.Auditing
var identity = Thread.CurrentPrincipal?.GetUmbracoIdentity();
return identity == null
? new User { Id = 0, Name = "(no user)", Email = "" }
: UserServiceInstance.GetUserById(Convert.ToInt32(identity.Id));
: _userServiceInstance.GetUserById(Convert.ToInt32(identity.Id));
}
}
@@ -40,6 +40,10 @@ namespace Umbraco.Core.Auditing
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
_auditServiceInstance = applicationContext.Services.AuditService;
_userServiceInstance = applicationContext.Services.UserService;
_entityServiceInstance = applicationContext.Services.EntityService;
//BackOfficeUserManager.AccountLocked += ;
//BackOfficeUserManager.AccountUnlocked += ;
BackOfficeUserManager.ForgotPasswordRequested += OnForgotPasswordRequest;
@@ -64,30 +68,30 @@ namespace Umbraco.Core.Auditing
MemberService.RemovedRoles += OnRemovedRoles;
}
private void OnRemovedRoles(IMemberService sender, MemberService.RolesEventArgs args)
private void OnRemovedRoles(IMemberService sender, RolesEventArgs args)
{
var performingUser = PerformingUser;
var roles = string.Join(", ", args.Roles);
var members = ApplicationContext.Current.Services.MemberService.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
var members = sender.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
foreach (var id in args.MemberIds)
{
members.TryGetValue(id, out var member);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
0, null,
"umbraco/member", $"modified roles for member id:{id} \"{member?.Name ?? "(unknown)"}\" <{member?.Email ?? ""}>, removed {roles}");
}
}
private void OnAssignedRoles(IMemberService sender, MemberService.RolesEventArgs args)
private void OnAssignedRoles(IMemberService sender, RolesEventArgs args)
{
var performingUser = PerformingUser;
var roles = string.Join(", ", args.Roles);
var members = ApplicationContext.Current.Services.MemberService.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
var members = sender.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
foreach (var id in args.MemberIds)
{
members.TryGetValue(id, out var member);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
0, null,
"umbraco/member", $"modified roles for member id:{id} \"{member?.Name ?? "(unknown)"}\" <{member?.Email ?? ""}>, assigned {roles}");
@@ -105,7 +109,7 @@ namespace Umbraco.Core.Auditing
var sections = string.Join(", ", group.AllowedSections);
var perms = string.Join(", ", group.Permissions);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
0, null,
"umbraco/user", $"save group id:{group.Id}:{group.Alias} \"{group.Name}\", updating {(string.IsNullOrWhiteSpace(dp) ? "(nothing)" : dp)}, sections: {sections}, perms: {perms}");
@@ -120,9 +124,9 @@ namespace Umbraco.Core.Auditing
{
var group = sender.GetUserGroupById(perm.UserGroupId);
var assigned = string.Join(", ", perm.AssignedPermissions);
var entity = ApplicationContext.Current.Services.EntityService.Get(perm.EntityId);
var entity = _entityServiceInstance.Get(perm.EntityId);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
0, null,
"umbraco/user", $"assign group {(perm.IsDefaultPermissions ? "default " : "")}perms id:{group.Id}:{group.Alias} \"{group.Name}\", assigning {(string.IsNullOrWhiteSpace(assigned) ? "(nothing)" : assigned)} on id:{perm.EntityId} \"{entity.Name}\"");
@@ -138,7 +142,7 @@ namespace Umbraco.Core.Auditing
//var dp = string.Join(", ", member.Properties.Where(x => x.WasDirty()).Select(x => x.Alias));
var dp = string.Join(", ", ((Member) member).GetWereDirtyProperties());
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
0, null,
"umbraco/member", $"save member id:{member.Id} \"{member.Name}\" <{member.Email}>, updating {(string.IsNullOrWhiteSpace(dp) ? "(nothing)" : dp)}");
@@ -151,7 +155,7 @@ namespace Umbraco.Core.Auditing
var members = deleteEventArgs.DeletedEntities;
foreach (var member in members)
{
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
0, null,
"umbraco/member", $"delete member id:{member.Id} \"{member.Name}\" <{member.Email}>");
@@ -171,7 +175,7 @@ namespace Umbraco.Core.Auditing
? string.Join(", ", affectedUser.Groups.Select(x => x.Alias))
: null;
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
affectedUser.Id, $"User \"{affectedUser.Name}\" <{affectedUser.Email}>",
"umbraco/user", $"save user{(sections == null ? "" : (", sections: " + sections))}{(groups == null ? "" : (", groups: " + groups))}");
@@ -183,7 +187,7 @@ namespace Umbraco.Core.Auditing
var performingUser = PerformingUser;
var affectedUsers = deleteEventArgs.DeletedEntities;
foreach (var affectedUser in affectedUsers)
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
affectedUser.Id, $"User \"{affectedUser.Name}\" <{affectedUser.Email}>",
"umbraco/user", "delete user");
@@ -193,8 +197,8 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.PerformingUser);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
0, null,
"umbraco/user", "login success");
@@ -205,8 +209,8 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.PerformingUser);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
0, null,
"umbraco/user", "logout success");
@@ -217,9 +221,9 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.PerformingUser);
var affectedUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.AffectedUser);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
affectedUser.Id, $"User \"{affectedUser.Name}\" <{affectedUser.Email}>",
"umbraco/user", "password reset");
@@ -230,9 +234,9 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.PerformingUser);
var affectedUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.AffectedUser);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
affectedUser.Id, $"User \"{affectedUser.Name}\" <{affectedUser.Email}>",
"umbraco/user", "password change");
@@ -243,8 +247,8 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.PerformingUser);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
0, null,
"umbraco/user", "login failed");
@@ -255,9 +259,9 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.PerformingUser);
var affectedUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.AffectedUser);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
affectedUser.Id, $"User \"{affectedUser.Name}\" <{affectedUser.Email}>",
"umbraco/user", "password forgot/change");
@@ -268,9 +272,9 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.PerformingUser);
var affectedUser = ApplicationContext.Current.Services.UserService.GetUserById(identityArgs.AffectedUser);
AuditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
affectedUser.Id, $"User \"{affectedUser.Name}\" <{affectedUser.Email}>",
"umbraco/user", "password forgot/request");
+16
View File
@@ -0,0 +1,16 @@
using System;
namespace Umbraco.Core.Services
{
public class RolesEventArgs : EventArgs
{
public RolesEventArgs(int[] memberIds, string[] roles)
{
MemberIds = memberIds;
Roles = roles;
}
public int[] MemberIds { get; set; }
public string[] Roles { get; set; }
}
}
@@ -16,6 +16,10 @@ namespace Umbraco.Core.Models.Rdbms
[PrimaryKeyColumn]
public int Id { get; set; }
// there is NO foreign key to the users table here, neither for performing user nor for
// affected user, so we can delete users and NOT delete the associated audit trails, and
// users can still be identified via the details free-form text fields.
[Column("performingUserId")]
public int PerformingUserId { get; set; }
+8 -20
View File
@@ -26,10 +26,10 @@ namespace Umbraco.Core.Services
private readonly IMemberGroupService _memberGroupService;
private readonly EntityXmlSerializer _entitySerializer = new EntityXmlSerializer();
private readonly IDataTypeService _dataTypeService;
private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim();
//only for unit tests!
internal MembershipProviderBase MembershipProvider { get; set; }
private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim();
//only for unit tests!
internal MembershipProviderBase MembershipProvider { get; set; }
public MemberService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IMemberGroupService memberGroupService, IDataTypeService dataTypeService)
: base(provider, repositoryFactory, logger, eventMessagesFactory)
@@ -38,7 +38,7 @@ namespace Umbraco.Core.Services
if (dataTypeService == null) throw new ArgumentNullException("dataTypeService");
_memberGroupService = memberGroupService;
_dataTypeService = dataTypeService;
}
}
#region IMemberService Implementation
@@ -986,10 +986,10 @@ namespace Umbraco.Core.Services
/// <param name="raiseEvents">Optional parameter to raise events.
/// Default is <c>True</c> otherwise set to <c>False</c> to not raise events</param>
public void Save(IMember entity, bool raiseEvents = true)
{
{
//trimming username and email to make sure we have no trailing space
entity.Username = entity.Username.Trim();
entity.Email = entity.Email.Trim();
entity.Email = entity.Email.Trim();
using (var uow = UowProvider.GetUnitOfWork())
{
@@ -1066,7 +1066,7 @@ namespace Umbraco.Core.Services
if (raiseEvents)
{
saveEventArgs.CanCancel = false;
saveEventArgs.CanCancel = false;
uow.Events.Dispatch(Saved, this, saveEventArgs);
}
}
@@ -1304,18 +1304,6 @@ namespace Umbraco.Core.Services
public static event TypedEventHandler<IMemberService, RolesEventArgs> AssignedRoles;
public static event TypedEventHandler<IMemberService, RolesEventArgs> RemovedRoles;
public class RolesEventArgs : EventArgs
{
public RolesEventArgs(int[] memberIds, string[] roles)
{
MemberIds = memberIds;
Roles = roles;
}
public int[] MemberIds { get; set; }
public string[] Roles { get; set; }
}
#endregion
/// <summary>
+1
View File
@@ -774,6 +774,7 @@
<Compile Include="Services\RepositoryService.cs" />
<Compile Include="Services\OperationStatus.cs" />
<Compile Include="Services\OperationStatusType.cs" />
<Compile Include="Events\RolesEventArgs.cs" />
<Compile Include="Services\ScopeRepositoryService.cs" />
<Compile Include="Services\TaskService.cs" />
<Compile Include="Strings\Css\StylesheetHelper.cs" />