Beispiel #1
0
        public ApiAuditSubject(IHttpContextAccessor accessor, AuditLoggingConfiguration auditLoggingConfiguration)
        {
            var subClaim      = accessor.HttpContext.User.FindFirst(auditLoggingConfiguration.SubjectIdentifierClaim);
            var nameClaim     = accessor.HttpContext.User.FindFirst(auditLoggingConfiguration.SubjectNameClaim);
            var clientIdClaim = accessor.HttpContext.User.FindFirst(auditLoggingConfiguration.ClientIdClaim);

            SubjectIdentifier = subClaim == null ? clientIdClaim.Value : subClaim.Value;
            SubjectName       = subClaim == null ? clientIdClaim.Value : nameClaim?.Value;
            SubjectType       = subClaim == null ? AuditSubjectTypes.Machine : AuditSubjectTypes.User;

            SubjectAdditionalData = new
            {
                RemoteIpAddress = accessor.HttpContext.Connection?.RemoteIpAddress?.ToString(),
                LocalIpAddress  = accessor.HttpContext.Connection?.LocalIpAddress?.ToString(),
                Claims          = accessor.HttpContext.User.Claims?.Select(x => new { x.Type, x.Value })
            };
        }
        public static IServiceCollection AddAuditEventLogging <TAuditLoggingDbContext, TAuditLog>(this IServiceCollection services, AuditLoggingConfiguration auditLoggingConfiguration)
            where TAuditLog : AuditLog, new()
            where TAuditLoggingDbContext : IAuditLoggingDbContext <TAuditLog>
        {
            services.AddAuditLogging(options => { options.Source = auditLoggingConfiguration.Source; })
            .AddDefaultHttpEventData(subjectOptions =>
            {
                subjectOptions.SubjectIdentifierClaim = auditLoggingConfiguration.SubjectIdentifierClaim;
                subjectOptions.SubjectNameClaim       = auditLoggingConfiguration.SubjectNameClaim;
            },
                                     actionOptions =>
            {
                actionOptions.IncludeFormVariables = auditLoggingConfiguration.IncludeFormVariables;
            })
            .AddAuditSinks <DatabaseAuditEventLoggerSink <TAuditLog> >();

            // repository for library
            services.AddTransient <IAuditLoggingRepository <TAuditLog>, AuditLoggingRepository <TAuditLoggingDbContext, TAuditLog> >();

            // repository and service for admin
            services.AddTransient <IAuditLogRepository <TAuditLog>, AuditLogRepository <TAuditLoggingDbContext, TAuditLog> >();
            services.AddTransient <IAuditLogService, AuditLogService <TAuditLog> >();

            return(services);
        }
 public MockApiAuditSubject(IHttpContextAccessor accessor, AuditLoggingConfiguration auditLoggingConfiguration)
 {
 }