using System.Security.Cryptography; using AppContext.Entities; using Microsoft.AspNetCore.Cryptography.KeyDerivation; using Microsoft.EntityFrameworkCore; namespace AppContext; public class AppContext(DbContextOptions options) : DbContext(options) { public DbSet Users { get; } public DbSet Tactics { get; } public DbSet Teams { get; } public DbSet Members { get; } public AppContext() : this( new DbContextOptionsBuilder() .UseSqlite("Data Source=database.db") .Options ) { } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity() .Property(e => e.Password) .HasConversion( v => HashString(v), v => v ); } private static string HashString(string str) { byte[] salt = RandomNumberGenerator.GetBytes(128 / 8); return Convert.ToBase64String(KeyDerivation.Pbkdf2( password: str, salt, prf: KeyDerivationPrf.HMACSHA256, iterationCount: 50000, numBytesRequested: 256 / 8 )); } }