private void RecordAction(Func <AuditRecorder, Func <IAuditEventArguments, Task> > recordMethodFactory, bool isSuccess) { DateTime expectedWhen = new DateTime(2018, 3, 5, 10, 23, 11, DateTimeKind.Utc); var expectedSubject = new UserResourceActor(fixture.Create <string>()); string expectedAction = fixture.Create <string>(); string expectedDescription = fixture.Create <string>(); var expectedResource = new AuditableResource(fixture.Create <string>()); IAuditEventArguments auditEventContext = AuditContextMockingHelper.CreateAuditEventContext(expectedSubject, expectedAction, expectedResource, expectedDescription); now = () => expectedWhen; var sut = CreateSut(); recordMethodFactory(sut)(auditEventContext).Wait(); auditEntities.Verify(ae => ae.Add(new AuditEntity() { Source = expectedSource, SubjectIdentifier = expectedSubject.Identifier, SubjectType = expectedSubject.Type, Subject = "", Description = expectedDescription, Resource = expectedResource.Name, ResourceType = expectedResource.Type, ResourceIdentifier = expectedResource.Identifier, Succeeded = isSuccess, Action = expectedAction, When = expectedWhen }), Times.Once); unitOfWork.Verify(uow => uow.Commit(), Times.Once); }
private async Task WriteAuditRecord(IAuditEventArguments context, bool succeeded) { try { using (IUnitOfWork uow = uowFactory.Create()) { uow.AuditEntries.Add(new AuditEntity() { Source = source, SubjectIdentifier = context.Actor.Identifier, Subject = context.Actor.DisplayName, SubjectType = context.Actor.Type, Succeeded = succeeded, When = now(), Action = context.Action, Resource = context.Resource.Name, ResourceType = context.Resource.Type, ResourceIdentifier = context.Resource.Identifier, Description = context.Description.ToString() }); await uow.Commit(); } } catch (Exception error) { throw new AuditWriteException($"Failed to write audit entry {context.Actor}:{context.Action}:{context.Description}:{succeeded}", error); } }
public LocalizedAuditEventArguments(IAuditEventArguments toLocalize, IStringLocalizer localizer) : base(toLocalize) { if (toLocalize == null) { throw new ArgumentNullException(nameof(toLocalize)); } this.localizer = localizer ?? throw new ArgumentNullException(nameof(localizer)); Description = new FormattedString(localizer[toLocalize.Description.Format]?.Value ?? "", toLocalize.Description.Arguments); }
public void RecordFailure_WhenCalled_ShouldLocalizeActionContext() { var expectedSubject = new UserResourceActor("fred"); var expectedResource = new AuditableResource("identityServer"); string action = "login"; localizer.Setup(sl => sl[action]).Returns(new LocalizedString("login", "la login", true)); var sut = CreateSut(); IAuditEventArguments auditEventContext = AuditContextMockingHelper.CreateAuditEventContext(expectedSubject, action, expectedResource, ""); sut.RecordSuccess(auditEventContext).Wait(); recordAuditableActions.Verify(raa => raa.RecordSuccess(It.IsAny <LocalizedAuditEventArguments>()), Times.Once); }
public void RecordFailure_WhenCalled_ShouldLocalizeActionAndForward() { var expectedSubject = new UserResourceActor("fred"); var expectedResource = new AuditableResource("identityServer"); string actionKey = "login"; string expectedTranslationText = "la Login"; LocalizedString expectedTranslation = new LocalizedString(actionKey, expectedTranslationText, false); localizer.Setup(sl => sl[actionKey]).Returns(expectedTranslation); var sut = CreateSut(); IAuditEventArguments auditEventContext = AuditContextMockingHelper.CreateAuditEventContext(expectedSubject, actionKey, expectedResource, ""); sut.RecordFailure(auditEventContext).Wait(); recordAuditableActions.Verify( raa => raa.RecordFailure(It.Is <IAuditEventArguments>(aec => aec.Action == expectedTranslationText)), Times.Once); }
public AuditEventArgumentsDecorator(IAuditEventArguments toDecorate) { this.toDecorate = toDecorate; }
private Task Record(Func <IAuditEventArguments, Task> recordMethod, IAuditEventArguments actionContext) { actionContext = new LocalizedAuditEventArguments(actionContext, localizer); return(recordMethod(actionContext)); }
public Task RecordFailure(IAuditEventArguments actionContext) { return(Record(toDecorate.RecordFailure, actionContext)); }
public Task RecordSuccess(IAuditEventArguments actionContext) { return(Record(toDecorate.RecordSuccess, actionContext)); }
public Task RecordFailure(IAuditEventArguments context) { return(WriteAuditRecord(context, false)); }
public Task RecordSuccess(IAuditEventArguments context) { return(WriteAuditRecord(context, true)); }