Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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));
 }
Ejemplo n.º 10
0
 public Task RecordFailure(IAuditEventArguments context)
 {
     return(WriteAuditRecord(context, false));
 }
Ejemplo n.º 11
0
 public Task RecordSuccess(IAuditEventArguments context)
 {
     return(WriteAuditRecord(context, true));
 }