Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update for .NET 9 #19

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
11 changes: 11 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<Authors>Jan Škoruba</Authors>
</PropertyGroup>
</Project>
11 changes: 11 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<Project>
<ItemGroup>
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="9.0.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.2" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.2" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="9.0.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# 🕊️ Skoruba.AuditLogging
> Simple audit logging for .NET Core with EntityFramework Core support

**This project is ported to .NET 8.** 🚀
**This project is ported to .NET 9.** 🚀

# How to install

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Skoruba.AuditLogging.EntityFramework.Entities;
using System.Threading.Tasks;

namespace Skoruba.AuditLogging.EntityFramework.DbContexts
{
public abstract class AuditLoggingDbContext<TAuditLog> : DbContext, IAuditLoggingDbContext<TAuditLog>
public abstract class AuditLoggingDbContext<TAuditLog>(DbContextOptions options) : DbContext(options), IAuditLoggingDbContext<TAuditLog>
where TAuditLog : AuditLog

{
protected AuditLoggingDbContext(DbContextOptions options)
: base(options)
{
}

public DbSet<TAuditLog> AuditLog { get; set; }

public Task<int> SaveChangesAsync()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,7 @@

namespace Skoruba.AuditLogging.EntityFramework.DbContexts.Default
{
public class DefaultAuditLoggingDbContext : AuditLoggingDbContext<AuditLog>
public class DefaultAuditLoggingDbContext(DbContextOptions<DefaultAuditLoggingDbContext> dbContextOptions) : AuditLoggingDbContext<AuditLog>(dbContextOptions)
{
public DefaultAuditLoggingDbContext(DbContextOptions<DefaultAuditLoggingDbContext> dbContextOptions)
: base(dbContextOptions)
{

}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Skoruba.AuditLogging.EntityFramework.Entities;
using System.Threading.Tasks;

namespace Skoruba.AuditLogging.EntityFramework.DbContexts
{
Expand Down
20 changes: 10 additions & 10 deletions src/Skoruba.AuditLogging.EntityFramework/Entities/AuditLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,47 +12,47 @@ public class AuditLog
/// <summary>
/// Event name
/// </summary>
public string Event { get; set; }
public string Event { get; set; } = default!;

/// <summary>
/// Source of logging events
/// </summary>
public string Source { get; set; }
public string? Source { get; set; }

/// <summary>
/// Event category
/// </summary>
public string Category { get; set; }
public string Category { get; set; } = default!;

/// <summary>
/// Subject Identifier - who is responsible for current action
/// </summary>
public string SubjectIdentifier { get; set; }
public string SubjectIdentifier { get; set; } = default!;

/// <summary>
/// Subject Name - who is responsible for current action
/// </summary>
public string SubjectName { get; set; }
public string SubjectName { get; set; } = default!;

/// <summary>
/// Subject Type - User/Machine
/// </summary>
public string SubjectType { get; set; }
public string SubjectType { get; set; } = default!;

/// <summary>
/// Subject - some additional data
/// </summary>
public string SubjectAdditionalData { get; set; }
public string? SubjectAdditionalData { get; set; }

/// <summary>
/// Information about request/action
/// </summary>
public string Action { get; set; }
public string? Action { get; set; }

/// <summary>
/// Data which are serialized into JSON format
/// </summary>
public string Data { get; set; }
public string Data { get; set; } = default!;

/// <summary>
/// Date and time for creating of the event
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Skoruba.AuditLogging.EntityFramework.DbContexts;
using Skoruba.AuditLogging.EntityFramework.DbContexts.Default;
using Skoruba.AuditLogging.EntityFramework.Entities;
using Skoruba.AuditLogging.EntityFramework.Repositories;
using Skoruba.AuditLogging.EntityFramework.Services;
using Skoruba.AuditLogging.Extensions;
using System;

namespace Skoruba.AuditLogging.EntityFramework.Extensions
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public class PagedList<T> where T : class
{
public PagedList()
{
Data = new List<T>();
Data = [];
}

public List<T> Data { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,7 @@ public static IQueryable<T> PageBy<T, TKey>(this IQueryable<T> query, Expression
{
const int defaultPageNumber = 1;

if (query == null)
{
throw new ArgumentNullException(nameof(query));
}
ArgumentNullException.ThrowIfNull(query);

// Check if the page number is greater then zero - otherwise use default page number
if (page <= 0)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Skoruba.AuditLogging.EntityFramework.DbContexts;
using Skoruba.AuditLogging.EntityFramework.Entities;
using Skoruba.AuditLogging.EntityFramework.Helpers;
using Skoruba.AuditLogging.EntityFramework.Helpers.Common;
using System.Threading.Tasks;

namespace Skoruba.AuditLogging.EntityFramework.Repositories
{
public class AuditLoggingRepository<TDbContext, TAuditLog> : IAuditLoggingRepository<TAuditLog>
where TDbContext : IAuditLoggingDbContext<TAuditLog>
public class AuditLoggingRepository<TDbContext, TAuditLog>(TDbContext dbContext) : IAuditLoggingRepository<TAuditLog>
where TDbContext : IAuditLoggingDbContext<TAuditLog>
where TAuditLog : AuditLog
{
protected TDbContext DbContext;

public AuditLoggingRepository(TDbContext dbContext)
{
DbContext = dbContext;
}
protected TDbContext DbContext = dbContext;

public virtual async Task<PagedList<TAuditLog>> GetAsync(int page = 1, int pageSize = 10)
{
Expand All @@ -30,7 +25,6 @@ public virtual async Task<PagedList<TAuditLog>> GetAsync(int page = 1, int pageS
pagedList.PageSize = pageSize;
pagedList.TotalCount = await DbContext.AuditLog.CountAsync();


return pagedList;
}

Expand All @@ -49,7 +43,6 @@ public virtual async Task<PagedList<TAuditLog>> GetAsync(string subjectIdentifie
pagedList.PageSize = pageSize;
pagedList.TotalCount = await DbContext.AuditLog.CountAsync();


return pagedList;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
using Skoruba.AuditLogging.EntityFramework.Entities;
using Skoruba.AuditLogging.EntityFramework.Entities;
using Skoruba.AuditLogging.EntityFramework.Helpers.Common;
using System.Threading.Tasks;

namespace Skoruba.AuditLogging.EntityFramework.Repositories
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
using System;
using System.Threading.Tasks;
using Skoruba.AuditLogging.EntityFramework.Entities;
using Skoruba.AuditLogging.EntityFramework.Entities;
using Skoruba.AuditLogging.EntityFramework.Mapping;
using Skoruba.AuditLogging.EntityFramework.Repositories;
using Skoruba.AuditLogging.Events;
using Skoruba.AuditLogging.Services;
using System;
using System.Threading.Tasks;

namespace Skoruba.AuditLogging.EntityFramework.Services
{
public class DatabaseAuditEventLoggerSink<TAuditLog> : IAuditEventLoggerSink
public class DatabaseAuditEventLoggerSink<TAuditLog>(IAuditLoggingRepository<TAuditLog> auditLoggingRepository) : IAuditEventLoggerSink
where TAuditLog : AuditLog, new()
{
private readonly IAuditLoggingRepository<TAuditLog> _auditLoggingRepository;

public DatabaseAuditEventLoggerSink(IAuditLoggingRepository<TAuditLog> auditLoggingRepository)
{
_auditLoggingRepository = auditLoggingRepository;
}
private readonly IAuditLoggingRepository<TAuditLog> _auditLoggingRepository = auditLoggingRepository;

public virtual async Task PersistAsync(AuditEvent auditEvent)
{
if (auditEvent == null) throw new ArgumentNullException(nameof(auditEvent));
ArgumentNullException.ThrowIfNull(auditEvent);

var auditLog = auditEvent.MapToEntity<TAuditLog>();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="Microsoft.Build.CentralPackageVersions" Version="2.1.3" />

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<PropertyGroup>
<Version>2.0.0</Version>
<Description>Simple audit logging for .NET Core with EntityFramework Core support</Description>
<PackageProjectUrl></PackageProjectUrl>
<RepositoryUrl>https://github.com/skoruba/AuditLogging</RepositoryUrl>
<PackageIconUrl>https://raw.githubusercontent.com/skoruba/IdentityServer4.Admin/master/docs/Images/Skoruba.IdentityServer4.Admin-Logo-Nuget.png</PackageIconUrl>
<PackageTags>.Net Core, AuditLogging, EntityFramework Core</PackageTags>
<PackageLicenseExpression></PackageLicenseExpression>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<Authors>Jan Škoruba</Authors>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore" />
</ItemGroup>

<ItemGroup>
Expand Down
26 changes: 11 additions & 15 deletions src/Skoruba.AuditLogging.Host/Controllers/AuditController.cs
Original file line number Diff line number Diff line change
@@ -1,38 +1,34 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Skoruba.AuditLogging.Constants;
using Skoruba.AuditLogging.Host.Dtos;
using Skoruba.AuditLogging.Host.Events;
using Skoruba.AuditLogging.Services;
using System;
using System.Threading.Tasks;

namespace Skoruba.AuditLogging.Host.Controllers
{
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class AuditController : ControllerBase
public class AuditController(
IAuditEventLogger auditEventLogger,
ILogger<AuditController> logger) : ControllerBase
{
private readonly IAuditEventLogger _auditEventLogger;
private readonly ILogger<AuditController> _logger;

public AuditController(IAuditEventLogger auditEventLogger, ILogger<AuditController> logger)
{
_auditEventLogger = auditEventLogger;
_logger = logger;
}
private readonly IAuditEventLogger _auditEventLogger = auditEventLogger;
private readonly ILogger<AuditController> _logger = logger;

[HttpGet]
public async Task<ActionResult> Get()
{
// Create fake product
var productDto = new ProductDto
{
Id = Guid.NewGuid().ToString(),
Name = Guid.NewGuid().ToString(),
Category = Guid.NewGuid().ToString()
Id = Guid.CreateVersion7().ToString(),
Name = Guid.CreateVersion7().ToString(),
Category = Guid.CreateVersion7().ToString()
};

// Log this action
Expand Down
6 changes: 3 additions & 3 deletions src/Skoruba.AuditLogging.Host/Dtos/ProductDto.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
{
public class ProductDto
{
public string Id { get; set; }
public string Id { get; set; } = default!;

public string Name { get; set; }
public string Name { get; set; } = default!;

public string Category { get; set; }
public string Category { get; set; } = default!;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ namespace Skoruba.AuditLogging.Host.Events
{
public class GenericProductEvent<T1, T2, T3> : AuditEvent
{
public ProductDto Product { get; set; }
public ProductDto Product { get; set; } = default!;
}
}
2 changes: 1 addition & 1 deletion src/Skoruba.AuditLogging.Host/Events/ProductGetEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ namespace Skoruba.AuditLogging.Host.Events
{
public class ProductGetEvent : AuditEvent
{
public ProductDto Product { get; set; }
public ProductDto Product { get; set; } = default!;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using System.Security.Claims;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Skoruba.AuditLogging.Host.Consts;
using System.Security.Claims;
using System.Text.Encodings.Web;
using System.Threading.Tasks;

namespace Skoruba.AuditLogging.Host.Helpers.Authentication
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using System.Security.Claims;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication;
using System.Security.Claims;

namespace Skoruba.AuditLogging.Host.Helpers.Authentication
{
public class TestAuthenticationOptions : AuthenticationSchemeOptions
{
public virtual ClaimsIdentity Identity { get; set; }
public virtual ClaimsIdentity Identity { get; set; } = default!;
}
}
Loading