diff --git a/src/Umbraco.Core/Auditing/AuditEventHandler.cs b/src/Umbraco.Core/Auditing/AuditEventHandler.cs
index 940a0135ce..79ac8f89e9 100644
--- a/src/Umbraco.Core/Auditing/AuditEventHandler.cs
+++ b/src/Umbraco.Core/Auditing/AuditEventHandler.cs
@@ -79,7 +79,7 @@ namespace Umbraco.Core.Auditing
_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}");
+ "umbraco/member/roles/removed", $"modified roles for member id:{id} \"{member?.Name ?? "(unknown)"}\" <{member?.Email ?? ""}>, removed {roles}");
}
}
@@ -94,7 +94,7 @@ namespace Umbraco.Core.Auditing
_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}");
+ "umbraco/member/roles/assigned", $"modified roles for member id:{id} \"{member?.Name ?? "(unknown)"}\" <{member?.Email ?? ""}>, assigned {roles}");
}
}
@@ -112,7 +112,7 @@ namespace Umbraco.Core.Auditing
_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}");
+ "umbraco/user-group/save", $"save group id:{group.Id}:{group.Alias} \"{group.Name}\", updating {(string.IsNullOrWhiteSpace(dp) ? "(nothing)" : dp)}, sections: {sections}, perms: {perms}");
}
}
@@ -129,7 +129,7 @@ namespace Umbraco.Core.Auditing
_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}\"");
+ "umbraco/user-group/permissions-change", $"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}\"");
}
}
@@ -145,7 +145,7 @@ namespace Umbraco.Core.Auditing
_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)}");
+ "umbraco/member/save", $"save member id:{member.Id} \"{member.Name}\" <{member.Email}>, updating {(string.IsNullOrWhiteSpace(dp) ? "(nothing)" : dp)}");
}
}
@@ -158,7 +158,7 @@ namespace Umbraco.Core.Auditing
_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}>");
+ "umbraco/member/delete", $"delete member id:{member.Id} \"{member.Name}\" <{member.Email}>");
}
}
@@ -178,7 +178,7 @@ namespace Umbraco.Core.Auditing
_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))}");
+ "umbraco/user/save", $"save user{(sections == null ? "" : (", sections: " + sections))}{(groups == null ? "" : (", groups: " + groups))}");
}
}
@@ -190,7 +190,7 @@ namespace Umbraco.Core.Auditing
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
DateTime.Now,
affectedUser.Id, $"User \"{affectedUser.Name}\" <{affectedUser.Email}>",
- "umbraco/user", "delete user");
+ "umbraco/user/delete", "delete user");
}
private void OnLoginSuccess(object sender, EventArgs args)
@@ -198,10 +198,11 @@ namespace Umbraco.Core.Auditing
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
+ if (performingUser == null) throw new InvalidOperationException($"No user found with id {identityArgs.PerformingUser}");
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
0, null,
- "umbraco/user", "login success");
+ "umbraco/user/login/success", "login success");
}
}
@@ -210,10 +211,11 @@ namespace Umbraco.Core.Auditing
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
+ if (performingUser == null) throw new InvalidOperationException($"No user found with id {identityArgs.PerformingUser}");
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
0, null,
- "umbraco/user", "logout success");
+ "umbraco/user/logout/success", "logout success");
}
}
@@ -221,12 +223,15 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
+ if (identityArgs.PerformingUser < 0) return;
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
+ if (performingUser == null) throw new InvalidOperationException($"No user found with id {identityArgs.PerformingUser}");
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
+ if (affectedUser == null) throw new InvalidOperationException($"No user found with id {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");
+ "umbraco/user/password/reset", "password reset");
}
}
@@ -234,12 +239,15 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
+ if (identityArgs.PerformingUser < 0) return;
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
+ if (performingUser == null) throw new InvalidOperationException($"No user found with id {identityArgs.PerformingUser}");
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
+ if (affectedUser == null) throw new InvalidOperationException($"No user found with id {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");
+ "umbraco/user/password/change", "password change");
}
}
@@ -247,11 +255,13 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
+ if (identityArgs.PerformingUser < 0) return;
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
+ if (performingUser == null) throw new InvalidOperationException($"No user found with id {identityArgs.PerformingUser}");
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", identityArgs.IpAddress,
DateTime.Now,
0, null,
- "umbraco/user", "login failed");
+ "umbraco/user/login/failed", "login failed");
}
}
@@ -260,11 +270,13 @@ namespace Umbraco.Core.Auditing
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
+ if (performingUser == null) throw new InvalidOperationException($"No user found with id {identityArgs.PerformingUser}");
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
+ if (affectedUser == null) throw new InvalidOperationException($"No user found with id {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");
+ "umbraco/user/password/forgot/change", "password forgot/change");
}
}
@@ -272,12 +284,15 @@ namespace Umbraco.Core.Auditing
{
if (args is IdentityAuditEventArgs identityArgs)
{
+ if (identityArgs.PerformingUser < 0) return;
var performingUser = _userServiceInstance.GetUserById(identityArgs.PerformingUser);
+ if (performingUser == null) throw new InvalidOperationException($"No user found with id {identityArgs.PerformingUser}");
var affectedUser = _userServiceInstance.GetUserById(identityArgs.AffectedUser);
+ if (affectedUser == null) throw new InvalidOperationException($"No user found with id {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");
+ "umbraco/user/password/forgot/request", "password forgot/request");
}
}
}
diff --git a/src/Umbraco.Core/Auditing/IdentityAuditEventArgs.cs b/src/Umbraco.Core/Auditing/IdentityAuditEventArgs.cs
index 14445d461f..3dd6a86bd9 100644
--- a/src/Umbraco.Core/Auditing/IdentityAuditEventArgs.cs
+++ b/src/Umbraco.Core/Auditing/IdentityAuditEventArgs.cs
@@ -1,4 +1,5 @@
using System;
+using System.ComponentModel;
using System.Threading;
using System.Web;
using Umbraco.Core.Security;
@@ -63,6 +64,13 @@ namespace Umbraco.Core.Auditing
: performingUser;
}
+ ///
+ /// Creates an instance without a performing user (the id will be set to -1)
+ ///
+ ///
+ ///
+ ///
+ ///
public IdentityAuditEventArgs(AuditEvent action, string ipAddress, string username, string comment)
{
DateTimeUtc = DateTime.UtcNow;
@@ -71,6 +79,22 @@ namespace Umbraco.Core.Auditing
IpAddress = ipAddress;
Username = username;
Comment = comment;
+
+ PerformingUser = -1;
+ }
+
+ public IdentityAuditEventArgs(AuditEvent action, string ipAddress, string username, string comment, int performingUser)
+ {
+ DateTimeUtc = DateTime.UtcNow;
+ Action = action;
+
+ IpAddress = ipAddress;
+ Username = username;
+ Comment = comment;
+
+ PerformingUser = performingUser == -1
+ ? GetCurrentRequestBackofficeUserId()
+ : performingUser;
}
///